Расшифровка из UNICOD

Andrey-S
Offline
Зарегистрирован: 02.01.2015

Всем привет. Прошу помочь в решении такого трабла: GSM модуль при запросе баланса выдает "+CUSD: 0,"00380039002E003800340440002E0036002E0031003804310430043B002E00220417043000200433043B043004370430002004420432043E4800303040345020010202054B454320103004343403030200070730302020040097" Сторонними программками я запросто рапсшифровываю это сообщение, а можно ли получать латиницу прямо в Serial???

 
kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вообще то здесь не только латиница, но и кириллица. Если я правильно "расшифровал", то это UTF-16 (Big endian).

Для вывода в сериал только перекодировать (возможно уже и есть скетчи на эту тему, не интересовался).

UPD: Если нужно выдернуть только баланс, то можно и без перекодировки, аккуратненько вырезать начало сообщения и его "распарсить". Т.е. здесь у Вас

"89.84р.6.18бал."

'8' = 0038
'9' = 0039
'.' = 002E
'4' = 0034
'р' - 0440
Вроде ничего сложного.

 

Andrey-S
Offline
Зарегистрирован: 02.01.2015

Сложного то ничего нет, но, видимо, придется все цифры от 0 до 9 вбивать в юникоде, чтобы парсить то потом как я понял? Блин, я думаю может настройки есть просто какие то, чтобы сообщение приходило не в юникоде...

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Ну тогда напишите тип модуля gsm, может кто подскажет.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

kisoft пишет:
Ну тогда напишите тип модуля gsm, может кто подскажет.

блин, у тебя че кофе кончилось и хрустальный шар сломался?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Puhlyaviy пишет:

kisoft пишет:
Ну тогда напишите тип модуля gsm, может кто подскажет.

блин, у тебя че кофе кончилось и хрустальный шар сломался?


Да :( Кончился

Datak
Offline
Зарегистрирован: 09.10.2014

Весь юникод декодировать умучаешься, но если нужны только русские-английские буквы, вполне можно расшифровать "вручную", несколькими строчками кода.

0x0020 - 0x007E - арифметические и т.п. знаки, и английские буквы. Декодируются в символы 0x20 - 0x7E, простым отбрасыванием старшей нулевой части.

0x0410 - 0x042F - русские буквы от "А" до "Я" - 32 штуки, без "Ё". Декодирование зависит от таблицы, в которую собираемся декодировать. Для ANSI кодировки - 0xC0 - 0xDF.

0x0430 - 0x044F - то же самое для букв от "а" до "я". Декодируются в 0xE0 - 0xFF.

0x0401 - 0x0451 - буквы "Ё" и "ё" - декодируются в 0xA8 и 0xB8 соответственно.

-----

А насчёт получения текста в готовом виде, без декодирования - кажется делал такое.
Но это настройка не GPRS модуля, а вашего сотового оператора. Смотрите описание его USSD команд - должна быть команда переключения на передачу SMS транслитом.

-----

Upd:
Вот, нашёл. У меня, для Мегафона, это так делалось:

*105*11# - Включить режим кириллицы (Выбран кириллический алфавит)
*105*22# - Включить режим транслитерации (Vyibran latinskiy alfavit)

Andrey-S
Offline
Зарегистрирован: 02.01.2015

Datak пишет:

Весь юникод декодировать умучаешься, но если нужны только русские-английские буквы, вполне можно расшифровать "вручную", несколькими строчками кода.

0x0020 - 0x007E - арифметические и т.п. знаки, и английские буквы. Декодируются в символы 0x20 - 0x7E, простым отбрасыванием старшей нулевой части.

0x0410 - 0x042F - русские буквы от "А" до "Я" - 32 штуки, без "Ё". Декодирование зависит от таблицы, в которую собираемся декодировать. Для ANSI кодировки - 0xC0 - 0xDF.

0x0430 - 0x044F - то же самое для букв от "а" до "я". Декодируются в 0xE0 - 0xFF.

0x0401 - 0x0451 - буквы "Ё" и "ё" - декодируются в 0xA8 и 0xB8 соответственно.

-----

А насчёт получения текста в готовом виде, без декодирования - кажется делал такое.
Но это настройка не GPRS модуля, а вашего сотового оператора. Смотрите описание его USSD команд - должна быть команда переключения на передачу SMS транслитом.

-----

Upd:
Вот, нашёл. У меня, для Мегафона, это так делалось:

*105*11# - Включить режим кириллицы (Выбран кириллический алфавит)
*105*22# - Включить режим транслитерации (Vyibran latinskiy alfavit)

Благодарю за подробную информацию... Попробую для начала переключить ussd запросы... Ваш код не помог...*160# тоже... Накатал в техподдержку письмо)

dmitron1036
Offline
Зарегистрирован: 10.01.2016

Джентельмены, прошу пояснить азы запроса баланса.

 

responce = modemAccess.writeModemCommand("AT+CUSD=1,\"*100#\"", 20000);

// тут мы должны были получить ОК

// что дальше делать? SMS читать?