我有一个大问题。目前我正在通过以下钩子访问串行端口:
fd = open( "/dev/ttyS1", O_RDWR | O_NOCTTY )
然后我使用以下代码块从中读取
i = select( fd + 1, &rfds, NULL, NULL, &tv )
...
iLen = read( fd, buf, MAX_PACKET_LEN )
问题是,在阅读之前,我需要检测是否存在缓冲区溢出。串行端口级别和内部 tty 翻转缓冲区。
我们尝试了cat /proc/tty/driver/serial
但它似乎没有列出超限(参见下面的输出)
1: uart:16550A port:000002F8 irq:3 tx:70774 rx:862484 fe:44443 pe:270023 brk:30301 RTS|CTS|DTR
根据内核源代码,您应该使用 TIOCGICOUNT ioctl。第三个 ioctl 参数应该是指向以下结构的指针,定义于<linux/serial.h>
:
/*
* Serial input interrupt line counters -- external structure
* Four lines can interrupt: CTS, DSR, RI, DCD
*/
struct serial_icounter_struct {
int cts, dsr, rng, dcd;
int rx, tx;
int frame, overrun, parity, brk;
int buf_overrun;
int reserved[9];
};
但我不知道是否每个司机都能检测到所有情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)