#include "user_task.h"
#include "nuc.h"

extern Chassis_t chassis; //没用消息队列，以后有闲情雅致再说

#ifdef DEBUG
NUC_t nuc_raw;
CMD_NUC_t cmd_fromnuc;
CMD_t cmd_nuc;
#else 
static NUC_t nuc_raw;
static CMD_NUC_t cmd_fromnuc;
static CMD_t cmd_nuc;
#endif

int a = 0;
int d = 0;

void Task_nuc(void *argument){
 (void)argument; /**/

//	 osDelay(TASK_INIT_DELAY_NUC); 
	
  const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_NUC;

   NUC_Init(&nuc_raw);

   uint32_t tick = osKernelGetTickCount();

   while (1) 
		 {	 
#ifdef DEBUG
    task_runtime.stack_water_mark.nuc= osThreadGetStackSpace(osThreadGetId());
#endif
		osMessageQueueGet(task_runtime.msgq.cmd.nuc,&cmd_nuc, NULL, 0); 		

		 //发送数据	 
		 NUC_Send_control(&cmd_fromnuc,&cmd_nuc,&chassis);
		 d++;
      //接收nuc数据
			NUC_StartReceiving();
			  if (NUC_WaitDmaCplt()){
         NUC_RawParse(&cmd_fromnuc);
      }
      else{
        NUC_HandleOffline(&cmd_fromnuc);
				a++;
      }
     osMessageQueueReset(task_runtime.msgq.cmd.raw.nuc);
     osMessageQueuePut(task_runtime.msgq.cmd.raw.nuc,&(cmd_fromnuc),0,0);
			
     
		 tick += delay_tick; /* 计算下一个唤醒时刻*/
		 osDelayUntil(tick);			
		 }		 
}
