4

在为 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 使用的任何问题,还是我做错了什么?

4

0 回答 0