diff --git a/project/flippypass.c b/project/flippypass.c index fe02b21..2b42740 100644 --- a/project/flippypass.c +++ b/project/flippypass.c @@ -11,24 +11,14 @@ int32_t flippypass_app(void* p) { uiManager* ui = ui_create(); // Drawwing the UI - InputEvent event; while(ui->running) { - // Getting the input event - FuriStatus status = furi_message_queue_get(ui->event_queue, &event, 100); - furi_mutex_acquire(ui->mutex, FuriWaitForever); - - if (status == FuriStatusOk) { - if (event.key == InputKeyBack) { - ui->running = false; - return 0; - } - } else { - FURI_LOG_D(TAG, "Event Timeout"); + // Do we want to quit? + if (ui->input == Back) { + ui->running = false; } // Updating canvas view_port_update(ui->canvas); - furi_mutex_release(ui->mutex); } // Cleanup diff --git a/project/ui.c b/project/ui.c index d634f88..e22da0b 100644 --- a/project/ui.c +++ b/project/ui.c @@ -16,23 +16,42 @@ uiManager* ui_create() { // Creating a canvas result->canvas = view_port_alloc(); view_port_draw_callback_set(result->canvas, ui_draw, result); + view_port_input_callback_set(result->canvas, ui_input, result); gui_add_view_port(result->gui, result->canvas, GuiLayerFullscreen); - // Creating mutex - result->mutex = furi_mutex_alloc(FuriMutexTypeNormal); - if (!result->mutex) { - FURI_LOG_E(TAG, "Failed to create Mutex\r\n"); - free(result); - return NULL; - } - - // Creating event queue - result->event_queue = furi_message_queue_alloc(8, sizeof(InputEvent)); - // Returning the UI Manager return result; } +void ui_input(InputEvent* event, void* ctx) { + // Turning the context back into the UI Manager + uiManager* manager = (uiManager*)ctx; + + // Getting input + switch(event->key) { + case InputKeyUp: + manager->input = Up; + break; + case InputKeyDown: + manager->input = Down; + break; + case InputKeyLeft: + manager->input = Left; + break; + case InputKeyRight: + manager->input = Right; + break; + case InputKeyOk: + manager->input = Ok; + break; + case InputKeyBack: + manager->input = Back; + break; + default: + break; + } +} + void ui_draw(Canvas* canvas, void* ctx) { // Showing the Main Menu ui_p_mainmenu(canvas); @@ -67,11 +86,9 @@ void ui_p_mainmenu(Canvas* canvas) { } void ui_delete(uiManager* manager) { - furi_message_queue_free(manager->event_queue); view_port_enabled_set(manager->canvas, false); gui_remove_view_port(manager->gui, manager->canvas); view_port_free(manager->canvas); furi_record_close(RECORD_GUI); - furi_mutex_free(manager->mutex); free(manager); } \ No newline at end of file diff --git a/project/ui.h b/project/ui.h index e0444f0..81e61f7 100644 --- a/project/ui.h +++ b/project/ui.h @@ -9,12 +9,19 @@ // Structures typedef struct { - FuriMessageQueue* event_queue; - FuriMutex* mutex; ViewPort* canvas; Gui* gui; - int page; + enum ui_input { + Up, + Down, + Left, + Right, + Ok, + Back + } input; + + int page; bool running; } uiManager; @@ -22,7 +29,7 @@ typedef struct { uiManager* ui_create(); // Functions -void ui_timer(void* event_queue); +void ui_input(InputEvent* event, void* ctx); void ui_draw(Canvas* canvas, void* ctx); void ui_p_mainmenu(Canvas* canvas);