Я пишу программу для управления модемом Iridium, который связывается со спутником.После того, как каждая AT-команда отправлена, модем отправляет ответ обратно (в зависимости от команды), чтобы указать, что команда была успешной.
Сейчас я реализовал ее так, что программа просто ждет 10 секунд между передачейкаждая команда для модема, но это немного рискованно, потому что не позволяет обрабатывать ошибки в случае, если команда не была успешно интерпретирована.Единственный способ, которым я знаю, как читать последовательный ввод, - это while(fgets( , ,))
, поэтому мне интересно, как я смогу заставить программу ожидать ответа от модема через последовательный порт и проверить, что это такое, до того, как следующая командаотправлено вместо единой задержки.
Я использую ОС Linux.
FILE *out = fopen(portName.c_str(), "w");//sets the serial port
for(int i =0; i<(sizeof(messageArray)/sizeof(messageArray[0])); i++)
{
//creates a string with the AT command that writes to the module
std::string line1("AT+SBDWT=");
line1+=convertInt( messageArray[i].numChar);
line1+=" ";
line1+=convertInt(messageArray[i].packetNumber);
line1+=" ";
line1+=messageArray[i].data;
line1+=std::string("\r\n");
//creates a string with the AT command that initiates the SBD session
std::string line2("AT+SBDI");
line2+=std::string("\r\n");
fputs(line1.c_str(), out); //sends to serial port
usleep(10000000); //Pauses between the addition of each packet.
fputs(line2.c_str(), out); //sends to serial port
usleep(10000000);
}