From 98a8919d89d026cffdf9b787271f6a94e3830929 Mon Sep 17 00:00:00 2001 From: banst Date: Thu, 17 Aug 2023 16:44:41 +0200 Subject: [PATCH] feat: add logo bootscreen --- .github/workflows/push.yml | 2 + .github/workflows/release.yml | 2 + Makefile | 2 +- include/colors.h | 10 +++ include/layout.h | 40 +++++++++++ src/app.c | 123 +--------------------------------- src/layout.c | 14 ++++ 7 files changed, 71 insertions(+), 122 deletions(-) create mode 100644 include/colors.h create mode 100644 include/layout.h create mode 100644 src/layout.c diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 7eed618..5830bed 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -2,6 +2,8 @@ name: Build and Test on: push: + branches: + - '**' tags-ignore: - v** diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index eb4bfd3..ecf93fd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,6 +13,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + with: + submodules: true - uses: carlosperate/arm-none-eabi-gcc-action@v1 - name: build run: make diff --git a/Makefile b/Makefile index c205bf8..168266f 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ BUILDDIR = build TOOLS = tools -SOURCES += src/app.c +SOURCES := $(wildcard src/*.c) INCLUDES += -Iinclude -I diff --git a/include/colors.h b/include/colors.h new file mode 100644 index 0000000..d146ee4 --- /dev/null +++ b/include/colors.h @@ -0,0 +1,10 @@ +#ifndef POLYBOARD_COLORS_H +#define POLYBOARD_COLORS_H + +// Predefined colors +#define COLOR_BLACK 0x000000 +#define COLOR_WHITE 0xFFFFFF +#define COLOR_MAGENTA 0x9F2B68 +#define COLOR_TEAL 0x008080 + +#endif // POLYBOARD_COLORS_H diff --git a/include/layout.h b/include/layout.h new file mode 100644 index 0000000..8825d62 --- /dev/null +++ b/include/layout.h @@ -0,0 +1,40 @@ +#ifndef POLYBOARD_LAYOUT_H +#define POLYBOARD_LAYOUT_H + +#include "app_defs.h" +#include "app.h" +#include "colors.h" + +// Inner pad indexes +static const u8 PAD_INDEXES[PAD_COUNT] = +{ + 11, 12, 13, 14, 15, 16, 17, 18, + 21, 22, 23, 24, 25, 26, 27, 28, + 31, 32, 33, 34, 35, 36, 37, 38, + 41, 42, 43, 44, 45, 46, 47, 48, + 51, 52, 53, 54, 55, 56, 57, 58, + 61, 62, 63, 64, 65, 66, 67, 68, + 71, 72, 73, 74, 75, 76, 77, 78, + 81, 82, 83, 84, 85, 86, 87, 88, +}; + +static const int LAYOUT_LOGO[PAD_COUNT] = +{ + COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, + COLOR_WHITE, COLOR_WHITE, COLOR_TEAL, COLOR_TEAL, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, + COLOR_WHITE, COLOR_TEAL, COLOR_WHITE, COLOR_TEAL, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, + COLOR_WHITE, COLOR_TEAL, COLOR_TEAL, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_MAGENTA, COLOR_WHITE, + COLOR_WHITE, COLOR_TEAL, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_MAGENTA, COLOR_MAGENTA, COLOR_WHITE, + COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_MAGENTA, COLOR_WHITE, COLOR_MAGENTA, COLOR_WHITE, + COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_MAGENTA, COLOR_MAGENTA, COLOR_WHITE, COLOR_WHITE, + COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, +}; + +/** + * Renders the layout on the pads. + * + * @param layout The layout to render. + */ +void render_layout(const int layout[PAD_COUNT]); + +#endif // POLYBOARD_LAYOUT_H diff --git a/src/app.c b/src/app.c index 4ce908e..d69a76f 100644 --- a/src/app.c +++ b/src/app.c @@ -36,91 +36,28 @@ //______________________________________________________________________________ #include "app.h" - -//______________________________________________________________________________ -// -// This is where the fun is! Add your code to the callbacks below to define how -// your app behaves. -// -// In this example, we either render the raw ADC data as LED rainbows or store -// and recall the pad state from flash. -//______________________________________________________________________________ - -// store ADC frame pointer -static const u16 *g_ADC = 0; - -// buffer to store pad states for flash save -#define BUTTON_COUNT 100 - -u8 g_Buttons[BUTTON_COUNT] = {0}; - -//______________________________________________________________________________ +#include "layout.h" void app_surface_event(u8 type, u8 index, u8 value) { - switch (type) - { - case TYPEPAD: - { - // toggle it and store it off, so we can save to flash if we want to - if (value) - { - g_Buttons[index] = MAXLED * !g_Buttons[index]; - } - - // example - light / extinguish pad LEDs - hal_plot_led(TYPEPAD, index, 0, 0, g_Buttons[index]); - - // example - send MIDI - hal_send_midi(DINMIDI, NOTEON | 0, index, value); - - } - break; - - case TYPESETUP: - { - if (value) - { - // save button states to flash (reload them by power cycling the hardware!) - hal_write_flash(0, g_Buttons, BUTTON_COUNT); - } - } - break; - } } //______________________________________________________________________________ void app_midi_event(u8 port, u8 status, u8 d1, u8 d2) { - // example - MIDI interface functionality for USB "MIDI" port -> DIN port - if (port == USBMIDI) - { - hal_send_midi(DINMIDI, status, d1, d2); - } - - // // example -MIDI interface functionality for DIN -> USB "MIDI" port port - if (port == DINMIDI) - { - hal_send_midi(USBMIDI, status, d1, d2); - } } //______________________________________________________________________________ void app_sysex_event(u8 port, u8 * data, u16 count) { - // example - respond to UDI messages? } //______________________________________________________________________________ void app_aftertouch_event(u8 index, u8 value) { - // example - send poly aftertouch to MIDI ports - hal_send_midi(USBMIDI, POLYAFTERTOUCH | 0, index, value); - - } //______________________________________________________________________________ @@ -142,67 +79,11 @@ void app_cable_event(u8 type, u8 value) void app_timer_event() { - // example - send MIDI clock at 125bpm -#define TICK_MS 20 - - static u8 ms = TICK_MS; - - if (++ms >= TICK_MS) - { - ms = 0; - - // send a clock pulse up the USB - hal_send_midi(USBSTANDALONE, MIDITIMINGCLOCK, 0, 0); - } - - // alternative example - show raw ADC data as LEDs - for (int i=0; i < PAD_COUNT; ++i) - { - // raw adc values are 12 bit, but LEDs are 6 bit. - // Let's saturate into r;g;b for a rainbow effect to show pressure - u16 r = 0; - u16 g = 0; - u16 b = 0; - - u16 x = (3 * MAXLED * g_ADC[i]) >> 12; - - if (x < MAXLED) - { - r = x; - } - else if (x >= MAXLED && x < (2*MAXLED)) - { - r = 2*MAXLED - x; - g = x - MAXLED; - } - else - { - g = 3*MAXLED - x; - b = x - 2*MAXLED; - } - - hal_plot_led(TYPEPAD, ADC_MAP[i], r, g, b); - } } //______________________________________________________________________________ void app_init(const u16 *adc_raw) { - // example - load button states from flash - hal_read_flash(0, g_Buttons, BUTTON_COUNT); - - // example - light the LEDs to say hello! - for (int i=0; i < 10; ++i) - { - for (int j=0; j < 10; ++j) - { - u8 b = g_Buttons[j*10 + i]; - - hal_plot_led(TYPEPAD, j*10 + i, 0, 0, b); - } - } - - // store off the raw ADC frame pointer for later use - g_ADC = adc_raw; + render_layout(LAYOUT_LOGO); } diff --git a/src/layout.c b/src/layout.c new file mode 100644 index 0000000..11a1244 --- /dev/null +++ b/src/layout.c @@ -0,0 +1,14 @@ +#include "layout.h" + +void render_layout(const int layout[PAD_COUNT]) +{ + int r, g, b; + + for (int i = 0; i < PAD_COUNT; i++) + { + r = (layout[i] & 0xFF0000) >> 16; + g = (layout[i] & 0x00FF00) >> 8; + b = (layout[i] & 0x0000FF); + hal_plot_led(TYPEPAD, PAD_INDEXES[i], r, g, b); + } +}