91 lines
2.1 KiB
C
91 lines
2.1 KiB
C
#include "ebtn_cb.h"
|
|
|
|
/* ---------------- 按钮参数配置 ---------------- */
|
|
static const ebtn_btn_param_t default_param = EBTN_PARAMS_INIT
|
|
(
|
|
20, // 按下去抖时间(ms)
|
|
20, // 释放去抖时间(ms)
|
|
20, // 点击最短时间(ms)
|
|
300, // 点击最长时间(ms)
|
|
200, // 连击间隔最大值(ms)
|
|
500, // 长按KEEPALIVE间隔(ms)
|
|
10 // 最大连续点击次数
|
|
);
|
|
|
|
/* ---------------- 按钮ID定义 ---------------- */
|
|
typedef enum
|
|
{
|
|
USER_BUTTON1 = 0,
|
|
USER_BUTTON_MAX,
|
|
} user_button_t;
|
|
|
|
/* ---------------- 按钮对象 ---------------- */
|
|
static ebtn_btn_t btns[] =
|
|
{
|
|
EBTN_BUTTON_INIT(USER_BUTTON1, &default_param),
|
|
};
|
|
|
|
/* ---------------- 获取按键状态 ---------------- */
|
|
static uint8_t prv_btn_get_state(struct ebtn_btn* btn)
|
|
{
|
|
switch(btn->key_id)
|
|
{
|
|
case USER_BUTTON1:
|
|
return gpio_get(GPIOC, GPIO13) == GPIO13;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* ---------------- 事件回调函数 ---------------- */
|
|
static void prv_btn_event(struct ebtn_btn* btn, ebtn_evt_t evt)
|
|
{
|
|
switch(evt)
|
|
{
|
|
case EBTN_EVT_ONPRESS:
|
|
|
|
break;
|
|
case EBTN_EVT_ONRELEASE:
|
|
|
|
break;
|
|
case EBTN_EVT_ONCLICK:
|
|
if((ebtn_click_get_count(btn) == 2) && (btn->key_id == USER_BUTTON1))
|
|
{
|
|
gpio_toggle(GPIOE, GPIO3);
|
|
}
|
|
//printf("[BTN %d] Clicked, count=%d\r\n", btn->key_id, ebtn_click_get_count(btn));
|
|
break;
|
|
case EBTN_EVT_KEEPALIVE:
|
|
if(btn->key_id == USER_BUTTON1)
|
|
{
|
|
gpio_toggle(GPIOE, GPIO3);
|
|
}
|
|
//printf("[BTN %d] Keepalive, cnt=%d\r\n", btn->key_id, ebtn_keepalive_get_count(btn));
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* ---------------- 系统时间 ---------------- */
|
|
static uint32_t ebtn_user_get_tick(void)
|
|
{
|
|
return systick;
|
|
}
|
|
|
|
/* ---------------- 初始化函数 ---------------- */
|
|
void ebtn_user_init(void)
|
|
{
|
|
ebtn_init(btns,
|
|
EBTN_ARRAY_SIZE(btns),
|
|
NULL, 0, // 无组合键
|
|
prv_btn_get_state,
|
|
prv_btn_event);
|
|
}
|
|
|
|
/* ---------------- 周期处理函数 ---------------- */
|
|
void ebtn_user_process(void)
|
|
{
|
|
ebtn_process(ebtn_user_get_tick());
|
|
}
|