应该提到Fedora Linux 27。
我几乎有规范模式,只有0xFD作为EOL符号,但我也不能将0x0A作为EOL符号去除尽管我可以告诉整个termios.c_cc []数组为0除了c_cc [ VEOL] = 0xFD。应该有一种只有0xFD作为EOL符号的方法吗?
作为背景,我想从我的火腿收音机(ICOM-7300)处理瀑布范围数据并将其显示在PC上。 (如果你好奇我想做什么,请查看YouTube)。数据流从无线电中传出来的速度非常快(如果我没记错的话,每20 mS就有一个60字节的消息,115,200波特)。数据在0和0xA0之间归一化。协议中有一些控制符号。 0xFD显示的唯一位置是每条消息的末尾。
(我理解带有定时读取的原始模式是什么。我希望在超时时有超过100 mS的分辨率,但我可能会让它工作。我确实检测到0x0A并继续读取有效,尽管它看起来像kludgy。 )
我试过了
memset(ptio->c_cc, 0, sizeof(ptio->c_cc));
ptio->c_cc[VEOL] = 0xFD;
和(设置我能找到的c_cc的每个字段)
...
ptio->c_cc[VSUSP] = 0;
ptio->c_cc[VEOL] = 0xFD;
ptio->c_cc[VREPRINT] = 0;
...
ptio->c_cc[VEOL2] = 0;
只是为了进一步说明这里是我的程序的错误输出。
serial_listen_thread_loop: short message. Read 37 bytes: 29 33 42 44 1D ... 0A
Bad controller address: 10
serial_listen_thread_loop: short message. Read 41 bytes: FE E0 94 27 00 ... 0A
Bad controller address: 1A
serial_listen_thread_loop: short message. Read 21 bytes: FE E0 94 27 00 ... 0A
Bad controller address: 0A
serial_listen_thread_loop: short message. Read 1 bytes: 0A
Bad controller address: 0F
感谢您的帮助,Dan(WV0VW)
如果这显示在某人的搜索中,似乎您不能将换行作为行尾字符关闭,除非您修补驱动程序代码。
我设法在Wikipedia上找到了这个:
特殊字符termios数据结构的c_cc []数组成员指定所有(可编程修改的)特殊字符。 ...非编程可修改的特殊字符是换行符(ASCII LF)和回车符(ASCII CR)。[47]
然后在同一页面上。
行分隔符是特殊字符,它们是文件末尾,行尾和换行符(ASCII LF)。前两个是可编程的,而后一个是固定的。 ...... [49]
两个脚注[47]和[49]都提到Zlotnick 1991,我无法进一步研究。