LL01/code_app_out/Source/app/app_encoder.c
2025-04-26 16:03:23 +08:00

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
{
}
}
}
}