[an error occurred while processing this directive]
много(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ы 30 июня 2006 г. 13:19
В ответ на: Просвятите - как общаться с GSM модемом? отправлено <font color=gray>1111</font> 30 июня 2006 г. 11:37

я включаю эхо обяхательно. При приеме ловлю строку "AT" после этого все
данные начинаю складывать в буфер. После AT начинаю искать первый enter.
Как найду значит эхо получил - сравниваю с тем, что отправлял (по CRC16).
Удаляю из буфера эхо.
Далее опять принимаю данные в буфер и после каждой принятой порции
данных ищу в буфере OK,CME ERROR, CONNECT, NO CARRIER и т.д. как
только какая то из этих строк найдена, начинаю разбор данных
от начала буфера до этой конечной строчки, а именно:
ищу в этом буфере строки ответов на все поддерживаемые моим ПО
команды, в цикле.


if (FIND("+CPMS:")) {
/////
процедура парсинга CPMS
}
else
if (FIND("+CMGR:")) {
/////
процедура парсинга CMGR
}
else
if (FIND("+CPAS:")) {
/////
процедура парсинга CPAS
}
else
if (FIND("+CREG:")) {
процедура парсинга CREG
}
else {
ERROR
}

Как только найдена определенная строка
осущ переход на процедуру парсинга данной команды.
ПРоцедура парсинга у каждой команды _своя_.
Ессно есть универсальные процедурки типа считать
число, найти первый знак '"' (кавычки) и т.д
(формат ответа у каждой команды свой и наворочен
особенно не на стандратные AT команды а на совбственные
для каждого модема)

например нужно парсировать такую строку:
+CGDCONT: 1,"IP","internet.beeline.ru","",0,0
- найти строку "+CGDCONT:"
- считать 1
- убедиться что втрой параметр это IP
- и т.д


это все парсинг. Теперь что каается "системы"
каждая команда у меня послыается максимум 3 раза.
С интервалами, например, 3 сек.
Если в течении 3 попыток я не получил всех флагов
правильности приема (эхо, валидный ответ и т.д.)
я переключаю питание модема.
Есть еще такие команды которым повторный ввод в случае
не получения результата при 1 вводе не желателен
(например открытие GPRS или IP сессии) в этом случае
я посылаю команду опроса состояния для данных команд
(у каждого модема они должны быть) например типа VIEW STATE
и по их результатам принимаю решения, но это индивидуально все.

Есть еще момент, что даже на стандартные AT команды разные модемы
отвечаю по разному, например, AT+CPIN: толи GR47 толи 2406 не добавляет
в конце OK а другой добавляет. Тут уже приходится извращаться т.е.
в список концевиков (OK,CONNECT,NO CARRIER добавлять строку +CPIN:)

Еще момент, не все команды возвращают тип ответа (+CPAS:,+CREG: и т.д.)
например команда запроса IMEI модема возвращает просто строку-число без всяких
признаков что это за ответ. В этом случае я поступаю так.
Если ни одна строка-ответ не найдена и т.к. я знаю какую команду я посылал
то однозначно я определяю что это ответ на запрос IMEI и т.д.

вобщем процедура парсинга у меня получилоась довольна объемистая
но зато поддержка новой команды осуществляется в легкую


немного сумбурно, но примерно так.


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru