12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #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)
- {
- 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;
- }
|