如何编写AT + CUSD ussd命令来支持最大的手机

时间:2015-05-08 13:59:28

标签: at-command ussd

我面临与AT+CUSD命令相关的问题。在某些Gsm调制解调器上,此命令需要三个参数,而在其他调制解调器上,它只需要两个参数。而且,这些参数的值不同。

我想知道,如何配置Gsm调制解调器,以便在大多数Gsm调制解调器上以统一的方式执行此命令

例如:在诺基亚c6-01 上,仅以这种方式成功执行cusd命令:

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

索尼爱立信K750:

AT+CUSD=1,"*123#"

如果我给出第三个参数,则会出错。

1 个答案:

答案 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命令的最终结果代码(你是,对吗?),实现回退算法并不需要额外的工作:

  1. 首先尝试使用dcs = 15
  2. 进行调用
  3. 如果失败,则使用dcs = 32
  4. 调用
  5. 最后如果以上所有内容都失败了,请尝试不使用dcs。
  6. 这应该是在大量手机上调用AT+CUSD的最便携方式。

    顺便提一下,注意0的{​​{1}}值在27.007规范中有下划线。它有点微妙,但这意味着它是一个默认值,没有明确说明(例如像<n>那样)。因此<dsc>AT+CUSD=相同(实际上您甚至可以调用AT+CUSD=0AT+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 - 并查看是否有帮助。