我必须在我的项目中阅读很多(8)个串行设备。它们是Pantilt,相机,GPS,指南针等。它们都是RS232设备,但它们具有不同的命令结构和行为。例如GPS开始发送数据 我打开港口的那一刻。 PanTilt和Camera仅在向我们发送特定命令时响应。
我使用以下环境
对于PanTilt和Camera我想开发这样的功能。
int SendCommand(string& command, string& response)
{
port.write(command, strlen(command));
while(1)
{
if(response contains '\n') break;
port.read(response) // Blocking Read
}
return num_of_bytes_read;
}
我想以这种方式实现,因为此函数将用作更复杂算法的构建块 像这样...
SendCoammd("GET PAN ANGLE", &angle);
if(angle > 60)
SendCommand("STOP PAN", &stopped?);
if(stopped? == true)
SendCommand("REVERSE PAN DIRECTION", &revesed?);
if(reversed? == true)
SendCommand("START PAN", &ok);
要做这样的事情,我需要严格的同步行为。任何人都知道如何处理这个问题?
答案 0 :(得分:1)
我发现本教程非常有趣且有用。 http://www.webalice.it/fede.tft/serial_port/serial_port.html
它显示了boost :: asio如何用于执行同步和异步读/写。
感谢您的帮助!
答案 1 :(得分:0)
使用标准文件API有什么问题?
fd = open("/dev/ttyX");
write(fd, command.cstr(), command.size());
vector v(MAX_SIZE);
read(fd,&v[0], MAX_SIZE);
答案 2 :(得分:0)
可以使用部分实现QExtSerialPort
接口的QIODevice
库建立Qt中与串行端口的低级通信。
您必须自己实施的高级协议。