在GSM调制解调器上运行USSD命令(可能是错误的编码)

时间:2015-07-26 15:45:02

标签: gsm at-command modem ussd

我正在尝试使用GSM调制解调器执行USSD命令。

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

我得到的结果不可读

  

“+ CUSD:   0,“AE·ÜNÓu9XŽt¤å1:?, - u0Œtši7è,Óëizy®ƒ5ÓnÔL»Ai7½,瓦特‡EE·;Ì.ÏAòòœvÓËsÖL»”,15"

当我使用相同的SIM卡在手机上尝试相同的ussd代码时,我得到了正确的结果

  

“Forfait:909DA。Recharchege:0.0DA Min gratuites:0Min.Min   internationales restantes:0Min“

将字符集AT + CSCS从GSM更改为IRA或PCCP,PCDN,8859-1并没有改变响应它是完全相同的响应

并将AT + CSCS更改为十六进制给出了错误:

AT+CSCS="HEX"
AT+CUSD=1,"*200#",15 

OK
+CUSD: 2,"Unexpected Data Value",15
+CUSD: 2,"Unexpected Data Value",15
ERROR

并将其更改为UCS2并调用USSD使我的调制解调器重新启动

AT+CSCS="UCS2"
AT+CUSD=1,"*200#",15 

2 个答案:

答案 0 :(得分:3)

AT+CUSD命令在27.007中指定,未经请求的结果代码的格式定义为+CUSD: <m>[,<str>,<dcs>]

根据您收到的回复,您可以看到<m>0<dcs>15以及<str>的胡言乱语,顺便说一下不是简单地直接映射到AT+CSCS字符编码;有一整节专门用来解释它的表述,你必须深入研究。

查看27.007中引用的23.038标准,<dcs>值15映射到语言未指定但读取上面的文本似乎也与 GSM 7位默认字母表相同

所以是的,你对编码问题的怀疑是正确的,不幸的是标准对此并不是很直观,你必须深入研究。

为了调试这个,我首先设置AT+CSCS="HEX"并验证接收到的数据在解码时是否有意义,然后继续以可用的格式呈现它或者可能自己用软件中的十六进制显式解码(但请注意,更改AT+CSCS然后会应用于此后的所有字符串,包括<chset> AT+CSCS参数//First function function x=myfct(a, b) x=a+b endfunction //Second function function y=myfct2(a, b) y=a/b endfunction //Third function function y=myfct3(a, b, c) y = myfct(a,b) y = myfct2(y,c) disp(y) endfunction 当您想要稍后将编码更改为其他内容时...)

答案 1 :(得分:0)

AT + CMGF = 0

AT + CSCS = HEX

AT + CUSD = 1,“ * 123#”,15

获取结果并将usd pdu转换为文本

python lib: https://pypi.org/project/PDUUSSDConverter/

直接回答。祝你好运