Aaron Mavrinac пре 2 година
родитељ
комит
333405688c
3 измењених фајлова са 11 додато и 12 уклоњено
  1. 8 12
      gps.c
  2. 2 0
      gps_uart.c
  3. 1 0
      gps_uart.h

+ 8 - 12
gps.c

@@ -18,11 +18,8 @@ typedef struct
 
 static void render_callback(Canvas* const canvas, void* context)
 {
-  const GpsUart* gps_uart = acquire_mutex((ValueMutex*)context, 25);
-  if (gps_uart == NULL)
-  {
-    return;
-  }
+  const GpsUart* gps_uart = context;
+  furi_mutex_acquire(gps_uart->mutex, FuriWaitForever);
 
   canvas_set_font(canvas, FontPrimary);
   canvas_draw_str_aligned(canvas, 32, 8, AlignCenter, AlignBottom, "Latitude");
@@ -51,7 +48,7 @@ static void render_callback(Canvas* const canvas, void* context)
            gps_uart->status.time_seconds);
   canvas_draw_str_aligned(canvas, 96, 62, AlignCenter, AlignBottom, buffer);
 
-  release_mutex((ValueMutex*)context, gps_uart);
+  furi_mutex_release(gps_uart->mutex);
 }
 
 static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue)
@@ -70,8 +67,7 @@ int32_t gps_app(void* p)
 
   GpsUart* gps_uart = gps_uart_enable();
 
-  ValueMutex gps_uart_mutex;
-  if (!init_mutex(&gps_uart_mutex, gps_uart, sizeof(GpsUart)))
+  if (!gps_uart->mutex)
   {
     FURI_LOG_E("GPS", "cannot create mutex\r\n");
     free(gps_uart);
@@ -80,7 +76,7 @@ int32_t gps_app(void* p)
 
   // set system callbacks
   ViewPort* view_port = view_port_alloc();
-  view_port_draw_callback_set(view_port, render_callback, &gps_uart_mutex);
+  view_port_draw_callback_set(view_port, render_callback, &gps_uart);
   view_port_input_callback_set(view_port, input_callback, event_queue);
 
   // open GUI and register view_port
@@ -92,7 +88,7 @@ int32_t gps_app(void* p)
   {
     FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);
 
-    GpsUart* gps_uart = (GpsUart*)acquire_mutex_block(&gps_uart_mutex);
+    furi_mutex_acquire(gps_uart->mutex, FuriWaitForever);
 
     if (event_status == FuriStatusOk)
     {
@@ -118,7 +114,7 @@ int32_t gps_app(void* p)
     }
 
     view_port_update(view_port);
-    release_mutex(&gps_uart_mutex, gps_uart);
+    furi_mutex_release(gps_uart->mutex);
   }
 
   view_port_enabled_set(view_port, false);
@@ -126,7 +122,7 @@ int32_t gps_app(void* p)
   furi_record_close("gui");
   view_port_free(view_port);
   furi_message_queue_free(event_queue);
-  delete_mutex(&gps_uart_mutex);
+  furi_mutex_free(gps_uart->mutex);
   gps_uart_disable(gps_uart);
 
   return 0;

+ 2 - 0
gps_uart.c

@@ -173,6 +173,8 @@ GpsUart* gps_uart_enable()
 
   gps_uart->notifications = furi_record_open(RECORD_NOTIFICATION);
 
+  gps_uart->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
+
   gps_uart->thread = furi_thread_alloc();
   furi_thread_set_name(gps_uart->thread, "GpsUartWorker");
   furi_thread_set_stack_size(gps_uart->thread, 1024);

+ 1 - 0
gps_uart.h

@@ -24,6 +24,7 @@ typedef struct
 
 typedef struct
 {
+  FuriMutex* mutex;
   FuriThread* thread;
   FuriStreamBuffer* rx_stream;
   uint8_t rx_buf[RX_BUF_SIZE];