#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();
    }
}
/*
 *  函数名：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;
}
