QByteArray WorkThread::removeResponseCmd(QByteArray resp, QString cmd) { int index = 0; if ((index=resp.indexOf(cmd.simplified())!=-1)) { resp = resp.split('\n')[1]; } return resp; }
时间: 2024-04-02 19:34:26 浏览: 20
这是一个在Qt框架下实现的函数,作用是从响应信息中移除指定的命令。函数接收两个参数:resp表示待处理的响应信息,cmd表示需要移除的命令字符串。
具体实现如下:
1. 首先定义一个整型变量index,用于记录命令字符串在响应信息中的位置。
2. 使用indexOf函数查找命令字符串在响应信息中的位置,如果找到了,则将该位置赋值给index。
3. 判断index是否为-1,若不为-1,则表示找到了命令字符串,需要将其从响应信息中移除。
4. 使用split函数将响应信息按照换行符切分成多行字符串,然后取第二行字符串作为新的响应信息,即移除了命令字符串。
5. 返回新的响应信息。
需要注意的是,该函数中使用了QString的simplified函数,该函数的作用是将字符串中的空白字符去除,例如空格、制表符、回车符等。这是为了防止命令字符串中含有空白字符而导致无法正确匹配的问题。
相关问题
void WorkThread::checkImei() { QString title = "Imei检测:";//必须要有‘:’ emit report_item(title); QByteArray cmd = "at+cgsn\r\n"; for (int i = 0; i < 3; i++) { QThread::msleep(500); serialPort->readAll(); sendSerialData(cmd); QByteArray resp = removeResponseCmd(getAtCmdResponse(),cmd.simplified()).trimmed(); resp = resp.split('\n')[0].simplified(); report_type(IMEI_TYPE,QString(resp)); if ((inputImei.indexOf(QString(resp))!=-1) && resp.length()==IMEI_LEN) { report_result(RESULT_OK); return; } } report_result(RESULT_FAIL); }仿照此写一个wifi的检测
void WorkThread::checkWifi() {
QString title = "Wifi检测:"; //必须要有‘:’
emit report_item(title);
QByteArray cmd = "AT+CWJAP?\r\n";
for (int i = 0; i < 3; i++) {
QThread::msleep(500);
serialPort->readAll();
sendSerialData(cmd);
QByteArray resp = removeResponseCmd(getAtCmdResponse(),cmd.simplified()).trimmed();
resp = resp.split('\n')[0].simplified();
report_type(WIFI_TYPE, QString(resp));
if (resp.contains("OK")) {
report_result(RESULT_OK);
return;
}
}
report_result(RESULT_FAIL);
}
bool WorkThread::checkAt() { QByteArray cmd = "at\r\n"; serialPort->readAll(); sendSerialData(cmd); QByteArray resp = removeResponseCmd(getAtCmdResponse(),cmd.simplified()).trimmed(); QByteArray ver; if (resp.indexOf(RESULT_OK) != -1) { return true; } else { return false; } }
这段代码实现了一个函数checkAt,作用是向串口发送AT指令,并检查返回结果是否为OK。具体实现步骤如下:
1. 定义一个QByteArray类型的变量cmd,赋值为"at\r\n",表示要发送的AT指令。
2. 调用serialPort的readAll函数,清空串口的缓冲区。
3. 调用sendSerialData函数,向串口发送AT指令。
4. 调用getAtCmdResponse函数,获取串口返回的数据,并存储在QByteArray类型的变量resp中。
5. 调用removeResponseCmd函数,去除resp中的指令响应信息,并将结果保存在QByteArray类型的变量resp中。
6. 使用trimmed函数去除resp中的空格,将结果保存在QByteArray类型的变量ver中。
7. 如果ver中包含RESULT_OK(一般为"OK")字符串,则返回true,表示AT指令执行成功。否则返回false,表示AT指令执行失败。
在这段代码中,还需要对sendSerialData、getAtCmdResponse、removeResponseCmd等函数进行进一步的了解,才能更好地理解checkAt函数的实现。