From 9e7c988e68fe862f0d8a5b40b0863ef22b6aaead Mon Sep 17 00:00:00 2001 From: CloverGit Date: Thu, 5 May 2022 02:04:15 +0800 Subject: [PATCH 1/3] fix incompatible function pointer type --- multi_button.c | 2 +- multi_button.h | 42 +++++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/multi_button.c b/multi_button.c index 878885d..86b3459 100644 --- a/multi_button.c +++ b/multi_button.c @@ -18,7 +18,7 @@ static struct Button* head_handle = NULL; * @param button_id: the button id. * @retval None */ -void button_init(struct Button* handle, uint8_t(*pin_level)(), uint8_t active_level, uint8_t button_id) +void button_init(struct Button* handle, uint8_t(*pin_level)(uint8_t button_id), uint8_t active_level, uint8_t button_id) { memset(handle, 0, sizeof(struct Button)); handle->event = (uint8_t)NONE_PRESS; diff --git a/multi_button.h b/multi_button.h index b066ade..8e11c1a 100644 --- a/multi_button.h +++ b/multi_button.h @@ -19,36 +19,36 @@ 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 +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; +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 active_level, uint8_t button_id); +void button_init(struct Button* handle, uint8_t(*pin_level)(uint8_t button_id), 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); From c66f2a27aef31494640b40cb9206ddd2ed3363f7 Mon Sep 17 00:00:00 2001 From: CloverGit Date: Thu, 5 May 2022 02:10:17 +0800 Subject: [PATCH 2/3] add default case for switch --- multi_button.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/multi_button.c b/multi_button.c index 86b3459..9097b97 100644 --- a/multi_button.c +++ b/multi_button.c @@ -148,6 +148,9 @@ void button_handler(struct Button* handle) handle->state = 0; //reset } break; + default: + handle->state = 0; //reset + break; } } From b7305ffce13037b6be92b24000aaaf3cd9a56996 Mon Sep 17 00:00:00 2001 From: CloverGit Date: Thu, 5 May 2022 15:47:43 +0800 Subject: [PATCH 3/3] refactor hal_button_Level callback type --- multi_button.c | 2 +- multi_button.h | 45 +++++++++++++++++++++++---------------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/multi_button.c b/multi_button.c index 9097b97..3ed7048 100644 --- a/multi_button.c +++ b/multi_button.c @@ -18,7 +18,7 @@ static struct Button* head_handle = NULL; * @param button_id: the button id. * @retval None */ -void button_init(struct Button* handle, uint8_t(*pin_level)(uint8_t button_id), uint8_t active_level, uint8_t button_id) +void button_init(struct Button* handle, BtnLevelCallback pin_level, uint8_t active_level, uint8_t button_id) { memset(handle, 0, sizeof(struct Button)); handle->event = (uint8_t)NONE_PRESS; diff --git a/multi_button.h b/multi_button.h index 8e11c1a..ded428d 100644 --- a/multi_button.h +++ b/multi_button.h @@ -16,39 +16,40 @@ #define LONG_TICKS (1000 /TICKS_INTERVAL) -typedef void (*BtnCallback)(void*); +typedef void (*BtnCallback)(void *); +typedef uint8_t (*BtnLevelCallback)(uint8_t); typedef enum { -PRESS_DOWN = 0, -PRESS_UP, -PRESS_REPEAT, -SINGLE_CLICK, -DOUBLE_CLICK, -LONG_PRESS_START, -LONG_PRESS_HOLD, -number_of_event, -NONE_PRESS + 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; + 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; + BtnLevelCallback hal_button_Level; + 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 button_id), uint8_t active_level, uint8_t button_id); +void button_init(struct Button* handle, BtnLevelCallback pin_level, 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);