【问题描述】:
Android平台使用“stty -F /dev/ttyHS0 57600”命令切换到57600波特率时,无法切换成功,在所有Android平台(高通/展锐)都存在
【问题分析】:
在tty_ioctl.c接口的set_termios接口打印tmp_termios.c_cflag状态发现,在配置57600波特率时,从应用层传下来的cflag一直是0x80001cb0。
以下是串口波特率的定义:/usr/include/bits/termios.h
注意:
这里定义的是8进制,而非16进制
#define B50 0000001
#define B75 0000002
#define B110 0000003
#define B134 0000004
#define B150 0000005
#define B200 0000006
#define B300 0000007
#define B600 0000010
#define B1200 0000011
#define B1800 0000012
#define B2400 0000013
#define B4800 0000014
#define B9600 0000015
#define B19200 0000016
#define B38400 0000017
#define B57600 0010001
#define B115200 0010002
#define B230400 0010003
#define B460800 0010004
#define B500000 0010005
#define B576000 0010006
#define B921600 0010007
#define B1000000 0010010
#define B1152000 0010011
#define B1500000 0010012
#define B2000000 0010013
#define B2500000 0010014
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
可以看到57600的定义为0010001,那么cflag的最低位应该为1才对。到这里可以确定应用层传下来的串口配置有问题。继续跟踪stty工具源码。
stty位于:external/toybox/toys/pending/stty.c
通过查看stty代码发现在配置波特率时如下:
static const int bauds[] = {
0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800,