102 lines
2.4 KiB
C
102 lines
2.4 KiB
C
/******************************************************************************
|
|
* @file key.h
|
|
* @brief 按键状态机:短按 / 长按 / 释放(两键)
|
|
* @author cyWu <1917507415@qq.com>
|
|
* @date 2026.09.09
|
|
* @version V1.0.0
|
|
* @history
|
|
* - V1.0.0, 2026.09.09, cyWu, CBR2 两键版(PB1 喷淋 / PA0 配网),FSM 同加热垫
|
|
******************************************************************************/
|
|
|
|
#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_SPRAY = 0, /**< PB1 喷淋键:只短按(启/停喷淋) */
|
|
USR_KEY_PAIR, /**< PA0 配网键:长按 5s 提示 / 12s OTA */
|
|
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__ */
|