mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-16 04:24:45 -07:00
Update NMEA app support deepsleep --nobuild
also reworked the render cb to show the changed handlings by the user
This commit is contained in:
99
applications/external/gps_nmea/gps.c
vendored
99
applications/external/gps_nmea/gps.c
vendored
@@ -20,7 +20,53 @@ static void render_callback(Canvas* const canvas, void* context) {
|
|||||||
GpsUart* gps_uart = context;
|
GpsUart* gps_uart = context;
|
||||||
furi_mutex_acquire(gps_uart->mutex, FuriWaitForever);
|
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_set_font(canvas, FontPrimary);
|
||||||
canvas_draw_str_aligned(canvas, 32, 8, AlignCenter, AlignBottom, "Latitude");
|
canvas_draw_str_aligned(canvas, 32, 8, AlignCenter, AlignBottom, "Latitude");
|
||||||
canvas_draw_str_aligned(canvas, 96, 8, AlignCenter, AlignBottom, "Longitude");
|
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_draw_str_aligned(canvas, 96, 52, AlignCenter, AlignBottom, "Last Fix");
|
||||||
|
|
||||||
canvas_set_font(canvas, FontSecondary);
|
canvas_set_font(canvas, FontSecondary);
|
||||||
char buffer[64];
|
|
||||||
snprintf(buffer, 64, "%f", (double)gps_uart->status.latitude);
|
snprintf(buffer, 64, "%f", (double)gps_uart->status.latitude);
|
||||||
canvas_draw_str_aligned(canvas, 32, 18, AlignCenter, AlignBottom, buffer);
|
canvas_draw_str_aligned(canvas, 32, 18, AlignCenter, AlignBottom, buffer);
|
||||||
snprintf(buffer, 64, "%f", (double)gps_uart->status.longitude);
|
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_minutes,
|
||||||
gps_uart->status.time_seconds);
|
gps_uart->status.time_seconds);
|
||||||
canvas_draw_str_aligned(canvas, 96, 62, AlignCenter, AlignBottom, buffer);
|
canvas_draw_str_aligned(canvas, 96, 62, AlignCenter, AlignBottom, buffer);
|
||||||
} else {
|
break;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
furi_mutex_release(gps_uart->mutex);
|
furi_mutex_release(gps_uart->mutex);
|
||||||
@@ -135,17 +174,23 @@ int32_t gps_app(void* p) {
|
|||||||
processing = false;
|
processing = false;
|
||||||
break;
|
break;
|
||||||
case InputKeyOk:
|
case InputKeyOk:
|
||||||
if(!gps_uart->backlight_on) {
|
if(!gps_uart->backlight_enabled) {
|
||||||
notification_message_block(
|
notification_message_block(
|
||||||
gps_uart->notifications, &sequence_display_backlight_enforce_on);
|
gps_uart->notifications, &sequence_display_backlight_enforce_on);
|
||||||
gps_uart->backlight_on = true;
|
gps_uart->backlight_enabled = true;
|
||||||
} else {
|
} else {
|
||||||
notification_message_block(
|
notification_message_block(
|
||||||
gps_uart->notifications, &sequence_display_backlight_enforce_auto);
|
gps_uart->notifications, &sequence_display_backlight_enforce_auto);
|
||||||
notification_message(
|
notification_message(
|
||||||
gps_uart->notifications, &sequence_display_backlight_off);
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -163,15 +208,37 @@ int32_t gps_app(void* p) {
|
|||||||
gps_uart->baudrate = gps_baudrates[current_gps_baudrate];
|
gps_uart->baudrate = gps_baudrates[current_gps_baudrate];
|
||||||
|
|
||||||
gps_uart_init_thread(gps_uart);
|
gps_uart_init_thread(gps_uart);
|
||||||
gps_uart->changing_baudrate = true;
|
gps_uart->view_state = CHANGE_BAUDRATE;
|
||||||
|
|
||||||
furi_mutex_release(gps_uart->mutex);
|
furi_mutex_release(gps_uart->mutex);
|
||||||
view_port_update(view_port);
|
view_port_update(view_port);
|
||||||
|
furi_delay_ms(1000);
|
||||||
|
gps_uart->view_state = NORMAL;
|
||||||
break;
|
break;
|
||||||
case InputKeyRight:
|
case InputKeyRight:
|
||||||
gps_uart->speed_units++;
|
gps_uart->speed_units++;
|
||||||
if(gps_uart->speed_units == INVALID) {
|
if(gps_uart->speed_units == INVALID) {
|
||||||
gps_uart->speed_units = KNOTS;
|
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;
|
break;
|
||||||
case InputKeyBack:
|
case InputKeyBack:
|
||||||
processing = false;
|
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);
|
furi_mutex_release(gps_uart->mutex);
|
||||||
view_port_update(view_port);
|
view_port_update(view_port);
|
||||||
} else {
|
|
||||||
furi_delay_ms(1000);
|
|
||||||
gps_uart->changing_baudrate = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
7
applications/external/gps_nmea/gps_uart.c
vendored
7
applications/external/gps_nmea/gps_uart.c
vendored
@@ -28,6 +28,8 @@ static void gps_uart_serial_init(GpsUart* gps_uart) {
|
|||||||
|
|
||||||
furi_hal_uart_set_irq_cb(UART_CH, gps_uart_on_irq_cb, gps_uart);
|
furi_hal_uart_set_irq_cb(UART_CH, gps_uart_on_irq_cb, gps_uart);
|
||||||
furi_hal_uart_set_br(UART_CH, gps_uart->baudrate);
|
furi_hal_uart_set_br(UART_CH, gps_uart->baudrate);
|
||||||
|
|
||||||
|
furi_hal_uart_tx(UART_CH, (uint8_t*)"wakey wakey\r\n", strlen("wakey wakey\r\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gps_uart_serial_deinit(GpsUart* gps_uart) {
|
static void gps_uart_serial_deinit(GpsUart* gps_uart) {
|
||||||
@@ -211,9 +213,10 @@ GpsUart* gps_uart_enable() {
|
|||||||
gps_uart->notifications = furi_record_open(RECORD_NOTIFICATION);
|
gps_uart->notifications = furi_record_open(RECORD_NOTIFICATION);
|
||||||
|
|
||||||
gps_uart->baudrate = gps_baudrates[current_gps_baudrate];
|
gps_uart->baudrate = gps_baudrates[current_gps_baudrate];
|
||||||
gps_uart->changing_baudrate = false;
|
|
||||||
gps_uart->backlight_on = false;
|
|
||||||
gps_uart->speed_units = KNOTS;
|
gps_uart->speed_units = KNOTS;
|
||||||
|
gps_uart->backlight_enabled = false;
|
||||||
|
gps_uart->deep_sleep_enabled = false;
|
||||||
|
gps_uart->view_state = NORMAL;
|
||||||
|
|
||||||
gps_uart_init_thread(gps_uart);
|
gps_uart_init_thread(gps_uart);
|
||||||
|
|
||||||
|
|||||||
13
applications/external/gps_nmea/gps_uart.h
vendored
13
applications/external/gps_nmea/gps_uart.h
vendored
@@ -30,6 +30,14 @@ typedef struct {
|
|||||||
|
|
||||||
typedef enum { KNOTS, KPH, MPH, INVALID } SpeedUnit;
|
typedef enum { KNOTS, KPH, MPH, INVALID } SpeedUnit;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CHANGE_BAUDRATE,
|
||||||
|
CHANGE_BACKLIGHT,
|
||||||
|
CHANGE_DEEPSLEEP,
|
||||||
|
CHANGE_SPEEDUNIT,
|
||||||
|
NORMAL
|
||||||
|
} ViewState;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
FuriMutex* mutex;
|
FuriMutex* mutex;
|
||||||
FuriThread* thread;
|
FuriThread* thread;
|
||||||
@@ -38,9 +46,10 @@ typedef struct {
|
|||||||
|
|
||||||
NotificationApp* notifications;
|
NotificationApp* notifications;
|
||||||
uint32_t baudrate;
|
uint32_t baudrate;
|
||||||
bool changing_baudrate;
|
bool backlight_enabled;
|
||||||
bool backlight_on;
|
bool deep_sleep_enabled;
|
||||||
SpeedUnit speed_units;
|
SpeedUnit speed_units;
|
||||||
|
ViewState view_state;
|
||||||
|
|
||||||
GpsStatus status;
|
GpsStatus status;
|
||||||
} GpsUart;
|
} GpsUart;
|
||||||
|
|||||||
Reference in New Issue
Block a user