프로젝트에서 많은 (8) 개의 시리얼 장치를 읽어야합니다. 그들은 Pantilt, Camera, GPS, Compass 등입니다. 그들은 모두 RS232 장치입니다. 그러나 그들은 다른 명령 구조와 동작을 가지고 있습니다. 예를 들어 GPS가 포트를 열면 곧 데이터가 으로 전송되기 시작합니다. PanTilt와 Camera는 특정 명령을 보낼 때만 응답합니다. 내가시리얼 포트 읽기 차단하기
- OS 환경에게 다음을 사용
: 우분투 11.10
- 언어 : C++
- 프레임 워크 : 팬 틸트 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);
내가 엄격한 동기 동작을 필요로 이런 일을하려면 ...이 기능이 같은 더 복잡한 알고리즘 을위한 빌딩 블록으로 사용되므로이 방법을 구현하고자합니다. 아무도 이것에 접근하는 방법을 알고 있습니까?
(관련없는 nitpicker 참고 :'string &'전달은 좋은 생각이 아니므로'const string '또는'string'을 원할 수도 있습니다. 또한'string'에'strlen'을 사용하는 것이 바람직하지 않습니다. 그것의'크기'방법) –