Как кодировать обычную строку в режиме кодирования "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

Попробуйте вручную через телнет или экран. Тогда вы сможете лучше понять, что происходит, не сражаясь с хост-приложением.

Другие вопросы по тегам