#include "led_task.h" #include "key.h" #include #include "led.h" #include "modbus.h" #include "limits.h" #include "MB_RTU_deal_task.h" #include "All_define.h" #define KEY4_5_blink_TASK_PRIO 10 #define KEY4_5_blink_STK_SIZE 128 TaskHandle_t KEY4_5_blink_Handler; #define Change_baud_TASK_PRIO 10 #define Change_baud_STK_SIZE 128 TaskHandle_t Change_baud_Handler; u8 key_enable_flag[8] = {0}; static u8 Lock_flag = 0; void KEY4_5_blink_task(void *pvParameters) { Lock_flag = 1; Press_Key_Set(3); while(!Get_key_value(4)) { vTaskDelay(20); } Lock_flag = 0; vTaskDelete(KEY4_5_blink_Handler); } static u8 Change_baud_flag = 0; void Change_baud_task(void *pvParameters) { Change_baud_flag = 1; vTaskDelay(1000); BSP_modbus(dis_page_param.face_plate_param.Device_BaudRate); Change_baud_flag = 0; vTaskDelete(KEY4_5_blink_Handler); } void led_task(void *pvParameters) { uint32_t NotifyValue; BaseType_t err; TickType_t tstart = xTaskGetTickCount(); u8 lcd_value = 0; u16 XM_time = 0; u16 X_time = 0; u8 Write_flag = 0; u8 Write_flag_time = 0; uint32_t Updeate_cnt = 0; while(1) { led_struct.lcd_pwm_value = (u8)(dis_page_param.face_plate_param.Env_Light); led_struct.led_pwm_value = (u8)(dis_page_param.face_plate_param.Led_Brightness &0x000f); if( (dis_page_param.face_plate_param.Led_Brightness & 0xFF00) != 0) { led_struct.led_low_off_flag = 1; } else { led_struct.led_low_off_flag = 0; } if(!dis_page_param.face_plate_param.Sleep_time_addr) { XM_time = 1500; } else if(dis_page_param.face_plate_param.Sleep_time_addr==15) { XM_time = 0; X_time = 0; } else { XM_time = dis_page_param.face_plate_param.Sleep_time_addr*3000; } err=xTaskNotifyWait((uint32_t )0x00, (uint32_t )ULONG_MAX, (uint32_t* )&NotifyValue, (TickType_t )10); if(err==pdPASS) { if((NotifyValue&KEY4_5_blink)!=0) { if(Lock_flag == 0) { taskENTER_CRITICAL(); xTaskCreate((TaskFunction_t )KEY4_5_blink_task, (const char* )"KEY4_5_blink_task", (uint16_t )KEY4_5_blink_STK_SIZE, (void* )NULL, (UBaseType_t )KEY4_5_blink_TASK_PRIO, (TaskHandle_t* )&KEY4_5_blink_Handler); taskEXIT_CRITICAL(); } } if((NotifyValue&Change_baud)!=0) { if(Change_baud_flag == 0) { taskENTER_CRITICAL(); xTaskCreate((TaskFunction_t )Change_baud_task, (const char* )"Change_baud_task", (uint16_t )Change_baud_STK_SIZE, (void* )NULL, (UBaseType_t )Change_baud_TASK_PRIO, (TaskHandle_t* )&Change_baud_Handler); taskEXIT_CRITICAL(); } } if((NotifyValue&Need_Write)!=0) { Write_flag = 1; } if((NotifyValue&Wake_up)!=0) { X_time = 0; } } if(Write_flag == 1) { printf("Write_flag_time %d \r\n",Write_flag_time); if(Write_flag_time++>=5) { MemData_check(); MemData_write(); Write_flag = 0; Write_flag_time = 0; } } if(XM_time != 0) { if(X_time < XM_time+1) { X_time ++; } } for(u8 i = 0;i < 8;i++) { if( !key_enable_flag[i]) { if(!Get_key_value(i)) { X_time = 0; Press_Key_Set(i); } else { if(X_time > XM_time) { Set_led_lum(0); } else if(i == 3 && (Lock_flag != 0)) { continue; } else if(i == 1 &&dis_page_param.face_plate_param.Air_condition_switch == 1) { Press_Key_Set(i); } else if(i == 2 &&dis_page_param.face_plate_param.Floor_heating_switch == 1) { Press_Key_Set(i); } else if(i == 6 &&dis_page_param.face_plate_param.Fresh_air_switch == 1) { Press_Key_Set(i); } else { Press_Key_up_Set(i); } } } } if(lcd_value != led_struct.lcd_pwm_value) { lcd_value = led_struct.lcd_pwm_value; Set_LCD_lum(lcd_value); } Updeate_cnt++; uint8_t TempHumi_UpdateMode = (uint8_t )( (dis_page_param.face_plate_param.TempHumi_UpdateMode >> 8) &0xff); uint16_t update_time = (dis_page_param.face_plate_param.TempHumi_UpdateMode &0x00ff) * 10 *50; if(Updeate_cnt >= update_time) { Updeate_cnt = 0; if(TempHumi_UpdateMode == 0x01) { Real_Temp_data_Send(); } else if(TempHumi_UpdateMode == 0x02) { Real_humi_data_Send(); } else if(TempHumi_UpdateMode == 0x03) { Real_Temp_data_Send(); Real_humi_data_Send(); } } vTaskDelayUntil(&tstart,20); } }