更新按键驱动
This commit is contained in:
69
app/button/button.c
Normal file
69
app/button/button.c
Normal file
@@ -0,0 +1,69 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user