Расшифровка из UNICOD
- Войдите на сайт для отправки комментариев
Сб, 16/05/2015 - 13:11
Всем привет. Прошу помочь в решении такого трабла: GSM модуль при запросе баланса выдает "+CUSD: 0,"00380039002E003800340440002E0036002E0031003804310430043B002E00220417043000200433043B043004370430002004420432043E4800303040345020010202054B454320103004343403030200070730302020040097" Сторонними программками я запросто рапсшифровываю это сообщение, а можно ли получать латиницу прямо в Serial???
Вообще то здесь не только латиница, но и кириллица. Если я правильно "расшифровал", то это UTF-16 (Big endian).
Для вывода в сериал только перекодировать (возможно уже и есть скетчи на эту тему, не интересовался).
UPD: Если нужно выдернуть только баланс, то можно и без перекодировки, аккуратненько вырезать начало сообщения и его "распарсить". Т.е. здесь у Вас
"89.84р.6.18бал."
'8' = 0038
'9' = 0039
'.' = 002E
'4' = 0034
'р' - 0440
Вроде ничего сложного.
Сложного то ничего нет, но, видимо, придется все цифры от 0 до 9 вбивать в юникоде, чтобы парсить то потом как я понял? Блин, я думаю может настройки есть просто какие то, чтобы сообщение приходило не в юникоде...
Ну тогда напишите тип модуля gsm, может кто подскажет.
блин, у тебя че кофе кончилось и хрустальный шар сломался?
блин, у тебя че кофе кончилось и хрустальный шар сломался?
Да :( Кончился
Весь юникод декодировать умучаешься, но если нужны только русские-английские буквы, вполне можно расшифровать "вручную", несколькими строчками кода.
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)
Весь юникод декодировать умучаешься, но если нужны только русские-английские буквы, вполне можно расшифровать "вручную", несколькими строчками кода.
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# тоже... Накатал в техподдержку письмо)
Джентельмены, прошу пояснить азы запроса баланса.
responce = modemAccess.writeModemCommand("AT+CUSD=1,\"*100#\"", 20000);
// тут мы должны были получить ОК
// что дальше делать? SMS читать?