/** * @file key.h * @author chipsea * @brief * @version 0.1 * @date 2020-11-30 * @copyright Copyright (c) 2020, CHIPSEA Co., Ltd. * @note */ /************************************************************** * * * Module Name: key * File name: key.h * Brief description: * key driver module * Data: 2020-06-30 * Revision:V0.01 ****************************************************************/ #ifndef __KEY_H__ #define __KEY_H__ #ifdef __cplusplus extern "C" { #endif #include "types.h" #include "gpio.h" #define HAL_KEY_NUM 1 //config key's number #define HAL_KEY_EVENT 0x4000 //assign short key event in your app event process #define HAL_KEY_SUPPORT_LONG_PRESS //if use long key,please enable it #ifdef HAL_KEY_SUPPORT_LONG_PRESS #define KEY_DEMO_LONG_PRESS_EVT 0x8000 //if use long key,assign long key event in your app process #define HAL_KEY_LONG_PRESS_TIME 3000 //2s #endif #define HAL_KEY_DEBOUNCD 20 //20ms typedef enum{ HAL_STATE_KEY_IDLE = 0x00, HAL_STATE_KEY_PRESS_DEBOUNCE = 0x01, HAL_STATE_KEY_PRESS = 0x02, HAL_STATE_KEY_RELEASE_DEBOUNCE = 0x03, }key_state_e; typedef enum{ HAL_KEY_EVT_IDLE = 0x0000, HAL_KEY_EVT_PRESS = 0x0002, HAL_KEY_EVT_RELEASE = 0x0004, HAL_KEY_EVT_LONG_PRESS = 0x0010, HAL_KEY_EVT_LONG_RELEASE = 0x0020, } key_evt_t; typedef enum{ HAL_LOW_IDLE = 0x00, HAL_HIGH_IDLE = 0x01, }idle_level_e; typedef void (* key_callbank_hdl_t)(uint8_t,key_evt_t); typedef struct gpio_key_t{ GpioPin_t pin; key_state_e state; idle_level_e idle_level; }gpio_key; typedef struct gpio_internal_t{ uint32_t timer_tick; bool in_enable; }gpio_internal; typedef struct key_state{ gpio_key key[HAL_KEY_NUM]; gpio_internal temp[HAL_KEY_NUM]; uint8_t task_id; key_callbank_hdl_t key_callbank; }key_contex_t; void key_init(void); void gpio_key_timer_handler(uint8 index); extern key_contex_t key_state; #ifdef __cplusplus } #endif #endif