129 lines
4.0 KiB
C
129 lines
4.0 KiB
C
/**
|
||
******************************************************************************
|
||
* @file hc32_key_driver.h
|
||
* @author (C)2020, Qindao ieslab Co., Ltd
|
||
* @version V1.0
|
||
* @date 2020-7-1
|
||
* @brief the function of the entity of system processor
|
||
******************************************************************************
|
||
*/
|
||
|
||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||
|
||
#ifndef __UWater_KEY_DRIVER_H
|
||
#define __UWater_KEY_DRIVER_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#include "ddl.h"
|
||
#include "type.h"
|
||
#include "sys_config.h"
|
||
|
||
/* MACRO Define---------------------------------------------------------------*/
|
||
|
||
|
||
#if (HARDWARE_VERSION==0x14)//方壳表
|
||
//磁敏按键IO配置
|
||
#define KEY_GPIO GpioPortE //HD霍尔按键
|
||
#define KEY_PIN GpioPin11 //HD霍尔按键
|
||
|
||
#define KEY_IRQ PORTC_E_IRQn
|
||
#define KEY_PRIORITY (IrqLevel3)
|
||
//触摸按键IO配置
|
||
#define TCH_KEY_GPIO GpioPortC //HD触摸按键中断
|
||
#define TCH_KEY_PIN GpioPin10 //HD触摸按键
|
||
|
||
#define TCH_KEY_POWER_GPIO GpioPortF //HD触摸按键电源
|
||
#define TCH_KEY_POWER_PIN GpioPin6 //HD触摸按键电源
|
||
|
||
#define TCH_KEY_IRQ PORTC_E_IRQn
|
||
#define TCH_KEY_PRIORITY (IrqLevel3)
|
||
|
||
#elif (HARDWARE_VERSION==0x18)//圆壳表
|
||
//磁敏按键IO配置
|
||
#define KEY_GPIO GpioPortE //HD霍尔按键
|
||
#define KEY_PIN GpioPin11 //HD霍尔按键
|
||
|
||
#define KEY_IRQ PORTC_E_IRQn
|
||
#define KEY_PRIORITY (IrqLevel3)
|
||
|
||
//触摸按键IO配置
|
||
#define TCH_KEY_GPIO GpioPortC //HD触摸按键中断
|
||
#define TCH_KEY_PIN GpioPin13 //HD触摸按键
|
||
|
||
#define TCH_KEY_POWER_GPIO GpioPortF //HD触摸按键电源
|
||
#define TCH_KEY_POWER_PIN GpioPin1 //HD触摸按键电源
|
||
|
||
#define TCH_KEY_IRQ PORTC_E_IRQn
|
||
#define TCH_KEY_PRIORITY (IrqLevel3)
|
||
#endif
|
||
//按键按下 (需要根据硬件设计修改低电平是按下还是高电平是按下)
|
||
#define KEY_NO_PRESS (u32)1
|
||
#define KEY_PRESS (u32)(!KEY_NO_PRESS)
|
||
|
||
//中断边沿
|
||
#define KEY_RISING_EDGE 0
|
||
#define KEY_FALLING_EDGE (!KEY_RISING_EDGE)
|
||
|
||
//按键类型
|
||
#define NONE_KEY 0
|
||
#define MEGNET_KEY 1
|
||
#define TOUCH_KEY 2
|
||
|
||
//按键事件
|
||
#define NO_EVENT 0x00 //无操作
|
||
#define SHORT_PRESS 0x01 //短按事件
|
||
#define LONG_PRESS 0x02 //长按事件
|
||
#define ERR_PRESS 0x04 //按键异常事件
|
||
#define LONGLONG_PRESS 0x08 //长按触发事件
|
||
|
||
#define SHORT_START 1 //短按起始时间
|
||
#define SHORT_END 200 //短按截止时间
|
||
#define LONG_INTERVAL 100 //长按MSG间隔时间
|
||
#define LONG_END 60 //长按截止时间 60s,测试完成修改为60s
|
||
|
||
|
||
//采用间隔
|
||
#define KEY_CHECK_TIME 2 //10ms检测一次
|
||
//触摸按键每日限制使用次数
|
||
#define TCH_PRESS_LIMIT_CNT 30
|
||
//状态机状态
|
||
#define KEY_M_S0 0 //按键驱动状态机状态号
|
||
#define KEY_M_S1 1 //按键驱动状态机状态号
|
||
#define KEY_M_S2 2 //按键驱动状态机状态号
|
||
#define KEY_M_S3 3 //按键驱动状态机状态号
|
||
#define KEY_M_S4 4 //按键驱动状态机状态号
|
||
#define KEY_M_S5 5 //按键驱动状态机状态号
|
||
#define KEY_M_S6 6 //按键驱动状态机状态号
|
||
#define KEY_M_S7 7 //按键驱动状态机状态号
|
||
#define KEY_M_S8 8 //按键驱动状态机状态号
|
||
#define KEY_M_S9 9 //按键驱动状态机状态号
|
||
|
||
//外部中断线
|
||
#define EXTI0_OPEN 0 //A
|
||
#define EXTI1_OPEN 0 //B
|
||
#define EXTI2_OPEN 1 //C
|
||
#define EXTI3_OPEN 0 //D
|
||
#define EXTI4_OPEN 1 //E
|
||
#define EXTI5_OPEN 0 //F
|
||
|
||
|
||
/* Function Declare------------------------------------------------------------*/
|
||
void KeyInit(void); //按键初始化
|
||
u8 KeyIfIdle(void); //按键是否空闲
|
||
void KeyMachineDriver(void); //按键主状态机
|
||
u8 KeyCheckMsg(void); //检测按键消息
|
||
void KeyClearMsg(u8 msg); //清除按键消息
|
||
u8 KeyIfSleep(void); //按键是否允许休眠
|
||
void KeyPreSleep(void); //按键休眠前接口
|
||
void KeyWakeSleep(void); //按键唤醒接口
|
||
u8 TchKey_GetPressLimitState(void);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* __UWater_KEY_DRIVER_H */
|