如何检查AT命令是否成功执行或失败

时间:2015-06-24 08:26:22

标签: gsm at-command

如果AT命令成功执行或失败,如何以编程方式进行检查。

我已经进行了以下检查:

boolean success = response.endsWith("OK");
boolean failed = response.endsWith("ERROR");

我只是想确定这个检查是否可以普遍放置,或者至少是AT + CUSD命令。我不能放置包含检查,因为ussd响应本身可以包含'ok'或'error'字符串。

1 个答案:

答案 0 :(得分:1)

代表你做出优秀的一步,调查如何正确地做事,而不是仅仅停下来“好吧,这似乎是通过反复试验”。

是的,OKERROR是通用的,但ERROR可能会替换为其他内容,并且还存在其他响应。 V.250规范定义了大部分最终结果代码,另外27.007定义了+CME ERROR:27.005定义了+CMS ERROR:

您可以查看atinout的代码,了解合并is_final_result函数的示例,尽管ST-Ericsson的{isFinalResponseErrorisFinalResponseSuccess函数分为两个CONNECT\r\n 3}}似乎更接近你的用法。但请注意,AT+CMGS不是最终结果代码,它是中间结果代码,因此名称isFinalResponseSuccess不是100%正确,您很可能不想包含它。

关于包含与结束之间没有关系;最终的结果代码总是单独出现 1 ,所以你应该经常检查。换句话说,您应始终只读取和缓冲来自调制解调器的响应数据,直到您收到终止Write(port, "AT+SOMECMD\r"); do { input = ReadLine(port, responseTimeout); } while (!isFinalResultCode(input)); 字节对,然后首先开始解析该接收到的行(绝对唯一的例外是在等待4字节响应时在发送有效载荷之前从S3开始。

所以你的结构应该看起来像

S4

如果要在最终结果代码出现之前使用任何中间信息文本响应,则需要稍微更改循环(例如,在继续处理中间响应之前先检查最终结果代码)。

1 如果行结束配置没有搞砸,例如您应该始终让\r\n成为ATV1r.status以及使用200