Команда определена в 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-команды, которую вы отправляете (правильно?), реализовать резервный алгоритм не так уж сложно:
- сначала попробуйте вызвать с dcs = 15
- если это не удается, вызовите с dcs = 32
- наконец, если все вышеперечисленное не помогло, попробуйте без 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