Browse Source

Implement async_log_tx using SWTimer

master
heck 9 months ago
parent
commit
d191fd7c56
  1. 87
      src/main_osp.cc

87
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

Loading…
Cancel
Save