diff --git a/src/main_osp.cc b/src/main_osp.cc index 127ce2f..55b0fc8 100644 --- a/src/main_osp.cc +++ b/src/main_osp.cc @@ -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