在Windows

时间:2016-03-29 19:37:54

标签: c++ windows serial-port porting

我正在调整我编写的一个简单的Linux串行库,以实现跨平台兼容性。大多数事情都会继续存在(尽管微软坚持重命名所有内容),但有一些我无法找到的功能。

我目前的问题是VMIN和VTIME的使用(在struct termios中)。在Linux上,我使用它们来强制读取阻止一定数量的字符,但是如果没有收到则会超时。但是,Windows建议使用BuildCommDCB函数,而不是直接设置其DCB(设备控制块)结构的参数。该函数不支持类似VMIN或VTIME的任何内容,DCB结构本身并不是更好。

有没有办法在Windows中获取此功能而不自行实现?如果完全可以避免的话,我宁愿不管理我的库中只有一个平台的串行中断和回调。

编辑:SetCommTimeouts函数似乎模拟了VTIME的功能,但我还没有为VMIN找到任何东西。

2 个答案:

答案 0 :(得分:0)

您可以尝试查看source code for cygwin。我认为他们可以很好地使Windows串行i / o基于Unix API正常运行。

答案 1 :(得分:0)

我无法完美地模拟VMIN = 0和VTIME = 0的情况,但我能够准确地重新创建其他所有内容。

在类的构造函数中,在DCB初始化并应用timeoutCOMMTIMEOUTS之后,readTimeoutreadMinChars为{{1} }} S):

unsigned char

完整的序列类在Github上可用,作为更大项目的一部分:serial.h serial.cpp