在Linux串行端口上接收/读取BREAK条件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Linux串行端口上接收/读取BREAK条件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1370字,纯文字阅读大概需要2分钟。
内容图文
我希望能够在Linux中的串行端口上检测到BREAK条件.这是怎么做到的?
我想检测BREAK状态何时开始以及何时停止.
我希望如果我这样做:
int serial_status;
ioctl(serial_fd, TIOCMGET, &serial_status);
然后会有一个显示BREAK条件的值 – 但似乎没有这样的事情.
我在termios.h中找到tcsendbreak()发送休息时间.我还找到了描述如何发送休息的tty_ioctl man page.但是休息一下呢?
注意:建议使用BRKINT(在发生中断时生成信号SIGINT).但是获取SIGINT并不是一个有用的API,原因如下:
>在多串口方案中,我无法分辨它来自哪个串口.
>在终端上运行程序时,我也可以通过用户按Ctrl-C获取SIGINT.
>如果我将程序作为守护程序运行,那么附加条件“如果终端是前台进程组的控制终端”则不然,是吗?
>不可能知道BREAK状况持续多久以及何时停止.
解决方法:
到目前为止,我能找到的最佳答案来自于对于termios结构中的c_iflag的IGNBRK和BRKINT常量的tcsendbreak() man page描述.它说:
When neither
IGNBRK
norBRKINT
are set, a BREAK reads as a null byte ('\0'
), except whenPARMRK
is set, in which case it reads as the sequence\377 \0 \0
.
(即0xFF 0x00 0x00)
所以我想我应该设置PARMRK并准备好对读取字节进行一些处理.这提供了关于奇偶校验/成帧错误的明确信息(尽管仍然不完全明确0xFF 0x00 0x00是表示BREAK还是其他一些奇偶校验/成帧错误).
但请注意,我发现了this patch for PARMRK,这似乎意味着旧内核存在危险,即在使用PARMRK时可能会丢弃串行字节.
只要BREAK条件持续,或者仅在BREAK条件开始时发送一次,这些字节是否连续发送也不清楚.因此,不清楚是否可以通过此方法检测到BREAK条件的结束.
内容总结
以上是互联网集市为您收集整理的在Linux串行端口上接收/读取BREAK条件全部内容,希望文章能够帮你解决在Linux串行端口上接收/读取BREAK条件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。