Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с USSD запросами в модеме WS6318
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
stapleman
Здравствуйте.

Столкнулся с такой проблемой в модеме WS6318.
Модем WS6318 работает с SIM-картой от оператора МТС.
Версия прошивки модема: R32.0.201307021520.WS6318 020713 15:20
При работе с модемом ему отправляется USSD запрос баланса.
На этот запрос приходит некорректный ответ.
Лог обмена AT-командами следующий:
AT+CUSD=1,"*100#",8
OK
+CUSD: 0,"?????:2,99? ",72
Т.е. вместо текста приходят знаки вопроса.

Если данный запрос отправить на модем WISMO228, то лог выглядит так:
AT+CUSD=1,"*100#",8
OK
+CUSD: 0,"041C0438043D04430441003A0032002C0039003904400020",72
Т.е. ответ передётся в юникоде. Если его декодировать, то текст следующий: "Минус:2,99р "

Если эту SIM-карту вставить в телефон и отправить такой же USSD-запрос, то отвечает он "Минус:2,99р "

Таким образом, у модема WS6318 с прошивкой R32 есть проблема с обработкой USSD ответа от оператора, если он отвечает кириллицей.
В прошивке L31 ответ приходи как и положено в юникоде.
Сейчас я вижу 2 решения проблемы:
1. Использовать прошивку L31, со всеми недокументированными "особенностями" этой версии. Плюс перепрошивать в будущем все покупаемые модемы.
2. Запрашивать USSD на латинице. Но у операторов по разному переключается раскладка: у МТС, например, достаточно отправить запрос баланса на латинице "#100#", а для Мегафона нужно сначала отдельно переключить раскладку "*105*0#" и уже потом запрашивать баланс. Как у других операторов пока не ясно.

Подскажите, пожалуйста, может быть эту проблему можно решить каким-то другим способом.
SierraWireless
Добрый день,
на WS6318, у вас отображается в текстовом режиме, а в WISMO228 в PDU режиме.
попробуйте установить PDU режим - AT+CMGF=0

stapleman
Цитата(SierraWireless @ May 12 2015, 10:44) *
Добрый день,
на WS6318, у вас отображается в текстовом режиме, а в WISMO228 в PDU режиме.
попробуйте установить PDU режим - AT+CMGF=0


Вы ошибаетесь. Журнал обмена с WS6318:
AT+CMGF?
+CMGF: 0
OK

AT+CUSD=1,"*102#",8
OK
+CUSD: 0,"???????? ???????? ??? ????? ??????? ????????: *110*45#?????",72

Т.е. вместо юникода - знаки вопроса.
kan35
Не наблюдалось такого. Он, очевидно, пытается перекодировать в какой то локальный алфавит. AT+CMGF=0 на сколько я знаю влияет только на SMS.
И еще, я отправляю
AT+CUSD=1,"*102#"
OK
...

Приведу свои команды ему, сравните:
Код
ATCmdWRPR(5, PHYSICAL_PORT, "ATI\r", 1000, 2, "OK\r\n", "ERROR\r\n");
            ATCmdWRPR(5, PHYSICAL_PORT, "AT+CGMI\r", 1000, 2, "OK\r\n", "ERROR\r\n");
            ATCmdWRPR(5, PHYSICAL_PORT, "AT+CGMM\r", 1000, 2, "OK\r\n", "ERROR\r\n");
            ATCmdWRPR(5, PHYSICAL_PORT, "AT+CGMR\r", 1000, 2, "OK\r\n", "ERROR\r\n");
            ATCmdWRPR(5, PHYSICAL_PORT, "AT+CGSN\r", 1000, 2, "OK\r\n", "ERROR\r\n");
            ATCmdWRPR(5, PHYSICAL_PORT, "AT+IFC=0,0\r", 1000, 2, "OK\r\n", "ERROR\r\n");
            ATCmdWRPR(5, PHYSICAL_PORT, "ATV1\r", 200, 2, "OK\r\n", "ERROR\r\n");
            ATCmdWRPR(5, PHYSICAL_PORT, "AT+CRC=0\r", 200, 2, "OK\r\n", "ERROR\r\n");    
            ATCmdWRPR(5, PHYSICAL_PORT, "AT+PSSLEEP=1,1\r", 200, 2, "OK\r\n", "ERROR\r\n");
// тут перевожу в режим CMUX и далее через него
    ATCmdWRPR(5, VIRTUAL_PORT_2, "AT+CLIP=1\r", 200, 2, "OK\r\n", "ERROR\r\n");
    ATCmdWRPR(5, VIRTUAL_PORT_2, "AT+CMGF=0\r", 200, 2, "OK\r\n", "ERROR\r\n");
    ATCmdWRPR(5, VIRTUAL_PORT_2, "AT+CNMI=2,1,0,0,0\r", 500, 2, "OK\r\n", "ERROR\r\n");
    ATCmdWRPR(30, VIRTUAL_PORT_2, "AT+CPMS=\"SM\",\"SM\",\"SM\"\r", 500, 2, "OK\r\n", "ERROR\r\n");
SierraWireless
Цитата(stapleman @ May 12 2015, 11:06) *
Вы ошибаетесь. Журнал обмена с WS6318:
AT+CMGF?
+CMGF: 0
OK

AT+CUSD=1,"*102#",8
OK
+CUSD: 0,"???????? ???????? ??? ????? ??????? ????????: *110*45#?????",72

Т.е. вместо юникода - знаки вопроса.


Уточните пожалуйста, какой тип отображения символов используется команда - AT+CSCS?
выставите AT+CSCS="UCS2"
stapleman
Цитата(SierraWireless @ May 12 2015, 14:35) *
Уточните пожалуйста, какой тип отображения символов используется команда - AT+CSCS?
выставите AT+CSCS="UCS2"


Попробовал - не помогло. Журнал обмена следующий:
AT+CSCS="UCS2"
OK

AT+CUSD=1,"*102#",8
+CME ERROR: operation not allowed

// попробовал и такой вариант:
AT+CUSD=1,"*102#"
+CME ERROR: operation not allowed

Ради любопытства попробовал проделать то же самое с версией L31 - результат с использование UCS2 такой же, т.е. возвращает "+CME ERROR: operation not allowed"
Цырен.
Цитата(stapleman @ May 12 2015, 15:53) *
Попробовал - не помогло. Журнал обмена следующий:
AT+CSCS="UCS2"
OK

AT+CUSD=1,"*102#",8
+CME ERROR: operation not allowed

// попробовал и такой вариант:
AT+CUSD=1,"*102#"
+CME ERROR: operation not allowed

Ради любопытства попробовал проделать то же самое с версией L31 - результат с использование UCS2 такой же, т.е. возвращает "+CME ERROR: operation not allowed"

Кирилл, можно я вмешаюсь? )
Если ввели CSCS=UCS2, то и номер в CUSD надо подавать в юникоде.
stapleman
Цитата(Цырен. @ May 14 2015, 07:53) *
Кирилл, можно я вмешаюсь? )
Если ввели CSCS=UCS2, то и номер в CUSD надо подавать в юникоде.


Заработало, спасибо за помощь.

В итоге вместо
AT+CUSD=1,"*102#",8
использую
AT+CSCS="UCS2"
AT+CUSD=1,"002A0031003000320023",8
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.