Closed eternal-echo closed 1 year ago
在core_at_hal_process
函数中,将串口接收到的入参数据复制到缓冲区&at_handle.rsp_buf[at_handle.rsp_buf_offset]
中,然后判断是否为urc数据。如果属于响应数据,首先查询是否为一行,是的话就调用core_at_process_line(at_handle.rsp_buf, line_len);
进行处理。
core_at_process_line
中会把这一行数据写入ringbuffercore_ringbuf_write(&at_handle.rsp_rb, (uint8_t *)line, len);
static int32_t core_at_commands_send_sync(const core_at_cmd_item_t *cmd_list, uint16_t cmd_num)
{
uint16_t i = 0;
int32_t res = STATE_SUCCESS;
uint16_t retry_cnt = AIOT_AT_CMD_RETRY_TIME;
if (NULL == cmd_list || 0 == cmd_num) {
return STATE_USER_INPUT_NULL_POINTER;
}
os_api->mutex_lock(at_handle.cmd_mutex);
core_ringbuf_reset(&at_handle.rsp_rb);
for (; i < cmd_num; i++) {
/* 发送AT命令 */
/*
core_log_hexdump(-1, 1, (unsigned char *)cmd_list[i].cmd, cmd_list[i].cmd_len);
*/
at_handle.cmd_content = &cmd_list[i];
res = core_at_uart_tx((uint8_t *)cmd_list[i].cmd, cmd_list[i].cmd_len, at_handle.tx_timeout);
if (res != cmd_list[i].cmd_len) {
res = STATE_AT_UART_TX_FAILED;
break;
}
res = core_at_wait_resp(at_handle.cmd_content);
if (res < 0) {
if (--retry_cnt > 0) {
i--;
continue;
} else {
break;
}
}
retry_cnt = AIOT_AT_CMD_RETRY_TIME;
at_handle.cmd_content = NULL;
res = STATE_SUCCESS;
}
os_api->mutex_unlock(at_handle.cmd_mutex);
return res;
}
首先reset ringbuffer,然后开始尝试多次发送AT指令。在core_at_wait_resp
函数中,需要获取当前ringbuffer可用空间,若可用空间为0,则说明用户没有调用aiot_at_hal_recv_handle
接口传输数据到ringbuffer中。那么会选择休眠AIOT_AT_RINGBUF_RETRY_INTERVAL
ms,跳过本次循环,进行第二次尝试。
日志
问题
AT+QIOPEN=0,1,"TCP","hcixxJENrUz.iot-as-mqtt.cn-shanghai.aliyuncs.com",443,0,1
连接云平台指令的OK未被解析