Как написать ussd-команду AT+CUSD для поддержки максимального количества телефонов

Я столкнулся с проблемой, связанной с командой AT+CUSD. На некоторых модемах Gsm эта команда ожидает три параметра, а на других — только два параметра. Причем разные значения этих параметров.

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

Например: На Nokia c6-01 команда cusd успешно выполняется только таким образом:

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

В то время как на Sony Ericsson K750:

AT+CUSD=1,"*123#"

Выдает ошибку, если я даю третий параметр.


person Syed Aqeel Ashiq    schedule 08.05.2015    source источник


Ответы (1)


Команда определена в 27.007, а синтаксис приведен в виде

+CUSD=[<n>[,<str>[,<dcs>]]]

поэтому на самом деле все параметры являются необязательными, и можно вызывать команду с 0, 1, 2 или 3 аргументами.

Что касается значения <dsc>, его заданное значение по умолчанию 0 соответствует 7-битному алфавиту GSM по умолчанию с немецким языком, а значение 15 соответствует 7-битному алфавиту GSM по умолчанию без какого-либо конкретного языка в соответствии с 23.038, насколько я могу судить. Это также говорит

Внедрение стандартного 7-битного алфавита GSM является обязательным. Поддержка других наборов символов не является обязательной.

поэтому, если устройство Nokia выдает ошибку с AT+CUSD=1,"*123#", я бы интерпретировал это как отсутствие поддержки немецкого языка и, следовательно, сбой. Что касается телефона Sony Ericsson, я не могу сказать, почему он дает сбой, если он дает сбой с аргументом <dcs> любого значения (конечно, будет несколько значений, для которых он не сработает, но он должен поддерживать 15). Попробуйте перебрать языки и посмотреть, получится ли что-нибудь (например, поддерживается ли английский язык?).

Вы можете попытаться указать бит GSM 7 альтернативными способами, например. 32 (или, возможно, изучив Any reserved codings shall be assumed to be the GSM 7 bit default alphabet (the same as codepoint 00001111) by a receiving entity., хотя это может работать не на всех телефонах).

Поскольку вы в любом случае проверяете окончательные коды результатов для любой AT-команды, которую вы отправляете (правильно?), реализовать резервный алгоритм не так уж сложно:

  1. сначала попробуйте вызвать с dcs = 15
  2. если это не удается, вызовите с dcs = 32
  3. наконец, если все вышеперечисленное не помогло, попробуйте без dcs.

Это должен быть самый переносимый способ вызова AT+CUSD на большом количестве телефонов.


Кстати, обратите внимание, что значение 0 для <n> подчеркнуто в спецификации 27.007. Это немного тонко, но это означает, что это значение по умолчанию, не говоря об этом явно (как, например, для <dsc>). Таким образом, AT+CUSD= совпадает с AT+CUSD=0 (и на самом деле вы даже можете вызывать AT+CUSD=,"*123#" как то же самое, что и AT+CUSD=0,"*123#", хотя вы можете столкнуться с телефонами, которые не могут правильно это разобрать. Все телефоны/модемы, выпущенные Sony Ericson ранее, и почти все выпущенные позже, и все телефоны на базе платформ от ST-Ericsson будут анализировать это правильно).


Если вы хотите автоматизировать тестирование, вы можете сделать это с помощью моей программы atinout, например:

echo ATE1 | atinout - /dev/ttyACM0 -
for i in $(seq 0 15) 32; \
do \
        echo AT+CUSD=1,"xxxx",$i; \
done | atinout - /dev/ttyACM0 -

если ваше модемное устройство /dev/ttyASM0.


Обновление: выбранный вами набор символов для строк вполне может быть проблемой здесь, как описано в этом ответе. Попробуйте запустить AT+CSCS="GSM" и посмотрите, поможет ли это.

person hlovdal    schedule 09.05.2015
comment
Настройка Char установлена ​​на GSM, ответ будет на английском языке? - person Syed Aqeel Ashiq; 11.05.2015
comment
Изменение кодировки символов не изменит содержимое, а только его представление. Пожалуйста, проверьте это и сообщите нам, каковы были результаты. - person hlovdal; 11.05.2015
comment
Проблема решена после установки AT+CSCS=GSM. Теперь телефон Sony Ericson принимает и третий параметр. Но я все еще получаю ответ в формате, удобочитаемом для человека. Это намеренное поведение? Я подумал, что если я установлю для CSCS значение GSM, то получу ответ в каком-то неудобочитаемом формате. - person Syed Aqeel Ashiq; 14.05.2015
comment
Нет, он должен быть читаемым. Набор символов GSM представляет собой 7-битную текстовую кодировку, аналогичную ASCII, но отличающуюся от нее. Вы можете увидеть всю таблицу в главе 6.2.1 GSM 7-битный алфавит по умолчанию в 23.038. - person hlovdal; 15.05.2015
comment
Спасибо, отлично заработало на устройстве Sony Ericsson после настройки CSCS на GSM. - person Syed Aqeel Ashiq; 15.05.2015