1115 lines
31 KiB
C
Raw Permalink Normal View History

2025-04-26 16:03:23 +08:00
/*****************************************************************************
** Filename : keyboard_drive.c
** Project :
** Module :
** Processor : Freescale S12Z
** Date/Time : 2019-09-04, 9:00
** Abstract :
** Contents :
** Author : Lyj
** http :
** mail :
** --------------------------------------------------------------------------
**
** --------------------------------------------------------------------------
******************************************************************************/
#include "common_types.h"
#include "common_memory.h"
#include "key_app.h"
//#include "power_drive.h"
#include "system_voltage_manage.h"
#include "Com_Cfg.h"
#include "app_encoder.h"
#include "can_app.h"
#include "Com.h"
/*****************************************************************************
* Include Files
*****************************************************************************/
/*****************************************************************************
* Defines
*****************************************************************************/
#define SHOW_MOD_TIME_10S (10000u / 10u)
#define MILEAGE_CLEAR_TIME_15S (15000u / 10u)
#define APP_KEY_MEDIA_RESET_3S (3000U/10u)
#define APP_KEY_MIDSCREEN_RESET_10S (10000U/10u)
/*****************************************************************************
* Macros
*****************************************************************************/
/*****************************************************************************
* Type Defines
*****************************************************************************/
typedef struct
{
uint16_t AppKey_MediaReset_Timer;
uint16_t AppKey_MidScreenReset_Timer;
uint16_t AppKey_CoDriverScreenReset_Timer;
uint16_t AppKey_HandrailScreenReset_Timer;
uint16_t AppKey_BackRowReset_Timer;
}AppKeyboard_Type;
/*****************************************************************************
*Static Variable
*****************************************************************************/
static AppKeyboard_Type AppKeyboard;
/*****************************************************************************
*Global Variable
*****************************************************************************/
static key_app_s g_key_app;
/*****************************************************************************
*Constant
*****************************************************************************/
/*****************************************************************************
*Function Prototype
*****************************************************************************/
void app_key_event_clear(void);
#ifdef KEY_APP_ENABLE_SLEEP_FUNCTION
static void key_app_sleep_state_task(void);
#endif
/*****************************************************************************
|Prototype :
|Called by :
|Preconditions : -
|Input parameters : None
|Output parameters : None
|Return value : None
|Description :
*****************************************************************************/
void key_app_init(void)
{
#ifdef KEY_DIGITAL_EN
key_digital_driver_init();
#endif
#ifdef KEY_ADC_EN
key_adc_mid_init();
//key_app_cfg_init();
#endif
common_memory_clear((u8*)&g_key_app,sizeof(g_key_app));
}
/*****************************************************************************
|Prototype :
|Called by :
|Preconditions : -
|Input parameters : None
|Output parameters : None
|Return value : None
|Description :
*****************************************************************************/
void key_app_goto_sleep(void)
{
#ifdef KEY_DIGITAL_EN
key_digital_driver_goto_sleep();
#endif
#ifdef KEY_ADC_EN
key_adc_mid_goto_sleep();
key_adc_mid_init();
#endif
//还有别的按键模块如ADC
g_key_app.timecount=0u;
g_key_app.sub_state=KEY_APP_SUBSTATE_SLEEP;
g_key_app.state=KEY_APP_STATE_SLEEP;
}
/**
* @brief
* @param input:
* @param output:
* @return none:
* @calls
* @calls by
* @adc_asils
*/
void key_app_goto_wake(void)
{
u8 i;
#ifdef KEY_DIGITAL_EN
key_digital_driver_goto_wakeup();
#endif
#ifdef KEY_ADC_EN
key_adc_mid_goto_wakeup();
#endif
for(i=0;i<KEY_APP_MEDIUM_TYPE_TOTAL;i++)
{
#ifdef KEY_APP_ENABLE_SLEEP_FUNCTION
g_key_app.medium[i].timecount=0u;
g_key_app.medium[i].state = KEY_APP_MEDIUM_STATE_NORMAL;
#endif
}
app_key_event_clear();
g_key_app.timecount=0u;
g_key_app.sub_state=KEY_APP_SUBSTATE_NORMAL;
g_key_app.state=KEY_APP_STATE_NORMAL;
}
void app_key_event_clear(void)
{
uint8_t i;
uint8_t event;
for(i = 0; i < KEY_ADC_ID_MAX; i ++)
{
event = key_adc_mid_driver_get_event(i);
}
for(i = 0; i < KEY_DIGITAL_DRIVER_KEY_TOTAL; i ++)
{
event = key_digital_driver_get_event(i);
}
}
void multi_media_vedio_key_process(uint8_t *key_state)
{
uint8_t event;
uint8_t output;
if(key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
event = key_adc_mid_driver_get_event(KEY_ADC_ID_VEDIO);
if(event & KEY_ADC_EVENT_PRESSED)
{
event &= ~KEY_ADC_EVENT_RELEASE;
output = 0x15;
app_sig_sws_r_multimedia_tx_process(output, 1, 1);
}
if ((event & KEY_ADC_EVENT_RELEASE) || (event & KEY_ADC_EVENT_SHORT_DOWN_RELEASE))
{
output = 0x00;
app_sig_sws_r_multimedia_tx_process(output, 3, 0);
}
}
else
{
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u)
{
event = key_adc_mid_driver_get_event(KEY_ADC_ID_VEDIO);
}
}
}
void multi_media_lmenu_key_process(uint8_t *key_state)
{
uint8_t event;
uint8_t output;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
event = key_adc_mid_driver_get_event(KEY_ADC_ID_LMENU);
if(event & KEY_ADC_EVENT_SHORT_DOWN_RELEASE)
{
event &= ~KEY_ADC_EVENT_RELEASE;
output = 0x1;
app_sig_sws_r_left_menu_tx_process(output, 4, 1);
}
if(event & KEY_ADC_EVENT_LONG_DOWN)
{
event &= ~KEY_ADC_EVENT_RELEASE;
output = 0x2;
app_sig_sws_r_left_menu_tx_process(output, 1, 1);
}
if (event & KEY_ADC_EVENT_RELEASE)
{
output = 0x00;
COM_IpduRepetitionTxNumTable[COM_TXIPDUSTEERING_RIGHT_SWITCH_4A8] = 3;
app_sig_sws_r_left_menu_tx_process(output, 3, 0);
}
}
else
{
if(key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u)
{
event = key_adc_mid_driver_get_event(KEY_ADC_ID_LMENU);
}
}
}
void multi_media_custom_key_process(uint8_t *key_state)
{
uint8_t event;
uint8_t output;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
event = key_adc_mid_driver_get_event(KEY_ADC_ID_CUSTOM);
if(event & KEY_ADC_EVENT_SHORT_DOWN_RELEASE)
{
event &= ~KEY_ADC_EVENT_RELEASE;
output = 0x25;
app_sig_sws_r_multimedia_tx_process(output, 4, 1);
}
if(event & KEY_ADC_EVENT_LONG_DOWN)
{
event &= ~KEY_ADC_EVENT_RELEASE;
output = 0x26;
app_sig_sws_r_multimedia_tx_process(output, 1, 1);
}
if (event & KEY_ADC_EVENT_RELEASE)
{
output = 0x00;
app_sig_sws_r_multimedia_tx_process(output, 3, 0u);
}
}
else
{
if(key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u)
{
event = key_adc_mid_driver_get_event(KEY_ADC_ID_CUSTOM);
}
}
}
void multi_media_prev_key_process(uint8_t *key_state)
{
uint8_t event;
uint8_t output;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_PREV);
if(event & KEY_DIGITAL_EVENT_SHORT_DOWN_RELEASE)
{
event &= ~KEY_DIGITAL_EVENT_RELEASE;
output = 0x07;
app_sig_sws_r_multimedia_tx_process(output, 4, 1);
}
if(event & KEY_DIGITAL_EVENT_LONG_DOWN)
{
output = 0x08;
app_sig_sws_r_multimedia_tx_process(output, 1, 1);
}
if (event & KEY_DIGITAL_EVENT_RELEASE)
{
output = 0x00;
app_sig_sws_r_multimedia_tx_process(output, 3, 0);
}
}
else
{
if(key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_PREV);
}
}
}
void multi_media_next_key_process(uint8_t *key_state)
{
uint8_t event;
uint8_t output;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_NEXT);
if(event & KEY_DIGITAL_EVENT_SHORT_DOWN_RELEASE)
{
event &= ~KEY_DIGITAL_EVENT_RELEASE;
output = 0x0A;
app_sig_sws_r_multimedia_tx_process(output, 4, 1);
}
if(event & KEY_DIGITAL_EVENT_LONG_DOWN)
{
output = 0x0B;
app_sig_sws_r_multimedia_tx_process(output, 1, 1);
}
if (event & KEY_DIGITAL_EVENT_RELEASE)
{
output = 0x00;
app_sig_sws_r_multimedia_tx_process(output, 3, 0);
}
}
else
{
if(key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_NEXT);
}
}
}
void multi_media_voice_key_process(uint8_t *key_state)
{
uint8_t event;
uint8_t output;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_VOICE);
if(event & KEY_DIGITAL_EVENT_PRESSED)
{
output = 0x1;
app_sig_sws_r_voicd_expand_2_tx_process(output, 1, 1);
}
if(event & KEY_DIGITAL_EVENT_SHORT_DOWN_RELEASE)
{
event &= ~KEY_DIGITAL_EVENT_RELEASE;
output = 0x13;
app_sig_sws_r_multimedia_tx_process(output, 4, 1);
output = 0x1;
app_sig_sws_r_voicd_expand_2_tx_process(output, 4, 1);
}
if(event & KEY_DIGITAL_EVENT_LONG_DOWN)
{
output = 0x14;
app_sig_sws_r_multimedia_tx_process(output, 1, 1);
output = 0x1;
app_sig_sws_r_voicd_expand_2_tx_process(output, 1, 1);
}
if (event & KEY_DIGITAL_EVENT_RELEASE)
{
output = 0x00;
app_sig_sws_r_multimedia_tx_process(output, 3, 0);
output = 0x2u;
app_sig_sws_r_voicd_expand_2_tx_process(output, 3, 0);
}
}
else
{
if(key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_VOICE);
}
}
}
void multi_media_call_key_process(uint8_t *key_state)
{
uint8_t event;
uint8_t output;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_PHONE);
if(event & KEY_DIGITAL_EVENT_PRESSED)
{
event &= ~KEY_DIGITAL_EVENT_RELEASE;
output = 0x0c;
app_sig_sws_r_multimedia_tx_process(output, 1, 1);
}
if ((event & KEY_DIGITAL_EVENT_RELEASE) || (event & KEY_DIGITAL_EVENT_SHORT_DOWN_RELEASE))
{
output = 0x00;
app_sig_sws_r_multimedia_tx_process(output, 3, 1);
}
}
else
{
if(key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_PHONE);
}
}
}
void multi_media_rmenu_key_process(uint8_t *key_state)
{
uint8_t event;
uint8_t output;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_RMENU);
if(event & KEY_DIGITAL_EVENT_PRESSED)
{
event &= ~KEY_DIGITAL_EVENT_RELEASE;
output = 0x23;
app_sig_sws_r_multimedia_tx_process(output, 1, 1);
}
if (event & KEY_DIGITAL_EVENT_RELEASE || event & KEY_DIGITAL_EVENT_SHORT_DOWN_RELEASE)
{
output = 0x00;
app_sig_sws_r_multimedia_tx_process(output, 3, 0);
}
}
else
{
if(key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_RMENU);
}
}
}
void multi_media_mute_key_process(uint8_t *key_state)
{
uint8_t event;
uint8_t output;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_MUTE);
if(event & KEY_DIGITAL_EVENT_SHORT_DOWN_RELEASE)
{
event &= ~KEY_DIGITAL_EVENT_RELEASE;
output = 0x24;
app_sig_sws_r_multimedia_tx_process(output, 4, 1);
app_encoder_delay_set();
}
if(event & KEY_DIGITAL_EVENT_LONG_DOWN)
{
output = 0xF7;
app_sig_sws_r_multimedia_tx_process(output, 1, 1);
app_encoder_delay_set();
}
if (event & KEY_DIGITAL_EVENT_RELEASE)
{
output = 0x00;
app_sig_sws_r_multimedia_tx_process(output, 3, 0);
Com_SendSignal(COM_TX_SIGSWS_R_MULTIMEDIA, &output);
}
}
else
{
if(key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
event = key_digital_driver_get_event(KEY_DIGI_ID_MUTE);
}
}
}
void auto_show_in_mode_process(uint8_t *key_state)
{
static uint16_t timer = 0;
uint8_t output;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 1u && key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 1u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
if(timer < SHOW_MOD_TIME_10S)
{
timer ++;
if(timer >= SHOW_MOD_TIME_10S)
{
output = 1;
app_sig_sws_r_auto_show_in_tx_process(output, 3, 3);
}
}
}
else
{
if(timer >= SHOW_MOD_TIME_10S)
{
output = 0;
Com_SendSignal(COM_TX_SIGSWS_R_MULTIMEDIA, &output);
app_sig_sws_r_auto_show_in_tx_process(output, 3, 0);
}
timer = 0;
}
}
void auto_show_out_mode_process(uint8_t *key_state)
{
static uint16_t timer = 0;
uint8_t output;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 1u \
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 1u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
if(timer < SHOW_MOD_TIME_10S)
{
timer ++;
if(timer >= SHOW_MOD_TIME_10S)
{
output = 1;
app_sig_sws_r_auto_show_out_tx_process(output, 3, 3);
}
}
}
else
{
if(timer >= SHOW_MOD_TIME_10S)
{
output = 0;
Com_SendSignal(COM_TX_SIGSWS_R_MULTIMEDIA, &output);
app_sig_sws_r_auto_show_out_tx_process(output, 3, 0);
}
timer = 0;
}
}
void multi_media_mileage_clear_process(uint8_t *key_state)
{
static uint16_t timer_mileage = 0;
uint8_t output = 0;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 1u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 1u)
{
if(timer_mileage < MILEAGE_CLEAR_TIME_15S)
{
timer_mileage ++;
if(timer_mileage >= MILEAGE_CLEAR_TIME_15S)
{
output = 1;
app_sig_sws_r_mileage_clear_tx_process(output, 3, 3);
}
}
}
else
{
if(timer_mileage >= MILEAGE_CLEAR_TIME_15S)
{
output = 0;
Com_SendSignal(COM_TX_SIGSWS_R_MULTIMEDIA, &output);
app_sig_sws_r_mileage_clear_tx_process(output, 3, 0);
}
timer_mileage = 0;
}
}
void AppKeyboard_MediaResetProcess(uint8_t *key_state)
{
uint8_t output = 0u;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 1u && key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 1u)
{
if(AppKeyboard.AppKey_MediaReset_Timer < APP_KEY_MEDIA_RESET_3S)
{
AppKeyboard.AppKey_MediaReset_Timer ++;
if(AppKeyboard.AppKey_MediaReset_Timer >= APP_KEY_MEDIA_RESET_3S)
{
output = 1u;
AppCan_EventSig_SWS_R_MediaReset_TxProcess(output, 3, 3);
}
}
}
else
{
if(AppKeyboard.AppKey_MediaReset_Timer >= APP_KEY_MEDIA_RESET_3S)
{
output = 0u;
Com_SendSignal(COM_TX_SIGSWS_R_MULTIMEDIA, &output);
AppCan_EventSig_SWS_R_MediaReset_TxProcess(output, 3, 0);
}
AppKeyboard.AppKey_MediaReset_Timer = 0u;
}
}
void AppKeyboard_MidScreenRecoverProcess(uint8_t *key_state)
{
uint8_t output = 0u;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 1u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 1u)
{
if(AppKeyboard.AppKey_MidScreenReset_Timer < APP_KEY_MIDSCREEN_RESET_10S)
{
AppKeyboard.AppKey_MidScreenReset_Timer ++;
if(AppKeyboard.AppKey_MidScreenReset_Timer >= APP_KEY_MIDSCREEN_RESET_10S)
{
output = 1u;
AppCan_EventSig_SWS_R_OtherRecover_TxProcess(output, 3, 3);
}
}
}
else
{
if(AppKeyboard.AppKey_MidScreenReset_Timer >= APP_KEY_MIDSCREEN_RESET_10S)
{
output = 0u;
Com_SendSignal(COM_TX_SIGSWS_R_MULTIMEDIA, &output);
AppCan_EventSig_SWS_R_OtherRecover_TxProcess(output, 3, 0);
}
AppKeyboard.AppKey_MidScreenReset_Timer = 0u;
}
}
void AppKeyboard_CoDriverRecoverProcess(uint8_t *key_state)
{
uint8_t output = 0u;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 1u \
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 1u)
{
if(AppKeyboard.AppKey_CoDriverScreenReset_Timer < APP_KEY_MIDSCREEN_RESET_10S)
{
AppKeyboard.AppKey_CoDriverScreenReset_Timer ++;
if(AppKeyboard.AppKey_CoDriverScreenReset_Timer >= APP_KEY_MIDSCREEN_RESET_10S)
{
output = 2u;
AppCan_EventSig_SWS_R_OtherRecover_TxProcess(output, 3, 3);
}
}
}
else
{
if(AppKeyboard.AppKey_CoDriverScreenReset_Timer >= APP_KEY_MIDSCREEN_RESET_10S)
{
output = 0u;
Com_SendSignal(COM_TX_SIGSWS_R_MULTIMEDIA, &output);
AppCan_EventSig_SWS_R_OtherRecover_TxProcess(output, 3, 0);
}
AppKeyboard.AppKey_CoDriverScreenReset_Timer = 0u;
}
}
void AppKeyboard_HandrailRecoverProcess(uint8_t *key_state)
{
uint8_t output = 0u;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 1u \
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 1u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
if(AppKeyboard.AppKey_HandrailScreenReset_Timer < APP_KEY_MIDSCREEN_RESET_10S)
{
AppKeyboard.AppKey_HandrailScreenReset_Timer ++;
if(AppKeyboard.AppKey_HandrailScreenReset_Timer >= APP_KEY_MIDSCREEN_RESET_10S)
{
output = 3u;
AppCan_EventSig_SWS_R_OtherRecover_TxProcess(output, 3, 3);
}
}
}
else
{
if(AppKeyboard.AppKey_HandrailScreenReset_Timer >= APP_KEY_MIDSCREEN_RESET_10S)
{
output = 0u;
Com_SendSignal(COM_TX_SIGSWS_R_MULTIMEDIA, &output);
AppCan_EventSig_SWS_R_OtherRecover_TxProcess(output, 3, 0);
}
AppKeyboard.AppKey_HandrailScreenReset_Timer = 0u;
}
}
void AppKeyboard_BackRowRecoverProcess(uint8_t *key_state)
{
uint8_t output = 0u;
if(key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_PREV_ID] == 0u \
&& key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] == 1u && key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] == 1u \
&& key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] == 0u && key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] == 0u\
&& key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] == 0u)
{
if(AppKeyboard.AppKey_BackRowReset_Timer < APP_KEY_MIDSCREEN_RESET_10S)
{
AppKeyboard.AppKey_BackRowReset_Timer ++;
if(AppKeyboard.AppKey_BackRowReset_Timer >= APP_KEY_MIDSCREEN_RESET_10S)
{
output = 4u;
AppCan_EventSig_SWS_R_OtherRecover_TxProcess(output, 3, 3);
}
}
}
else
{
if(AppKeyboard.AppKey_BackRowReset_Timer >= APP_KEY_MIDSCREEN_RESET_10S)
{
output = 0u;
Com_SendSignal(COM_TX_SIGSWS_R_MULTIMEDIA, &output);
AppCan_EventSig_SWS_R_OtherRecover_TxProcess(output, 3, 0);
}
AppKeyboard.AppKey_BackRowReset_Timer = 0u;
}
}
void multi_media_switch_process(void)
{
uint8_t i;
uint8_t key_state[NUM_OF_MULTI_MEDIA_KEY];
uint8_t PowerGear;
can_app_receive_signal(COM_RXSIGBCM1_POWER_GEAR,&PowerGear);
key_state[KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID] = key_adc_mid_get_result(KEY_ADC_ID_VEDIO);
key_state[KEY_APP_MULTI_MEDIA_VOL_LMENU_ID] = key_adc_mid_get_result(KEY_ADC_ID_LMENU);
key_state[KEY_APP_MULTI_MEDIA_CUSTOM_ID] = key_adc_mid_get_result(KEY_ADC_ID_CUSTOM);
for(i = KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID; i <= KEY_APP_MULTI_MEDIA_CUSTOM_ID; i ++)
{
if((key_state[i] == KEY_ADC_RESULT_UNKNOW) || (key_state[i] == KEY_ADC_RESULT_IDLE) || (key_state[i] == KEY_ADC_RESULT_FAULT))
{
key_state[i] = 0u;
}
else
{
key_state[i] = 1u;
}
}
key_state[KEY_APP_MULTI_MEDIA_PREV_ID] = key_digital_driver_get_state(KEY_DIGI_ID_PREV);
key_state[KEY_APP_MULTI_MEDIA_NEXT_ID] = key_digital_driver_get_state(KEY_DIGI_ID_NEXT);
key_state[KEY_APP_MULTI_MEDIA_VOL_VOICE_ID] = key_digital_driver_get_state(KEY_DIGI_ID_VOICE);
key_state[KEY_APP_MULTI_MEDIA_VOL_CALL_ID] = key_digital_driver_get_state(KEY_DIGI_ID_PHONE);
key_state[KEY_APP_MULTI_MEDIA_VOL_RMENU_ID] = key_digital_driver_get_state(KEY_DIGI_ID_RMENU);
key_state[KEY_APP_MULTI_MEDIA_VOL_MUTE_ID] = key_digital_driver_get_state(KEY_DIGI_ID_MUTE);
for(i = KEY_APP_MULTI_MEDIA_PREV_ID; i <=KEY_APP_MULTI_MEDIA_VOL_MUTE_ID; i ++)
{
if(key_state[i] == KEY_DIGITAL_DRIVER_STATE_UP)
{
key_state[i] = 0u;
}
else
{
key_state[i] = 1u;
}
}
if( PowerGear == POWER_GEAR_ON)
{
multi_media_vedio_key_process(&key_state[0]);
multi_media_lmenu_key_process(&key_state[0]);
multi_media_custom_key_process(&key_state[0]);
multi_media_prev_key_process(&key_state[0]);
multi_media_next_key_process(&key_state[0]);
multi_media_voice_key_process(&key_state[0]);
multi_media_mute_key_process(&key_state[0]);
multi_media_call_key_process(&key_state[0]);
multi_media_rmenu_key_process(&key_state[0]);
AppKeyboard_MediaResetProcess(&key_state[0]);
AppKeyboard_MidScreenRecoverProcess(&key_state[0]);
AppKeyboard_CoDriverRecoverProcess(&key_state[0]);
AppKeyboard_HandrailRecoverProcess(&key_state[0]);
AppKeyboard_BackRowRecoverProcess(&key_state[0]);
}
multi_media_mileage_clear_process(&key_state[0]);
auto_show_in_mode_process(&key_state[0]);
auto_show_out_mode_process(&key_state[0]);
}
void cruise_set_spd_sub_res_spd_add_key_process(void)
{
uint8_t set_spd_sub_key;
uint8_t res_spd_add_key;
uint8_t output;
set_spd_sub_key = key_adc_mid_get_result(KEY_ADC_ID_SET_SPD_SUB);
res_spd_add_key = key_adc_mid_get_result(KEY_ADC_ID_RES_SPD_ADD);
if(set_spd_sub_key == KEY_ADC_RESULT_PRESSS || set_spd_sub_key == KEY_ADC_RESULT_LONG)
{
output = 0x01u;
Com_SendSignal(COM_TX_SIGSWS_L_SPD_SET, &output);
}
else if(res_spd_add_key == KEY_ADC_RESULT_PRESSS || res_spd_add_key == KEY_ADC_RESULT_LONG )
{
output = 0x03u;
Com_SendSignal(COM_TX_SIGSWS_L_SPD_SET, &output);
}
else
{
output = 0x00u;
Com_SendSignal(COM_TX_SIGSWS_L_SPD_SET, &output);
}
}
void cruise_dsp_plus_key_process(void)
{
uint8_t state;
uint8_t output;
state = key_adc_mid_get_result(KEY_ADC_ID_DSP_PLUS);
if(state == KEY_ADC_RESULT_PRESSS || state == KEY_ADC_RESULT_LONG)
{
output = 0x01u;
Com_SendSignal(COM_TX_SIGSWS_L_DSP_PLUS, &output);
}
else
{
output = 0x0u;
Com_SendSignal(COM_TX_SIGSWS_L_DSP_PLUS, &output);
}
}
void cruise_dsp_sub_key_process(void)
{
uint8_t state;
uint8_t output;
state = key_adc_mid_get_result(KEY_ADC_ID_DSP_SUB);
if(state == KEY_ADC_RESULT_PRESSS || state == KEY_ADC_RESULT_LONG)
{
output = 0x01u;
Com_SendSignal(COM_TX_SIGSWS_L_DSP_SUB, &output);
}
else
{
output = 0x0u;
Com_SendSignal(COM_TX_SIGSWS_L_DSP_SUB, &output);
}
}
void cruise_fault_process(void)
{
uint8_t state[4];
uint8_t cruise_fault;
uint8_t i;
uint8_t output;
state[0] = key_adc_mid_get_result(KEY_ADC_ID_SET_SPD_SUB);
state[1] = key_adc_mid_get_result(KEY_ADC_ID_RES_SPD_ADD);
state[2] = key_adc_mid_get_result(KEY_ADC_ID_DSP_PLUS);
state[3] = key_adc_mid_get_result(KEY_ADC_ID_DSP_SUB);
cruise_fault = 0;
for(i = 0; i < 4; i ++)
{
if(state[i] >= KEY_ADC_RESULT_STICK)
{
cruise_fault = 1u;
break;
}
}
if(cruise_fault)
{
output = 0u;
Com_SendSignal(COM_TX_SIGSWS_L_CRUISE_FAULT, &output);
}
else
{
output = 1u;
Com_SendSignal(COM_TX_SIGSWS_L_CRUISE_FAULT, &output);
}
}
void cruise_pick_process(void)
{
uint8_t l_pick;
uint8_t r_pick;
uint8_t output;
r_pick = key_digital_driver_get_state(KEY_DIGI_ID_RPICK);
l_pick = key_adc_mid_get_result(KEY_ADC_ID_LPICK);
if(r_pick == KEY_DIGITAL_DRIVER_STATE_SHORT_DOWN)
{
output = 0x1u;
Com_SendSignal(COM_TX_SIGSWS_L_RIGHT_PICK, &output);
}
else if (r_pick == KEY_DIGITAL_DRIVER_STATE_LONG_DOWN)
{
output = 0x2u;
Com_SendSignal(COM_TX_SIGSWS_L_RIGHT_PICK, &output);
}
else
{
output = 0x0u;
Com_SendSignal(COM_TX_SIGSWS_L_RIGHT_PICK, &output);
}
if(l_pick == KEY_ADC_RESULT_PRESSS)
{
output = 0x1u;
Com_SendSignal(COM_TX_SIGSWS_L_LEFT_PICK, &output);
}
else if (l_pick == KEY_ADC_RESULT_LONG)
{
output = 0x2u;
Com_SendSignal(COM_TX_SIGSWS_L_LEFT_PICK, &output);
}
else
{
output = 0x0u;
Com_SendSignal(COM_TX_SIGSWS_L_LEFT_PICK, &output);
}
}
void cruise_switch_process(void)
{
uint8_t PowerGear;
can_app_receive_signal(COM_RXSIGBCM1_POWER_GEAR,&PowerGear);
if( PowerGear == POWER_GEAR_ON)
{
cruise_set_spd_sub_res_spd_add_key_process();
cruise_dsp_plus_key_process();
cruise_dsp_sub_key_process();
cruise_fault_process();
cruise_pick_process();
}
}
/*****************************************************************************
|Prototype :
|Called by :
|Preconditions : -
|Input parameters : None
|Output parameters : None
|Return value : None
|Description :
*****************************************************************************/
void key_app_task(void)
{
multi_media_switch_process();
cruise_switch_process();
}
key_app_sw_state_e key_app_get_digi_state(u8 id)
{
key_digital_driver_state_e l_key_state;
key_app_sw_state_e l_state_check = KEY_APP_SW_STATE_INACTIVE;
if(id<KEY_DIGITAL_DRIVER_KEY_TOTAL)
{
l_key_state = key_digital_driver_get_state(id);
switch(l_key_state)
{
case KEY_DIGITAL_DRIVER_STATE_UP:
l_state_check = KEY_APP_SW_STATE_INACTIVE;
break;
case KEY_DIGITAL_DRIVER_STATE_SHORT_DOWN:
case KEY_DIGITAL_DRIVER_STATE_LONG_DOWN:
case KEY_DIGITAL_DRIVER_STATE_STICK:
l_state_check = KEY_APP_SW_STATE_ACTIVE;
break;
default:
l_state_check = KEY_APP_SW_STATE_INACTIVE;
break;
}
}
return l_state_check;
}
/****增加每个AD按键的应用状态*主要是给诊断*******/
key_app_sw_state_e key_app_get_adc_state(u8 id)
{
key_adc_result_e l_key_state;
key_app_sw_state_e l_state_check = KEY_APP_SW_STATE_INACTIVE;
if(id<KEY_ADC_ID_MAX)
{
l_key_state = key_adc_mid_get_result(id);
switch(l_key_state)
{
case KEY_ADC_RESULT_IDLE:
l_state_check = KEY_APP_SW_STATE_INACTIVE;
break;
case KEY_ADC_RESULT_PRESSS:
case KEY_ADC_RESULT_LONG:
case KEY_ADC_RESULT_STICK:
l_state_check = KEY_APP_SW_STATE_ACTIVE;
break;
default:
l_state_check = KEY_APP_SW_STATE_INACTIVE;
break;
}
}
return l_state_check;
}