/****************************************************************************** * @file key.h * @brief 按键状态机:短按 / 长按 / 释放 * @author cyWu <1917507415@qq.com> * @date 2026.08.25 * @version V1.0.0,首次发布,实现按键短按/长按/释放状态机 ******************************************************************************/ #ifndef __KEY_H__ #define __KEY_H__ #include #include /*============================================================================*/ /* 宏定义 */ /*============================================================================*/ #define KEY_TIMER_MS 1 #define KEY_MAX_NUMBER 12 #define DEBOUNCE_TIME 30 #define KEY_INTERVAL 30 #define CLICK 1 #define DbLCLICK 2 typedef enum { USR_KEY_USER = 0, USR_KEY_COUNT } keyList; typedef enum { Bit_RESET = 0, Bit_SET } BitAction_t; typedef enum { KEY_ST_NULL = 0, KEY_ST_RELEASE, KEY_ST_SURE, KEY_ST_UP, KEY_ST_DOWN, KEY_ST_LONG } keyStatus_t; typedef enum { NULL_Event = 0, DOWN_Event, SHORT_Event, LONG_Event, LAST_Event, DBCL_Event, RELEASE_Event } keyEvent_t; typedef enum { KEY_DISABLE = 0, KEY_ENABLE = !KEY_DISABLE } keyEnable_t; typedef struct { uint8_t keyShortFlag; uint8_t keyLongFlag; uint8_t keyInterval; uint8_t keyFrequency; uint16_t keyLongTime; uint16_t keyLastTime; uint32_t keyCount; keyEnable_t keyShield; BitAction_t keyLevel; BitAction_t keyDownLevel; keyStatus_t keyStatus; keyEvent_t eventType; uint8_t (*keyReadValue)(void); } keyFSM_t; typedef struct { void (*nullPressCb)(void); void (*releasePressCb)(void); void (*downPressCb)(void); void (*ShortPressCb)(void); void (*longPressCb)(void); void (*lastPressCb)(void); void (*dbclPressCb)(void); } keyFunc_t; typedef struct { keyFSM_t fsm; keyFunc_t func; } keyCategory_t; void keyParaInit(keyCategory_t *keys); void setKeyEventParams(uint8_t key_event, keyCategory_t key_param); void keyCheckProcess(void); void keyHandle(void); void reset_key_Status(keyList key_index); #endif /* __KEY_H__ */