Skip to content

Commit

Permalink
Code style formatting overhaul.
Browse files Browse the repository at this point in the history
  • Loading branch information
ezod committed Oct 17, 2022
1 parent 47fadfc commit f30f219
Show file tree
Hide file tree
Showing 3 changed files with 228 additions and 183 deletions.
180 changes: 97 additions & 83 deletions gps.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,100 +4,114 @@
#include <gui/gui.h>
#include <string.h>

typedef enum {
EventTypeTick,
EventTypeKey,
typedef enum
{
EventTypeTick,
EventTypeKey,
} EventType;

typedef struct {
EventType type;
InputEvent input;
typedef struct
{
EventType type;
InputEvent input;
} PluginEvent;

static void render_callback(Canvas* const canvas, void* context) {
const GpsUart* gps_uart = acquire_mutex((ValueMutex*)context, 25);
if(gps_uart == NULL) {
return;
}

canvas_set_font(canvas, FontSecondary);
char buffer[64];
snprintf(buffer, 64, "LAT: %f", (double)gps_uart->status.latitude);
canvas_draw_str_aligned(canvas, 10, 10, AlignLeft, AlignBottom, buffer);
snprintf(buffer, 64, "LON: %f", (double)gps_uart->status.longitude);
canvas_draw_str_aligned(canvas, 10, 30, AlignLeft, AlignBottom, buffer);

release_mutex((ValueMutex*)context, gps_uart);
static void render_callback(Canvas* const canvas, void* context)
{
const GpsUart* gps_uart = acquire_mutex((ValueMutex*)context, 25);
if (gps_uart == NULL)
{
return;
}

canvas_set_font(canvas, FontSecondary);
char buffer[64];
snprintf(buffer, 64, "LAT: %f", (double)gps_uart->status.latitude);
canvas_draw_str_aligned(canvas, 10, 10, AlignLeft, AlignBottom, buffer);
snprintf(buffer, 64, "LON: %f", (double)gps_uart->status.longitude);
canvas_draw_str_aligned(canvas, 10, 30, AlignLeft, AlignBottom, buffer);

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

static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) {
furi_assert(event_queue);
static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue)
{
furi_assert(event_queue);

PluginEvent event = {.type = EventTypeKey, .input = *input_event};
furi_message_queue_put(event_queue, &event, FuriWaitForever);
PluginEvent event = {.type = EventTypeKey, .input = *input_event};
furi_message_queue_put(event_queue, &event, FuriWaitForever);
}

int32_t gps_app(void* p) {
UNUSED(p);

FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent));

GpsUart* gps_uart = gps_uart_enable();

ValueMutex gps_uart_mutex;
if(!init_mutex(&gps_uart_mutex, gps_uart, sizeof(GpsUart))) {
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_mutex);
view_port_input_callback_set(view_port, input_callback, event_queue);

// open GUI and register view_port
Gui* gui = furi_record_open("gui");
gui_add_view_port(gui, view_port, GuiLayerFullscreen);

PluginEvent event;
for(bool processing = true; processing;) {
FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);

GpsUart* gps_uart = (GpsUart*)acquire_mutex_block(&gps_uart_mutex);

if(event_status == FuriStatusOk) {
// press events
if(event.type == EventTypeKey) {
if(event.input.type == InputTypePress) {
switch(event.input.key) {
case InputKeyUp:
case InputKeyDown:
case InputKeyRight:
case InputKeyLeft:
case InputKeyOk:
break;
case InputKeyBack:
processing = false;
break;
}
}
}
} else {
FURI_LOG_D("GPS", "FuriMessageQueue: event timeout");
int32_t gps_app(void* p)
{
UNUSED(p);

FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent));

GpsUart* gps_uart = gps_uart_enable();

ValueMutex gps_uart_mutex;
if (!init_mutex(&gps_uart_mutex, gps_uart, sizeof(GpsUart)))
{
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_mutex);
view_port_input_callback_set(view_port, input_callback, event_queue);

// open GUI and register view_port
Gui* gui = furi_record_open("gui");
gui_add_view_port(gui, view_port, GuiLayerFullscreen);

PluginEvent event;
for (bool processing = true; processing;)
{
FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);

GpsUart* gps_uart = (GpsUart*)acquire_mutex_block(&gps_uart_mutex);

if (event_status == FuriStatusOk)
{
// press events
if (event.type == EventTypeKey)
{
if (event.input.type == InputTypePress)
{
switch (event.input.key)
{
case InputKeyUp:
case InputKeyDown:
case InputKeyRight:
case InputKeyLeft:
case InputKeyOk:
break;
case InputKeyBack:
processing = false;
break;
}
}

view_port_update(view_port);
release_mutex(&gps_uart_mutex, gps_uart);
}
}
else
{
FURI_LOG_D("GPS", "FuriMessageQueue: event timeout");
}

view_port_enabled_set(view_port, false);
gui_remove_view_port(gui, view_port);
furi_record_close("gui");
view_port_free(view_port);
furi_message_queue_free(event_queue);
delete_mutex(&gps_uart_mutex);
gps_uart_disable(gps_uart);
view_port_update(view_port);
release_mutex(&gps_uart_mutex, gps_uart);
}

view_port_enabled_set(view_port, false);
gui_remove_view_port(gui, view_port);
furi_record_close("gui");
view_port_free(view_port);
furi_message_queue_free(event_queue);
delete_mutex(&gps_uart_mutex);
gps_uart_disable(gps_uart);

return 0;
return 0;
}
Loading

0 comments on commit f30f219

Please sign in to comment.