使串口在握手线变化时发出通知

5

是否可以打开串行设备(例如/dev/ttyS0),并通过select/poll/等方式或信号在握手线(例如CTS/RTSDSR/DTR)更改时得到通知?我知道在硬件层面上,UART 会有一个中断来告诉内核它已经发生了变化,但我能在用户空间中被通知吗?


编辑:我知道TIOCMIWAIT,但该ioctl调用会一直阻塞,直到状态行发生更改。相反,我希望保持通常的处理,并在更改时通过poll或类似方法得到通知,以及其他事件。


可能是 如何在Linux中高效等待RS232的CTS或DSR? 的重复。 - Digital Trauma
不是直接的 - 那篇帖子只谈到TIOCMIWAIT,它会阻塞直到状态位改变。我希望通过选择/轮询唤醒或信号异步地被通知。 - LeoNerd
好的,说得对。现在我该如何取消标记?我想我可以点赞来补偿;-) - Digital Trauma
你可以通过在单独的线程中使用 ioctl TIOCMIWAIT 来实现你想要的吗? - James Waldby - jwpat7
1个回答

2

在用户空间等待DTR/RTS线路变化的方法是不存在的。在Linux上唯一的方法是不断轮询设备,检查RTS/DTR线路状态是否已更改。我通常从gtker中偷取我的串行端口代码,并进行轮询

你可以尝试使用TIOCMIWAIT,但如果我记得正确的话,这将与Linux使用的串行端口驱动程序密切相关,因此可能无法在驱动程序之间起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接