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

            }
        }
    }

}