commit fe1527d0d56b5d3be9752969023698a17ffbc725 Author: Markus Birth Date: Wed Jan 21 23:09:02 2026 +0000 Initial commit Signed-off-by: Markus Birth diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dd6a475 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +dist/* +.vscode +.clang-format +.clangd +.editorconfig +.env +.ufbt diff --git a/.nova/Configuration.json b/.nova/Configuration.json new file mode 100644 index 0000000..19c44b9 --- /dev/null +++ b/.nova/Configuration.json @@ -0,0 +1,6 @@ +{ + "editor.default_syntax" : "cpp", + "index.ignored_file_patterns" : [ + "dist\/*" + ] +} diff --git a/.nova/Tasks/Flipper Zero.json b/.nova/Tasks/Flipper Zero.json new file mode 100644 index 0000000..3863339 --- /dev/null +++ b/.nova/Tasks/Flipper Zero.json @@ -0,0 +1,16 @@ +{ + "actions" : { + "build" : { + "enabled" : true, + "script" : "#!\/bin\/sh\nufbt\n" + }, + "clean" : { + "enabled" : true, + "script" : "#!\/bin\/sh\nufbt -c\n" + }, + "run" : { + "enabled" : true, + "script" : "#!\/bin\/sh\nufbt launch\n" + } + } +} diff --git a/application.fam b/application.fam new file mode 100644 index 0000000..9269258 --- /dev/null +++ b/application.fam @@ -0,0 +1,18 @@ +# For details & more options, see documentation/AppManifests.md in firmware repo + +App( + appid="uk_mbirth_sonicare", # Must be unique + name="Sonicare Head ID", # Displayed in menus + apptype=FlipperAppType.EXTERNAL, + entry_point="uk_mbirth_sonicare_app", + stack_size=2 * 1024, + fap_category="RFID", + # Optional values + requires=["gui"], + # fap_version="0.1", + fap_icon="uk_mbirth_sonicare.png", # 10x10 1-bit PNG + # fap_description="A simple app", + # fap_author="J. Doe", + # fap_weburl="https://github.com/user/uk_mbirth_sonicare", + fap_icon_assets="images", # Image assets to compile for this application +) diff --git a/images/.gitkeep b/images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/uk_mbirth_sonicare.c b/uk_mbirth_sonicare.c new file mode 100644 index 0000000..7859b2b --- /dev/null +++ b/uk_mbirth_sonicare.c @@ -0,0 +1,88 @@ +#include +#include +#include + +/* generated by fbt from .png files in images folder */ +#include + +typedef struct { + FuriMessageQueue* input_queue; + ViewPort* view_port; + Gui* gui; +} Sonicare; + +void draw_callback(Canvas* canvas, void* context) { + UNUSED(context); + + canvas_clear(canvas); + canvas_set_color(canvas, ColorBlack); + canvas_set_font(canvas, FontPrimary); + + canvas_draw_str_aligned(canvas, 1, 0, AlignLeft, AlignTop, "Sonicare"); + + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned(canvas, 1, 14, AlignLeft, AlignTop, "Hello world!"); + + canvas_set_font(canvas, FontKeyboard); + canvas_draw_str_aligned(canvas, 1, 28, AlignLeft, AlignTop, "by mbirth.uk"); +} + +void input_callback(InputEvent* event, void* context) { + Sonicare* app = context; + furi_message_queue_put(app->input_queue, event, 0); +} + +int32_t uk_mbirth_sonicare_app(void* p) { + UNUSED(p); + FURI_LOG_I("TEST", "Hello world"); + FURI_LOG_I("TEST", "I'm uk_mbirth_sonicare!"); + Sonicare app; + + // Alloc + app.view_port = view_port_alloc(); + app.input_queue = furi_message_queue_alloc(8, sizeof(InputEvent)); + + // Callbacks + view_port_draw_callback_set(app.view_port, draw_callback, &app); + view_port_input_callback_set(app.view_port, input_callback, &app); + + // GUI + app.gui = furi_record_open("gui"); + gui_add_view_port(app.gui, app.view_port, GuiLayerFullscreen); + + // Input handling + InputEvent input; + uint8_t exit_loop = 0; + + while (1) { + furi_check(furi_message_queue_get(app.input_queue, &input, FuriWaitForever) == FuriStatusOk); + + switch (input.key) { + case InputKeyLeft: + case InputKeyRight: + case InputKeyOk: + case InputKeyUp: + case InputKeyDown: + case InputKeyBack: + exit_loop = 1; + break; + default: + break; + } + + if (exit_loop) { + break; + } + + view_port_update(app.view_port); + } + + // Free structs + view_port_enabled_set(app.view_port, false); + gui_remove_view_port(app.gui, app.view_port); + furi_record_close("gui"); + view_port_free(app.view_port); + + return 0; +} + diff --git a/uk_mbirth_sonicare.png b/uk_mbirth_sonicare.png new file mode 100644 index 0000000..32027d9 Binary files /dev/null and b/uk_mbirth_sonicare.png differ