在为 USB 到 RS422 转换器模块开发接口应用程序时,我遇到了一个显示停止问题。
我需要为帧、溢出、奇偶校验和中断错误检索 UART 错误计数器。但是对 ioctl 的调用总是返回 -1 并且来自检索到的结构的计数器值会跳到非常大的数字。
我用来检索计数器的代码如下:
struct serial_icounter_struct counters;
int ret = ioctl(portDescriptor, TIOCGICOUNT, &counters);
要设置 portDescriptor,我使用了类似的代码:
int portDescriptor = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
struct termios new_port_settings;
//clear the new struct
memset(&new_port_settings, 0, sizeof(new_port_settings));
//set port settings
new_port_settings.c_cflag = B57600 | CS8 | CLOCAL | CREAD;
new_port_settings.c_oflag = 0;
new_port_settings.c_lflag = 0;
new_port_settings.c_cc[VMIN] = 0;
new_port_settings.c_cc[VTIME] = 0;
int error = tcsetattr(portDescriptor, TCSANOW, &new_port_settings)
有时我们还需要启用流量控制或奇偶校验,例如
new_port_settings.c_cflag = new_port_settings.c_cflag | CRTSCTS;
我已经在 Ubuntu 11.10 32 位和 SLES11 SP1 64 位上尝试了代码,两者都带有 FTDI_SIO 内核模块。
有人知道关于 TIOCGICOUNT 使用的任何问题,还是我做错了什么?