#include "key.h" #include "multi_button.h" #include "uart.h" #include "valve_control.h" #include "extern_rtc.h" #include "e2p.h" #include "power_manage.h" #include "adc.h" #include "master_slave_inter.h" #include "ir_nec.h" #include "lcd.h" #include "low_pwr_test.h" #include "gprs.h" #include "administrator.h" #include "system_parameter.h" #include "system_log.h" #include "sundry.h" #include "tim.h" #include "working_time_calculate.h" #include "gpio.h" /****************************************************************************** * °´¼ü¸÷¹¦ÄÜ *----------------------------------------------------------------------------- * ³¤°´B£ºÔ¶´«·¢ËÍ£¨Ð軽ÐÑÆÁÄ»£© * µã°´C£ºÄ£Äâ»ñÈ¡¿ª¸ÇÊÚȨ * µã°´A£º»½ÐÑÆÁÄ»/·­Ò³ * Ë«»÷A£º»ñÈ¡ÏÔʾ²ÎÊýÊÚȨ * ³¤°´A£ºÌض¨Ìõ¼þÏÂÇл»Ä£Ê½£¨Õý³£/¼ì¶¨/²ÎÊý»ñÈ¡£© * A + B£º¿ª/¹Ø·§ * *****************************************************************************/ FlagStatus key_awaken_flag_g = RESET; struct Button btn_B;//ÉêÇë°´¼üB½á¹¹Ìå struct Button btn_C;//ÉêÇë°´¼üC½á¹¹Ìå //Ô¤Áô struct Button btn_A;//ÉêÇë°´¼üA½á¹¹Ìå struct Button btnA_B;//×éºÏ°´¼ü void KEY_IO_Init(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý InputtIO( KEYA_S1_PORT, KEYA_S1_PIN, IN_PULLUP);//ÈôΪ°´¼üµÍÓÐЧ£¬Õý³£½ÓÉÏÀ­µç×裬±£³Ö¶Ï¿ª InputtIO( KEYB_S2_PORT, KEYB_S2_PIN, IN_PULLUP);//ÈôΪ°´¼üµÍÓÐЧ£¬Õý³£½ÓÉÏÀ­µç×裬±£³Ö¶Ï¿ª InputtIO( KEYC_S3_PORT, KEYC_S3_PIN, IN_PULLUP); } //°´¼üB״̬¶ÁÈ¡½Ó¿Ú uint8_t read_buttonB_GPIO(void)//B { return KEY_B_READ; } //°´¼üC״̬¶ÁÈ¡½Ó¿Ú uint8_t read_buttonC_GPIO(void)//C { return KEY_C_READ; } //°´¼üA״̬¶ÁÈ¡½Ó¿Ú uint8_t read_buttonA_GPIO(void)//A { return KEY_A_READ; } //×éºÏ°´¼ü״̬¶ÁÈ¡½Ó¿Ú uint8_t read_buttonA_B_GPIO(void) { return KEY_B_READ | KEY_A_READ; } //°´¼ü»Øµ÷ void button_callback(void *button) { uint32_t btn_event_val; btn_event_val = get_button_event((struct Button *)button); switch(btn_event_val) { case PRESS_DOWN: printf("---> key12 press down! <---\r\n"); break; case PRESS_UP: printf("***> key12 press up! <***\r\n"); break; case PRESS_REPEAT: printf("---> key12 press repeat! <---\r\n"); break; case SINGLE_CLICK: printf("---> key12 single click! <---\r\n"); break; case DOUBLE_CLICK: printf("***> key12 double click! <***\r\n"); break; case LONG_PRESS_START: printf("---> key12 long press start! <---\r\n"); break; case LONG_PRESS_HOLD: printf("***> key12 long press hold! <***\r\n"); break; } } //°´¼ü1/S1/B°´ÏÂʼþ»Øµ÷º¯Êý //void BTN_B_PRESS_DOWN_Handler(void* btn) //{ // printf("---> key1/S1/B press down! <---\r\n"); //} ////°´¼ü1/S1/BËÉ¿ªÊ¼þ»Øµ÷º¯Êý //void BTN_B_PRESS_UP_Handler(void* btn) //{ // printf("***> key1/S1/B press up! <***\r\n"); //} //°´¼ü1/S1/Bµ¥»÷ʼþ»Øµ÷º¯Êý //void BTN_B_SINGLE_Click_Handler(void* btn)//°´¼üB //{ // printf("***> key11/S1/B single click! <***\r\n"); //} //°´¼ü1/S1/B³¤°´Ê¼þ»Øµ÷º¯Êý void BTN_B_LONG_PRESS_START_Handler(void* btn)//°´¼üB { if((KEY_B_READ || KEY_A_READ) == 0) {} else { #ifdef RS232_PRINTF printf("***> Ô¶´«·¢ËÍ£¨Ð軽ÐÑÆÁÄ»£© <***\r\n"); #endif if(sys_display_para_g.sys_and_display_mode == SET_PARA_MODE) __LITH_BAT_WORKINGTIME_RECOVER__; else if(__SYS_DELAY_SEC_FLAG_GET(sys_active_time) != SET) { gprs_soft_para_g.gprs_send_type_flag = GPRS_MEANS_KEY; key_save_send_data_flag_g = SET; } } } //°´¼üCµ¥»÷ʼþ»Øµ÷º¯Êý void BTN_C_SINGLE_Click_Handler(void* btn)//Ô¤Áô°´¼üC { #ifdef RS232_PRINTF printf("***> »ñÈ¡¿ª¸ÇÊÚȨ <***\r\n"); #endif if(sys_some_flag_g.uncap_flag == RESET && sys_display_para_g.sys_and_display_mode != SET_PARA_MODE) { __SYS_DELAY_SEC_TIME_SET_(mode_flag_active_time,10); __SYS_PARA_FLAG_SET_(uncap_flag); } } ////°´¼üC³¤°´Ê¼þ»Øµ÷º¯Êý //void BTN_C_LONG_PRESS_START_Handler(void* btn) //{ //} //°´¼üAµ¥»÷ʼþ»Øµ÷º¯Êý void BTN_A_SINGLE_Click_Handler(void* btn)//°´¼üA { //¹ÒÆð°´¼üÖÐ¶Ï //»½ÐÑÐÝÃß/ÆÁĻʱ°´¼üΪÍⲿÖжϣ¬»½ÐѺó±äΪ¶¨Ê±Æ÷ÂÖѯ£¬Èç¹û²»Çå³ý°´¼üÖжϱêÖ¾£¬»áµ¼Ö¶à´Î°´¼üʱ£¬½áÊøÐÝÃßÔٴνøÈëÒ»´ÎÖÐ¶Ï GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN); #ifdef RS232_PRINTF printf("***> »½ÐÑÆÁÄ»/·­Ò³ <***\r\n"); #endif if(sys_display_para_g.sys_and_display_mode == NORMAL_MODE) { lcd_wake_up_flag_g = 1; if(__SYS_DELAY_SEC_TIME_GET_(sys_active_time) < SYS_WAKE_UP_TIME) __SYS_DELAY_SEC_TIME_SET_(sys_active_time,SYS_WAKE_UP_TIME);//ÉèÖû½ÐÑʱ¼äÃëÊý if(key_awaken_flag_g != SET) { if(++sys_display_para_g.display_page_status.normal_page_status > PRESS_SC_TOTAL) sys_display_para_g.display_page_status.normal_page_status = SC_INSTANT_TOTAL; } else { lcd_wake_up_flag_g = 0; key_awaken_flag_g = RESET; } } else if(sys_display_para_g.sys_and_display_mode == DISPLAY_PARA) { lcd_wake_up_flag_g = 1; if(__SYS_DELAY_SEC_TIME_GET_(sys_active_time) < DISPLAY_PARA_TIME) __SYS_DELAY_SEC_TIME_SET_(sys_active_time, DISPLAY_PARA_TIME); //½oDISPLAY_PARA_TIMEÃëµÄ»½ÐÑʱ¼ä if(++sys_display_para_g.display_page_status.para_page_status > SEC_CORR_OLD_PARA_5) sys_display_para_g.display_page_status.para_page_status = METER_NUM; } } //°´¼üAË«»÷ʼþ»Øµ÷º¯Êý void BTN_A_DOUBLE_Click_Handler(void* btn) { //¹ÒÆð°´¼üÖÐ¶Ï GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN); #ifdef RS232_PRINTF printf("***> »ñÈ¡ÏÔʾ²ÎÊýÊÚȨ <***\r\n"); #endif if(sys_some_flag_g.para_display_flag == RESET && sys_display_para_g.sys_and_display_mode != SET_PARA_MODE) { __SYS_DELAY_SEC_TIME_SET_(mode_flag_active_time,10); __SYS_PARA_FLAG_SET_(para_display_flag); } } //°´¼üA³¤°´Ê¼þ»Øµ÷º¯Êý void BTN_A_LONG_PRESS_START_Handler(void* btn) { //¹ÒÆð°´¼üÖÐ¶Ï GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN); if((KEY_B_READ || KEY_A_READ) == 0) {} else { #ifdef RS232_PRINTF printf("***> Çл»Ä£Ê½£¨Õý³£/¼ì¶¨/²ÎÊý»ñÈ¡£© <***\r\n"); #endif if(sys_display_para_g.sys_and_display_mode == NORMAL_MODE && sys_some_flag_g.uncap_flag == SET) sys_display_para_g.temp_sys_mode_flag = CNV_PARA_MODE_ENTER; else if(sys_display_para_g.sys_and_display_mode == NORMAL_MODE && sys_some_flag_g.para_display_flag == SET) sys_display_para_g.temp_sys_mode_flag = CNV_DISPLAY_MODE_ENTER; else if(sys_display_para_g.sys_and_display_mode == NORMAL_MODE && __SYS_STATUS_BYTES_GET(media_status) == AIR) sys_display_para_g.temp_sys_mode_flag = CNV_CAL_MODE_ENTER; else if(sys_display_para_g.sys_and_display_mode == SET_PARA_MODE) sys_display_para_g.temp_sys_mode_flag = CNV_PARA_MODE_EXIT; else if(sys_display_para_g.sys_and_display_mode == CALIB_MODE) sys_display_para_g.temp_sys_mode_flag = CNV_CAL_MODE_EXIT; else if(sys_display_para_g.sys_and_display_mode == DISPLAY_PARA) sys_display_para_g.temp_sys_mode_flag = CNV_DISPLAY_MODE_EXIT; else sys_mode_conversion_show_g = ERROR_1; sys_some_flag_g.uncap_flag = sys_some_flag_g.para_display_flag = RESET; // __SYS_PARA_FLAG_CLEAR_(uncap_flag); // __SYS_PARA_FLAG_CLEAR_(para_display_flag); } } void BTNA_B_LONG_PRESS_START_Handler(void* btn) { //¹ÒÆð°´¼üÖÐ¶Ï GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN); #ifdef RS232_PRINTF printf("---> key1/S1/B + key2/S3/A long press start! <---\r\n"); #endif if(__SYS_STATUS_BYTES_GET(valve_state) == VALVE_OP)//·§Ä¿Ç°×´Ì¬ÊÇ¿ª { if(__SYS_STATUS_BYTES_GET(account_state) == 0)//먦»§ sys_valve_ctl_id_g = V_KEY_CL; else sys_mode_conversion_show_g = ERROR_1; } else if(__SYS_STATUS_BYTES_GET(valve_state) == VALVE_CL) { if(__SYS_STATUS_BYTES_GET(valve_lock) == 0) //ÅжÏÊÇ·ñ½âËø pwr_vol_g.lith_flag = LMS_OPEN_VALVE_BEFORE;// sys_valve_ctl_id_g = V_KEY_OP; else sys_mode_conversion_show_g = ERROR_1; } } void CalMode_Exit_A_LongHandler(void) { __IO static uint8_t cnt_long = 0; if(KEY_A_READ == 0) { // 9 * 0.25 = 2.25Ãë if((cnt_long++ >= 9) && (sys_display_para_g.sys_and_display_mode == CALIB_MODE)) { //¹ÒÆð°´¼üÖÐ¶Ï GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN); cnt_long = 0; sys_display_para_g.temp_sys_mode_flag = CNV_CAL_MODE_EXIT; } }else cnt_long = 0; } //°´¼ü¹¦Äܳõʼ»¯ void Key_Config_Init(void) { //³õʼ»¯°´¼ü¶ÔÏó button_init(&btn_B, read_buttonB_GPIO, 0); button_init(&btn_C, read_buttonC_GPIO, 0); button_init(&btn_A, read_buttonA_GPIO, 0); button_init(&btnA_B, read_buttonA_B_GPIO, 0); //×¢²á°´¼üʼþ // button_attach(&btn1, PRESS_DOWN, BTN1_PRESS_DOWN_Handler);//°´Ï // button_attach(&btn1, PRESS_UP, BTN1_PRESS_UP_Handler);//ËÉ¿ª // button_attach(&btn1, PRESS_REPEAT, BTN1_PRESS_REPEAT_Handler); // button_attach(&btn1, SINGLE_CLICK, BTN1_SINGLE_Click_Handler); button_attach(&btn_B, LONG_PRESS_START, BTN_B_LONG_PRESS_START_Handler);//³¤°´´¥·¢Ò»´Î // button_attach(&btn1, LONG_PRESS_HOLD, BTN1_LONG_PRESS_HOLD_Handler); button_attach(&btn_C, SINGLE_CLICK, BTN_C_SINGLE_Click_Handler); // button_attach(&btn2, LONG_PRESS_START, BTN2_LONG_PRESS_START_Handler);//³¤°´´¥·¢Ò»´Î button_attach(&btn_A, SINGLE_CLICK, BTN_A_SINGLE_Click_Handler); button_attach(&btn_A, DOUBLE_CLICK, BTN_A_DOUBLE_Click_Handler);//Ë«»÷ button_attach(&btn_A, LONG_PRESS_START, BTN_A_LONG_PRESS_START_Handler);//³¤°´´¥·¢Ò»´Î // ×¢²á°´Å¥Ê¼þ»Øµ÷º¯Êý button_attach(&btnA_B, LONG_PRESS_START, BTNA_B_LONG_PRESS_START_Handler); //Æô¶¯°´¼ü button_start(&btn_B); button_start(&btn_C); button_start(&btn_A); button_start(&btnA_B); }