| | |
| | | #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½á¹¹Ìå |
| | | |
| | | /******************************************************************************* |
| | | * Function Name: Key_GPIO_Init |
| | | * Parameters: none |
| | | * Return: none |
| | | * Description: |
| | | ******************************************************************************/ |
| | | void Key_GPIO_Init(void) |
| | | struct Button btnA_B;//×éºÏ°´¼ü |
| | | |
| | | void KEY_IO_Init(void) |
| | | { |
| | | InputtIO(KEY1_PORT,KEY1_PIN,IN_PULLUP); |
| | | InputtIO(KEY2_PORT,KEY2_PIN,IN_PULLUP); |
| | | InputtIO(KEY3_PORT,KEY3_PIN,IN_PULLUP); |
| | | InputtIO(KEY4_PORT,KEY4_PIN,IN_PULLUP); |
| | | 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); |
| | | } |
| | | |
| | | |
| | | |
| | | void keyPro(void) |
| | | //°´¼üB״̬¶ÁÈ¡½Ó¿Ú |
| | | uint8_t read_buttonB_GPIO(void)//B |
| | | { |
| | | static uint8_t P_Key1Cnt=0,R_Key2Cnt=0,L_Key3Cnt=0; |
| | | |
| | | P_Key1Cnt = (KEY1_IO_READ==Bit_RESET)? P_Key1Cnt+1:0; |
| | | R_Key2Cnt = (KEY2_IO_READ==Bit_RESET)? R_Key2Cnt+1:0; |
| | | L_Key3Cnt = (KEY3_IO_READ==Bit_RESET)? L_Key3Cnt+1:0; |
| | | 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; |
| | | } |
| | | |
| | | if(R_Key2Cnt== 5) |
| | | //×éºÏ°´¼ü״̬¶ÁÈ¡½Ó¿Ú |
| | | 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) |
| | | { |
| | | //ÀýÈçÓÒ¼ü³¤°´5Ãë½øÈë²éѯģʽ |
| | | |
| | | 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); |
| | | } |
| | | |