holy0dmin 0 19 мая, 2015 Опубликовано 19 мая, 2015 · Жалоба CADiLO Так там же куча всяких URC может приходить, про SMS, про регистрацию в сети, про выход питающего напряжения за пределы... Их что, все отключать перед каждым запросом и включать после него? Хотелось бы услышать совет из практики. ISG2015 А SIM-карту в устройство будет вставлять пользователь, или вы сами? Если пользователь, то у какого-то оператора наверняка найдется какой-то тариф с дорогими разговорами и дешевым трафиком. У меня GPS-трекер с SIM-картой Мегафон и тарифом "Мегафон-Онлайн" уже года три на 300 рублях катается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CADiLO 9 19 мая, 2015 Опубликовано 19 мая, 2015 · Жалоба Насколько я помню, вывод текста SMS это тело команды и до ОК прервано быть не может. Я перепроверю конечно, но скорее всего что в текст SMS подмешаться URC не может. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
holy0dmin 0 19 мая, 2015 Опубликовано 19 мая, 2015 · Жалоба CADiLO А остальные команды? AT+CNETSCAN, AT+CENG, AT+HTTPREAD, AT+CIPGSMLOC, которого ждать надо пару секунд? Во все не могут пролезть? На сколько я помню по экспериментам с SIM908, пролезают ещё как (правда, не помню версию прошивки, на которой тестировал). Если бы не пролезали, алгоритм конечного автомата управления модулем можно было бы очень упростить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ISG2015 0 19 мая, 2015 Опубликовано 19 мая, 2015 (изменено) · Жалоба Подскажите, где взять прошивку для SIM900R? Мне нужно сбросить модем в заводские настройки. Спс! UPD Вопрос снимается, разобрался. Изменено 19 мая, 2015 пользователем ISG2015 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gegel 0 19 мая, 2015 Опубликовано 19 мая, 2015 · Жалоба Если бы не пролезали, алгоритм конечного автомата управления модулем можно было бы очень упростить. Вот как люди умудряются усложнять себе жизнь... Я давно работаю с Quectel ОЦПУ, и никогда не сталкивался с проблемами в этом плане. Конечно, при ожидании ответа на АТ-запрос может прийти левый URC, но ведь все равно все должно проверяться, перед тем, как парситься. Т.е. одной state-машины недостаточно, надо каждые данные парсить и проверять на соответствие ожидаемым. Для этого используется strstr. Ради интереса посмотрите код Quectel RIL (от производителя). Там обработчик события UART с подключаемыми парсерами, которые формируют callback-и. Честно, тут я категорически не согласен со Stanley - он пошел на поводу юзерофильности, и потерялась изящность и прозрачность предыдущих версий ОЦПУ с опросом getEvent в цикле. Теперь фиг поймешь, в контексте какой нити выполняются callback-и и какие данные защищать мутексами. Но зато школьники тащутся - привычная и уютная среда... Не заморачивайтесь на абстракциях. Просто попробуйте сесть, сосредоточиться и ясно представить, как реально будет идти обмен с модулем, и предвидеть по возможности все ситуации, а также предусмотреть вывод отладочного лога с указанием номеров строк и параметров. ПС: АТ-ответы и URC никогда не разрываются другими URC - все становится в очередь. Любой ответ и URC, как правило, имеет префикс, указывающий на его принадлежность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CADiLO 9 19 мая, 2015 Опубликовано 19 мая, 2015 · Жалоба О! >>>Не заморачивайтесь на абстракциях. Согласен 100% Бритва Окама - самое то: "Не надо изобретать сущностей сверх необходимого" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ISG2015 0 21 мая, 2015 Опубликовано 21 мая, 2015 · Жалоба Подскажите ,а как идентифицировать оператора на SIM-карте? Запрашивать номер, вырезать первые цифры и по этим цифрам распзнавать? Может быть есть элегантнее способ!? Спс!. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Radik_1983 0 21 мая, 2015 Опубликовано 21 мая, 2015 · Жалоба AT+COPS =0,2 // Отображение название оператора в цифровом виде AT+COPS? // Чтение ID оператора 25001: MTS 25002: Megafon 25020: Tele2 25039: Utel 25099: Beeline Если поискать, то можно найти полный список операторов мира с их кодами. Список не такой уж и большой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ISG2015 0 21 мая, 2015 Опубликовано 21 мая, 2015 (изменено) · Жалоба А для Украины MNC кодами не поделится никто? :rolleyes: Пишу свою реализацию работы с модемом. Наметилось несколько вопросов: 1. При инициализации UDP сокета, команда "AT+CIFSR" возвращает локальный адрес, но не возвращает финального "ОК"! Я анализирую ответ от модема и считаю, что команда выполнена успешна именно по этому "ОК". Получается как то не але :) Приходится городить что то типа такого: if ( SearchRespondSIM900( "OK" ) || SearchRespondSIM900( "." ) ) Точка является разделителем в IP адресе, но вполне может встретиться еще где-то. 2. Какое время установки сессии? У меня получается зарегистрироваться в течении 10,55 сек. с момента подачи питания на модем и 2,28 сек. если модем уже был включен. Изменено 21 мая, 2015 пользователем ISG2015 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Radik_1983 0 22 мая, 2015 Опубликовано 22 мая, 2015 · Жалоба 1. Для Украины код MCC = 255, а идентификатор MNC присваивается в порядке регистрации: - MNC:01 Ukrаinian Mobile Communication, UMC; - MNC:02 Ukrainian Radio Systеms, URS; - MNC:03 Kyivstаr GSM; - MNC:04 Internаtional Telecommunications Ltd; - MNC:05 Gоlden Telecom; - MNC:06 Astelit; - MNC:07 Ukrtelecom; - MNC:21 CJSC - Telеsystems of Ukraine. 2. AT+CIFSR является неподтверждаемой (без OK), и таких команд достаточно много. Ищите блоками заканчивающимися на концевик 0x0D 0x0A, большинство из них имеют префикс для распознавания ("+CREG:", например). Я пришедшие блоки маркирую в отдельном буфере и ищу ответы уже по нему. Прототип функции обработки команд: TStruct_OpResult AtOp_Template(TStruct_AtCommand *MyAtCommand, uint8_t CmdAnswer, bool IsUnsolicited, uint8_t RepeatCmd, uint16_t RepeatAnswer, bool ClearAnswerBuf); Пример для AT+CIFSR: AtOp_Template(AtCommand, cCmdData, TRUE, 3, 30, TRUE); - Ищем данные без префикса, подтверждающий OK не требуется, 3 повтора при неответе, ищем ответ 30 циклов, очистить перед посылкой буфер ответов; 3. Регистрируется у вас долго, но это зависит от оператора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ISG2015 0 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба RadikX, спасибо! 1. Не хватает "Life", UMC это МТС нынешний? 2. На сколько я понял 0x0D 0x0A обрамляются все ответы модема. При этом с 2х сторон непосредственно ответа. Короче мне пока не ясно это дело. 3. Записывал на логическом анализаторе пакеты в обе стороны. Внимательно анализировал результаты. Судя по результатам все более менее ок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Radik_1983 0 27 мая, 2015 Опубликовано 27 мая, 2015 · Жалоба Life - это торговая марка Астелит. а UMC - да, МТС до ребрендинга. Правила формирований команд и ответов, а также базовый набор АТ-команд подробно описаны в документе "ITU-T Recommendation V.25 ter". В 99% процентах ответы обрамляются с двух сторон "концевиками" 0x0D 0x0A. Есть еще 1% который надо особо разбирать (вроде приглашение ввода при отправке SMS), ну да бог разработчикам протокола судья. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ISG2015 0 27 мая, 2015 Опубликовано 27 мая, 2015 · Жалоба Life - это торговая марка Астелит. а UMC - да, МТС до ребрендинга. Правила формирований команд и ответов, а также базовый набор АТ-команд подробно описаны в документе "ITU-T Recommendation V.25 ter". В 99% процентах ответы обрамляются с двух сторон "концевиками" 0x0D 0x0A. Есть еще 1% который надо особо разбирать (вроде приглашение ввода при отправке SMS), ну да бог разработчикам протокола судья. Да. Спасибо. По поводу ответов модема: здорово что обрамляются с 2х сторон 0x0D 0x0A, это и правда замечательно! Я только не совсем понял почему для одной из команд в ответе нет "ОК" :) Хорошо, это не главная часть ракеты так сказать, разберемся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ISG2015 0 26 августа, 2015 Опубликовано 26 августа, 2015 (изменено) · Жалоба Доброго времени! Пилю проект с модемами SIM900R. Столкнулся с такой траблой: время от времени в открытой UDP сессии происходит смена номера порта. То есть, IP не меняется, а вот порт меняется. Так происходит если модем ничего не передает/принимает в течении приблизительно >8с. Это я так понимаю нормально? У меня устройство выходит на связь с сервером реже (30с). Сервер отмечает у себя текущий слот с которого обратился модем. К тому времени когда мне необходимо обратится к модему/устройству данные по слоту(порту) устаревают. Получается мне необходимо все время поддерживать линк отправкой/получением пакета только для того чтоб менялся порт слота? Спасибо! Изменено 26 августа, 2015 пользователем ISG2015 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
holy0dmin 0 26 августа, 2015 Опубликовано 26 августа, 2015 (изменено) · Жалоба Модуль тут не при чем, дело в операторе связи. Они используют NAT, выпуская через шлюз множество клиентов. На всех клиентов получается всего около 64000 портов, поэтому настроены такие жесткие таймауты, чтобы не было ситуации когда все порты заняты. Проблему можно решить купив услугу "Статический IP" или используя TCP - там таймауты помягче. Изменено 26 августа, 2015 пользователем p_kav Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться