From 5d70f83bd9d5e8047a1dc7d00f885d586fe6196c Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Wed, 28 Jun 2023 13:17:17 +0200 Subject: Allow note/main change and cleanup --- src/app.c | 176 +++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 99 insertions(+), 77 deletions(-) (limited to 'src/app.c') diff --git a/src/app.c b/src/app.c index a5c187a..b1009da 100644 --- a/src/app.c +++ b/src/app.c @@ -141,56 +141,64 @@ Pads row_idx[] = { }; typedef enum Button { - POLY_PAD_ACTIVE = 11, - POLY_PAD_STEAL = 11 + 7, - POLY_PAD_MIN_CH_0 = 11 + 10 * 7 + 0, - POLY_PAD_MIN_CH_1 = 11 + 10 * 7 + 1, - POLY_PAD_MIN_CH_2 = 11 + 10 * 7 + 2, - POLY_PAD_MIN_CH_3 = 11 + 10 * 7 + 3, - POLY_PAD_MIN_CH_4 = 11 + 10 * 7 + 4, - POLY_PAD_MIN_CH_5 = 11 + 10 * 7 + 5, - POLY_PAD_MIN_CH_6 = 11 + 10 * 7 + 6, - POLY_PAD_MIN_CH_7 = 11 + 10 * 7 + 7, - POLY_PAD_MIN_CH_8 = 11 + 10 * 6 + 0, - POLY_PAD_MIN_CH_9 = 11 + 10 * 6 + 1, - POLY_PAD_MIN_CH_A = 11 + 10 * 6 + 2, - POLY_PAD_MIN_CH_B = 11 + 10 * 6 + 3, - POLY_PAD_MIN_CH_C = 11 + 10 * 6 + 4, - POLY_PAD_MIN_CH_D = 11 + 10 * 6 + 5, - POLY_PAD_MIN_CH_E = 11 + 10 * 6 + 6, - POLY_PAD_MIN_CH_F = 11 + 10 * 6 + 7, - POLY_PAD_MAX_CH_0 = 11 + 10 * 5 + 0, - POLY_PAD_MAX_CH_1 = 11 + 10 * 5 + 1, - POLY_PAD_MAX_CH_2 = 11 + 10 * 5 + 2, - POLY_PAD_MAX_CH_3 = 11 + 10 * 5 + 3, - POLY_PAD_MAX_CH_4 = 11 + 10 * 5 + 4, - POLY_PAD_MAX_CH_5 = 11 + 10 * 5 + 5, - POLY_PAD_MAX_CH_6 = 11 + 10 * 5 + 6, - POLY_PAD_MAX_CH_7 = 11 + 10 * 5 + 7, - POLY_PAD_MAX_CH_8 = 11 + 10 * 4 + 0, - POLY_PAD_MAX_CH_9 = 11 + 10 * 4 + 1, - POLY_PAD_MAX_CH_A = 11 + 10 * 4 + 2, - POLY_PAD_MAX_CH_B = 11 + 10 * 4 + 3, - POLY_PAD_MAX_CH_C = 11 + 10 * 4 + 4, - POLY_PAD_MAX_CH_D = 11 + 10 * 4 + 5, - POLY_PAD_MAX_CH_E = 11 + 10 * 4 + 6, - POLY_PAD_MAX_CH_F = 11 + 10 * 4 + 7, - POLY_PAD_SEL_CH_0 = 11 + 10 * 3 + 0, - POLY_PAD_SEL_CH_1 = 11 + 10 * 3 + 1, - POLY_PAD_SEL_CH_2 = 11 + 10 * 3 + 2, - POLY_PAD_SEL_CH_3 = 11 + 10 * 3 + 3, - POLY_PAD_SEL_CH_4 = 11 + 10 * 3 + 4, - POLY_PAD_SEL_CH_5 = 11 + 10 * 3 + 5, - POLY_PAD_SEL_CH_6 = 11 + 10 * 3 + 6, - POLY_PAD_SEL_CH_7 = 11 + 10 * 3 + 7, - POLY_PAD_SEL_CH_8 = 11 + 10 * 2 + 0, - POLY_PAD_SEL_CH_9 = 11 + 10 * 2 + 1, - POLY_PAD_SEL_CH_A = 11 + 10 * 2 + 2, - POLY_PAD_SEL_CH_B = 11 + 10 * 2 + 3, - POLY_PAD_SEL_CH_C = 11 + 10 * 2 + 4, - POLY_PAD_SEL_CH_D = 11 + 10 * 2 + 5, - POLY_PAD_SEL_CH_E = 11 + 10 * 2 + 6, - POLY_PAD_SEL_CH_F = 11 + 10 * 2 + 7, + POLY_PAD_UP = POLY_TOP_ROW + 0, + POLY_PAD_DOWN = POLY_TOP_ROW + 1, + POLY_PAD_LEFT = POLY_TOP_ROW + 2, + POLY_PAD_RIGHT = POLY_TOP_ROW + 3, + POLY_PAD_SESSION = POLY_TOP_ROW + 4, + POLY_PAD_NOTE = POLY_TOP_ROW + 5, + POLY_PAD_DEVICE = POLY_TOP_ROW + 6, + POLY_PAD_USER = POLY_TOP_ROW + 7, + POLY_PAD_ACTIVE = 11, + POLY_PAD_STEAL = 11 + 7, + POLY_PAD_MIN_CH_0 = POLY_PAD_ROW_0 + 0, + POLY_PAD_MIN_CH_1 = POLY_PAD_ROW_0 + 1, + POLY_PAD_MIN_CH_2 = POLY_PAD_ROW_0 + 2, + POLY_PAD_MIN_CH_3 = POLY_PAD_ROW_0 + 3, + POLY_PAD_MIN_CH_4 = POLY_PAD_ROW_0 + 4, + POLY_PAD_MIN_CH_5 = POLY_PAD_ROW_0 + 5, + POLY_PAD_MIN_CH_6 = POLY_PAD_ROW_0 + 6, + POLY_PAD_MIN_CH_7 = POLY_PAD_ROW_0 + 7, + POLY_PAD_MIN_CH_8 = POLY_PAD_ROW_1 + 0, + POLY_PAD_MIN_CH_9 = POLY_PAD_ROW_1 + 1, + POLY_PAD_MIN_CH_A = POLY_PAD_ROW_1 + 2, + POLY_PAD_MIN_CH_B = POLY_PAD_ROW_1 + 3, + POLY_PAD_MIN_CH_C = POLY_PAD_ROW_1 + 4, + POLY_PAD_MIN_CH_D = POLY_PAD_ROW_1 + 5, + POLY_PAD_MIN_CH_E = POLY_PAD_ROW_1 + 6, + POLY_PAD_MIN_CH_F = POLY_PAD_ROW_1 + 7, + POLY_PAD_MAX_CH_0 = POLY_PAD_ROW_2 + 0, + POLY_PAD_MAX_CH_1 = POLY_PAD_ROW_2 + 1, + POLY_PAD_MAX_CH_2 = POLY_PAD_ROW_2 + 2, + POLY_PAD_MAX_CH_3 = POLY_PAD_ROW_2 + 3, + POLY_PAD_MAX_CH_4 = POLY_PAD_ROW_2 + 4, + POLY_PAD_MAX_CH_5 = POLY_PAD_ROW_2 + 5, + POLY_PAD_MAX_CH_6 = POLY_PAD_ROW_2 + 6, + POLY_PAD_MAX_CH_7 = POLY_PAD_ROW_2 + 7, + POLY_PAD_MAX_CH_8 = POLY_PAD_ROW_3 + 0, + POLY_PAD_MAX_CH_9 = POLY_PAD_ROW_3 + 1, + POLY_PAD_MAX_CH_A = POLY_PAD_ROW_3 + 2, + POLY_PAD_MAX_CH_B = POLY_PAD_ROW_3 + 3, + POLY_PAD_MAX_CH_C = POLY_PAD_ROW_3 + 4, + POLY_PAD_MAX_CH_D = POLY_PAD_ROW_3 + 5, + POLY_PAD_MAX_CH_E = POLY_PAD_ROW_3 + 6, + POLY_PAD_MAX_CH_F = POLY_PAD_ROW_3 + 7, + POLY_PAD_SEL_CH_0 = POLY_PAD_ROW_4 + 0, + POLY_PAD_SEL_CH_1 = POLY_PAD_ROW_4 + 1, + POLY_PAD_SEL_CH_2 = POLY_PAD_ROW_4 + 2, + POLY_PAD_SEL_CH_3 = POLY_PAD_ROW_4 + 3, + POLY_PAD_SEL_CH_4 = POLY_PAD_ROW_4 + 4, + POLY_PAD_SEL_CH_5 = POLY_PAD_ROW_4 + 5, + POLY_PAD_SEL_CH_6 = POLY_PAD_ROW_4 + 6, + POLY_PAD_SEL_CH_7 = POLY_PAD_ROW_4 + 7, + POLY_PAD_SEL_CH_8 = POLY_PAD_ROW_5 + 0, + POLY_PAD_SEL_CH_9 = POLY_PAD_ROW_5 + 1, + POLY_PAD_SEL_CH_A = POLY_PAD_ROW_5 + 2, + POLY_PAD_SEL_CH_B = POLY_PAD_ROW_5 + 3, + POLY_PAD_SEL_CH_C = POLY_PAD_ROW_5 + 4, + POLY_PAD_SEL_CH_D = POLY_PAD_ROW_5 + 5, + POLY_PAD_SEL_CH_E = POLY_PAD_ROW_5 + 6, + POLY_PAD_SEL_CH_F = POLY_PAD_ROW_5 + 7, } Button; typedef enum Mode { @@ -251,6 +259,8 @@ u32 note_counter = 0; u8 midi_in_connected = 0; u8 midi_out_connected = 0; u8 next_voice = 0; +static Mode prev_mode = MOD_POLY_MAIN; +static int save_state = 0; // store ADC frame pointer static const u16 *g_ADC = 0; @@ -390,13 +400,17 @@ kbd_find_note(int index) { void app_surface_event(u8 type, u8 index, u8 value) { switch (type) { - case TYPEPAD: { + case TYPEPAD: { switch (state.mode) { case MOD_POLY_MAIN: { if (value) { switch (index) { case POLY_PAD_ACTIVE: { poly_active_toggle(); } break; case POLY_PAD_STEAL: { poly_steal_cycle(); } break; + case POLY_PAD_NOTE: { + state.mode = MOD_POLY_KBD; + save_state = 1; + } break; default: break; } } @@ -463,20 +477,21 @@ app_surface_event(u8 type, u8 index, u8 value) { } } break; case MOD_POLY_KBD: { - // Transposition. if (index >= POLY_TOP_ROW && index <= (POLY_TOP_ROW + 7)) { - switch (index - POLY_TOP_ROW) { - case 0: { - if (state.kbd_octave < 3) { - state.kbd_octave++; - } + switch (index) { + // Transposition. + case POLY_PAD_UP: { + if (state.kbd_octave < 3) { state.kbd_octave++; } } break; - case 1: { - if (state.kbd_octave > 0) { - state.kbd_octave--; - } + case POLY_PAD_DOWN: { + if (state.kbd_octave > 0) { state.kbd_octave--; } } break; - default: {} break; + // Different sections. + case POLY_PAD_SESSION: { + state.mode = MOD_POLY_MAIN; + save_state = 1; + } + default: break; } return; } @@ -508,11 +523,12 @@ app_surface_event(u8 type, u8 index, u8 value) { switch (state.mode) { case MOD_POLY_KBD: case MOD_POLY_MAIN: { + prev_mode = state.mode; state.mode = MOD_POLY_SETUP; } break; case MOD_POLY_SETUP: { - state.mode = MOD_POLY_KBD; - hal_write_flash(0, (u8*)&state, sizeof(State)); + state.mode = prev_mode; + save_state = 1; } break; } } @@ -690,6 +706,10 @@ update(void) { // } // } // n_voices = 0; + if (save_state) { + hal_write_flash(0, (u8*)&state, sizeof(State)); + save_state = 0; + } } void @@ -697,6 +717,8 @@ clear_pads(void) { for (int i = 0; i < PAD_COUNT; ++i) { hal_plot_led(TYPEPAD, ADC_MAP[i], 0, 0, 0); } + hal_plot_led(TYPEPAD, POLY_PAD_SESSION, 0, 0, 0); + hal_plot_led(TYPEPAD, POLY_PAD_NOTE, 0, 0, 0); } void @@ -728,6 +750,7 @@ draw_poly_steal_button(void) { void draw_poly_main(void) { + hal_plot_led(TYPEPAD, POLY_PAD_SESSION, MAXLED / 2, MAXLED / 2, MAXLED / 2); print_number((n_voices / 10) % 10, MAXLED, MAXLED, MAXLED, 0, 0); print_number( n_voices % 10, MAXLED, MAXLED, MAXLED, 4, 0); draw_poly_active_button(); @@ -840,21 +863,21 @@ draw_kbd(int loc, Color clr) { } } +void +draw_poly_kbd(void) { + hal_plot_led(TYPEPAD, POLY_PAD_NOTE, MAXLED / 2, MAXLED / 2, MAXLED / 2); + draw_kbd(0, colors[0]); + draw_kbd(2, colors[1]); + draw_kbd(4, colors[2]); + draw_kbd(6, colors[3]); +} + void draw_scene(void) { switch (state.mode) { - case MOD_POLY_MAIN: { - draw_poly_main(); - } break; - case MOD_POLY_SETUP: { - draw_poly_setup(); - } break; - case MOD_POLY_KBD: { - draw_kbd(0, colors[0]); - draw_kbd(2, colors[1]); - draw_kbd(4, colors[2]); - draw_kbd(6, colors[3]); - } break; + case MOD_POLY_MAIN: { draw_poly_main(); } break; + case MOD_POLY_SETUP: { draw_poly_setup(); } break; + case MOD_POLY_KBD: { draw_poly_kbd(); } break; } } @@ -889,7 +912,6 @@ app_init(const u16 *adc_raw) { .kbd_octave = 0, }; } - state.mode = MOD_POLY_KBD; // DEBUG: // store off the raw ADC frame pointer for later use g_ADC = adc_raw; -- cgit v1.2.1