1 Star 1 Fork 1

RT-Thread-Mirror / rtpkg_button

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
button.h 4.57 KB
一键复制 编辑 原始数据 按行查看 历史
ijiedev 提交于 2018-11-12 23:43 . update button pkg
#ifndef BUTTON_H
#define BUTTON_H
#include <rthw.h>
#include <rtthread.h>
#include <rtdevice.h>
#include <string.h>
#define BTN_NAME_MAX 32 //Ϊ32ֽ
/*
The button debounce time is 40ms, the recommended calling period is 20ms.
It is considered valid only if the 40ms state is continuously detected, including bounce and press.
*/
//#define CONTINUOS_TRIGGER //Whether to support continuous triggering, do not detect single-click and long-press if you send even
/* Whether to support click and double-click while there is a trigger,
if you choose to enable the macro definition, single-click double-clickback,
but click will delay the response.Because it must be judged whether a
double click is triggered after clicking, the delay time is the double-click
interval BUTTON_DOUBLE_TIME.If you do not enable this macro definition,
it is recommended that there is only one click/double click in the project.
Otherwise, a click will be triggered when the response is double-clicked.
Because the double click must be generated after one press and release.
*/
//#define SINGLE_AND_DOUBLE_TRIGGER
/* Whether long-press release is supported or not. If this macro definition is turned on, a long press is triggered after a long press release.
Otherwise, long press is triggered for a long time, the trigger period is determined by BUTTON_LONG_CYCLE*/
//#define LONG_FREE_TRIGGER
#ifndef BUTTON_DEBOUNCE_TIME
#define BUTTON_DEBOUNCE_TIME 2 //Debounce time (n-1)*call cycle
#endif
#ifndef BUTTON_CONTINUOS_CYCLE
#define BUTTON_CONTINUOS_CYCLE 1 //Double-click the trigger cycle time (n-1)*call cycle
#endif
#ifndef BUTTON_LONG_CYCLE
#define BUTTON_LONG_CYCLE 1 //Long press trigger cycle time (n-1)*call cycle
#endif
#ifndef BUTTON_DOUBLE_TIME
#define BUTTON_DOUBLE_TIME 15 //Double click interval (n-1)*call cycle Recommended at 200-600ms
#endif
#ifndef BUTTON_LONG_TIME
#define BUTTON_LONG_TIME 50 //For n seconds ((n-1)*call cycle)ms, think long press event
#endif
#define TRIGGER_CB(event) \
if(btn->CallBack_Function[event]) \
btn->CallBack_Function[event]((Button_t*)btn)
typedef void (*Button_CallBack)(void*); //The button triggers the callback function and needs to be implemented by the user.
typedef enum {
BUTTON_DOWM = 0,
BUTTON_UP,
BUTTON_DOUBLE,
BUTTON_LONG,
BUTTON_LONG_FREE,
BUTTON_CONTINUOS,
BUTTON_CONTINUOS_FREE,
BUTTON_ALL_RIGGER,
number_of_event, /* The event that triggered the callback */
NONE_TRIGGER
}Button_Event;
/*
Each button corresponds to a global structure variable.
Its member variables are necessary to implement filtering and multiple button states.
*/
typedef struct button
{
/* The following is a function pointer pointing to the function that determines whether the button is pressed or not. */
rt_uint8_t (*Read_Button_Level)(void); /* Read the button level function, you need to implement */
char Name[BTN_NAME_MAX];
rt_uint8_t Button_State : 4; /* The current state of the button (pressed or bounced) */
rt_uint8_t Button_Last_State : 4; /* The last button state used to determine the double click */
rt_uint8_t Button_Trigger_Level : 2; /* Button trigger level */
rt_uint8_t Button_Last_Level : 2; /* Button current level */
rt_uint8_t Button_Trigger_Event; /* Button trigger event, click, double click, long press, etc. */
Button_CallBack CallBack_Function[number_of_event];
rt_uint8_t Button_Cycle; /* Continuous button cycle */
rt_uint8_t Timer_Count; /* Timing */
rt_uint8_t Debounce_Time; /* Debounce time */
rt_uint8_t Long_Time; /* Button press duration */
struct button *Next;
}Button_t;
/* Function declaration for external calls */
void Button_Create(const char *name,
Button_t *btn,
rt_uint8_t(*read_btn_level)(void),
rt_uint8_t btn_trigger_level);
void Button_Attach(Button_t *btn,Button_Event btn_event,Button_CallBack btn_callback);
void Button_Cycle_Process(Button_t *btn);
void Button_Process(void);
void Button_Delete(Button_t *btn);
void Search_Button(void);
void Get_Button_EventInfo(Button_t *btn);
rt_uint8_t Get_Button_Event(Button_t *btn);
rt_uint8_t Get_Button_State(Button_t *btn);
void Button_Process_CallBack(void *btn);
#endif
1
https://gitee.com/RT-Thread-Mirror/rtpkg_button.git
git@gitee.com:RT-Thread-Mirror/rtpkg_button.git
RT-Thread-Mirror
rtpkg_button
rtpkg_button
master

搜索帮助