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

Add setting for speed display in miles per hour. Closes #19.

Aaron Mavrinac 2 лет назад
Родитель
Сommit
d875fb5e88
3 измененных файлов с 21 добавлено и 8 удалено
  1. 2 0
      constants.h
  2. 16 7
      gps.c
  3. 3 1
      gps_uart.h

+ 2 - 0
constants.h

@@ -0,0 +1,2 @@
+#define KNOTS_TO_KPH 1.852
+#define KNOTS_TO_MPH 1.15078

+ 16 - 7
gps.c

@@ -1,4 +1,5 @@
 #include "gps_uart.h"
+#include "constants.h"
 
 #include <furi.h>
 #include <gui/gui.h>
@@ -37,11 +38,20 @@ static void render_callback(Canvas* const canvas, void* context) {
         canvas_draw_str_aligned(canvas, 96, 18, AlignCenter, AlignBottom, buffer);
         snprintf(buffer, 64, "%.1f", (double)gps_uart->status.course);
         canvas_draw_str_aligned(canvas, 21, 40, AlignCenter, AlignBottom, buffer);
-        if(!gps_uart->speed_in_kms) {
+
+        switch(gps_uart->speed_units) {
+        case KPH:
+            snprintf(buffer, 64, "%.2f km", (double)(gps_uart->status.speed * KNOTS_TO_KPH));
+            break;
+        case MPH:
+            snprintf(buffer, 64, "%.2f mi", (double)(gps_uart->status.speed * KNOTS_TO_MPH));
+            break;
+        case KNOTS:
+        default:
             snprintf(buffer, 64, "%.2f kn", (double)gps_uart->status.speed);
-        } else {
-            snprintf(buffer, 64, "%.2f km", (double)(gps_uart->status.speed * 1.852));
+            break;
         }
+
         canvas_draw_str_aligned(canvas, 64, 40, AlignCenter, AlignBottom, buffer);
         snprintf(
             buffer,
@@ -153,10 +163,9 @@ int32_t gps_app(void* p) {
                         furi_mutex_release(gps_uart->mutex);
                         break;
                     case InputKeyRight:
-                        if(gps_uart->speed_in_kms) {
-                            gps_uart->speed_in_kms = false;
-                        } else {
-                            gps_uart->speed_in_kms = true;
+                        gps_uart->speed_units++;
+                        if(gps_uart->speed_units == INVALID) {
+                            gps_uart->speed_units = KNOTS;
                         }
                         break;
                     case InputKeyBack:

+ 3 - 1
gps_uart.h

@@ -23,6 +23,8 @@ typedef struct {
     int time_seconds;
 } GpsStatus;
 
+typedef enum SpeedUnit { KNOTS, KPH, MPH, INVALID } SpeedUnit;
+
 typedef struct {
     FuriMutex* mutex;
     FuriThread* thread;
@@ -33,7 +35,7 @@ typedef struct {
     uint32_t baudrate;
     bool changing_baudrate;
     bool backlight_on;
-    bool speed_in_kms;
+    SpeedUnit speed_units;
 
     GpsStatus status;
 } GpsUart;