Browse Source

Examples: Add main_template_full

usb_midi_launchpad
heck 6 months ago
parent
commit
13aa24b17a
  1. 124
      examples/main_template_full.cc
  2. 30
      examples/main_template_full.hh

124
examples/main_template_full.cc

@ -0,0 +1,124 @@
// Hecks perkons extension
#include <functional>
#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();
}

30
examples/main_template_full.hh

@ -0,0 +1,30 @@
#ifndef HECK_DAISY_GLOBALS_HH
#define HECK_DAISY_GLOBALS_HH
#include <cstdint>
#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
Loading…
Cancel
Save