Skip to content

Commit

Permalink
feat: add logo bootscreen
Browse files Browse the repository at this point in the history
  • Loading branch information
b4nst committed Aug 17, 2023
1 parent 298b4cb commit 98a8919
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 122 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ name: Build and Test

on:
push:
branches:
- '**'
tags-ignore:
- v**

Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ BUILDDIR = build

TOOLS = tools

SOURCES += src/app.c
SOURCES := $(wildcard src/*.c)

INCLUDES += -Iinclude -I

Expand Down
10 changes: 10 additions & 0 deletions include/colors.h
Original file line number Diff line number Diff line change
@@ -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
40 changes: 40 additions & 0 deletions include/layout.h
Original file line number Diff line number Diff line change
@@ -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
123 changes: 2 additions & 121 deletions src/app.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);


}

//______________________________________________________________________________
Expand All @@ -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);
}
14 changes: 14 additions & 0 deletions src/layout.c
Original file line number Diff line number Diff line change
@@ -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);
}
}

0 comments on commit 98a8919

Please sign in to comment.