Type-C 长供电、上电即工作、无软关机,删除 app_boot/app_power 及 DP0 开关相关逻辑, 去掉空占位 app_fan_run 和无效的 usr_timer_pick_mode/rearm(数码管 4ms 扫描已 priority=1, 系统本来就不会进低功耗)。按键 5s 配对 / 12s OTA 改走 key.c 长按分级,去掉自计时与 1~5s 死区。 新增 app_defer,NVM/配对/OTA 只在 ISR 置位、在 500ms 任务上下文落地,避免再在 usr_timer 里写 flash。 规格书与注释同步精简。
99 lines
2.2 KiB
C
99 lines
2.2 KiB
C
/******************************************************************************
|
|
* @file key.h
|
|
* @brief 按键状态机:短按 / 长按 / 释放
|
|
* @author cyWu <1917507415@qq.com>
|
|
* @date 2026.08.25
|
|
* @version V1.0.0,首次发布,实现按键短按/长按/释放状态机
|
|
******************************************************************************/
|
|
|
|
#ifndef __KEY_H__
|
|
#define __KEY_H__
|
|
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
|
|
/*============================================================================*/
|
|
/* 宏定义 */
|
|
/*============================================================================*/
|
|
|
|
#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__ */
|