Files
ESPC3-wireless/app/button/button.c

70 lines
1.6 KiB
C
Raw Normal View History

2025-02-18 17:41:45 +08:00
#include "button.h"
#include "multi_button.h"
#include "drivers/chip/gpio.h"
#include "os/os.h"
#define CONFIG_SYS_LOG_LEVEL SYS_LOG_LEVEL_WRN
#define SYS_LOG_DOMAIN "BUTTON"
#include "sys_log.h"
static os_work_t s_work_hdl;
static uint8_t _port_pin_level(uint8_t button_id);
static void _work_handler_button(void *pvParameter);
/**
* @brief
*
* @param pin
* @param cb
* @param event_mask @ref EVENT_MASK
* @retval handler
*/
button_hdl_t *btn_attach(const cfg_board_pin_io_t *pin,
button_callback_fn cb,
uint8_t event_mask)
{
button_hdl_t *handle = os_malloc(sizeof(button_hdl_t));
if (handle == NULL)
{
SYS_LOG_WRN("operation fail");
return NULL;
}
drv_gpio_pin_configure(pin->pin, _GPIO_DIR_IN, pin->en_lev ? _GPIO_PUD_PULL_DOWN : _GPIO_PUD_PULL_UP);
button_init(handle, _port_pin_level, pin->en_lev, pin->pin);
button_attach(handle, event_mask, cb);
button_start(handle);
os_work_create_default(&s_work_hdl, "", _work_handler_button, NULL, OS_PRIORITY_HIGHEST, 10);
return 0;
}
void btn_delete(button_hdl_t *handler)
{
if (handler)
{
button_stop(handler);
os_free(handler);
}
}
press_event_t btn_get_event(button_hdl_t *handle)
{
return get_button_event(handle);
}
static void _work_handler_button(void *pvParameter)
{
os_work_later(TICKS_INTERVAL);
button_ticks();
}
static uint8_t _port_pin_level(uint8_t button_id)
{
return drv_gpio_pin_read(button_id);
}