Aaron Mavrinac 2 лет назад
Родитель
Сommit
ee86e18e97
1 измененных файлов с 17 добавлено и 15 удалено
  1. 17 15
      coleco.c

+ 17 - 15
coleco.c

@@ -46,15 +46,13 @@ typedef struct
   bool dpad;
   bool dpad;
   int row;
   int row;
   int column;
   int column;
+  FuriMutex* mutex;
 } Coleco;
 } Coleco;
 
 
 static void render_callback(Canvas* const canvas, void* context)
 static void render_callback(Canvas* const canvas, void* context)
 {
 {
-  Coleco* coleco = acquire_mutex((ValueMutex*)context, 25);
-  if (coleco == NULL)
-  {
-    return;
-  }
+  Coleco* coleco = (Coleco*)context;
+  furi_mutex_acquire(coleco->mutex, FuriWaitForever);
 
 
   if (coleco->dpad)
   if (coleco->dpad)
   {
   {
@@ -95,7 +93,7 @@ static void render_callback(Canvas* const canvas, void* context)
   canvas_draw_icon(canvas, 109, 4,
   canvas_draw_icon(canvas, 109, 4,
       (coleco->row == 4 && coleco->column == 2) ? &I_ColecoPound_hvr_17x17 : &I_ColecoPound_17x17);
       (coleco->row == 4 && coleco->column == 2) ? &I_ColecoPound_hvr_17x17 : &I_ColecoPound_17x17);
 
 
-  release_mutex((ValueMutex*)context, coleco);
+  furi_mutex_release(coleco->mutex);
 }
 }
 
 
 static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue)
 static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue)
@@ -146,6 +144,14 @@ static Coleco* coleco_alloc()
   coleco->row = 0;
   coleco->row = 0;
   coleco->column = 1;
   coleco->column = 1;
 
 
+  coleco->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
+  if (!coleco->mutex)
+  {
+    FURI_LOG_E("Coleco", "cannot create mutex\r\n");
+    free(coleco);
+    return NULL;
+  }
+
   return coleco;
   return coleco;
 }
 }
 
 
@@ -153,6 +159,7 @@ static void coleco_free(Coleco* coleco)
 {
 {
   furi_assert(coleco);
   furi_assert(coleco);
 
 
+  furi_mutex_free(coleco->mutex);
   free(coleco);
   free(coleco);
 }
 }
 
 
@@ -163,18 +170,14 @@ int32_t coleco_app(void* p)
   FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent));
   FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent));
 
 
   Coleco* coleco = coleco_alloc();
   Coleco* coleco = coleco_alloc();
-
-  ValueMutex coleco_mutex;
-  if (!init_mutex(&coleco_mutex, coleco, sizeof(Coleco)))
+  if (coleco == NULL)
   {
   {
-    FURI_LOG_E("Coleco", "cannot create mutex\r\n");
-    coleco_free(coleco);
     return 255;
     return 255;
   }
   }
 
 
   // 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, render_callback, &coleco_mutex);
+  view_port_draw_callback_set(view_port, render_callback, coleco);
   view_port_input_callback_set(view_port, input_callback, event_queue);
   view_port_input_callback_set(view_port, input_callback, event_queue);
 
 
   // open GUI and register view_port
   // open GUI and register view_port
@@ -189,7 +192,7 @@ int32_t coleco_app(void* p)
   {
   {
     FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);
     FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);
 
 
-    Coleco* coleco = (Coleco*)acquire_mutex_block(&coleco_mutex);
+    furi_mutex_acquire(coleco->mutex, FuriWaitForever);
 
 
     if (event_status == FuriStatusOk)
     if (event_status == FuriStatusOk)
     {
     {
@@ -402,7 +405,7 @@ int32_t coleco_app(void* p)
       FURI_LOG_D("Coleco", "FuriMessageQueue: event timeout");
       FURI_LOG_D("Coleco", "FuriMessageQueue: event timeout");
     }
     }
 
 
-    release_mutex(&coleco_mutex, coleco);
+    furi_mutex_release(coleco->mutex);
   }
   }
 
 
   furi_hal_power_disable_otg();
   furi_hal_power_disable_otg();
@@ -412,7 +415,6 @@ int32_t coleco_app(void* p)
   furi_record_close("gui");
   furi_record_close("gui");
   view_port_free(view_port);
   view_port_free(view_port);
   furi_message_queue_free(event_queue);
   furi_message_queue_free(event_queue);
-  delete_mutex(&coleco_mutex);
   coleco_free(coleco);
   coleco_free(coleco);
   return 0;
   return 0;
 }
 }