Tibor Tálosi 2 лет назад
Родитель
Сommit
867a968f66
2 измененных файлов с 20 добавлено и 18 удалено
  1. 19 18
      blackjack.c
  2. 1 0
      defines.h

+ 19 - 18
blackjack.c

@@ -34,7 +34,8 @@ static void draw_ui(Canvas *const canvas, const GameState *game_state) {
 }
 
 static void render_callback(Canvas *const canvas, void *ctx) {
-    const GameState *game_state = acquire_mutex((ValueMutex *) ctx, 25);
+    const GameState *game_state = ctx;
+    furi_mutex_acquire(game_state->mutex, 25);
 
     if (game_state == NULL) {
         return;
@@ -61,7 +62,7 @@ static void render_callback(Canvas *const canvas, void *ctx) {
         settings_page(canvas, game_state);
     }
 
-    release_mutex((ValueMutex *) ctx, game_state);
+    furi_mutex_release(game_state->mutex);
 }
 
 //region card draw
@@ -484,15 +485,15 @@ int32_t blackjack_app(void *p) {
 
     game_state->state = GameStateStart;
 
-    ValueMutex state_mutex;
-    if (!init_mutex(&state_mutex, game_state, sizeof(GameState))) {
+    game_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
+    if (!game_state->mutex) {
         FURI_LOG_E(APP_NAME, "cannot create mutex\r\n");
         return_code = 255;
         goto free_and_exit;
     }
 
     ViewPort *view_port = view_port_alloc();
-    view_port_draw_callback_set(view_port, render_callback, &state_mutex);
+    view_port_draw_callback_set(view_port, render_callback, game_state);
     view_port_input_callback_set(view_port, input_callback, event_queue);
 
     FuriTimer *timer =
@@ -506,48 +507,48 @@ int32_t blackjack_app(void *p) {
 
     for (bool processing = true; processing;) {
         FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);
-        GameState *localstate = (GameState *) acquire_mutex_block(&state_mutex);
+        furi_mutex_acquire(game_state->mutex, FuriWaitForever);
         if (event_status == FuriStatusOk) {
             if (event.type == EventTypeKey) {
 
                 if (event.input.type == InputTypePress) {
                     switch (event.input.key) {
                         case InputKeyUp:
-                            localstate->selectDirection = DirectionUp;
+                            game_state->selectDirection = DirectionUp;
                             break;
                         case InputKeyDown:
-                            localstate->selectDirection = DirectionDown;
+                            game_state->selectDirection = DirectionDown;
                             break;
                         case InputKeyRight:
-                            localstate->selectDirection = DirectionRight;
+                            game_state->selectDirection = DirectionRight;
                             break;
                         case InputKeyLeft:
-                            localstate->selectDirection = DirectionLeft;
+                            game_state->selectDirection = DirectionLeft;
                             break;
                         case InputKeyBack:
-                            if (localstate->state == GameStateSettings) {
-                                localstate->state = GameStateStart;
-                                save_settings(localstate->settings);
+                            if (game_state->state == GameStateSettings) {
+                                game_state->state = GameStateStart;
+                                save_settings(game_state->settings);
                             } else
                                 processing = false;
                             break;
                         case InputKeyOk:
-                            localstate->selectDirection = Select;
+                            game_state->selectDirection = Select;
                             break;
                         default:
                             break;
                     }
                 }
             } else if (event.type == EventTypeTick) {
-                tick(localstate);
-                processing = localstate->processing;
+                tick(game_state);
+                processing = game_state->processing;
             }
         } else {
             FURI_LOG_D(APP_NAME, "osMessageQueue: event timeout");
             // event timeout
         }
         view_port_update(view_port);
-        release_mutex(&state_mutex, localstate);
+        furi_mutex_release(game_state->mutex);
     }
 
 
@@ -556,7 +557,7 @@ int32_t blackjack_app(void *p) {
     gui_remove_view_port(gui, view_port);
     furi_record_close(RECORD_GUI);
     view_port_free(view_port);
-    delete_mutex(&state_mutex);
+    furi_mutex_free(game_state->mutex);
 
     free_and_exit:
     free(game_state->deck.cards);

+ 1 - 0
defines.h

@@ -73,5 +73,6 @@ typedef struct {
     QueueState queue_state;
     Menu *menu;
     unsigned int last_tick;
+    FuriMutex* mutex;
 } GameState;