Code Cleanup & Basic Input System

This commit is contained in:
Maddox Werts 2024-08-27 00:48:45 -04:00
parent 7563a8c587
commit 9836198e38
3 changed files with 44 additions and 30 deletions

View file

@ -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) {
// Do we want to quit?
if (ui->input == Back) {
ui->running = false;
return 0;
}
} else {
FURI_LOG_D(TAG, "Event Timeout");
}
// Updating canvas
view_port_update(ui->canvas);
furi_mutex_release(ui->mutex);
}
// Cleanup

View file

@ -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);
}

View file

@ -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);