|
|
@ -23,7 +23,7 @@ namespace Heck { |
|
|
|
// =============================================================================================
|
|
|
|
// INIT
|
|
|
|
// =============================================================================================
|
|
|
|
ld::DaisySeed hw{}; |
|
|
|
ld::DaisySeed seed{}; |
|
|
|
ld::Switch but_rec{}; |
|
|
|
ld::Switch but_clear{}; |
|
|
|
|
|
|
@ -55,31 +55,31 @@ namespace Heck { |
|
|
|
|
|
|
|
void init() |
|
|
|
{ |
|
|
|
hw.Configure(); |
|
|
|
hw.Init(Constants::CPU_BOOST480MHZ); |
|
|
|
hw.StartLog(Constants::Developer::LOG_BLOCKS_BOOT); |
|
|
|
seed.Configure(); |
|
|
|
seed.Init(Constants::CPU_BOOST480MHZ); |
|
|
|
seed.StartLog(Constants::Developer::LOG_BLOCKS_BOOT); |
|
|
|
|
|
|
|
but_rec.Init(hw.GetPin(Constants::Hardware::PIN_BUTTON_RECORD), 0); |
|
|
|
but_clear.Init(hw.GetPin(Constants::Hardware::PIN_BUTTON_CLEAR), 0); |
|
|
|
but_rec.Init(seed.GetPin(Constants::Hardware::PIN_BUTTON_RECORD), 0); |
|
|
|
but_clear.Init(seed.GetPin(Constants::Hardware::PIN_BUTTON_CLEAR), 0); |
|
|
|
|
|
|
|
hw.PrintLine("Setting Blocksize: %i", Constants::AUDIO_BUFFERSIZE); |
|
|
|
hw.SetAudioBlockSize(Constants::AUDIO_BUFFERSIZE); |
|
|
|
seed.PrintLine("Setting Blocksize: %i", Constants::AUDIO_BUFFERSIZE); |
|
|
|
seed.SetAudioBlockSize(Constants::AUDIO_BUFFERSIZE); |
|
|
|
|
|
|
|
hw.PrintLine("Setting Samplerate: %i", Constants::AUDIO_SAMPLERATE); |
|
|
|
hw.SetAudioSampleRate(Constants::AUDIO_SAMPLERATE); |
|
|
|
seed.PrintLine("Setting Samplerate: %i", Constants::AUDIO_SAMPLERATE); |
|
|
|
seed.SetAudioSampleRate(Constants::AUDIO_SAMPLERATE); |
|
|
|
|
|
|
|
hw.PrintLine("Initializing MIDI"); |
|
|
|
seed.PrintLine("Initializing MIDI"); |
|
|
|
ld::MidiUartHandler::Config midi_config{}; |
|
|
|
midi.Init(midi_config); |
|
|
|
|
|
|
|
init_tracks(); |
|
|
|
|
|
|
|
hw.PrintLine("Starting MIDI Receive"); |
|
|
|
seed.PrintLine("Starting MIDI Receive"); |
|
|
|
midi.StartReceiveRt(&midi_realtime_handler); |
|
|
|
midi.Listen(); |
|
|
|
|
|
|
|
hw.PrintLine("Starting Audio"); |
|
|
|
hw.StartAudio(audio_callback); |
|
|
|
seed.PrintLine("Starting Audio"); |
|
|
|
seed.StartAudio(audio_callback); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -136,7 +136,7 @@ namespace Heck { |
|
|
|
ld::ControlChangeEvent cc = msg.AsControlChange(); |
|
|
|
if (State::clear_mode) { |
|
|
|
ld::ControlChangeEvent cc = msg.AsControlChange(); |
|
|
|
hw.PrintLine("Clear: ch: %i, cc: %i", cc.channel, cc.control_number); |
|
|
|
seed.PrintLine("Clear: ch: %i, cc: %i", cc.channel, cc.control_number); |
|
|
|
sequencer.clear_track_cc(cc.channel, cc.control_number); |
|
|
|
} else { |
|
|
|
sequencer.midi_in(msg); |
|
|
@ -204,7 +204,7 @@ namespace Heck { |
|
|
|
|
|
|
|
void mainloop() |
|
|
|
{ |
|
|
|
hw.PrintLine("Entering MainLoop"); |
|
|
|
seed.PrintLine("Entering MainLoop"); |
|
|
|
u32 time_boot_ms{}; |
|
|
|
|
|
|
|
bool heartbeat_led_state{ false }; |
|
|
@ -213,7 +213,7 @@ namespace Heck { |
|
|
|
heartbeat.set_period(100); |
|
|
|
heartbeat.set_callback([&heartbeat_led_state](u32 time_now) { |
|
|
|
heartbeat_led_state = !heartbeat_led_state; |
|
|
|
hw.SetLed(heartbeat_led_state); |
|
|
|
seed.SetLed(heartbeat_led_state); |
|
|
|
}); |
|
|
|
|
|
|
|
SWTimer async_log_tx{}; |
|
|
@ -229,7 +229,7 @@ namespace Heck { |
|
|
|
GetMidiRTTypeAsString(msg, rttype_str); |
|
|
|
sprintf(outstr, "RT: type: %s\n", rttype_str); |
|
|
|
if (msg.srt_type != ld::TimingClock) { |
|
|
|
hw.PrintLine("%s", outstr); |
|
|
|
seed.PrintLine("%s", outstr); |
|
|
|
} |
|
|
|
} |
|
|
|
} break; |
|
|
@ -249,7 +249,7 @@ namespace Heck { |
|
|
|
msg.channel, |
|
|
|
msg.data[0], |
|
|
|
msg.data[1]); |
|
|
|
hw.PrintLine("%s", outstr); |
|
|
|
seed.PrintLine("%s", outstr); |
|
|
|
} |
|
|
|
} break; |
|
|
|
} |
|
|
@ -289,7 +289,7 @@ namespace Heck { |
|
|
|
if (clock_bar_new != clock_bar_current) { |
|
|
|
clock_bar_current = clock_bar_new; |
|
|
|
if constexpr (Constants::Developer::LOG_CLOCK_BAR) { |
|
|
|
hw.PrintLine("Bar: %i", clock_bar_current); |
|
|
|
seed.PrintLine("Bar: %i", clock_bar_current); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -297,7 +297,7 @@ namespace Heck { |
|
|
|
if (clock_16n_new != clock_16n_current) { |
|
|
|
clock_16n_current = clock_16n_new; |
|
|
|
if constexpr (Constants::Developer::LOG_CLOCK_16N) { |
|
|
|
hw.PrintLine("16n: %i", clock_16n_current); |
|
|
|
seed.PrintLine("16n: %i", clock_16n_current); |
|
|
|
} |
|
|
|
sequencer.next_step(); |
|
|
|
} |
|
|
@ -313,14 +313,14 @@ namespace Heck { |
|
|
|
but_record_current = but_record_new; |
|
|
|
if (but_record_current) { |
|
|
|
if (State::clear_mode) { |
|
|
|
hw.PrintLine("CLEAR SEQUENCE"); |
|
|
|
seed.PrintLine("CLEAR SEQUENCE"); |
|
|
|
sequencer.clear_sequence(); |
|
|
|
} else { |
|
|
|
hw.PrintLine("BUTTON RECORD ON"); |
|
|
|
seed.PrintLine("BUTTON RECORD ON"); |
|
|
|
State::record_mode = true; |
|
|
|
} |
|
|
|
} else { |
|
|
|
hw.PrintLine("BUTTON RECORD OFF"); |
|
|
|
seed.PrintLine("BUTTON RECORD OFF"); |
|
|
|
State::record_mode = false; |
|
|
|
} |
|
|
|
sequencer.recording = but_record_current; |
|
|
@ -333,10 +333,10 @@ namespace Heck { |
|
|
|
// State changed
|
|
|
|
but_clear_current = but_clear_new; |
|
|
|
if (but_clear_current) { |
|
|
|
hw.PrintLine("BUTTON CLEAR ON"); |
|
|
|
seed.PrintLine("BUTTON CLEAR ON"); |
|
|
|
State::clear_mode = true; |
|
|
|
} else { |
|
|
|
hw.PrintLine("BUTTON CLEAR OFF"); |
|
|
|
seed.PrintLine("BUTTON CLEAR OFF"); |
|
|
|
State::clear_mode = false; |
|
|
|
} |
|
|
|
} |
|
|
|