2015-06-24 4 views
1

Как поместить программу программно, если команда AT выполнена успешно или не выполнена.Как проверить, успешно ли выполнена команда AT или не удалось

Я поставил следующие проверки:

boolean success = response.endsWith("OK"); 
boolean failed = response.endsWith("ERROR"); 

Я просто хочу быть уверен, что, если эта проверка может быть размещена повсеместно, или по крайней мере на AT команды + CUSD. Я не могу содержать check, так как ответ ussd может содержать строки «ok» или «error».

ответ

1

Отличный шаг от вашего имени, чтобы исследовать, как правильно поступать, а не просто останавливаться на «хорошо, это похоже на проб и ошибок».

Да, OK и ERROR являются универсальными, но ERROR могут быть заменены чем-то другим, и существуют и другие ответы. Спецификация V.250 определяет большинство итоговых итоговых кодов , но дополнительно 27.007 определяет +CME ERROR: и 27.005 определяет +CMS ERROR:.

Вы можете посмотреть на код atinout для примера для комбинированной is_final_result функции, хотя два расколоть isFinalResponseError и isFinalResponseSuccess функции в ST-Ericsson U300 RIL кажется ближе к использованию. Обратите внимание, однако, что CONNECT не является окончательным кодом результата, это промежуточный код результата, поэтому имя isFinalResponseSuccess не на 100% правильное, и вы, скорее всего, не хотите его включать.

Относительно содержит в сравнении с концамиВ этом не имеет значения; коды конечного результата всегда выводятся по одной строке , поэтому вы всегда должны это проверять. Другими словами, вы всегда должны только считывать и буферизовать данные ответа от модема до тех пор, пока не получите пару байт байтов \r\n, а затем начните синтаксический анализ полученной строки (абсолютно единственным исключением является ожидание ответа 4 байта от AT+CMGS до отправки полезная нагрузка).

Так что ваша структура должна выглядеть

Write(port, "AT+SOMECMD\r"); 
do { 
     input = ReadLine(port, responseTimeout); 
} while (!isFinalResultCode(input)); 

Если вы хотите, чтобы потреблять любые промежуточные информации текстовых ответов до окончательного кода результата приходит вам нужно немного изменить цикл (например, проверить для окончательного кода результата первого до продолжения обработки промежуточного ответа).


При условии, что в конце конфигурации линии не перепутались, например, вы всегда должны указывать S3 и S4: \r и \n, а также с использованием ATV1.

+0

Я нашел новый модем, который выполняет следующие действия в ответ на команду AT + CUSD: Возвращает промежуточный ответ OK. Через 2 или 3 секунды (обычная сетевая задержка в командах ussd) он дает реальный ответ. Это стандартное поведение? –

+0

@djaqeel Задайте это как отдельный вопрос (и пометьте его [tag: at-command]), ответ слишком длинный для комментария. – hlovdal

+0

Да, конечно, посмотрите: http://stackoverflow.com/questions/33387324/atcusd-command-standard-response –

Смежные вопросы