Merge remote-tracking branch 'ofw/dev' into mntm-dev

This commit is contained in:
Willy-JL
2024-09-09 23:12:13 +02:00
10 changed files with 391 additions and 349 deletions
+11 -8
View File
@@ -4,6 +4,7 @@
#include "kernel.h"
#include <FreeRTOS.h>
#include <event_groups.h>
#include <timers.h>
const char* current_timer_name = NULL;
@@ -12,12 +13,13 @@ struct FuriTimer {
StaticTimer_t container;
FuriTimerCallback cb_func;
void* cb_context;
volatile bool can_be_removed;
};
// IMPORTANT: container MUST be the FIRST struct member
static_assert(offsetof(FuriTimer, container) == 0);
#define TIMER_DELETED_EVENT (1U << 0)
const char* furi_timer_get_current_name(void) {
return current_timer_name;
}
@@ -54,9 +56,8 @@ static void furi_timer_epilogue(void* context, uint32_t arg) {
furi_assert(context);
UNUSED(arg);
FuriTimer* instance = context;
instance->can_be_removed = true;
EventGroupHandle_t hEvent = context;
xEventGroupSetBits(hEvent, TIMER_DELETED_EVENT);
}
void furi_timer_free(FuriTimer* instance) {
@@ -65,11 +66,13 @@ void furi_timer_free(FuriTimer* instance) {
TimerHandle_t hTimer = (TimerHandle_t)instance;
furi_check(xTimerDelete(hTimer, portMAX_DELAY) == pdPASS);
furi_check(xTimerPendFunctionCall(furi_timer_epilogue, instance, 0, portMAX_DELAY) == pdPASS);
while(!instance->can_be_removed) {
furi_delay_tick(2);
}
StaticEventGroup_t event_container;
EventGroupHandle_t hEvent = xEventGroupCreateStatic(&event_container);
furi_check(xTimerPendFunctionCall(furi_timer_epilogue, hEvent, 0, portMAX_DELAY) == pdPASS);
xEventGroupWaitBits(hEvent, TIMER_DELETED_EVENT, 0, pdTRUE, portMAX_DELAY);
vEventGroupDelete(hEvent);
free(instance);
}