如果AT命令成功执行或失败,如何以编程方式进行检查。
我已经进行了以下检查:
boolean success = response.endsWith("OK");
boolean failed = response.endsWith("ERROR");
我只是想确定这个检查是否可以普遍放置,或者至少是AT + CUSD命令。我不能放置包含检查,因为ussd响应本身可以包含'ok'或'error'字符串。
答案 0 :(得分:1)
代表你做出优秀的一步,调查如何正确地做事,而不是仅仅停下来“好吧,这似乎是通过反复试验”。
是的,OK
和ERROR
是通用的,但ERROR
可能会替换为其他内容,并且还存在其他响应。 V.250规范定义了大部分最终结果代码,另外27.007定义了+CME ERROR:
,27.005定义了+CMS ERROR:
。
您可以查看atinout的代码,了解合并is_final_result
函数的示例,尽管ST-Ericsson的{isFinalResponseError
和isFinalResponseSuccess
函数分为两个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
成为ATV1
和r.status
以及使用200
。