阻止串口读取

时间:2012-04-30 19:36:50

标签: c++ qt ubuntu serial-port

我必须在我的项目中阅读很多(8)个串行设备。它们是Pantilt,相机,GPS,指南针等。它们都是RS232设备,但它们具有不同的命令结构和行为。例如GPS开始发送数据 我打开港口的那一刻。 PanTilt和Camera仅在向我们发送特定命令时响应。

我使用以下环境

  • OS:Ubuntu 11.10
  • 语言:C ++
  • 框架:Qt 4.7

对于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);

要做这样的事情,我需要严格的同步行为。任何人都知道如何处理这个问题?

3 个答案:

答案 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中与串行端口的低级通信。

您必须自己实施的高级协议。