From 73d5ef247eeee6c3d023ce5e2ba3c04e3fc372ed Mon Sep 17 00:00:00 2001 From: Rahul Gurram Date: Wed, 1 Oct 2025 17:22:01 +0530 Subject: [PATCH] wiseconnect: Resolved issues when multiple events are set in si91x bus events. It was observed that when one event is set and another event is subsequently set, the first event gets cleared prematurely before it can be processed. To address this, the osEventFlagsWait call was updated to use the osFlagsNoClear option, which prevents automatic clearing of events upon retrieval. Events are now manually cleared after they are read, ensuring that all set events are reliably processed and none are missed due to premature clearing caused by subsequent event updates. Signed-off-by: Rahul Gurram --- .../device/silabs/si91x/wireless/src/sl_rsi_utility.c | 2 +- .../sli_wifi_command_engine/src/sli_wifi_command_engine.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/wiseconnect/components/device/silabs/si91x/wireless/src/sl_rsi_utility.c b/wiseconnect/components/device/silabs/si91x/wireless/src/sl_rsi_utility.c index 647a97534..82e4a5478 100644 --- a/wiseconnect/components/device/silabs/si91x/wireless/src/sl_rsi_utility.c +++ b/wiseconnect/components/device/silabs/si91x/wireless/src/sl_rsi_utility.c @@ -1839,7 +1839,7 @@ uint32_t sli_si91x_wait_for_event(uint32_t event_mask, uint32_t timeout) uint32_t si91x_host_wait_for_bus_event(uint32_t event_mask, uint32_t timeout) { - uint32_t result = osEventFlagsWait(si91x_bus_events, event_mask, osFlagsWaitAny, timeout); + uint32_t result = osEventFlagsWait(si91x_bus_events, event_mask, osFlagsWaitAny | osFlagsNoClear, timeout); if (result == (uint32_t)osErrorTimeout || result == (uint32_t)osErrorResource) { return 0; diff --git a/wiseconnect/components/sli_wifi_command_engine/src/sli_wifi_command_engine.c b/wiseconnect/components/sli_wifi_command_engine/src/sli_wifi_command_engine.c index 4d156a350..34ef26ced 100644 --- a/wiseconnect/components/sli_wifi_command_engine/src/sli_wifi_command_engine.c +++ b/wiseconnect/components/sli_wifi_command_engine/src/sli_wifi_command_engine.c @@ -45,6 +45,7 @@ * Variable Definitions ******************************************************/ static osThreadId_t command_engine_ID = 0; +extern osEventFlagsId_t si91x_bus_events; /****************************************************** * Function Declarations @@ -117,6 +118,7 @@ void sli_wifi_command_engine(void *args) events_received |= sli_wifi_command_engine_wait_for_event(events_to_wait_on, wait_time); + osEventFlagsClear(si91x_bus_events, events_received); if (events_received & SLI_WLAN_TERMINATE_THREAD_EVENT) { // Clear the termination event flag events_received &= ~SLI_WLAN_TERMINATE_THREAD_EVENT;