From 23a8e5ae65520741698ac6aa5af52912d3ad996c Mon Sep 17 00:00:00 2001 From: AlvinHsiao Date: Wed, 26 Apr 2023 21:06:20 +0800 Subject: [PATCH] [Infineon] Implement button wake up handler (#26178) * Add API to re-send the pending event if wake up from button. --- .../include/wiced_button_manager.h | 7 ++++++ .../cyw30739_sdk/src/wiced_button_manager.c | 23 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/third_party/infineon/cyw30739_sdk/include/wiced_button_manager.h b/third_party/infineon/cyw30739_sdk/include/wiced_button_manager.h index 6162dc95b830c8..65091250a0d809 100644 --- a/third_party/infineon/cyw30739_sdk/include/wiced_button_manager.h +++ b/third_party/infineon/cyw30739_sdk/include/wiced_button_manager.h @@ -229,6 +229,13 @@ extern wiced_result_t wiced_button_manager_init(button_manager_t * manager, */ extern wiced_result_t wiced_button_manager_deinit(button_manager_t * manager); +/** + * Checks if there is pending event and then re-send the event. + * + * @return void : no return value is expected. + */ +extern void wiced_button_manager_pending_event_handle(void); + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/third_party/infineon/cyw30739_sdk/src/wiced_button_manager.c b/third_party/infineon/cyw30739_sdk/src/wiced_button_manager.c index 9309b5a78aaa9c..c8761c6e354023 100644 --- a/third_party/infineon/cyw30739_sdk/src/wiced_button_manager.c +++ b/third_party/infineon/cyw30739_sdk/src/wiced_button_manager.c @@ -44,6 +44,7 @@ #include "wiced_memory.h" #include "wiced_misc_rtos_utils.h" #endif +#include /****************************************************** * Macros @@ -675,6 +676,28 @@ static button_manager_button_t * get_button(platform_button_t id) return NULL; } +/** + * Checks if there is pending event and then re-send the event. + * + * @return void : no return value is expected. + */ +void wiced_button_manager_pending_event_handle(void) +{ + uint32_t a; + if (wiced_sleep_get_boot_mode() == WICED_SLEEP_FAST_BOOT) + { + for (a = 0; a < button_manager->number_of_buttons; a++) + { + if (platform_button_pending_event_get_and_clear(button_manager->buttons[a].configuration->button)) + { + button_manager->configuration->event_handler(&button_manager->buttons[a], BUTTON_CLICK_EVENT, + BUTTON_STATE_RELEASED); + break; + } + } + } +} + #ifdef CYW55572 static void button_event_defer_to_mpaf(void * arg) {