我正在调整我编写的一个简单的Linux串行库,以实现跨平台兼容性。大多数事情都会继续存在(尽管微软坚持重命名所有内容),但有一些我无法找到的功能。
我目前的问题是VMIN和VTIME的使用(在struct termios
中)。在Linux上,我使用它们来强制读取阻止一定数量的字符,但是如果没有收到则会超时。但是,Windows建议使用BuildCommDCB
函数,而不是直接设置其DCB
(设备控制块)结构的参数。该函数不支持类似VMIN或VTIME的任何内容,DCB
结构本身并不是更好。
有没有办法在Windows中获取此功能而不自行实现?如果完全可以避免的话,我宁愿不管理我的库中只有一个平台的串行中断和回调。
编辑:SetCommTimeouts
函数似乎模拟了VTIME的功能,但我还没有为VMIN找到任何东西。
答案 0 :(得分:0)
您可以尝试查看source code for cygwin。我认为他们可以很好地使Windows串行i / o基于Unix API正常运行。
答案 1 :(得分:0)
我无法完美地模拟VMIN = 0和VTIME = 0的情况,但我能够准确地重新创建其他所有内容。
在类的构造函数中,在DCB
初始化并应用timeout
为COMMTIMEOUTS
之后,readTimeout
和readMinChars
为{{1} }} S):
unsigned char
完整的序列类在Github上可用,作为更大项目的一部分:serial.h
serial.cpp