Как кодировать обычную строку в режиме кодирования "IRA"?
Недавно я разрабатываю простое приложение для работы с GSM-модемом, и у меня возникла проблема с отправкой команды USD. После некоторых исследований я нашел журналы модема и обнаружил, что мой модем отправляет эту команду, чтобы получить баланс.
AT+CUSD=1,"AA182DA68A8D1A",15
Я послал эту команду с моим приложением и получил результат, он работает нормально, но когда я проверяю свой режим кодирования модема этой командой
AT+CSCS?
он возвращает этот режим "IRA", но я не знаю, как преобразовать текст моей команды баланса *141*1# в этот тип строки.
Из журналов модема я обнаружил, что эта строка "AA182DA68A8D1A" является преобразованной формой этого "*141*1#".
1 ответ
Прежде всего, то, что вы видите в своих журналах, представляет собой шестнадцатеричную строку, изображающую 7-битную кодированную USSD-команду (см. GSM 03.38 от 3GPP для получения дополнительной информации о 7-битной).
Binary 7-Bit Decoded 7-Bit
######### ######## #############
1 0101010 010 1010 *
00 011000 011 0001 1
001 01101 011 0100 4
1010 0110 011 0001 1
10001 010 010 1010 *
100011 01 011 0001 1
0001101 0 010 0011 #
000 1101 <CR>
Существуют миллионы инструментов для декодирования 7-битной версии, но мы сделали это быстро вручную здесь:)
Тексты команд USSD могут быть закодированы через 7-бит или UC-2, и большинство модемов делают это самостоятельно. Таким образом, хост-приложение может просто отправить USSD-команду как ascii, и модем все выяснит. Так что вам просто нужно отправить команду:
AT+CUSD=1,"*141*1#",15
Попробуйте вручную через телнет или экран. Тогда вы сможете лучше понять, что происходит, не сражаясь с хост-приложением.