/**
 * @file app_key.h
 * @brief This is app_key file
 * @version 1.0
 * @date 2021-09-10
 *
 * @copyright Copyright 2021-2023 Tuya Inc. All Rights Reserved.
 *
 */

#ifndef __APP_KEY_H__
#define __APP_KEY_H__

#include "tuya_cloud_types.h"
#include "gpio.h"

#ifdef __cplusplus
extern "C" {
#endif

/***********************************************************************
 ********************* constant ( macro and enum ) *********************
 **********************************************************************/
#define KEY_LED_PIN         GPIO_P18            //按键指示灯
#define POWER_KEY_PIN       GPIO_P16            //电源键
#define GEAR_UP_KEY_PIN     GPIO_P17            //档位+键
#define GEAR_DOWN_KEY_PIN   GPIO_P15            //档位-键
#define MAX_LED_PIN         GPIO_P24            //大灯开关
#define CH_PIN              GPIO_P25            //充电开关

#define KEY_LED_Clr()  hal_gpio_write(KEY_LED_PIN,TUYA_GPIO_LEVEL_LOW)//EN
#define KEY_LED_Set()  hal_gpio_write(KEY_LED_PIN,TUYA_GPIO_LEVEL_HIGH)
#define MAX_LED_Clr()  hal_gpio_write(MAX_LED_PIN,TUYA_GPIO_LEVEL_LOW)//EN
#define MAX_LED_Set()  hal_gpio_write(MAX_LED_PIN,TUYA_GPIO_LEVEL_HIGH)
#define CH_PIN_Clr()   hal_gpio_write(CH_PIN,TUYA_GPIO_LEVEL_LOW)//EN
#define CH_PIN_Set()   hal_gpio_write(CH_PIN,TUYA_GPIO_LEVEL_HIGH)

#define KEY_CHECK_TIMER_PERIOD      (10)                            //按键定时时间
#define KEY_DECODE_TIME             (20/KEY_CHECK_TIMER_PERIOD)     //消抖时间
#define KEY_LONG_PRESS_TIME    (2000/KEY_CHECK_TIMER_PERIOD)   //长按时间

typedef enum
{
    KEY_UP,
    KEY_DOWN,
    KEY_DECODE,
    KEY_SHORT_DOWN,
    KEY_LONG_DOWN,
}key_state_t;

typedef enum
{
    KEY_NUM_POWER = POWER_KEY_PIN,
    KEY_NUM_UP = GEAR_UP_KEY_PIN,
    KEY_NUM_DOWN = GEAR_DOWN_KEY_PIN,
    KEY_NUM_DUMMY = GPIO_DUMMY,
}key_num_t;

typedef struct oled_key
{
    key_state_t state;
    key_num_t   num;
    UINT8_T  decode_time;
    UINT16_T long_time;
}key_check_t;





void user_key_init(void);




#ifdef __cplusplus
}
#endif

#endif /* __APP_KEY_H__ */

