|
|
@ -211,7 +211,7 @@ namespace Heck { |
|
|
|
void mainloop() |
|
|
|
{ |
|
|
|
hw.PrintLine("Entering MainLoop"); |
|
|
|
u32 systick_now{}; |
|
|
|
u32 time_boot_ms{}; |
|
|
|
u32 midi_log_systick_last{}; |
|
|
|
|
|
|
|
bool heartbeat_led_state{ false }; |
|
|
@ -224,6 +224,47 @@ namespace Heck { |
|
|
|
hw.SetLed(heartbeat_led_state); |
|
|
|
}); |
|
|
|
|
|
|
|
SWTimer async_log_tx{}; |
|
|
|
async_log_tx.set_period(5); |
|
|
|
async_log_tx.set_callback([time_boot_ms](){ |
|
|
|
if (!event_log.IsEmpty()) { |
|
|
|
auto msg = event_log.PopFront(); |
|
|
|
switch (msg.type) { |
|
|
|
case ld::MidiMessageType::SystemRealTime: { |
|
|
|
if constexpr (Constants::Developer::LOG_MIDI_REALTIME) { |
|
|
|
char outstr[256]; |
|
|
|
char rttype_str[32]; |
|
|
|
GetMidiRTTypeAsString(msg, rttype_str); |
|
|
|
sprintf(outstr, "RT: type: %s\n", rttype_str); |
|
|
|
if (msg.srt_type != ld::TimingClock) { |
|
|
|
hw.PrintLine("%s", outstr); |
|
|
|
} |
|
|
|
} |
|
|
|
} break; |
|
|
|
case ld::NoteOn: |
|
|
|
case ld::NoteOff: |
|
|
|
case ld::MidiMessageType::ControlChange: { |
|
|
|
if constexpr (Constants::Developer::LOG_MIDI_NOTESANDCC) { |
|
|
|
char outstr[256]; |
|
|
|
char type_str[32]; |
|
|
|
GetMidiTypeAsString(msg, type_str); |
|
|
|
sprintf( |
|
|
|
outstr, |
|
|
|
"time-last:\t%ld\ttype: %s\tChannel: %d\tData MSB: " |
|
|
|
"%d\tData LSB: %d\n", |
|
|
|
time_boot_ms, |
|
|
|
type_str, |
|
|
|
msg.channel, |
|
|
|
msg.data[0], |
|
|
|
msg.data[1]); |
|
|
|
hw.PrintLine("%s", outstr); |
|
|
|
} |
|
|
|
} break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
bool but_record_new{ false }; |
|
|
|
bool but_record_current{ false }; |
|
|
|
|
|
|
@ -245,7 +286,7 @@ namespace Heck { |
|
|
|
// if update is different
|
|
|
|
// Update state
|
|
|
|
// handle change
|
|
|
|
systick_now = ld::System::GetNow(); |
|
|
|
time_boot_ms = ld::System::GetNow(); |
|
|
|
|
|
|
|
clock_time_new = clock.tick_infinite(); |
|
|
|
if (clock_time_current != clock_time_new) { |
|
|
@ -308,46 +349,8 @@ namespace Heck { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (systick_now - midi_log_systick_last > 5) { |
|
|
|
midi_log_systick_last = systick_now; |
|
|
|
if (!event_log.IsEmpty()) { |
|
|
|
auto msg = event_log.PopFront(); |
|
|
|
switch (msg.type) { |
|
|
|
case ld::MidiMessageType::SystemRealTime: { |
|
|
|
if (Constants::Developer::LOG_MIDI_REALTIME) { |
|
|
|
char outstr[256]; |
|
|
|
char rttype_str[32]; |
|
|
|
GetMidiRTTypeAsString(msg, rttype_str); |
|
|
|
sprintf(outstr, "RT: type: %s\n", rttype_str); |
|
|
|
if (msg.srt_type != ld::TimingClock) { |
|
|
|
hw.PrintLine("%s", outstr); |
|
|
|
} |
|
|
|
} |
|
|
|
} break; |
|
|
|
case ld::NoteOn: |
|
|
|
case ld::NoteOff: |
|
|
|
case ld::MidiMessageType::ControlChange: { |
|
|
|
if (Constants::Developer::LOG_MIDI_NOTESANDCC) { |
|
|
|
char outstr[256]; |
|
|
|
char type_str[32]; |
|
|
|
GetMidiTypeAsString(msg, type_str); |
|
|
|
sprintf( |
|
|
|
outstr, |
|
|
|
"time-last:\t%ld\ttype: %s\tChannel: %d\tData MSB: " |
|
|
|
"%d\tData LSB: %d\n", |
|
|
|
systick_now, |
|
|
|
type_str, |
|
|
|
msg.channel, |
|
|
|
msg.data[0], |
|
|
|
msg.data[1]); |
|
|
|
hw.PrintLine("%s", outstr); |
|
|
|
} |
|
|
|
} break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
heartbeat.is_it_already_time_again(systick_now); |
|
|
|
async_log_tx.is_it_already_time_again(time_boot_ms); |
|
|
|
heartbeat.is_it_already_time_again(time_boot_ms); |
|
|
|
} |
|
|
|
} |
|
|
|
} // namespace Heck
|
|
|
|