プロジェクトで多くの (8) シリアル デバイスを読み取る必要があります。これらは、Pantilt、Camera、GPS、Compass などです。これらはすべて 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);
このようなことを行うには、厳密な同期動作が必要です。誰もこれにアプローチする方法を知っていますか?