我必须阅读项目中的许多(8)串行设备。它们是Pantilt,Camera,GPS,Compass等。它们都是RS232设备,但是它们具有不同的命令结构和行为。例如GPS开始发送数据
我打开港口后其中PanTilt和Camera仅在我向他们发送特定命令时才响应。

我使用以下环境

  • 操作系统: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);
    

    为此,我需要严格的同步行为。有人知道如何解决这个问题吗?

    最佳答案

    我发现本教程非常有趣并且很有帮助。
    http://www.webalice.it/fede.tft/serial_port/serial_port.html

    它显示了boost::asio如何可用于执行同步和异步读取/写入。

    感谢您的帮助!

    关于c++ - 阻止串口读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10389514/

    10-12 05:39