Мне нужно прочитать много (8) последовательных устройств в моем проекте. Это Pantilt, Camera, GPS, Compass и т. Д. Все они являются устройствами RS232, но они имеют разную структуру команд и поведение. например, GPS начинает отправлять данные как в ближайшее время, когда я открою порт. где PanTilt и Camera реагируют только при отправке им определенных команд.Блокировка последовательного порта Чтение
Я использую следующую среду
- ОС: Ubuntu 11,10
- Язык: C++
- Framework: Qt 4,7
Для PanTilt и камеры Я хочу разработать функцию, как это.
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', а также' strlen' на 'string' не имеет смысла, вы должны использовать его метод 'size') –