/* Private includes -----------------------------------------------------------*/ //includes #include "user_TasksInit.h" //sys #include "sys.h" #include "stdio.h" #include "lcd.h" #include "WDOG.h" //gui #include "lvgl.h" #include "ui_TimerPage.h" //tasks #include "user_StopEnterTask.h" #include "user_KeyTask.h" #include "user_ScrRenewTask.h" #include "user_HomePageTask.h" #include "user_SensorPageTask.h" #include "user_ChargPageTask.h" #include "user_MessageSendTask.h" #include "user_MPUCheckTask.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Timers --------------------------------------------------------------------*/ osTimerId_t IdleTimerHandle; /* Tasks ---------------------------------------------------------------------*/ //LVGL Handler task osThreadId_t LvHandlerTaskHandle; const osThreadAttr_t LvHandlerTask_attributes = { .name = "LvHandlerTask", .stack_size = 128 * 20, .priority = (osPriority_t) osPriorityLow, }; //WDOG Feed task osThreadId_t WDOGFeedTaskHandle; const osThreadAttr_t WDOGFeedTask_attributes = { .name = "WDOGFeedTask", .stack_size = 128 * 1, .priority = (osPriority_t) osPriorityHigh2, }; //Idle Enter Task osThreadId_t IdleEnterTaskHandle; const osThreadAttr_t IdleEnterTask_attributes = { .name = "IdleEnterTask", .stack_size = 128 * 1, .priority = (osPriority_t) osPriorityHigh, }; //Stop Enter Task osThreadId_t StopEnterTaskHandle; const osThreadAttr_t StopEnterTask_attributes = { .name = "StopEnterTask", .stack_size = 128 * 15, .priority = (osPriority_t) osPriorityHigh1, }; //Key task osThreadId_t KeyTaskHandle; const osThreadAttr_t KeyTask_attributes = { .name = "KeyTask", .stack_size = 128 * 1, .priority = (osPriority_t) osPriorityNormal, }; //ScrRenew task osThreadId_t ScrRenewTaskHandle; const osThreadAttr_t ScrRenewTask_attributes = { .name = "ScrRenewTask", .stack_size = 128 * 10, .priority = (osPriority_t) osPriorityLow1, }; //TimeRenew task osThreadId_t TimeRenewTaskHandle; const osThreadAttr_t TimeRenewTask_attributes = { .name = "TimeRenewTask", .stack_size = 128 * 5, .priority = (osPriority_t) osPriorityLow1, }; //HomeUpdata task osThreadId_t HomeUpdataTaskHandle; const osThreadAttr_t HomeUpdataTask_attributes = { .name = "HomeUpdataTask", .stack_size = 128 * 5, .priority = (osPriority_t) osPriorityLow1, }; //SensorDataRenew task osThreadId_t SensorDataTaskHandle; const osThreadAttr_t SensorDataTask_attributes = { .name = "SensorDataTask", .stack_size = 128 * 5, .priority = (osPriority_t) osPriorityLow1, }; //HRDataRenew task osThreadId_t HRDataTaskHandle; const osThreadAttr_t HRDataTask_attributes = { .name = "HRDataTask", .stack_size = 128 * 5, .priority = (osPriority_t) osPriorityLow1, }; //ChargPageEnterTask osThreadId_t ChargPageEnterTaskHandle; const osThreadAttr_t ChargPageEnterTask_attributes = { .name = "ChargPageEnterTask", .stack_size = 128 * 10, .priority = (osPriority_t) osPriorityLow1, }; //ChargPageRenewTask osThreadId_t ChargPageRenewTaskHandle; const osThreadAttr_t ChargPageRenewTask_attributes = { .name = "ChargPageRenewTask", .stack_size = 128 * 5, .priority = (osPriority_t) osPriorityLow1, }; //messagesendtask osThreadId_t MessageSendTaskHandle; const osThreadAttr_t MessageSendTask_attributes = { .name = "MessageSendTask", .stack_size = 128 * 5, .priority = (osPriority_t) osPriorityLow1, }; //messagesendtask osThreadId_t MPUCheckTaskHandle; const osThreadAttr_t MPUCheckTask_attributes = { .name = "MPUCheckTask", .stack_size = 128 * 3, .priority = (osPriority_t) osPriorityLow2, }; /* Message queues ------------------------------------------------------------*/ //Key message osMessageQueueId_t Key_MessageQueue; osMessageQueueId_t Idle_MessageQueue; osMessageQueueId_t Stop_MessageQueue; osMessageQueueId_t IdleBreak_MessageQueue; osMessageQueueId_t HomeUpdata_MessageQueue; /* Private function prototypes -----------------------------------------------*/ void LvHandlerTask(void *argument); void WDOGFeedTask(void *argument); /** * @brief FreeRTOS initialization * @param None * @retval None */ void User_Tasks_Init(void) { /* add mutexes, ... */ /* add semaphores, ... */ /* start timers, add new ones, ... */ IdleTimerHandle = osTimerNew(IdleTimerCallback, osTimerPeriodic, NULL, NULL); osTimerStart(IdleTimerHandle,100);//100ms /* add queues, ... */ Key_MessageQueue = osMessageQueueNew(1, 1, NULL); Idle_MessageQueue = osMessageQueueNew(1, 1, NULL); Stop_MessageQueue = osMessageQueueNew(1, 1, NULL); IdleBreak_MessageQueue = osMessageQueueNew(1, 1, NULL); HomeUpdata_MessageQueue = osMessageQueueNew(1, 1, NULL); /* add threads, ... */ LvHandlerTaskHandle = osThreadNew(LvHandlerTask, NULL, &LvHandlerTask_attributes); WDOGFeedTaskHandle = osThreadNew(WDOGFeedTask, NULL, &WDOGFeedTask_attributes); IdleEnterTaskHandle = osThreadNew(IdleEnterTask, NULL, &IdleEnterTask_attributes); StopEnterTaskHandle = osThreadNew(StopEnterTask, NULL, &StopEnterTask_attributes); KeyTaskHandle = osThreadNew(KeyTask, NULL, &KeyTask_attributes); ScrRenewTaskHandle = osThreadNew(ScrRenewTask, NULL, &ScrRenewTask_attributes); TimeRenewTaskHandle = osThreadNew(TimeRenewTask, NULL, &TimeRenewTask_attributes); HomeUpdataTaskHandle = osThreadNew(HomeUpdata_Task, NULL, &HomeUpdataTask_attributes); SensorDataTaskHandle = osThreadNew(SensorDataRenewTask, NULL, &SensorDataTask_attributes); HRDataTaskHandle = osThreadNew(HRDataRenewTask, NULL, &HRDataTask_attributes); ChargPageEnterTaskHandle = osThreadNew(ChargPageEnterTask, NULL, &ChargPageEnterTask_attributes); ChargPageRenewTaskHandle = osThreadNew(ChargPageRenewTask, NULL, &ChargPageRenewTask_attributes); MessageSendTaskHandle = osThreadNew(MessageSendTask, NULL, &MessageSendTask_attributes); MPUCheckTaskHandle = osThreadNew(MPUCheckTask, NULL, &MPUCheckTask_attributes); /* add events, ... */ /* add others ... */ uint8_t HomeUpdataStr; osMessageQueuePut(HomeUpdata_MessageQueue, &HomeUpdataStr, 0, 1); } /** * @brief FreeRTOS Tick Hook, to increase the LVGL tick * @param None * @retval None */ void TaskTickHook(void) { //to increase the LVGL tick lv_tick_inc(1); //to increase the timerpage's timer(put in here is to ensure the Real Time) if(ui_TimerPageFlag) { ui_TimerPage_ms+=1; if(ui_TimerPage_ms>=10) { ui_TimerPage_ms=0; ui_TimerPage_10ms+=1; } if(ui_TimerPage_10ms>=100) { ui_TimerPage_10ms=0; ui_TimerPage_sec+=1; uint8_t IdleBreakstr = 0; osMessageQueuePut(IdleBreak_MessageQueue, &IdleBreakstr, 0, 0); } if(ui_TimerPage_sec>=60) { ui_TimerPage_sec=0; ui_TimerPage_min+=1; } if(ui_TimerPage_min>=60) { ui_TimerPage_min=0; } } user_HR_timecount+=1; } /** * @brief LVGL Handler task, to run the lvgl * @param argument: Not used * @retval None */ void LvHandlerTask(void *argument) { uint8_t IdleBreakstr=0; while(1) { if(lv_disp_get_inactive_time(NULL)<1000) { //Idle time break, set to 0 osMessageQueuePut(IdleBreak_MessageQueue, &IdleBreakstr, 0, 0); } lv_task_handler(); osDelay(1); } } /** * @brief Watch Dog Feed task * @param argument: Not used * @retval None */ void WDOGFeedTask(void *argument) { //owdg WDOG_Port_Init(); while(1) { WDOG_Feed(); WDOG_Enable(); osDelay(100); } }