From fe1527d0d56b5d3be9752969023698a17ffbc725 Mon Sep 17 00:00:00 2001 From: Markus Birth Date: Wed, 21 Jan 2026 23:09:02 +0000 Subject: [PATCH] Initial commit Signed-off-by: Markus Birth --- .gitignore | 7 +++ .nova/Configuration.json | 6 +++ .nova/Tasks/Flipper Zero.json | 16 +++++++ application.fam | 18 +++++++ images/.gitkeep | 0 uk_mbirth_sonicare.c | 88 ++++++++++++++++++++++++++++++++++ uk_mbirth_sonicare.png | Bin 0 -> 86 bytes 7 files changed, 135 insertions(+) create mode 100644 .gitignore create mode 100644 .nova/Configuration.json create mode 100644 .nova/Tasks/Flipper Zero.json create mode 100644 application.fam create mode 100644 images/.gitkeep create mode 100644 uk_mbirth_sonicare.c create mode 100644 uk_mbirth_sonicare.png 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 0000000000000000000000000000000000000000..32027d90c229b2aedf6f0b530dc8ba92d9c8039d GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V6Od#Ih}1|L7MtNMLpG7B-Xd jSUB;@q-7ie1(pmv?-s`Qc?tXgDrE3<^>bP0l+XkK0n!z| literal 0 HcmV?d00001