From 13aa24b17a0a1f7e2fc43fdfa9fa98b15748e9da Mon Sep 17 00:00:00 2001 From: heck Date: Thu, 26 Sep 2024 22:51:09 +0200 Subject: [PATCH] Examples: Add main_template_full --- examples/main_template_full.cc | 124 +++++++++++++++++++++++++++++++++ examples/main_template_full.hh | 30 ++++++++ 2 files changed, 154 insertions(+) create mode 100644 examples/main_template_full.cc create mode 100644 examples/main_template_full.hh diff --git a/examples/main_template_full.cc b/examples/main_template_full.cc new file mode 100644 index 0000000..1de486b --- /dev/null +++ b/examples/main_template_full.cc @@ -0,0 +1,124 @@ +// Hecks perkons extension + +#include +#include "main_template_full.hh" +#include "utils.hh" + +namespace Heck { + namespace { // anonymous namespace for internal linkage + // ============================================================================================= + // INIT + // ============================================================================================= + ld::DaisySeed seed{}; + + static ld::MidiUartHandler midi{}; + + // function prototypes + void audio_callback( + ld::AudioHandle::InputBuffer in, + ld::AudioHandle::OutputBuffer out, + size_t size) + ; + void midi_realtime_handler(const ld::MidiEvent& msg); + + void init() + { + seed.Configure(); + seed.Init(Constants::CPU_BOOST480MHZ); + seed.StartLog(Constants::Developer::LOG_BLOCKS_BOOT); + + seed.PrintLine("Setting Blocksize: %i", Constants::AUDIO_BUFFERSIZE); + seed.SetAudioBlockSize(Constants::AUDIO_BUFFERSIZE); + + seed.PrintLine("Setting Samplerate: %i", Constants::AUDIO_SAMPLERATE); + seed.SetAudioSampleRate(Constants::AUDIO_SAMPLERATE); + + seed.PrintLine("Initializing MIDI"); + ld::MidiUartHandler::Config midi_config{}; + midi.Init(midi_config); + + seed.PrintLine("Starting MIDI Receive"); + midi.StartReceiveRt(&midi_realtime_handler); + midi.Listen(); + + seed.PrintLine("Starting Audio"); + seed.StartAudio(audio_callback); + } + + + // ============================================================================================= + // RUN + // ============================================================================================= + + void audio_callback(ld::AudioHandle::InputBuffer in, ld::AudioHandle::OutputBuffer out, size_t size) + { + // Channel 1 + for (size_t i = 0; i < size; i++) { + out[0][i] = in[0][i]; + } + + // Channel 2 + for (size_t i = 0; i < size; i++) { + out[1][i] = in[1][i]; + } + } + + + void midi_realtime_handler(const ld::MidiEvent& msg) + { + switch (msg.srt_type) { + case ld::TimingClock: { + } break; + case ld::Start: { + } break; + case ld::Stop: { + } break; + case ld::Reset: { + } break; + case ld::Continue: { + } break; + } + } + + void midi_async_handler(const ld::MidiEvent& msg) + { + char strbuf[128]; + GetMidiTypeAsString(msg, &strbuf[0]); + seed.PrintLine("%s", strbuf); + return; + } + + void mainloop() + { + seed.PrintLine("Entering MainLoop"); + u32 systick_now{}; + + bool heartbeat_led_state{ false }; + + SWTimer heartbeat{}; + heartbeat.set_period(100); + heartbeat.set_callback([&heartbeat_led_state]() { + heartbeat_led_state = !heartbeat_led_state; + seed.SetLed(heartbeat_led_state); + return; + }); + + while (true) { + systick_now = ld::System::GetNow(); + + while (midi.HasEvents()) { + midi_async_handler(midi.PopEvent()); + } + + heartbeat.is_it_already_time_again(systick_now); + } + } + } // namespace +} // namespace Heck + + +int main() +{ + Heck::init(); + Heck::mainloop(); +} \ No newline at end of file diff --git a/examples/main_template_full.hh b/examples/main_template_full.hh new file mode 100644 index 0000000..d0619af --- /dev/null +++ b/examples/main_template_full.hh @@ -0,0 +1,30 @@ +#ifndef HECK_DAISY_GLOBALS_HH +#define HECK_DAISY_GLOBALS_HH + +#include +#include "daisy_seed.h" +#include "daisysp.h" +#include "types.hh" + +namespace Heck { + namespace Constants { + namespace Hardware { +// constexpr int PIN_BUTTON_RECORD = 28; + } + + constexpr bool CPU_BOOST480MHZ = false; + constexpr int AUDIO_BUFFERSIZE = 4; + constexpr Samplerate AUDIO_SAMPLERATE = Samplerate::SAI_48KHZ; + + namespace Developer { + constexpr bool LOG_BLOCKS_BOOT = false; + } + } // namespace Constants + + //Hardware + extern ld::DaisySeed seed; +// extern ld::Switch but_rec; +} // namespace Heck + + +#endif \ No newline at end of file