Команда AT+CUSD: Кодировка ответа

Я отправляю команду AT+CUSD (для набора ussd-кода) на GSM-модем. Он работает нормально. Отклик на трубке тоже правильный. Но ответ, я думаю, в шестнадцатеричном формате или в какой-то неизвестной мне кодировке:

АППАРАТНОЕ ОБЕСПЕЧЕНИЕ GSM-МОДЕМА:

Нокиа С6-01

Подключен к ноутбуку с помощью USB-кабеля. USB-режим: Nokia Suite

Команды для инициализации кодировки:

AT+CSCS=?

+CSCS: ("UCS2","GSM","PCCP437","PCDN","IRA","8859-1","HEX","UTF-8")

AT+CSCS="IRA"

AT+CSCS?

+CSCS: "IRA"

Также пробовал:

AT+CSCS="GSM"
AT+CSCS="UTF-8"

Фактическая USSD-команда:

AT+CUSD=1,"*123#",15

Фактический ответ:

+CUSD: 1,"c47258e1ad7e7f477bb2c6781e0ec72785e691d36136481593cd54f6777d8c2ecb23e1313d6dfd3d36f7764fc26974720fa1b242f8fd161f9b9cc",1

OK

Ожидаемый ответ:

AT+CUSD=1,"*123#",15

+CUSD: 1,"Dear Customer.... some response in english",1

person Syed Aqeel Ashiq    schedule 04.05.2015    source источник
comment
Конец ответа +CUSD заканчивается на 1, правильно ли это? Или на самом деле оканчивался на ,15?   -  person Matt Aldridge    schedule 04.05.2015
comment
@aldridmc В ответе он заканчивается на 1. Это правильно, а не опечатка.   -  person Syed Aqeel Ashiq    schedule 04.05.2015
comment
какая разница, сэр?   -  person Syed Aqeel Ashiq    schedule 04.05.2015
comment
Число после последней запятой определяет кодировку USSD. Обычно либо 15 для 7-битных, либо 72 для UC2.   -  person Matt Aldridge    schedule 04.05.2015
comment
В качестве примечания AT+CMGF=1 влияет только на SMS, но не на USSD.   -  person Matt Aldridge    schedule 04.05.2015
comment
и теперь он показывает 15 после запятой в ответе. И я могу поспорить, что раньше он показывал 1 после запятой.   -  person Syed Aqeel Ashiq    schedule 04.05.2015


Ответы (2)


Похоже на проблему декодирования модема. Должно быть исправлено путем использования стандартного кодирования IRA большинства модемов.

Попробуйте использовать:

AT+CSCS="ИРА"

А затем попробуйте ввести USSD-команду, чтобы снова получить ответ.

В качестве примечания вы можете вывести доступные возможности кодирования вашего модема через:

AT+CSCS=?

USSD кодируются как 7-битный GSM или UC2. Для декодирования с использованием 7-битного см. 3GPP ETSI 03.38. Для декодирования UC2 это в основном UTF-16, поэтому 2 байта определяют символ.

Попытка с 7-битным:

C4    1 1000100     100 0100     D
72    01 110010     110 0101     e
58    010 11000     110 0001     a
E1    1110 0001     000 1010     <LF>
AD    10101 101     101 1110     ü
7E    011111 10     101 0101     U
7F    0111111 1     101 1111     §
47    0 1000111     011 1111     ?
7B    01 111011     100 0111     G

Dea<LF>üU§?G

Начинается хорошо с 7-битным, но после 3 символов это просто мусор.

Попытка с UC2 просто производит мусор.

Вывод: Возможно конкретная проблема с используемым модемом (все же было бы полезно узнать модель какого он производителя). Или как вы подключены к модему (учитывая, что строка USSD не является допустимой шестнадцатеричной строкой, поскольку она имеет неравную длину).

person Matt Aldridge    schedule 04.05.2015
comment
Тот же ответ даже после установки. - person Syed Aqeel Ashiq; 04.05.2015
comment
Можете ли вы выполнить команду AT+CSCS=? командуй и покажи мне, что ты получишь взамен? Также было бы полезно иметь производителя и модель вашего модема - person Matt Aldridge; 04.05.2015
comment
Эй, сэр, я добавил необходимые команды. Пожалуйста, посмотрите на мой вопрос еще раз. - person Syed Aqeel Ashiq; 04.05.2015
comment
Можете ли вы сказать, какова кодировка выходной строки? Чтобы я мог обработать выходную строку в своем коде, чтобы преобразовать ее в читаемый формат - person Syed Aqeel Ashiq; 04.05.2015
comment
Выходная строка в ее текущей форме не является допустимой. Это, очевидно, шестнадцатеричная строка, но длиной 117 символов. Так что это неравномерно, и поэтому либо у вас были проблемы с копированием и вставкой, либо проблемы с чтением вывода самого модема. - person Matt Aldridge; 04.05.2015
comment
Я проверил, в строке ответа нет проблем с копированием и вставкой - person Syed Aqeel Ashiq; 05.05.2015
comment
Сэр, как преобразовать его в читаемый вид? Это может дать некоторые подсказки в реальной проблеме. - person Syed Aqeel Ashiq; 05.05.2015
comment
Здравствуйте, сэр, я добавил в свой вопрос заголовок об оборудовании. Пожалуйста, взгляните еще раз. - person Syed Aqeel Ashiq; 06.05.2015
comment
Хорошо, это немного помогает. Можете ли вы попробовать установить кодировку в HEX и снова отправить команду USSD и вставить в комментарий или вопрос. - person Matt Aldridge; 06.05.2015
comment
Здравствуйте, сэр, спасибо за помощь в этом. Пожалуйста, помогите мне в другом связанном вопросе: stackoverflow.com/questions/30125721/ - person Syed Aqeel Ashiq; 08.05.2015
comment
Выяснил весьма вероятную причину барахла после 3-го байта: неточно определяется скорость передачи. При использовании автопереключения он не просто выбирает одну из стандартных скоростей передачи данных. Это может быть что угодно. У меня было подобное повреждение примерно после 40 символов, и оно становилось все хуже. После того, как я выпустил AT+IPR=9600, повреждение исчезло, и сообщение стало ясным. - person Mark Jeronimus; 24.10.2018

Тема немного устарела, но, возможно, это поможет людям, которые приходят сюда!

Формат, по-видимому, шестнадцатеричный UC2, 16-битный символ номинала! поэтому вы должны преобразовать его обратно в читаемую строку! Если вы умеете программировать, это простая задача! создайте свою функцию, которая делает это! взять каждый 4символ! поместите их в $hex ==› преобразуйте их в символ! пример на пхп! вы делаете это с помощью двух функций chr(hexdec($hex)) вот так! НУ БЕЗ ПРОГРАММИСТОВ! взгляните на эту страницу онлайн-конвертер

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

ну теперь для программистов! есть функция, которую я создал в php! я работал над чем-то! с помощью AT-команд! и вот я создал свою собственную функцию! может быть, это поможет вам!

вот файл! не мог опубликовать это как код прямо здесь! какой-то не простой (идентификация!) =› это doc-файл на моем гугл-диске

надеюсь полезно!!!

person Mohamed Allal    schedule 06.03.2017