initial commit
This commit is contained in:
103
components/port_bsp/button_bsp.c
Normal file
103
components/port_bsp/button_bsp.c
Normal file
@@ -0,0 +1,103 @@
|
||||
#include <stdio.h>
|
||||
#include <driver/gpio.h>
|
||||
#include <esp_log.h>
|
||||
#include <esp_timer.h>
|
||||
#include "button_bsp.h"
|
||||
#include "multi_button.h"
|
||||
|
||||
EventGroupHandle_t BootButtonGroups;
|
||||
EventGroupHandle_t GP18ButtonGroups;
|
||||
|
||||
static Button BootButton; // Application button
|
||||
#define BOOT_KEY_PIN 0 // Actual GPIO
|
||||
#define BOOT_ID 1 // Button ID
|
||||
#define BOOT_Active 0 // Valid level
|
||||
|
||||
static Button GP18Button;
|
||||
#define GP18_KEY_PIN 18
|
||||
#define GP18_ID 2
|
||||
#define GP18_Active 0
|
||||
|
||||
/*******************Callback event declaration***************/
|
||||
static void on_boot_single_click(Button *btn_handle) {
|
||||
xEventGroupSetBits(BootButtonGroups, set_bit_button(0));
|
||||
}
|
||||
|
||||
static void on_boot_double_click(Button *btn_handle) {
|
||||
xEventGroupSetBits(BootButtonGroups, set_bit_button(1));
|
||||
}
|
||||
|
||||
static void on_boot_long_press_start(Button *btn_handle) {
|
||||
xEventGroupSetBits(BootButtonGroups, set_bit_button(2));
|
||||
}
|
||||
|
||||
static void on_gp18_single_click(Button *btn_handle) {
|
||||
xEventGroupSetBits(GP18ButtonGroups, set_bit_button(0));
|
||||
}
|
||||
|
||||
static void on_gp18_double_click(Button *btn_handle) {
|
||||
xEventGroupSetBits(GP18ButtonGroups, set_bit_button(1));
|
||||
}
|
||||
|
||||
static void on_gp18_long_press_start(Button *btn_handle) {
|
||||
xEventGroupSetBits(GP18ButtonGroups, set_bit_button(2));
|
||||
}
|
||||
|
||||
/*********************************************/
|
||||
|
||||
static void clock_task_callback(void *arg) {
|
||||
button_ticks();
|
||||
}
|
||||
|
||||
static uint8_t read_button_GPIO(uint8_t Button_ID) {
|
||||
switch (Button_ID) {
|
||||
case BOOT_ID:
|
||||
return gpio_get_level(BOOT_KEY_PIN);
|
||||
case GP18_ID:
|
||||
return gpio_get_level(GP18_KEY_PIN);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void gpio_init(void) {
|
||||
gpio_config_t gpio_conf = {};
|
||||
gpio_conf.intr_type = GPIO_INTR_DISABLE;
|
||||
gpio_conf.mode = GPIO_MODE_INPUT;
|
||||
gpio_conf.pin_bit_mask = (0x1ULL << BOOT_KEY_PIN) | (0x1ULL << GP18_KEY_PIN);
|
||||
gpio_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
|
||||
gpio_conf.pull_up_en = GPIO_PULLUP_ENABLE;
|
||||
|
||||
ESP_ERROR_CHECK_WITHOUT_ABORT(gpio_config(&gpio_conf));
|
||||
}
|
||||
|
||||
void Custom_ButtonInit(void) {
|
||||
BootButtonGroups = xEventGroupCreate();
|
||||
GP18ButtonGroups = xEventGroupCreate();
|
||||
gpio_init();
|
||||
|
||||
button_init(&BootButton, read_button_GPIO, BOOT_Active, BOOT_ID); // Initialization: Initialize object, callback function, trigger level, key ID
|
||||
button_attach(&BootButton, BTN_SINGLE_CLICK, on_boot_single_click); // Single click event
|
||||
button_attach(&BootButton, BTN_DOUBLE_CLICK, on_boot_double_click); // Double click event
|
||||
button_attach(&BootButton, BTN_LONG_PRESS_START, on_boot_long_press_start); // Long press event
|
||||
|
||||
button_init(&GP18Button, read_button_GPIO, BOOT_Active, GP18_ID);
|
||||
button_attach(&GP18Button, BTN_SINGLE_CLICK, on_gp18_single_click);
|
||||
button_attach(&GP18Button, BTN_DOUBLE_CLICK, on_gp18_double_click);
|
||||
button_attach(&GP18Button, BTN_LONG_PRESS_START, on_gp18_long_press_start);
|
||||
|
||||
esp_timer_create_args_t clock_tick_timer_args = {};
|
||||
clock_tick_timer_args.callback = &clock_task_callback;
|
||||
clock_tick_timer_args.name = "clock_task";
|
||||
clock_tick_timer_args.arg = NULL;
|
||||
esp_timer_handle_t clock_tick_timer = NULL;
|
||||
ESP_ERROR_CHECK(esp_timer_create(&clock_tick_timer_args, &clock_tick_timer));
|
||||
ESP_ERROR_CHECK(esp_timer_start_periodic(clock_tick_timer, 1000 * 5)); // 5ms
|
||||
button_start(&BootButton);
|
||||
button_start(&GP18Button);
|
||||
}
|
||||
|
||||
uint8_t user_boot_get_repeat_count(void) {
|
||||
return (button_get_repeat_count(&BootButton));
|
||||
}
|
||||
Reference in New Issue
Block a user