#include "system/includes.h"
#include "app_config.h"
#include "app_action.h"
#include "gpio.h"
#include "app_main.h"
#include "update.h"
#include "user_cfg.h"




u16 VDET_SAM_VALUE = 0;
/* #define VDET_FIX_VALUE  372 */
#define VDET_FIX_VALUE  330

u16 vdet_timer = 0;

typedef enum __VDET_STATUS {
    VDET_OFF = 0,
    VDET_ON,
    NULL_VDET,
} VDET_STATUS;

typedef struct __VDET_VAR {
    u8  pre_status;
    u8  cur_status;
    u8  status_cnt;
    u8  original_status;
} VDET_VAR;


VDET_VAR g_VDET_VAR = {0};

VDET_STATUS vdet_check(u8 cnt)
{
    VDET_SAM_VALUE = adc_get_value(AD_CH_PB1);
    printf("aaaaaaaaaaaaaaaaaaaaaa=%d\n", VDET_SAM_VALUE);
    if (VDET_SAM_VALUE > VDET_FIX_VALUE) {
        g_VDET_VAR.cur_status = 1;
    } else {
        g_VDET_VAR.cur_status = 0;
    }
    if (g_VDET_VAR.cur_status != g_VDET_VAR.pre_status) {
        g_VDET_VAR.original_status = g_VDET_VAR.pre_status;
        g_VDET_VAR.pre_status = g_VDET_VAR.cur_status;
        g_VDET_VAR.status_cnt = 0;
    } else {
        g_VDET_VAR.status_cnt++;
    }
    if (g_VDET_VAR.status_cnt < cnt) {
        ///检测到插入//消抖
        return NULL_VDET;
    }
    g_VDET_VAR.status_cnt = 0;

    ///检测到插入
    if ((VDET_ON == g_VDET_VAR.cur_status) && (!g_VDET_VAR.original_status)) {
        return VDET_ON;
    } else if ((VDET_OFF == g_VDET_VAR.cur_status) && g_VDET_VAR.original_status) {
        return VDET_OFF;
    }
    return NULL_VDET;
}

void vdet_detect(void *parm)
{
    VDET_STATUS res;
    res = vdet_check(20);
    if (VDET_ON == res) {
        printf("VDET=============ON\n");
    } else if (VDET_OFF == res) {
        printf("VDET=============OFF\n");
    }
}

void  vdet_init(void)
{
    adc_add_sample_ch(AD_CH_PB1);
    gpio_set_die(IO_PORTB_01, 0);
    gpio_set_direction(IO_PORTB_01, 1);
    gpio_set_pull_down(IO_PORTB_01, 0);
    gpio_set_pull_up(IO_PORTB_01, 0);
}

void vdet_check_init(void)
{
    if (vdet_timer == 0) {
        vdet_timer = sys_timer_add(NULL, vdet_detect, 10);
    }
    vdet_init();
}


