如何在Java中将AT命令的输出转换为字符串?

我正在尝试读取AT命令的结果(执行该命令以从控制台对GSM调制解调器执行各种操作)。我已经看到并使用Java

OuputStream类成功进行了测试,以将AT命令的结果作为输出流获取,但是我要做的不是将结果作为输出流获取,而是获取到类中的变量(目前为String)中。

如果有可能喜欢

outStream.write(("Some At command").getBytes());

效果很好,怎么可能做这样的事情

Strign resultOfCommmand=.....result of some AT command;

我正在以这种方式尝试

 InputStream is = new ByteArrayInputStream(("some at commamd").getBytes());

String result = getStringFromInputStream(is);

System.out.println("66666666666666666666-----"+result);

/////////////////////

private static String getStringFromInputStream(InputStream is) {

BufferedReader br = null;

StringBuilder sb = new StringBuilder();

String line;

try {

br = new BufferedReader(new InputStreamReader(is));

while ((line = br.readLine()) != null) {

sb.append(line);

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (br != null) {

try {

br.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return sb.toString();

}

但是为了获得结果,我想要像这样的字符串来获取at命令本身..输出:

66666666666666666666-----AT+CMGR=20

回答:

您必须重组程序中的流,以便从发送AT命令行开始,然后回读

从调制解调器返回的每个响应行,直到获得最终结果代码。有关总体概述,请参见此答案。

首先,要全面了解AT命令,请阅读V.250规范。这将使您成为AT指令专家将大有帮助。

然后对于实际的实现,我不知道codesys,因此以下是处理AT命令应具有的结构的伪代码:

the_modem = openPort();

...

// start sending ATE0

writePort(the_modem, "ATE0\r");

do {

line = readLinePort(the_modem);

} while (! is_final_result_code(line))

// Sending of ATE0 command finished (successfully or not)

...

closePort(the_modem);

不管你做什么,永远,永远使用delay,sleep或作为等待最后的结果代码的替代品相似。你可以看一下代码为atinout针对的一个例子is_final_result_code功能(也可以比较isFinalResponseError,并isFinalResponseSuccess在ST-Ericsson的U300 RIL,但请注意,CONNECT不是最终结果代码,它是一个中间结果码,故得名isFinalResponseSuccess是并非100%正确)。

正确地解析AT命令响应并不那么复杂,以atinout的源代码为例。

以上是 如何在Java中将AT命令的输出转换为字符串? 的全部内容, 来源链接: utcz.com/qa/416233.html

回到顶部