diff --git a/BLE/BLE_Utils.c b/BLE/BLE_Utils.c index a0030f4..ebce04b 100644 --- a/BLE/BLE_Utils.c +++ b/BLE/BLE_Utils.c @@ -22,6 +22,7 @@ #include #include #include +#include "SystemK.h" const uint8_t BLE_BROADCAST_ADDRESS[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; @@ -51,4 +52,60 @@ const char *BLE_ADDR_To_Str(const uint8_t bd_addr[6]) str_addr[17] = '\0'; // Ensure null termination. return str_addr; +} + +SystemKResult_T BLE_HandleCommonEvents(KEvent_T *event) +{ + SystemKResult_T result = SYSTEMK_RESULT_EVENT_NOT_HANDLED; + + if (event->ID == KEVENT_BLE_PACKET_RECEIVED) + { + BLE_Packet_T * packet = (BLE_Packet_T *)event->Data; + + if (packet->Generic.type == BLE_PACKET_TYPE_EVENT) + { + BLE_EventPacket_T * event_packet = (BLE_EventPacket_T *)packet; + + if (BLE_IsBLEPacketForMe(event_packet->target_BD_ADDR)) + { + if (BLE_IsPacketNew(event_packet->BD_ADDR, BLE_PACKET_TYPE_EVENT, event_packet->event_number)) + { + if (event_packet->event_ID == BLE_EVENT_QUIET) + { + uint32_t duration_ms = event_packet->event_data; + if (BLE_Quiet(duration_ms) == SYSTEMK_RESULT_SUCCESS) + { + if (duration_ms > 0) + { + KLOG_INFO("BLE", "Quiet mode activated for %lu ms.", duration_ms); + } + else + { + KLOG_INFO("BLE", "Quiet mode activated until further notice."); + } + } + else + { + KLOG_ERROR("BLE", "Failed to activate quiet mode."); + } + result = SYSTEMK_RESULT_SUCCESS; + } + else if (event_packet->event_ID == BLE_EVENT_UNQUIET) + { + if (BLE_Unquiet() == SYSTEMK_RESULT_SUCCESS) + { + KLOG_INFO("BLE", "Quiet mode deactivated."); + } + else + { + KLOG_ERROR("BLE", "Failed to deactivate quiet mode."); + } + result = SYSTEMK_RESULT_SUCCESS; + } + } + } + } + } + + return result; } \ No newline at end of file diff --git a/BLE/BLE_Utils.h b/BLE/BLE_Utils.h index 84837df..c52efc0 100644 --- a/BLE/BLE_Utils.h +++ b/BLE/BLE_Utils.h @@ -19,6 +19,7 @@ * file in the root of this repository. If not, see . */ - extern const uint8_t BLE_BROADCAST_ADDRESS[6]; +extern const uint8_t BLE_BROADCAST_ADDRESS[6]; - const char* BLE_ADDR_To_Str(const uint8_t bd_addr[6]); \ No newline at end of file +const char* BLE_ADDR_To_Str(const uint8_t bd_addr[6]); +SystemKResult_T BLE_HandleCommonEvents(KEvent_T *event); \ No newline at end of file diff --git a/Events/KEvents.c b/Events/KEvents.c index cf81f90..8b1f052 100755 --- a/Events/KEvents.c +++ b/Events/KEvents.c @@ -61,7 +61,11 @@ void Init_KEvents(void) void Post_KEvent(KEvent_T *event) { Remap_Event(event); - xQueueSend(xQueueEvents, event, 0); + if (BLE_HandleCommonEvents(event) == SYSTEMK_RESULT_EVENT_NOT_HANDLED) + { + // If the event was not handled by the BLE subsystem, post it to the global event queue. + xQueueSend(xQueueEvents, event, 0); + } } void Post_KEvent_From_ISR(KEvent_T *event, portBASE_TYPE *xHigherPriorityTaskWoken) diff --git a/Results.h b/Results.h index 45959aa..b360ce5 100644 --- a/Results.h +++ b/Results.h @@ -44,7 +44,8 @@ typedef enum SYSTEMK_RESULT_READ_FAILED, SYSTEMK_RESULT_WRITE_FAILED, SYSTEMK_RESULT_OVERFLOW, - SYSTEMK_RESULT_UNDERFLOW + SYSTEMK_RESULT_UNDERFLOW, + SYSTEMK_RESULT_EVENT_NOT_HANDLED } SystemKResult_T; #endif // RESULTS_H diff --git a/States/State_Configuring.c b/States/State_Configuring.c index f11203e..cbe16aa 100644 --- a/States/State_Configuring.c +++ b/States/State_Configuring.c @@ -34,8 +34,7 @@ static TickType_t xBLEConfigurationResponseTimerPeriod = 3000 / portTICK_PERIOD_ static void BLEConfigurationResponseTimerCallback(TimerHandle_t xTimer) { - // Don't send HELLO packets once configuration has started. - BLE_StopAdvertising(); + BLE_UpdateHelloPacket(); } #define MAX_MENU_DEPTH 10