#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);
|
}
|