Browse Source

Buttons (Rec,Clear) mnigrate to using libdizzy 'Cache' and 'PeriodicTaskCT'

master
heck 8 months ago
parent
commit
942003449e
  1. 133
      src/main_osp.cc

133
src/main_osp.cc

@ -295,6 +295,9 @@ namespace Heck::OSP {
}
}
//-------------------------------------------------
// HEARTBEAT
//-------------------------------------------------
void task_heartbeat_func(u32)
{
static bool heartbeat_led_state{ false };
@ -302,25 +305,97 @@ namespace Heck::OSP {
seed.SetLed(heartbeat_led_state);
}
void task_logger_midi_print_func(u32) {
dz::PeriodicTaskCT<task_heartbeat_func, 100> task_heartbeat{};
//-------------------------------------------------
// MIDI LOGGER
//-------------------------------------------------
void task_logger_midi_print_func(u32)
{
logger_midi.print();
}
dz::PeriodicTaskCT<task_heartbeat_func, 100> task_heartbeat{};
dz::PeriodicTaskCT<task_logger_midi_print_func, 5> task_logger_midi_print{};
//-------------------------------------------------
// REC BUTTON
//-------------------------------------------------
bool but_rec_update()
{
but_rec.Debounce();
return but_rec.Pressed();
}
void but_rec_changed(dz::Cache<bool>& cache)
{
bool but_rec_current = cache.read();
if (!but_rec_current) {
if (State::clear_mode) {
seed.PrintLine("CLEAR SEQUENCE");
sequencer.clear_sequence();
} else {
seed.PrintLine("BUTTON RECORD ON");
State::record_mode = true;
}
} else {
seed.PrintLine("BUTTON RECORD OFF");
State::record_mode = false;
}
sequencer.recording = but_rec_current;
}
dz::Cache<bool> c_but_rec{ but_rec_update, but_rec_changed };
void task_but_rec_process_func(u32)
{
c_but_rec.update_and_notify_change();
}
dz::PeriodicTaskCT<task_but_rec_process_func, 1> task_but_rec_process{};
//-------------------------------------------------
// CLEAR BUTTON
//-------------------------------------------------
bool but_clear_update()
{
but_clear.Debounce();
return but_clear.Pressed();
}
void but_clear_changed(dz::Cache<bool>& cache)
{
bool but_clear_current = cache.read();
if (but_clear_current) {
seed.PrintLine("BUTTON CLEAR ON");
State::clear_mode = true;
} else {
seed.PrintLine("BUTTON CLEAR OFF");
State::clear_mode = false;
}
}
dz::Cache<bool> c_but_clear{ but_clear_update, but_clear_changed };
void task_but_clear_process_func(u32)
{
c_but_clear.update_and_notify_change();
}
dz::PeriodicTaskCT<task_but_rec_process_func, 1> task_but_clear_process{};
//==========================================================================================
// MAINLOOP
//==========================================================================================
void mainloop()
{
seed.PrintLine("Entering MainLoop");
u32 uptime_ms{};
bool but_record_new{ false };
bool but_record_current{ false };
bool but_clear_new{ false };
bool but_clear_current{ false };
int clock_time_new{};
int clock_time_current{};
@ -334,10 +409,6 @@ namespace Heck::OSP {
dly1.init(&buff1);
while (1) {
// Get current values for state
// if update is different
// Update state
// handle change
uptime_ms = ld::System::GetNow();
clock_time_new = clock.tick_infinite();
@ -365,42 +436,8 @@ namespace Heck::OSP {
midi_from_sequencer();
midi_from_uart();
// REC
but_rec.Debounce();
but_record_new = but_rec.Pressed();
if (but_record_current != but_record_new) {
// State changed
but_record_current = but_record_new;
if (but_record_current) {
if (State::clear_mode) {
seed.PrintLine("CLEAR SEQUENCE");
sequencer.clear_sequence();
} else {
seed.PrintLine("BUTTON RECORD ON");
State::record_mode = true;
}
} else {
seed.PrintLine("BUTTON RECORD OFF");
State::record_mode = false;
}
sequencer.recording = but_record_current;
}
// CLEAR
but_clear.Debounce();
but_clear_new = but_clear.Pressed();
if (but_clear_current != but_clear_new) {
// State changed
but_clear_current = but_clear_new;
if (but_clear_current) {
seed.PrintLine("BUTTON CLEAR ON");
State::clear_mode = true;
} else {
seed.PrintLine("BUTTON CLEAR OFF");
State::clear_mode = false;
}
}
task_but_rec_process.run_pending(uptime_ms);
task_but_clear_process.run_pending(uptime_ms);
task_logger_midi_print.run_pending(uptime_ms);
task_heartbeat.run_pending(uptime_ms);
}

Loading…
Cancel
Save