私のプロジェクトでは、多くの(8)シリアルデバイスを読まなければなりません。彼らはパンチルト、カメラ、GPS、コンパスなどです。それらはすべてRS232デバイスですが、コマンドの構造と動作が異なります。例えば、私がポートを開くとGPSはすぐに としてデータを送信し始めます。 PanTiltとCameraは特定のコマンドを送信したときにのみ応答します。私はシリアルポートの読み取りをブロックする
- OS環境に以下の使用
:Ubuntuの11.10
- 言語:C++
- フレームワーク:PanTilt 4.7
Qtとカメラは、私はこのような機能を開発したいです。
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);
...この関数は、このような、より複雑なアルゴリズム のためのビルディングブロックとして使用されるように、この方法を実装したいです。誰にどのようにこれにアプローチするか考えている?
(関連性のないニックピッカーノート: 'string&'を渡すのは良い考えではないでしょう。おそらく 'const string 'または単に' string'が必要です; 'string'の' strlen'も意味をなさないので、その 'size'メソッド) –