From b5a609e174e9669a81b1d79fdada3b7dee0bd206 Mon Sep 17 00:00:00 2001 From: Asklv Date: Tue, 24 Feb 2026 14:00:00 +0800 Subject: [PATCH] refactor: remove button driver and GPIO input code Remove the buttons/ directory including multi_button library and button_driver. Physical button input is not needed for the current headless Telegram/WebSocket interaction model. Signed-off-by: Asklv --- main/buttons/button_driver.c | 62 ----------- main/buttons/button_driver.h | 16 --- main/buttons/multi_button.c | 208 ----------------------------------- main/buttons/multi_button.h | 62 ----------- 4 files changed, 348 deletions(-) delete mode 100644 main/buttons/button_driver.c delete mode 100644 main/buttons/button_driver.h delete mode 100644 main/buttons/multi_button.c delete mode 100644 main/buttons/multi_button.h diff --git a/main/buttons/button_driver.c b/main/buttons/button_driver.c deleted file mode 100644 index efce83f..0000000 --- a/main/buttons/button_driver.c +++ /dev/null @@ -1,62 +0,0 @@ -#include "buttons/button_driver.h" -#include "esp_err.h" -#include "esp_log.h" -#include "esp_timer.h" -#include "driver/gpio.h" - -static void ESP32_Button_init(void){ - gpio_reset_pin(Button_PIN1); - gpio_set_direction(Button_PIN1, GPIO_MODE_INPUT); - gpio_set_pull_mode(Button_PIN1, GPIO_PULLUP_ONLY); -} -static void Timer_Callback(void *arg){ - button_ticks(); -} - -struct Button BUTTON1; -PressEvent BOOT_KEY_State; -static uint8_t Read_Button_GPIO_Level(uint8_t button_id) -{ - if(!button_id) - return (uint8_t)(gpio_get_level(Button_PIN1)); - return 0; -} -static void Button_SINGLE_CLICK_Callback(void* btn){ - struct Button *user_button = (struct Button *)btn; - if(user_button == &BUTTON1){ - BOOT_KEY_State = SINGLE_CLICK; - } -} -static void Button_DOUBLE_CLICK_Callback(void* btn){ - struct Button *user_button = (struct Button *)btn; - if(user_button == &BUTTON1){ - BOOT_KEY_State = DOUBLE_CLICK; - } -} -static void Button_LONG_PRESS_START_Callback(void* btn){ - struct Button *user_button = (struct Button *)btn; - if(user_button == &BUTTON1){ - BOOT_KEY_State= LONG_PRESS_START; - } -} -void button_Init(void) -{ - ESP32_Button_init(); - button_init(&BUTTON1, Read_Button_GPIO_Level, 0 , 0); - button_attach(&BUTTON1, SINGLE_CLICK, Button_SINGLE_CLICK_Callback); - button_attach(&BUTTON1, DOUBLE_CLICK, Button_DOUBLE_CLICK_Callback); - button_attach(&BUTTON1, LONG_PRESS_START, Button_LONG_PRESS_START_Callback); - - const esp_timer_create_args_t clock_tick_timer_args = - { - .callback = &Timer_Callback, - .name = "Timer_task", - .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)); - - BOOT_KEY_State = NONE_PRESS; - button_start(&BUTTON1); -} diff --git a/main/buttons/button_driver.h b/main/buttons/button_driver.h deleted file mode 100644 index 17d896e..0000000 --- a/main/buttons/button_driver.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef BUTTON_BSP_H -#define BUTTON_BSP_H -#include -#include -#include "buttons/multi_button.h" - - -#define BOOT_KEY_PIN 0 - -#define Button_PIN1 BOOT_KEY_PIN - -extern PressEvent BOOT_KEY_State; - -void button_Init(void); - -#endif diff --git a/main/buttons/multi_button.c b/main/buttons/multi_button.c deleted file mode 100644 index 66d1020..0000000 --- a/main/buttons/multi_button.c +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (c) 2016 Zibin Zheng - * All rights reserved - */ - -#include "multi_button.h" - -#define EVENT_CB(ev) if(handle->cb[ev])handle->cb[ev]((void*)handle) -#define PRESS_REPEAT_MAX_NUM 15 /*!< The maximum value of the repeat counter */ - -//button handle list head. -static struct Button* head_handle = NULL; - -static void button_handler(struct Button* handle); - -/** - * @brief Initializes the button struct handle. - * @param handle: the button handle struct. - * @param pin_level: read the HAL GPIO of the connected button level. - * @param active_level: pressed GPIO level. - * @param button_id: the button id. - * @retval None - */ -void button_init(struct Button* handle, uint8_t(*pin_level)(uint8_t), uint8_t active_level, uint8_t button_id) -{ - memset(handle, 0, sizeof(struct Button)); - handle->event = (uint8_t)NONE_PRESS; - handle->hal_button_Level = pin_level; - handle->button_level = !active_level; - handle->active_level = active_level; - handle->button_id = button_id; -} - -/** - * @brief Attach the button event callback function. - * @param handle: the button handle struct. - * @param event: trigger event type. - * @param cb: callback function. - * @retval None - */ -void button_attach(struct Button* handle, PressEvent event, BtnCallback cb) -{ - handle->cb[event] = cb; -} - -/** - * @brief Inquire the button event happen. - * @param handle: the button handle struct. - * @retval button event. - */ -PressEvent get_button_event(struct Button* handle) -{ - return (PressEvent)(handle->event); -} - -/** - * @brief Button driver core function, driver state machine. - * @param handle: the button handle struct. - * @retval None - */ -static void button_handler(struct Button* handle) -{ - uint8_t read_gpio_level = handle->hal_button_Level(handle->button_id); - - //ticks counter working.. - if((handle->state) > 0) handle->ticks++; - - /*------------button debounce handle---------------*/ - if(read_gpio_level != handle->button_level) { //not equal to prev one - //continue read 3 times same new level change - if(++(handle->debounce_cnt) >= DEBOUNCE_TICKS) { - handle->button_level = read_gpio_level; - handle->debounce_cnt = 0; - } - } else { //level not change ,counter reset. - handle->debounce_cnt = 0; - } - - /*-----------------State machine-------------------*/ - switch (handle->state) { - case 0: - if(handle->button_level == handle->active_level) { //start press down - handle->event = (uint8_t)PRESS_DOWN; - EVENT_CB(PRESS_DOWN); - handle->ticks = 0; - handle->repeat = 1; - handle->state = 1; - } else { - handle->event = (uint8_t)NONE_PRESS; - } - break; - - case 1: - if(handle->button_level != handle->active_level) { //released press up - handle->event = (uint8_t)PRESS_UP; - EVENT_CB(PRESS_UP); - handle->ticks = 0; - handle->state = 2; - } else if(handle->ticks > LONG_TICKS) { - handle->event = (uint8_t)LONG_PRESS_START; - EVENT_CB(LONG_PRESS_START); - handle->state = 5; - } - break; - - case 2: - if(handle->button_level == handle->active_level) { //press down again - handle->event = (uint8_t)PRESS_DOWN; - EVENT_CB(PRESS_DOWN); - if(handle->repeat != PRESS_REPEAT_MAX_NUM) { - handle->repeat++; - } - EVENT_CB(PRESS_REPEAT); // repeat hit - handle->ticks = 0; - handle->state = 3; - } else if(handle->ticks > SHORT_TICKS) { //released timeout - if(handle->repeat == 1) { - handle->event = (uint8_t)SINGLE_CLICK; - EVENT_CB(SINGLE_CLICK); - } else if(handle->repeat == 2) { - handle->event = (uint8_t)DOUBLE_CLICK; - EVENT_CB(DOUBLE_CLICK); // repeat hit - } - handle->state = 0; - } - break; - - case 3: - if(handle->button_level != handle->active_level) { //released press up - handle->event = (uint8_t)PRESS_UP; - EVENT_CB(PRESS_UP); - if(handle->ticks < SHORT_TICKS) { - handle->ticks = 0; - handle->state = 2; //repeat press - } else { - handle->state = 0; - } - } else if(handle->ticks > SHORT_TICKS) { // SHORT_TICKS < press down hold time < LONG_TICKS - handle->state = 1; - } - break; - - case 5: - if(handle->button_level == handle->active_level) { - //continue hold trigger - handle->event = (uint8_t)LONG_PRESS_HOLD; - EVENT_CB(LONG_PRESS_HOLD); - } else { //released - handle->event = (uint8_t)PRESS_UP; - EVENT_CB(PRESS_UP); - handle->state = 0; //reset - } - break; - default: - handle->state = 0; //reset - break; - } -} - -/** - * @brief Start the button work, add the handle into work list. - * @param handle: target handle struct. - * @retval 0: succeed. -1: already exist. - */ -int button_start(struct Button* handle) -{ - struct Button* target = head_handle; - while(target) { - if(target == handle) return -1; //already exist. - target = target->next; - } - handle->next = head_handle; - head_handle = handle; - return 0; -} - -/** - * @brief Stop the button work, remove the handle off work list. - * @param handle: target handle struct. - * @retval None - */ -void button_stop(struct Button* handle) -{ - struct Button** curr; - for(curr = &head_handle; *curr; ) { - struct Button* entry = *curr; - if(entry == handle) { - *curr = entry->next; -// free(entry); - return;//glacier add 2021-8-18 - } else { - curr = &entry->next; - } - } -} - -/** - * @brief background ticks, timer repeat invoking interval 5ms. - * @param None. - * @retval None - */ -void button_ticks(void) -{ - struct Button* target; - for(target=head_handle; target; target=target->next) { - button_handler(target); - } -} diff --git a/main/buttons/multi_button.h b/main/buttons/multi_button.h deleted file mode 100644 index 2974168..0000000 --- a/main/buttons/multi_button.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016 Zibin Zheng - * All rights reserved - */ - -#ifndef _MULTI_BUTTON_H_ -#define _MULTI_BUTTON_H_ - -#include -#include - -//According to your need to modify the constants. -#define TICKS_INTERVAL 5 //ms -#define DEBOUNCE_TICKS 3 //MAX 7 (0 ~ 7) -#define SHORT_TICKS (300 /TICKS_INTERVAL) -#define LONG_TICKS (1000 /TICKS_INTERVAL) - - -typedef void (*BtnCallback)(void*); - -typedef enum { - PRESS_DOWN = 0, - PRESS_UP, - PRESS_REPEAT, - SINGLE_CLICK, - DOUBLE_CLICK, - LONG_PRESS_START, - LONG_PRESS_HOLD, - number_of_event, - NONE_PRESS -}PressEvent; - -typedef struct Button { - uint16_t ticks; - uint8_t repeat : 4; - uint8_t event : 4; - uint8_t state : 3; - uint8_t debounce_cnt : 3; - uint8_t active_level : 1; - uint8_t button_level : 1; - uint8_t button_id; - uint8_t (*hal_button_Level)(uint8_t button_id_); - BtnCallback cb[number_of_event]; - struct Button* next; -}Button; - -#ifdef __cplusplus -extern "C" { -#endif - -void button_init(struct Button* handle, uint8_t(*pin_level)(uint8_t), uint8_t active_level, uint8_t button_id); -void button_attach(struct Button* handle, PressEvent event, BtnCallback cb); -PressEvent get_button_event(struct Button* handle); -int button_start(struct Button* handle); -void button_stop(struct Button* handle); -void button_ticks(void); - -#ifdef __cplusplus -} -#endif - -#endif