130 lines
3.5 KiB
C
130 lines
3.5 KiB
C
#include "app_encoder.h"
|
|
#include "key_encoder_driver.h"
|
|
#include "key_app.h"
|
|
#include "Com_Cfg.h"
|
|
#include "can_app.h"
|
|
#define APP_ENCODER_TASK_PERIOD_TIME 10u
|
|
|
|
#define APP_ENCODER_DELAY_TIME_300MS (300u / APP_ENCODER_TASK_PERIOD_TIME)
|
|
|
|
|
|
struct tag_app_encoder
|
|
{
|
|
uint8_t delay;
|
|
};
|
|
|
|
static struct tag_app_encoder app_encoder;
|
|
|
|
|
|
void app_encoder_init(void)
|
|
{
|
|
app_encoder.delay = 0;
|
|
}
|
|
|
|
|
|
|
|
void app_encoder_delay_set(void)
|
|
{
|
|
app_encoder.delay = APP_ENCODER_DELAY_TIME_300MS;
|
|
}
|
|
|
|
void app_encoder_task(void)
|
|
{
|
|
uint8_t encoder_event;
|
|
uint8_t key_state[NUM_OF_MULTI_MEDIA_KEY];
|
|
uint8_t i;
|
|
uint8_t any_other_key_valid;
|
|
uint8_t output;
|
|
|
|
encoder_event = key_encoder_get_event();
|
|
|
|
if(encoder_event == KEY_ENCODER_EVENT_UP)
|
|
{
|
|
key_state[KEY_APP_MULTI_MEDIA_VOL_PLUS_ID] = 1u;
|
|
key_state[KEY_APP_MULTI_MEDIA_VOL_SUB_ID] = 0u;
|
|
}
|
|
else if(encoder_event == KEY_ENCODER_EVENT_DOWN)
|
|
{
|
|
key_state[KEY_APP_MULTI_MEDIA_VOL_PLUS_ID] = 0u;
|
|
key_state[KEY_APP_MULTI_MEDIA_VOL_SUB_ID] = 1u;
|
|
}
|
|
else
|
|
{
|
|
key_state[KEY_APP_MULTI_MEDIA_VOL_PLUS_ID] = 0u;
|
|
key_state[KEY_APP_MULTI_MEDIA_VOL_SUB_ID] = 0u;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
any_other_key_valid = 0;
|
|
for(i = KEY_MAPP_MULTI_MEDIA_VOL_VEDIO_ID; i <= KEY_APP_MULTI_MEDIA_VOL_MUTE_ID; i ++)
|
|
{
|
|
if(key_state[i])
|
|
{
|
|
any_other_key_valid = 1u;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(app_encoder.delay)
|
|
{
|
|
app_encoder.delay --;
|
|
}
|
|
else
|
|
{
|
|
if(any_other_key_valid == 0u)
|
|
{
|
|
if(key_state[KEY_APP_MULTI_MEDIA_VOL_PLUS_ID])
|
|
{
|
|
/* 音量 + */
|
|
output = 0x01u;
|
|
app_sig_sws_r_multimedia_tx_process(output, 1, 1);
|
|
|
|
}
|
|
else if(key_state[KEY_APP_MULTI_MEDIA_VOL_SUB_ID])
|
|
{
|
|
/* 音量 - */
|
|
output = 0x04u;
|
|
app_sig_sws_r_multimedia_tx_process(output, 1, 1);
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
} |