如何检查AT指令执行成功还是失败
How to check if an AT command executed successfully or failed
如果 AT 命令执行成功或失败,我如何以编程方式进行检查。
我已进行以下检查:
boolean success = response.endsWith("OK");
boolean failed = response.endsWith("ERROR");
我只是想确定这个检查是否可以通用,或者至少在 AT+CUSD 命令上。我无法放置包含检查,因为 ussd 响应本身可以包含 'ok' 或 'error' 字符串。
代表您调查如何正确做事而不是仅仅停留在 "well, this seems to work by trial and error" 上的出色步骤。
是的,OK
和 ERROR
是通用的,但 ERROR
可能会被其他东西替代,并且也存在其他响应。 V.250 specification defines most of the Final Result Codes but additionally 27.007 defines +CME ERROR:
and 27.005 定义 +CMS ERROR:
.
你可以看一下代码atinout for an example for a combined is_final_result
function, although the two split isFinalResponseError
and isFinalResponseSuccess
functions in ST-Ericsson's U300 RIL 似乎更接近你的用法。但请注意,CONNECT
不是最终结果代码,它是中间结果代码,因此名称 isFinalResponseSuccess 并非 100% 正确,您很可能不想包含它。
关于 contains 和 endsWith 没关系;最终结果代码总是单独出现在一行中 1,因此您应该始终检查它。换句话说,您应该始终只读取和缓冲来自调制解调器的响应数据,直到您收到终止的 \r\n
字节对,然后首先开始解析接收到的行(绝对唯一的例外是等待 4 字节响应时从 AT+CMGS
发送有效载荷之前)。
所以你的结构应该类似于
Write(port, "AT+SOMECMD\r");
do {
input = ReadLine(port, responseTimeout);
} while (!isFinalResultCode(input));
如果您想在最终结果代码出现之前使用任何中间信息文本响应,您需要稍微更改循环(例如,在继续处理中间响应之前先检查最终结果代码)。
1前提是行尾配置没有搞乱,例如你应该总是让 S3
和 S4
成为 \r
和 \n
以及使用 ATV1
.
如果 AT 命令执行成功或失败,我如何以编程方式进行检查。
我已进行以下检查:
boolean success = response.endsWith("OK");
boolean failed = response.endsWith("ERROR");
我只是想确定这个检查是否可以通用,或者至少在 AT+CUSD 命令上。我无法放置包含检查,因为 ussd 响应本身可以包含 'ok' 或 'error' 字符串。
代表您调查如何正确做事而不是仅仅停留在 "well, this seems to work by trial and error" 上的出色步骤。
是的,OK
和 ERROR
是通用的,但 ERROR
可能会被其他东西替代,并且也存在其他响应。 V.250 specification defines most of the Final Result Codes but additionally 27.007 defines +CME ERROR:
and 27.005 定义 +CMS ERROR:
.
你可以看一下代码atinout for an example for a combined is_final_result
function, although the two split isFinalResponseError
and isFinalResponseSuccess
functions in ST-Ericsson's U300 RIL 似乎更接近你的用法。但请注意,CONNECT
不是最终结果代码,它是中间结果代码,因此名称 isFinalResponseSuccess 并非 100% 正确,您很可能不想包含它。
关于 contains 和 endsWith 没关系;最终结果代码总是单独出现在一行中 1,因此您应该始终检查它。换句话说,您应该始终只读取和缓冲来自调制解调器的响应数据,直到您收到终止的 \r\n
字节对,然后首先开始解析接收到的行(绝对唯一的例外是等待 4 字节响应时从 AT+CMGS
发送有效载荷之前)。
所以你的结构应该类似于
Write(port, "AT+SOMECMD\r");
do {
input = ReadLine(port, responseTimeout);
} while (!isFinalResultCode(input));
如果您想在最终结果代码出现之前使用任何中间信息文本响应,您需要稍微更改循环(例如,在继续处理中间响应之前先检查最终结果代码)。
1前提是行尾配置没有搞乱,例如你应该总是让 S3
和 S4
成为 \r
和 \n
以及使用 ATV1
.