Jump to content

    
Sign in to follow this  
stapleman

Проблема с USSD запросами в модеме WS6318

Recommended Posts

Здравствуйте.

 

Столкнулся с такой проблемой в модеме 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#" и уже потом запрашивать баланс. Как у других операторов пока не ясно.

 

Подскажите, пожалуйста, может быть эту проблему можно решить каким-то другим способом.

Share this post


Link to post
Share on other sites
Добрый день,

на WS6318, у вас отображается в текстовом режиме, а в WISMO228 в PDU режиме.

попробуйте установить PDU режим - AT+CMGF=0

 

Вы ошибаетесь. Журнал обмена с WS6318:

AT+CMGF?

+CMGF: 0

OK

 

AT+CUSD=1,"*102#",8

OK

+CUSD: 0,"???????? ???????? ??? ????? ??????? ????????: *110*45#?????",72

 

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

Share this post


Link to post
Share on other sites

Не наблюдалось такого. Он, очевидно, пытается перекодировать в какой то локальный алфавит. 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");

Share this post


Link to post
Share on other sites
Вы ошибаетесь. Журнал обмена с WS6318:

AT+CMGF?

+CMGF: 0

OK

 

AT+CUSD=1,"*102#",8

OK

+CUSD: 0,"???????? ???????? ??? ????? ??????? ????????: *110*45#?????",72

 

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

 

Уточните пожалуйста, какой тип отображения символов используется команда - AT+CSCS?

выставите AT+CSCS="UCS2"

Share this post


Link to post
Share on other sites
Уточните пожалуйста, какой тип отображения символов используется команда - 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"

Edited by stapleman

Share this post


Link to post
Share on other sites
Попробовал - не помогло. Журнал обмена следующий:

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 надо подавать в юникоде.

Share this post


Link to post
Share on other sites
Кирилл, можно я вмешаюсь? )

Если ввели CSCS=UCS2, то и номер в CUSD надо подавать в юникоде.

 

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

 

В итоге вместо

AT+CUSD=1,"*102#",8

использую

AT+CSCS="UCS2"

AT+CUSD=1,"002A0031003000320023",8

Edited by stapleman

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this