Skip to content

Commit 1014b5d

Browse files
committed
Add several more GPS fields to status struct and display.
1 parent f30f219 commit 1014b5d

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

gps.c

+8
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,15 @@ static void render_callback(Canvas* const canvas, void* context)
2929
snprintf(buffer, 64, "LAT: %f", (double)gps_uart->status.latitude);
3030
canvas_draw_str_aligned(canvas, 10, 10, AlignLeft, AlignBottom, buffer);
3131
snprintf(buffer, 64, "LON: %f", (double)gps_uart->status.longitude);
32+
canvas_draw_str_aligned(canvas, 10, 20, AlignLeft, AlignBottom, buffer);
33+
snprintf(buffer, 64, "C/S: %.1f / %.2fkn", (double)gps_uart->status.course, (double)gps_uart->status.speed);
3234
canvas_draw_str_aligned(canvas, 10, 30, AlignLeft, AlignBottom, buffer);
35+
snprintf(buffer, 64, "ALT: %.1f %c", (double)gps_uart->status.altitude, gps_uart->status.altitude_units);
36+
canvas_draw_str_aligned(canvas, 10, 40, AlignLeft, AlignBottom, buffer);
37+
snprintf(buffer, 64, "FIX: %d", gps_uart->status.fix_quality);
38+
canvas_draw_str_aligned(canvas, 10, 50, AlignLeft, AlignBottom, buffer);
39+
snprintf(buffer, 64, "SAT: %d", gps_uart->status.satellites_tracked);
40+
canvas_draw_str_aligned(canvas, 10, 60, AlignLeft, AlignBottom, buffer);
3341

3442
release_mutex((ValueMutex*)context, gps_uart);
3543
}

gps_uart.c

+24
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,25 @@ static void gps_uart_parse_nmea(GpsUart* gps_uart, char* line)
4545
struct minmea_sentence_rmc frame;
4646
if (minmea_parse_rmc(&frame, line))
4747
{
48+
gps_uart->status.valid = frame.valid;
4849
gps_uart->status.latitude = minmea_tocoord(&frame.latitude);
4950
gps_uart->status.longitude = minmea_tocoord(&frame.longitude);
51+
gps_uart->status.speed = minmea_tofloat(&frame.speed);
52+
gps_uart->status.course = minmea_tofloat(&frame.course);
53+
}
54+
} break;
55+
56+
case MINMEA_SENTENCE_GGA:
57+
{
58+
struct minmea_sentence_gga frame;
59+
if (minmea_parse_gga(&frame, line))
60+
{
61+
gps_uart->status.latitude = minmea_tocoord(&frame.latitude);
62+
gps_uart->status.longitude = minmea_tocoord(&frame.longitude);
63+
gps_uart->status.altitude = minmea_tofloat(&frame.altitude);
64+
gps_uart->status.altitude_units = frame.altitude_units;
65+
gps_uart->status.fix_quality = frame.fix_quality;
66+
gps_uart->status.satellites_tracked = frame.satellites_tracked;
5067
}
5168
} break;
5269

@@ -131,8 +148,15 @@ GpsUart* gps_uart_enable()
131148
{
132149
GpsUart* gps_uart = malloc(sizeof(GpsUart));
133150

151+
gps_uart->status.valid = false;
134152
gps_uart->status.latitude = 0.0;
135153
gps_uart->status.longitude = 0.0;
154+
gps_uart->status.speed = 0.0;
155+
gps_uart->status.course = 0.0;
156+
gps_uart->status.altitude = 0.0;
157+
gps_uart->status.altitude_units = ' ';
158+
gps_uart->status.fix_quality = 0;
159+
gps_uart->status.satellites_tracked = 0;
136160

137161
gps_uart->thread = furi_thread_alloc();
138162
furi_thread_set_name(gps_uart->thread, "GpsUartWorker");

gps_uart.h

+7
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,15 @@
77

88
typedef struct
99
{
10+
bool valid;
1011
float latitude;
1112
float longitude;
13+
float speed;
14+
float course;
15+
float altitude;
16+
char altitude_units;
17+
int fix_quality;
18+
int satellites_tracked;
1219
} GpsStatus;
1320

1421
typedef struct

0 commit comments

Comments
 (0)