From 10f51ece3e266c98ac1d3646e890a1cb616677a0 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 4 Apr 2023 12:18:04 +0200 Subject: Fix some bugs with bank selection --- src/sequencer.c | 93 ++++++++++++++++++++++++--------------------------------- 1 file changed, 39 insertions(+), 54 deletions(-) (limited to 'src') diff --git a/src/sequencer.c b/src/sequencer.c index 3b77adb..b935bdd 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -1796,6 +1796,22 @@ handle_channel_selection(void) { void stop_playing(void) { + play_status = 0; + if (step_counter != 0) { + draw_current_step(COL_BG); + } + step_counter = 0; + TIMER_CTRL_0 = 0; + SOUND_SQUARE1_CTRL = 0; + SOUND_SQUARE2_CTRL = 0; + SOUND_WAVE_CTRL = 0; + SOUND_NOISE_CTRL = 0; + draw_current_step(COL_RED); + draw_play(); +} + +void +toggle_playing(void) { play_status ^= 1; if (step_counter != 0) { draw_current_step(COL_BG); @@ -1829,6 +1845,23 @@ pause_playing(void) { draw_play(); } +void +select_bank(int i) { + stop_playing(); + save_bank(current_bank); + metadata.current_pattern = current_pattern; + metadata.current_bank = i; + sram_write(&metadata, 0, sizeof(Metadata)); + if (current_bank != i) { + load_bank(i); + } + current_bank = i; + draw_pattern_buttons(); + draw_triggers(); + draw_channels(); + draw_bank_buttons(); +} + void handle_right_col_selection(void) { if (key_tap(KEY_LEFT)) { @@ -1888,70 +1921,22 @@ handle_right_col_selection(void) { } else if (key_tap(KEY_B)) { switch (right_col_selection_loc) { case R_COL_STOP: { - stop_playing(); + toggle_playing(); } break; case R_COL_PLAY: { pause_playing(); } break; case R_COL_BANK_A: { - stop_playing(); - save_bank(current_bank); - metadata.current_pattern = current_pattern; - metadata.current_bank = 0; - sram_write(&metadata, 0, sizeof(Metadata)); - if (current_bank != 0) { - load_bank(0); - } - current_bank = 0; - draw_pattern_buttons(); - draw_triggers(); - draw_channels(); - draw_bank_buttons(); + select_bank(0); } break; case R_COL_BANK_B: { - stop_playing(); - save_bank(current_bank); - metadata.current_pattern = current_pattern; - metadata.current_bank = 1; - sram_write(&metadata, 0, sizeof(Metadata)); - if (current_bank != 1) { - load_bank(1); - } - current_bank = 1; - draw_pattern_buttons(); - draw_triggers(); - draw_channels(); - draw_bank_buttons(); + select_bank(1); } break; case R_COL_BANK_C: { - stop_playing(); - save_bank(current_bank); - metadata.current_pattern = current_pattern; - metadata.current_bank = 2; - sram_write(&metadata, 0, sizeof(Metadata)); - if (current_bank != 2) { - load_bank(2); - } - current_bank = 2; - draw_pattern_buttons(); - draw_triggers(); - draw_channels(); - draw_bank_buttons(); + select_bank(2); } break; case R_COL_BANK_D: { - stop_playing(); - save_bank(current_bank); - metadata.current_pattern = current_pattern; - metadata.current_bank = 3; - sram_write(&metadata, 0, sizeof(Metadata)); - if (current_bank != 3) { - load_bank(3); - } - current_bank = 3; - draw_pattern_buttons(); - draw_triggers(); - draw_channels(); - draw_bank_buttons(); + select_bank(3); } break; } } @@ -2587,7 +2572,7 @@ handle_sequencer_input(void) { if (key_tap(KEY_START)) { // Stop the sequencer or start playing from the beginning. - stop_playing(); + toggle_playing(); } else if (key_tap(KEY_SELECT)) { // Play/pause. pause_playing(); -- cgit v1.2.1