#include "usart.h" #include "string.h" #include "ring_buffer.h" #include "mqttRecv.h" #include "main.h" #include "parseDeviceMessage.h" /* * 函数名:Receive_MQTT_DataPack(void) * 输入参数:无 * 输出参数:无 * 返回值:无 * 函数作用:当接收到mqtt订阅的信息时,将其写入保存到环形缓冲区 */ void Receive_MQTT_DataPack(void) { if (strstr((const char *)UART0_RX_BUF, "QMTRECV") != NULL) { if(strstr((const char *)UART0_RX_BUF,"reboot")) { NVIC_SystemReset();//收到了重启标志进行重启 } UART0_RX_MQTT_SUB_STAT = 1; // MQTT信息标志位 int i = 0; while (UART0_RX_BUF[i] != '{') { i++; // 移位到json信息开始处 } for (; i < strlen(UART0_RX_BUF); i++) { ring_buffer_write(UART0_RX_BUF[i], &mqttRecv); if (UART0_RX_BUF[i] == '}') { break; } } Clear_DMA_Buffer(); } else if(strstr((const char *)UART0_RX_BUF, "QMTSTAT:")!=NULL)//为MQTT链路产生变化 { NVIC_SystemReset();//暂时不做区分 } } /* * 函数名:bool MQTT_BUFFER_READ(uint8_t* json) * 输入参数:json --> 指向目标缓冲区 * 输出参数:无 * 返回值:true成功找到了json信息 false未找到json信息 * 函数作用:从环形缓冲区中读出json信息 */ bool MQTT_BUFFER_READ(uint8_t *json) { static uint8_t json_len = 0; static uint8_t json_buf[128]; uint8_t recv_data; bool found_json_end = false; bool json_start = false; while (ring_buffer_read(&recv_data, &mqttRecv) != -1) { if (recv_data == '{') { json_start = true; json_len = 0; } // 如果当前在JSON范围内 if (json_start) { json_buf[json_len++] = recv_data; // 如果找到了JSON的结束符号 if (recv_data == '}') { found_json_end = true; // 处理JSON数据 json_buf[json_len] = '\0'; // 添加字符串结束符 strcpy(json, (char *)json_buf); // 将JSON数据拷贝到输出缓冲区中 // 清空JSON缓冲区 memset(json_buf, 0, sizeof(json_buf)); json_len = 0; json_start = false; } } if (found_json_end) { break; } } return found_json_end; }