Просмотр исходного кода

Improve context object pointer handling.

Aaron Mavrinac 2 лет назад
Родитель
Сommit
397a8f165b
2 измененных файлов с 11 добавлено и 8 удалено
  1. 3 6
      gps.c
  2. 8 2
      gps_uart.c

+ 3 - 6
gps.c

@@ -18,7 +18,7 @@ typedef struct
 
 static void render_callback(Canvas* const canvas, void* context)
 {
-  const GpsUart* gps_uart = context;
+  const GpsUart* gps_uart = (GpsUart*)context;
   furi_mutex_acquire(gps_uart->mutex, FuriWaitForever);
 
   canvas_set_font(canvas, FontPrimary);
@@ -66,17 +66,14 @@ int32_t gps_app(void* p)
   FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent));
 
   GpsUart* gps_uart = gps_uart_enable();
-
-  if (!gps_uart->mutex)
+  if (gps_uart == NULL)
   {
-    FURI_LOG_E("GPS", "cannot create mutex\r\n");
-    free(gps_uart);
     return 255;
   }
 
   // set system callbacks
   ViewPort* view_port = view_port_alloc();
-  view_port_draw_callback_set(view_port, render_callback, &gps_uart);
+  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

+ 8 - 2
gps_uart.c

@@ -158,6 +158,14 @@ GpsUart* gps_uart_enable()
 {
   GpsUart* gps_uart = malloc(sizeof(GpsUart));
 
+  gps_uart->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
+  if (!gps_uart->mutex)
+  {
+    FURI_LOG_E("GPS", "cannot create mutex\r\n");
+    free(gps_uart);
+    return NULL;
+  }
+
   gps_uart->status.valid = false;
   gps_uart->status.latitude = 0.0;
   gps_uart->status.longitude = 0.0;
@@ -173,8 +181,6 @@ 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);