Files
stm32h7-libopencm3/2gpio-lib/lib/ebtn/ebtn_cb.c
2025-12-29 19:10:44 +08:00

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());
}