新增 usr_app 产品逻辑:手动>定时>条件仲裁、条件控温湿、定时任务、数码管显示、 按键/LED、风扇档位、NVM 掉电恢复、配对与开关机,上电按规格恢复上次状态。 新增 usr_periph:AHT20、CT1642、板级引脚与硬件封装;见宝协议 cond_config 改为 7 字节编解码,并接入产品 DP。 补充《温湿度风扇_固件需求规格书》,工程加入对应源文件。 .gitignore 忽略 WorkBuddy/Cursor 本地会话
101 lines
2.3 KiB
C
101 lines
2.3 KiB
C
/******************************************************************************
|
|
* @file key.h
|
|
* @brief 按键状态机:短按 / 长按 / 释放
|
|
* @author cyWu <1917507415@qq.com>
|
|
* @date 2026.08.25
|
|
* @version V1.0.0
|
|
* @history
|
|
* - V1.0.0, 2026.08.25, cyWu, 首次发布,实现按键短按/长按/释放状态机
|
|
******************************************************************************/
|
|
|
|
#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__ */
|