#include "nucTask.hpp"
#include "nuc.h"
#include "userTask.h"
#include "TopDefine.h" //事件组的一些东西
#include "FreeRTOS.h"
#include <cmsis_os2.h>
#include <stdio.h>
#include "bsp_buzzer.h"

#ifdef DEBUG

NUC_t cmd_fromnuc;

#endif

void Function_nuc(void *argument)
{
        (void)argument; /* 未使用argument，消除警告 */

        const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_AI;

        NUC_Init(&cmd_fromnuc);

        uint32_t tick = osKernelGetTickCount();

        while (1)
        {
#ifdef DEBUG
        task_struct.stack_water_mark.nuc = osThreadGetStackSpace(osThreadGetId());
#endif
        NUC_StartReceiving();

        // NUC_RawParse(&cmd_fromnuc);
        // NUC_SendPacket(&send, sizeof(send)); // 发送数据包
        // 掉线处理有空写
        //  if(NUC_WaitDmaCplt())
        //  {
        //      NUC_RawParse(&cmd_fromnuc);

        // }
        // else
        // {
        //     NUC_HandleOffline(&cmd_fromnuc);
        // }

        if (NUC_RawParse(&cmd_fromnuc) == DEVICE_OK)
        {
                //BSP_Buzzer_Stop();
                HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_SET);   
                HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_RESET); 
                osMessageQueueReset(task_struct.msgq.nuc);                     // 清空消息队列
                osMessageQueuePut(task_struct.msgq.nuc, &(cmd_fromnuc), 0, 0);
        }
        else
        {

                // BSP_Buzzer_Start();
                // BSP_Buzzer_Set(1, 5000);
                HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_RESET); 
                HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_SET);   
                NUC_HandleOffline(&cmd_fromnuc);
        }

        tick += delay_tick; /* 计算下一个唤醒时刄1ķ*/
        osDelayUntil(tick);
        }
}
