我面临与AT+CUSD
命令相关的问题。在某些Gsm调制解调器上,此命令需要三个参数,而在其他调制解调器上,它只需要两个参数。而且,这些参数的值不同。
我想知道,如何配置Gsm调制解调器,以便在大多数Gsm调制解调器上以统一的方式执行此命令。
例如:在诺基亚c6-01 上,仅以这种方式成功执行cusd命令:
AT+CUSD=1,"*123#",15
索尼爱立信K750:
AT+CUSD=1,"*123#"
如果我给出第三个参数,则会出错。
答案 0 :(得分:4)
该命令在27.007中定义,语法以
给出+CUSD=[<n>[,<str>[,<dcs>]]]
所以实际上所有参数都是可选的,调用0,1,2或3个参数的命令是有效的。
关于<dsc>
值,其指定的默认值0映射到德语的GSM 7位默认字母,值15是GSM 7位默认字母,根据23.038没有任何特定语言我可以告诉你。它还说
强制执行GSM 7位默认字母表。支持其他字符集是可选的。
因此,如果诺基亚设备出错AT+CUSD=1,"*123#"
,我会解释为因为它没有任何德语支持因此失败。至于索尼爱立信手机我不能说如果失败给出任何值的<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命令的最终结果代码(你是,对吗?),实现回退算法并不需要额外的工作:
这应该是在大量手机上调用AT+CUSD
的最便携方式。
顺便提一下,注意0
的{{1}}值在27.007规范中有下划线。它有点微妙,但这意味着它是一个默认值,没有明确说明(例如像<n>
那样)。因此<dsc>
与AT+CUSD=
相同(实际上您甚至可以调用AT+CUSD=0
与AT+CUSD=,"*123#"
相同,但您可能会遇到无法正确解析此问题的手机。索尼爱立信早期生产的手机/调制解调器,几乎所有产品都是后来制作的,所有基于ST-Ericsson平台的手机都会正确解析这个问题。
如果您想自动化测试,可以使用我的 atinout计划,例如:
AT+CUSD=0,"*123#"
如果你的调制解调器设备是/ dev / ttyASM0。
更新:您选择的字符串字符集很可能就像this answer中所描述的那样。尝试运行echo ATE1 | atinout - /dev/ttyACM0 -
for i in $(seq 0 15) 32; \
do \
echo AT+CUSD=1,"xxxx",$i; \
done | atinout - /dev/ttyACM0 -
并查看是否有帮助。