#include "key_proc.h" #include "key.h" #include "FreeRTOS.h" #include "task.h" #include "led_task.h" #include "lcd_task.h" #include "All_define.h" #include "MB_RTU_deal_task.h" #include #include "modbus.h" #include "key_operate.h" #include "system.h" #include "led.h" #include "protocol.h" extern uint8_t AirCondition_Sheiled_Set(void); extern uint8_t FloorHeating_Sheiled_Set(void); extern uint8_t AirFresh_Sheiled_Set(void); extern void mcu_join_zigbee(void); u16 SaveData[32] = {0}; typedef enum { USER_BUTTON_1 = 0, USER_BUTTON_2 = 1, USER_BUTTON_3 = 2, USER_BUTTON_4 = 3, USER_BUTTON_5 = 4, USER_BUTTON_6 = 5, USER_BUTTON_7 = 6, USER_BUTTON_8 = 7, USER_BUTTON_MAX } user_button_t; static flex_button_t user_button[USER_BUTTON_MAX] = {0}; static uint8_t common_btn_read(void *arg) { flex_button_t *btn = (flex_button_t *)arg; return Get_key_value(btn->id); } void LCD_key_handle(Key_Operate_t key, Zigbee_cmd zigbee_cmd_control) { printf("dis_page_param.face_plate_param.Panel_Shield %d\r\n", dis_page_param.face_plate_param.Panel_Shield); printf("key %d\r\n", key); u8 Data_need_write = 0; if (AirCondition_Sheiled_Set()) { if (key == Key_Air_Conditioning_Mode) return; } if (FloorHeating_Sheiled_Set()) { if (key == Key_Floor_Heating_Mode) return; } if (AirFresh_Sheiled_Set()) { if (key == Key_Fresh_Air) return; } printf("dis_page_num.display_page %d\r\n", dis_page_num.display_page); switch (dis_page_num.display_page) { case dis_switch_interface: break; case dis_device_open: break; case dis_air_Conditioning: { printf("dis_page_num.Dis_air_Conditionin %d\r\n", dis_page_num.Dis_air_Conditioning); switch (dis_page_num.Dis_air_Conditioning) { case dis_air_Conditioning_close: Key_Handle_air_conditioning_close(&Data_need_write, key); break; case dis_air_Conditioning_open: Key_Handle_air_conditioning_open(&Data_need_write, key); break; case dis_air_Conditioning_sleep: Key_Handle_air_conditioning_sleep(&Data_need_write, key); break; default: break; } } break; case dis_floor_heating: { switch (dis_page_num.Dis_floor_heating) { case dis_floor_heating_close: Key_Handle_floor_heating_close(&Data_need_write, key); break; case dis_floor_heating_open: Key_Handle_floor_heating_open(&Data_need_write, key); break; case dis_floor_heating_sleep: Key_Handle_floor_heating_sleep(&Data_need_write, key); break; default: break; } } break; case dis_fresh_air: { switch (dis_page_num.Dis_fresh_air) { case dis_fresh_air_close: Key_Handle_fresh_air_close(&Data_need_write, key); break; case dis_fresh_air_open: Key_Handle_fresh_air_open(&Data_need_write, key); break; case dis_fresh_air_sleep: Key_Handle_fresh_air_sleep(&Data_need_write, key); break; default: break; } } break; case dis_new_air_Conditioning: { } break; case dis_message_read: { /*switch(dis_page_num.Dis_message_read) { case dis_real_time_temp: Key_Handle_real_time_temp(&Data_need_write,key); break; case dis_real_time_humidity: Key_Handle_real_time_humidity(&Data_need_write,key); break; case dis_slave_addr: Key_Handle_slave_addr(&Data_need_write,key); break; default: break; } */ } break; case dis_advanced_set: { /*switch(dis_page_num.Dis_advanced_set) { case dis_compensates_temp_set: Key_Handle_compensates_temp_set(&Data_need_write,key); break; case dis_slave_addr_set: Key_Handle_slave_addr_set(&Data_need_write,key); break; case dis_led_brightness_set: Key_Handle_led_brightness_set(&Data_need_write,key); break; case dis_sleep_time_set: Key_Handle_sleep_time_set(&Data_need_write,key); break; case dis_LowTempProtect_set: Key_Handle_LowTempProtect_set(&Data_need_write,key); break; case dis_HeatingProtect_set: Key_Handle_HeatingProtect_set(&Data_need_write,key); break; case dis_lcd_brightness_set: Key_Handle_lcd_brightness_set(&Data_need_write,key); break; case dis_speed_relay_set: Key_Handle_speed_relay_set(&Data_need_write,key); break; default: break; } */ } break; default: break; } if (zigbee_cmd.Is_zigbee_cmd == 0) all_data_update(); if (Data_need_write >= 1) { xTaskNotify((TaskHandle_t)LEDTask_Handler, (uint32_t)Need_Write, (eNotifyAction)eSetBits); } } int i = 0; static void common_btn_evt_cb(void *arg) { #if 1 Key_Operate_t key_value = Key_None; static u8 key1_flag = 0, key2_flag = 0, key3_flag = 0, key4_flag = 0, key5_flag = 0, key6_flag = 0, key7_flag = 0, key8_flag = 0; flex_button_t *btn = (flex_button_t *)arg; switch (btn->id) { case USER_BUTTON_1: if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_8]) == FLEX_BTN_PRESS_NONE) { key1_flag = 1; } if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_8]) == FLEX_BTN_PRESS_NONE && key1_flag == 1) { key1_flag = 0; key_value = Key_Subtract; } break; case USER_BUTTON_2: if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_7]) == FLEX_BTN_PRESS_NONE) { key2_flag = 1; } if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_7]) == FLEX_BTN_PRESS_NONE && key2_flag == 1) { key2_flag = 0; if (fuji_or_shuiji == 0) key_value = Key_Air_Conditioning_Mode; printf("Key_Air_Conditioning_Mode\r\n"); } break; case USER_BUTTON_3: if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_6]) == FLEX_BTN_PRESS_NONE) { key3_flag = 1; } if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_6]) == FLEX_BTN_PRESS_NONE && key3_flag == 1) { key3_flag = 0; key_value = Key_Floor_Heating_Mode; } break; case USER_BUTTON_4: if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_5]) == FLEX_BTN_PRESS_NONE) { key4_flag = 1; } if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_5]) == FLEX_BTN_PRESS_NONE && key4_flag == 1) { key4_flag = 0; key_value = Key_switch; } break; case USER_BUTTON_5: if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_4]) == FLEX_BTN_PRESS_NONE) { key5_flag = 1; } if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_4]) == FLEX_BTN_PRESS_NONE && key5_flag == 1) { key5_flag = 0; key_value = Key_Wind_Speed; } break; case USER_BUTTON_6: if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_3]) == FLEX_BTN_PRESS_NONE) { key6_flag = 1; } if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_3]) == FLEX_BTN_PRESS_NONE && key6_flag == 1) { key6_flag = 0; key_value = Key_Mode_Switch; } break; case USER_BUTTON_7: if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_2]) == FLEX_BTN_PRESS_NONE) { key7_flag = 1; } if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_2]) == FLEX_BTN_PRESS_NONE && key7_flag == 1) { key7_flag = 0; key_value = Key_Fresh_Air; } break; case USER_BUTTON_8: if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_NONE) { key8_flag = 1; } if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_NONE && key8_flag == 1) { key8_flag = 0; key_value = Key_Add; } break; default: break; } if (btn->id == USER_BUTTON_4 && btn->event == FLEX_BTN_PRESS_LONG_START) { key_value = Key_Switch_OnOff; printf("Key_Switch_OnOff\r\n"); } if (flex_button_event_read(&user_button[USER_BUTTON_7]) == FLEX_BTN_PRESS_LONG_START && flex_button_event_read(&user_button[USER_BUTTON_2]) == FLEX_BTN_PRESS_LONG_START) { fuji_or_shuiji = !fuji_or_shuiji; printf("fuji_or_shuiji %d\r\n",fuji_or_shuiji); // key_value = Key_Advanced_setting; } if (btn->id == USER_BUTTON_5 && btn->event == FLEX_BTN_PRESS_LONG_HOLD_10000) { // product_info_update(); mcu_join_zigbee(); Is_blink = 1; Zigbee_led_blink(); // printf("into peiwang\r\n"); } zigbee_cmd.Is_zigbee_cmd = 0; LCD_key_handle(key_value, zigbee_cmd); #endif } void user_button_init(void) { int i; KEY_Init(); for (i = 0; i < USER_BUTTON_MAX; i++) { user_button[i].id = i; user_button[i].usr_button_read = common_btn_read; user_button[i].cb = common_btn_evt_cb; user_button[i].pressed_logic_level = 0; user_button[i].short_press_start_tick = FLEX_MS_TO_SCAN_CNT(30); user_button[i].long_press_start_tick = FLEX_MS_TO_SCAN_CNT(2000); user_button[i].long_hold_start_tick = FLEX_MS_TO_SCAN_CNT(5000); user_button[i].long_hold_start_tick_10000 = FLEX_MS_TO_SCAN_CNT(10000); if (i == 1 || i == 6) { user_button[i].long_press_start_tick = FLEX_MS_TO_SCAN_CNT(3000); } flex_button_register(&user_button[i]); } }