Przeglądaj źródła

Replace legacy ValueMutex with Furi mutex

ValueMutex is obsolete since https://github.com/flipperdevices/flipperzero-firmware/pull/2467
Xorboo 2 lat temu
rodzic
commit
f46ebd5984
1 zmienionych plików z 12 dodań i 11 usunięć
  1. 12 11
      roots_of_life_game.c

+ 12 - 11
roots_of_life_game.c

@@ -84,6 +84,8 @@ typedef struct {
 
 
     int rerolls;
     int rerolls;
     int score;
     int score;
+
+    FuriMutex* mutex;
 } GameState;
 } GameState;
 
 
 typedef struct {
 typedef struct {
@@ -565,10 +567,9 @@ static void draw_end_ui(Canvas* canvas, GameState* state) {
 }
 }
 
 
 static void roots_draw_callback(Canvas* const canvas, void* ctx) {
 static void roots_draw_callback(Canvas* const canvas, void* ctx) {
-    GameState* state = acquire_mutex((ValueMutex*)ctx, 25);
-    if(state == NULL) {
-        return;
-    }
+    furi_assert(ctx);
+    GameState* state = ctx;
+    furi_mutex_acquire(state->mutex, FuriWaitForever);
 
 
     if(!state->initialDraw) {
     if(!state->initialDraw) {
         state->initialDraw = true;
         state->initialDraw = true;
@@ -600,7 +601,7 @@ static void roots_draw_callback(Canvas* const canvas, void* ctx) {
         break;
         break;
     }
     }
 
 
-    release_mutex((ValueMutex*)ctx, state);
+    furi_mutex_release(state->mutex);
 }
 }
 
 
 static void roots_input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) {
 static void roots_input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) {
@@ -678,8 +679,8 @@ int32_t roots_of_life_game_app(void* p) {
     GameState* state = malloc(sizeof(GameState));
     GameState* state = malloc(sizeof(GameState));
     game_state_init(state);
     game_state_init(state);
 
 
-    ValueMutex state_mutex;
-    if(!init_mutex(&state_mutex, state, sizeof(GameState))) {
+    state->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
+    if(!state->mutex) {
         FURI_LOG_E(TAG, "Cannot create mutex\r\n");
         FURI_LOG_E(TAG, "Cannot create mutex\r\n");
         return_code = 255;
         return_code = 255;
         goto free_and_exit;
         goto free_and_exit;
@@ -687,7 +688,7 @@ int32_t roots_of_life_game_app(void* p) {
 
 
     // Set system callbacks
     // Set system callbacks
     ViewPort* view_port = view_port_alloc();
     ViewPort* view_port = view_port_alloc();
-    view_port_draw_callback_set(view_port, roots_draw_callback, &state_mutex);
+    view_port_draw_callback_set(view_port, roots_draw_callback, state);
     view_port_input_callback_set(view_port, roots_input_callback, event_queue);
     view_port_input_callback_set(view_port, roots_input_callback, event_queue);
 
 
     FuriTimer* timer =
     FuriTimer* timer =
@@ -702,7 +703,7 @@ int32_t roots_of_life_game_app(void* p) {
     GameEvent event;
     GameEvent event;
     for(bool processing = true; processing;) {
     for(bool processing = true; processing;) {
         FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);
         FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);
-        GameState* state = (GameState*)acquire_mutex_block(&state_mutex);
+        furi_mutex_acquire(state->mutex, FuriWaitForever);
 
 
         if(event_status == FuriStatusOk) {
         if(event_status == FuriStatusOk) {
             // Key events
             // Key events
@@ -733,7 +734,7 @@ int32_t roots_of_life_game_app(void* p) {
         }
         }
 
 
         view_port_update(view_port);
         view_port_update(view_port);
-        release_mutex(&state_mutex, state);
+        furi_mutex_release(state->mutex);
     }
     }
 
 
     furi_timer_free(timer);
     furi_timer_free(timer);
@@ -742,7 +743,7 @@ int32_t roots_of_life_game_app(void* p) {
     furi_record_close(RECORD_GUI);
     furi_record_close(RECORD_GUI);
     furi_record_close(RECORD_NOTIFICATION);
     furi_record_close(RECORD_NOTIFICATION);
     view_port_free(view_port);
     view_port_free(view_port);
-    delete_mutex(&state_mutex);
+    furi_mutex_free(state->mutex);
 
 
 free_and_exit:
 free_and_exit:
     FURI_LOG_D(TAG, "Quitting game...");
     FURI_LOG_D(TAG, "Quitting game...");