From 7d19b90cbaecf23427ab14bbab87dd979ad6fcd9 Mon Sep 17 00:00:00 2001 From: Thomas Schmid Date: Mon, 27 Jun 2022 01:53:46 +0200 Subject: [PATCH] wip: image display Signed-off-by: Thomas Schmid --- firmware/assets/-grayout.bin | Bin 0 -> 10464 bytes firmware/assets/Fusion_Font.png | Bin 0 -> 16358 bytes firmware/assets/out.png | Bin 0 -> 14267 bytes firmware/include/app.h | 6 +++ firmware/src/applications/fusion_font.bin | Bin 0 -> 31392 bytes firmware/src/applications/image_display.cpp | 57 ++++++++++++++++++++ firmware/src/main.cpp | 4 +- 7 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 firmware/assets/-grayout.bin create mode 100644 firmware/assets/Fusion_Font.png create mode 100644 firmware/assets/out.png create mode 100644 firmware/src/applications/fusion_font.bin create mode 100644 firmware/src/applications/image_display.cpp diff --git a/firmware/assets/-grayout.bin b/firmware/assets/-grayout.bin new file mode 100644 index 0000000000000000000000000000000000000000..b6c70334ec7693b8fd83b87fba702b0995aebe5f GIT binary patch literal 10464 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 literal 0 HcmV?d00001 diff --git a/firmware/assets/out.png b/firmware/assets/out.png new file mode 100644 index 0000000000000000000000000000000000000000..95166cb461ef91ef396691046af78c9a5b0dff65 GIT binary patch literal 14267 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 literal 0 HcmV?d00001 diff --git a/firmware/src/applications/image_display.cpp b/firmware/src/applications/image_display.cpp new file mode 100644 index 0000000..c89658a --- /dev/null +++ b/firmware/src/applications/image_display.cpp @@ -0,0 +1,57 @@ +#include "app.h" +#include "zauberstab.h" + +#define __stringify_1(x) #x +#define __stringify(x) __stringify_1(x) + +extern "C" +{ +asm( +".macro inc_sample name, filename\n\t" + ".pushsection .rodata\n\t" + "\\name:\n\t" + ".incbin \"\\filename\"\n\t" + "\\name\\()_size:\n\t" + ".int \\name\\()_size - \\name\n\t" + ".popsection\n\t" +".endm\n\t" +); + +#define incbin(label, filename) \ + asm("inc_sample " __stringify(label) ", " filename "\n\t"); \ + extern const unsigned char label[]; \ + extern const unsigned int label##_size; \ + + +incbin(fusion_font, "C:/Users/Binarykitchen/Documents/tom/fusion-zauberstab/firmware/src/applications/fusion_font.bin") +} + +static CRGB get_pixel(unsigned int x, unsigned int y, unsigned int sx, const unsigned char *data) { + unsigned int idx = (x + y * sx) * 3; + + CRGB color{}; + color.r = data[idx]; + color.g = data[idx + 1]; + color.b = data[idx + 2]; + + return color; +} + +void ImageDisplayApp::init() { + +} + +void ImageDisplayApp::deinit() { + +} + +void ImageDisplayApp::loop() { + static unsigned int col = 0; + + for (int i = 0; i< NUM_LEDS; i++) { + leds[i] = get_pixel(col, i, 218, fusion_font); + } + col++; + col = col % 218; + FastLED.show(); +} \ No newline at end of file diff --git a/firmware/src/main.cpp b/firmware/src/main.cpp index 173594a..0dc8192 100644 --- a/firmware/src/main.cpp +++ b/firmware/src/main.cpp @@ -15,11 +15,13 @@ struct FFTTestApp fft_test_app struct FackelApp fackel_app { }; +struct ImageDisplayApp image_display {}; std::vector> apps = { std::ref(beat_detect_app), - std::ref(fackel_app) + std::ref(fackel_app), + std::ref(image_display), }; static unsigned int current_app = 0;