Update NMEA app support deepsleep --nobuild

also reworked the render cb to show the changed handlings by the user
This commit is contained in:
Sil333033
2023-11-19 17:25:05 +01:00
parent 8903b3350f
commit 35f6c032b9
3 changed files with 99 additions and 22 deletions

View File

@@ -20,7 +20,53 @@ static void render_callback(Canvas* const canvas, void* context) {
GpsUart* gps_uart = context;
furi_mutex_acquire(gps_uart->mutex, FuriWaitForever);
if(!gps_uart->changing_baudrate) {
char buffer[64];
switch(gps_uart->view_state) {
case CHANGE_BAUDRATE:
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignBottom, "Baudrate set to:");
snprintf(buffer, 64, "%ld baud", gps_uart->baudrate);
canvas_draw_str_aligned(canvas, 64, 47, AlignCenter, AlignBottom, buffer);
break;
case CHANGE_BACKLIGHT:
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(
canvas,
64,
32,
AlignCenter,
AlignBottom,
gps_uart->backlight_enabled ? "Backlight enabled" : "Backlight disabled");
break;
case CHANGE_DEEPSLEEP:
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(
canvas,
64,
32,
AlignCenter,
AlignBottom,
gps_uart->deep_sleep_enabled ? "Deep sleep enabled" : "Deep sleep disabled");
break;
case CHANGE_SPEEDUNIT:
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignBottom, "Speed unit set to:");
switch(gps_uart->speed_units) {
case KPH:
canvas_draw_str_aligned(canvas, 64, 47, AlignCenter, AlignBottom, "km/h");
break;
case MPH:
canvas_draw_str_aligned(canvas, 64, 47, AlignCenter, AlignBottom, "mi/h");
break;
case KNOTS:
default:
canvas_draw_str_aligned(canvas, 64, 47, AlignCenter, AlignBottom, "kn");
break;
}
break;
case NORMAL:
default:
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 32, 8, AlignCenter, AlignBottom, "Latitude");
canvas_draw_str_aligned(canvas, 96, 8, AlignCenter, AlignBottom, "Longitude");
@@ -31,7 +77,6 @@ static void render_callback(Canvas* const canvas, void* context) {
canvas_draw_str_aligned(canvas, 96, 52, AlignCenter, AlignBottom, "Last Fix");
canvas_set_font(canvas, FontSecondary);
char buffer[64];
snprintf(buffer, 64, "%f", (double)gps_uart->status.latitude);
canvas_draw_str_aligned(canvas, 32, 18, AlignCenter, AlignBottom, buffer);
snprintf(buffer, 64, "%f", (double)gps_uart->status.longitude);
@@ -70,13 +115,7 @@ static void render_callback(Canvas* const canvas, void* context) {
gps_uart->status.time_minutes,
gps_uart->status.time_seconds);
canvas_draw_str_aligned(canvas, 96, 62, AlignCenter, AlignBottom, buffer);
} else {
char buffer[64];
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignBottom, "Baudrate set to:");
snprintf(buffer, 64, "%ld baud", gps_uart->baudrate);
canvas_draw_str_aligned(canvas, 64, 47, AlignCenter, AlignBottom, buffer);
break;
}
furi_mutex_release(gps_uart->mutex);
@@ -135,17 +174,23 @@ int32_t gps_app(void* p) {
processing = false;
break;
case InputKeyOk:
if(!gps_uart->backlight_on) {
if(!gps_uart->backlight_enabled) {
notification_message_block(
gps_uart->notifications, &sequence_display_backlight_enforce_on);
gps_uart->backlight_on = true;
gps_uart->backlight_enabled = true;
} else {
notification_message_block(
gps_uart->notifications, &sequence_display_backlight_enforce_auto);
notification_message(
gps_uart->notifications, &sequence_display_backlight_off);
gps_uart->backlight_on = false;
gps_uart->backlight_enabled = false;
}
gps_uart->view_state = CHANGE_BACKLIGHT;
furi_mutex_release(gps_uart->mutex);
view_port_update(view_port);
furi_delay_ms(1000);
gps_uart->view_state = NORMAL;
break;
default:
break;
@@ -163,15 +208,37 @@ int32_t gps_app(void* p) {
gps_uart->baudrate = gps_baudrates[current_gps_baudrate];
gps_uart_init_thread(gps_uart);
gps_uart->changing_baudrate = true;
gps_uart->view_state = CHANGE_BAUDRATE;
furi_mutex_release(gps_uart->mutex);
view_port_update(view_port);
furi_delay_ms(1000);
gps_uart->view_state = NORMAL;
break;
case InputKeyRight:
gps_uart->speed_units++;
if(gps_uart->speed_units == INVALID) {
gps_uart->speed_units = KNOTS;
}
gps_uart->view_state = CHANGE_SPEEDUNIT;
furi_mutex_release(gps_uart->mutex);
view_port_update(view_port);
furi_delay_ms(1000);
gps_uart->view_state = NORMAL;
break;
case InputKeyDown:
gps_uart->view_state = CHANGE_DEEPSLEEP;
gps_uart->deep_sleep_enabled = !gps_uart->deep_sleep_enabled;
// tested on Telit SE868-A and SL871L-S
furi_hal_uart_tx(
UART_CH, (uint8_t*)"$PMTK161,0*28\r\n", strlen("$PMTK161,0*28\r\n"));
furi_mutex_release(gps_uart->mutex);
view_port_update(view_port);
furi_delay_ms(1000);
gps_uart->view_state = NORMAL;
break;
case InputKeyBack:
processing = false;
@@ -182,12 +249,10 @@ int32_t gps_app(void* p) {
}
}
}
if(!gps_uart->changing_baudrate) {
if(gps_uart->view_state == NORMAL) {
furi_mutex_release(gps_uart->mutex);
view_port_update(view_port);
} else {
furi_delay_ms(1000);
gps_uart->changing_baudrate = false;
}
}
@@ -205,4 +270,4 @@ int32_t gps_app(void* p) {
}
return 0;
}
}