/** ########################################################################## ** Filename : keyboard_adc_mid.c ** Project : RGB LED ** Module : ** Processor : Cypress CY8C4125LQE-S433 ** Version : V1.0 ** Compiler : PSoC Creator 4.2 ** Date/Time : 2020/02/26 ** Abstract : ** ** Contents : ** ** ** (c) Copyright dmdz Co.,Ltd ** -------------------------------------------------------------------------- ** R E V I S I O N H I S T O R Y ** -------------------------------------------------------------------------- ** Date Ver Author Description ** --------- ---- ----------------- -------------------------------------- ** #########################################################################*/ #include "common_memory.h" #include "key_adc_mid.h" #include "adc.h" /***************************************************************************** * I N C L U D E F I L E S *****************************************************************************/ /***************************************************************************** * D E F I N E S *****************************************************************************/ static key_adc_mid_s g_key_adc_mid; /***************************************************************************** |Prototype : void key_adc_drive_init(void) |Called by : None |Preconditions : None |Input parameters : None |Output parameters : None |Return value : None |Description : cycle task *****************************************************************************/ void key_adc_mid_init(void) { key_adc_driver_init(); common_memory_clear((u8*)&g_key_adc_mid,(u16)sizeof(g_key_adc_mid)); } /***************************************************************************** |Prototype : void key_adc_drive_task(void) |Called by : None |Preconditions : None |Input parameters : None |Output parameters : None |Return value : None |Description : cycle task *****************************************************************************/ void key_adc_mid_task(void) { u8 i; key_adc_result_e l_temp; key_adc_driver_task(); for(i=0;i=g_key_adc_mid_time_cfg[i].long_press)//g_key_cfg_times[KEY_ADC_LONGPRESS_TIME_ID]) { g_key_adc_mid.key[i].state = KEY_ADC_RESULT_LONG; } } break; case KEY_ADC_RESULT_LONG: /*if(l_temp == KEY_ADC_RESULT_PRESSS)*/ { g_key_adc_mid.key[i].count++; if(g_key_adc_mid.key[i].count>=g_key_adc_mid_time_cfg[i].stick_press) //g_key_cfg_times[KEY_ADC_STICKPRESS_TIME_ID]) /*g_key_adc_mid_time_cfg[i].stick_press*/ { g_key_adc_mid.key[i].state = KEY_ADC_RESULT_STICK; } } break; #else case KEY_ADC_RESULT_PRESSS: /*if(l_temp == KEY_ADC_RESULT_PRESSS)*/ { g_key_adc_mid.key[i].count++; if(g_key_adc_mid.key[i].count>=g_key_cfg_times[KEY_TIME_CFG_AD_STUCK_ID]) { g_key_adc_mid.key[i].state = KEY_ADC_RESULT_STICK; } } break; #endif #if 0 case KEY_ADC_RESULT_STICK: /*if(l_temp == KEY_ADC_RESULT_PRESSS)*/ { if(g_key_adc_mid.key[i].count<0xffffu) { g_key_adc_mid.key[i].count++; } } break; #endif default: /*code*/ break; } } if(g_key_adc_mid.key[i].pre_state != g_key_adc_mid.key[i].state) { if((g_key_adc_mid.key[i].state == KEY_ADC_RESULT_PRESSS)) { g_key_adc_mid.key[i].event |= KEY_ADC_EVENT_PRESSED; } else if (g_key_adc_mid.key[i].state == KEY_ADC_RESULT_LONG) { g_key_adc_mid.key[i].event |= KEY_ADC_EVENT_LONG_DOWN; } else if((g_key_adc_mid.key[i].pre_state == KEY_ADC_RESULT_PRESSS) && (g_key_adc_mid.key[i].state == KEY_ADC_RESULT_IDLE)) { g_key_adc_mid.key[i].event |= KEY_ADC_EVENT_SHORT_DOWN_RELEASE; } if(g_key_adc_mid.key[i].state == KEY_ADC_RESULT_IDLE) { g_key_adc_mid.key[i].count=0; g_key_adc_mid.key[i].state = KEY_ADC_RESULT_IDLE; if((g_key_adc_mid.key[i].pre_state == KEY_ADC_RESULT_LONG) || (g_key_adc_mid.key[i].pre_state == KEY_ADC_RESULT_FAULT)) { g_key_adc_mid.key[i].event = KEY_ADC_EVENT_RELEASE; } } if( (g_key_adc_mid.key[i].state == KEY_ADC_RESULT_IDLE) || (g_key_adc_mid.key[i].state == KEY_ADC_RESULT_PRESSS) ) { g_key_adc_mid.key[i].state_change =1u; } } else { g_key_adc_mid.key[i].state_change =0u; } g_key_adc_mid.key[i].pre_state = g_key_adc_mid.key[i].state; } } void key_adc_mid_quick_task(void) { u8 i; #if 0 for(i=0;i=KEY_ADC_RESULT_STICK) //未弹起过,也要计时卡滞 { l_result = g_key_adc_mid.key[key_id].state; } else { l_result = KEY_ADC_RESULT_IDLE; } } #else l_result = g_key_adc_mid.key[key_id].state; #endif } #endif return l_result; } /***************************************************************************** |Prototype : |Called by : |Preconditions : - |Input parameters : None id 是邏輯id |Output parameters : None |Return value : None |Description : 回讀按鍵的變化,注意,要馬上處理,下一周期就無變化了, 一般用于按键从无效到有效。或者从有效到无效,且消抖后。 *****************************************************************************/ u8 key_adc_mid_driver_get_change(u8 id) { u8 l_change; if(id= KEY_ADC_RESULT_PRESSS) && (g_key_adc_mid.key[i].state <= KEY_ADC_RESULT_STICK) ) { l_result=KEY_ADC_MID_DIFF_SURE; break; } } return l_result; } /***************************************************************************** |Prototype : |Called by : |Preconditions : - |Input parameters : None id 是邏輯id |Output parameters : None |Return value : None |Description : 进入sleep前,要做的事情;---把数据 *****************************************************************************/ void key_adc_mid_goto_sleep(void) { u8 i; key_adc_goto_sleep(); //再次记录 上次值和当前值,保持一致 for(i=0u;i= ADC_ORIGINAL_NO_KEY_ORG_MIN) ) { l_result =1; } #else l_result =1; #endif return l_result; } void key_adc_clear_result(void) { u8 i; #if 0 for(i=0;i