From 595cfc36afbe4192bf24b0a2f5c2f95e87e12295 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 24 Apr 2023 16:27:50 +0200 Subject: Fix potential recursive loop on interrupt --- src/sequencer.c | 49 +++++++++++++------------------------------------ 1 file changed, 13 insertions(+), 36 deletions(-) (limited to 'src/sequencer.c') diff --git a/src/sequencer.c b/src/sequencer.c index 179e72f..44ee8be 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -17,15 +17,14 @@ bool redraw_bank_buttons = true; bool redraw_params = true; bool redraw_bpm = true; bool redraw_piano_note = true; +bool update_bpm = false; void play_step(void) { if (current_pattern != next_pattern && step_counter == 15) { current_pattern = next_pattern; redraw_pattern_buttons = true; - set_time(patterns[current_pattern].bpm); - play_step(); - return; + update_bpm = true; } Pattern *pat = &patterns[current_pattern]; if (pat->ch1.active) { @@ -90,21 +89,11 @@ play_step(void) { SOUND_WAVE_MODE |= SOUND_WAVE_ENABLE; switch (params->wave_volume) { - case 0: { - SOUND_WAVE_CTRL = SOUND_WAVE_MUTE; - } break; - case 1: { - SOUND_WAVE_CTRL = SOUND_WAVE_VOL_25; - } break; - case 2: { - SOUND_WAVE_CTRL = SOUND_WAVE_VOL_50; - } break; - case 3: { - SOUND_WAVE_CTRL = SOUND_WAVE_VOL_75; - } break; - case 4: { - SOUND_WAVE_CTRL = SOUND_WAVE_VOL_100; - } break; + case 0: { SOUND_WAVE_CTRL = SOUND_WAVE_MUTE; } break; + case 1: { SOUND_WAVE_CTRL = SOUND_WAVE_VOL_25; } break; + case 2: { SOUND_WAVE_CTRL = SOUND_WAVE_VOL_50; } break; + case 3: { SOUND_WAVE_CTRL = SOUND_WAVE_VOL_75; } break; + case 4: { SOUND_WAVE_CTRL = SOUND_WAVE_VOL_100; } break; } SOUND_WAVE_FREQ = SOUND_FREQ_RESET | sound_rates[trig->note]; @@ -755,30 +744,18 @@ set_param_selection_wave(size_t i, InputHandler return_handler) { u32 *wave_a = &pat->ch3.params[i].wave_a; u32 *wave_b = &pat->ch3.params[i].wave_b; switch (param_selection_loc) { - case 64: { - memcpy32(wave_a, sine_wave, 16); - } break; - case 65: { - memcpy32(wave_a, saw_wave, 16); - } break; - case 66: { - memcpy32(wave_a, square_wave, 16); - } break; + case 64: { memcpy32(wave_a, sine_wave, 16); } break; + case 65: { memcpy32(wave_a, saw_wave, 16); } break; + case 66: { memcpy32(wave_a, square_wave, 16); } break; case 67: { u32 rand_wave[4] = { rng32(), rng32(), rng32(), rng32(), }; memcpy32(wave_a, rand_wave, 16); } break; - case 68: { - memcpy32(wave_b, sine_wave, 16); - } break; - case 69: { - memcpy32(wave_b, saw_wave, 16); - } break; - case 70: { - memcpy32(wave_b, square_wave, 16); - } break; + case 68: { memcpy32(wave_b, sine_wave, 16); } break; + case 69: { memcpy32(wave_b, saw_wave, 16); } break; + case 70: { memcpy32(wave_b, square_wave, 16); } break; case 71: { u32 rand_wave[4] = { rng32(), rng32(), rng32(), rng32(), -- cgit v1.2.1