mirror of
https://github.com/ravinrabbid/DonCon2040.git
synced 2024-11-20 11:47:07 +01:00
Make debounce delay configurable via on-screen menu
This commit is contained in:
parent
f66420b2a0
commit
e8c3e5d697
@ -103,6 +103,7 @@ class Drum {
|
||||
|
||||
void updateInputState(Utils::InputState &input_state);
|
||||
|
||||
void setDebounceDelay(const uint16_t delay);
|
||||
void setThresholds(const Config::Thresholds &thresholds);
|
||||
void setThresholdScaleLevel(const uint8_t threshold_scale_level);
|
||||
};
|
||||
|
@ -24,6 +24,7 @@ class Menu {
|
||||
TriggerThresholdDonRight,
|
||||
TriggerThresholdKaRight,
|
||||
TriggerThresholdScaleLevel,
|
||||
DebounceDelay,
|
||||
LedBrightness,
|
||||
Reset,
|
||||
Bootsel,
|
||||
@ -54,6 +55,7 @@ class Menu {
|
||||
GotoPageTriggerThresholdDonRight,
|
||||
GotoPageTriggerThresholdKaRight,
|
||||
GotoPageTriggerThresholdScaleLevel,
|
||||
GotoPageDebounceDelay,
|
||||
GotoPageLedBrightness,
|
||||
GotoPageReset,
|
||||
GotoPageBootsel,
|
||||
@ -72,6 +74,7 @@ class Menu {
|
||||
SetTriggerThresholdDonRight,
|
||||
SetTriggerThresholdKaRight,
|
||||
SetTriggerThresholdScaleLevel,
|
||||
SetDebounceDelay,
|
||||
SetLedBrightness,
|
||||
|
||||
DoRebootToBootsel,
|
||||
|
@ -22,9 +22,11 @@ class SettingsStore {
|
||||
Peripherals::Drum::Config::Thresholds trigger_thresholds;
|
||||
uint8_t trigger_threshold_scale_level;
|
||||
uint8_t led_brightness;
|
||||
uint16_t debounce_delay;
|
||||
|
||||
uint8_t _padding[m_store_size - sizeof(uint8_t) - sizeof(usb_mode_t) -
|
||||
sizeof(Peripherals::Drum::Config::Thresholds) - sizeof(uint8_t) - sizeof(uint8_t)];
|
||||
sizeof(Peripherals::Drum::Config::Thresholds) - sizeof(uint8_t) - sizeof(uint8_t) -
|
||||
sizeof(uint16_t)];
|
||||
};
|
||||
static_assert(sizeof(Storecache) == m_store_size);
|
||||
|
||||
@ -57,6 +59,9 @@ class SettingsStore {
|
||||
void setLedBrightness(const uint8_t brightness);
|
||||
uint8_t getLedBrightness();
|
||||
|
||||
void setDebounceDelay(const uint16_t delay);
|
||||
uint16_t getDebounceDelay();
|
||||
|
||||
void scheduleReboot(const bool bootsel = false);
|
||||
|
||||
void store();
|
||||
|
@ -129,6 +129,7 @@ int main() {
|
||||
ctrl_message = {ControlCommand::SetLedBrightness, {.brightness = settings_store->getLedBrightness()}};
|
||||
queue_add_blocking(&control_queue, &ctrl_message);
|
||||
|
||||
drum.setDebounceDelay(settings_store->getDebounceDelay());
|
||||
drum.setThresholds(settings_store->getTriggerThresholds());
|
||||
drum.setThresholdScaleLevel(settings_store->getTriggerThresholdScaleLevel());
|
||||
};
|
||||
|
@ -133,6 +133,8 @@ void Drum::updateInputState(Utils::InputState &input_state) {
|
||||
input_state.drum.ka_right.triggered = m_pads.at(Id::KA_RIGHT).getState();
|
||||
}
|
||||
|
||||
void Drum::setDebounceDelay(const uint16_t delay) { m_config.debounce_delay_ms = delay; }
|
||||
|
||||
void Drum::setThresholds(const Config::Thresholds &thresholds) { m_config.trigger_thresholds = thresholds; }
|
||||
|
||||
void Drum::setThresholdScaleLevel(const uint8_t threshold_scale_level) {
|
||||
|
@ -9,6 +9,7 @@ const std::map<Menu::Page, const Menu::Descriptor> Menu::descriptors = {
|
||||
{{"Mode", Menu::Descriptor::Action::GotoPageDeviceMode}, //
|
||||
{"Brightness", Menu::Descriptor::Action::GotoPageLedBrightness}, //
|
||||
{"Sensitvty", Menu::Descriptor::Action::GotoPageTriggerThreshold}, //
|
||||
{"DebnceDly", Menu::Descriptor::Action::GotoPageTriggerThreshold}, //
|
||||
{"Reset", Menu::Descriptor::Action::GotoPageReset}, //
|
||||
{"BOOTSEL", Menu::Descriptor::Action::GotoPageBootsel}}, //
|
||||
0}}, //
|
||||
@ -64,7 +65,13 @@ const std::map<Menu::Page, const Menu::Descriptor> Menu::descriptors = {
|
||||
{Menu::Descriptor::Type::Value, //
|
||||
"Sensitivity Scale Lvl", //
|
||||
{{"", Menu::Descriptor::Action::SetTriggerThresholdScaleLevel}}, //
|
||||
UINT8_MAX}}, //
|
||||
UINT8_MAX}},
|
||||
|
||||
{Menu::Page::DebounceDelay, //
|
||||
{Menu::Descriptor::Type::Value, //
|
||||
"Debounce Delay (ms)", //
|
||||
{{"", Menu::Descriptor::Action::SetDebounceDelay}}, //
|
||||
255}},
|
||||
|
||||
{Menu::Page::LedBrightness, //
|
||||
{Menu::Descriptor::Type::Value, //
|
||||
@ -197,6 +204,9 @@ uint16_t Menu::getCurrentSelection(Menu::Page page) {
|
||||
case Page::TriggerThresholdScaleLevel:
|
||||
return m_store->getTriggerThresholdScaleLevel();
|
||||
break;
|
||||
case Page::DebounceDelay:
|
||||
return m_store->getDebounceDelay();
|
||||
break;
|
||||
case Page::LedBrightness:
|
||||
return m_store->getLedBrightness();
|
||||
break;
|
||||
@ -247,6 +257,9 @@ void Menu::performSelectionAction(Menu::Descriptor::Action action) {
|
||||
case Descriptor::Action::GotoPageLedBrightness:
|
||||
gotoPage(Page::LedBrightness);
|
||||
break;
|
||||
case Descriptor::Action::GotoPageDebounceDelay:
|
||||
gotoPage(Page::DebounceDelay);
|
||||
break;
|
||||
case Descriptor::Action::GotoPageReset:
|
||||
gotoPage(Page::Reset);
|
||||
break;
|
||||
@ -292,6 +305,9 @@ void Menu::performSelectionAction(Menu::Descriptor::Action action) {
|
||||
case Descriptor::Action::SetTriggerThresholdScaleLevel:
|
||||
gotoParent();
|
||||
break;
|
||||
case Descriptor::Action::SetDebounceDelay:
|
||||
gotoParent();
|
||||
break;
|
||||
case Descriptor::Action::SetLedBrightness:
|
||||
gotoParent();
|
||||
break;
|
||||
@ -341,6 +357,9 @@ void Menu::performValueAction(Menu::Descriptor::Action action, uint16_t value) {
|
||||
case Descriptor::Action::SetTriggerThresholdScaleLevel:
|
||||
m_store->setTriggerThresholdScaleLevel(value);
|
||||
break;
|
||||
case Descriptor::Action::SetDebounceDelay:
|
||||
m_store->setDebounceDelay(value);
|
||||
break;
|
||||
case Descriptor::Action::SetLedBrightness:
|
||||
m_store->setLedBrightness(value);
|
||||
break;
|
||||
|
@ -16,6 +16,7 @@ SettingsStore::SettingsStore()
|
||||
Config::Default::drum_config.trigger_thresholds,
|
||||
Config::Default::drum_config.trigger_threshold_scale_level,
|
||||
Config::Default::led_config.brightness,
|
||||
Config::Default::drum_config.debounce_delay_ms,
|
||||
{}}),
|
||||
m_dirty(true), m_scheduled_reboot(RebootType::None) {
|
||||
uint32_t current_page = m_flash_offset + m_flash_size - m_store_size;
|
||||
@ -74,6 +75,14 @@ void SettingsStore::setLedBrightness(const uint8_t brightness) {
|
||||
}
|
||||
uint8_t SettingsStore::getLedBrightness() { return m_store_cache.led_brightness; }
|
||||
|
||||
void SettingsStore::setDebounceDelay(const uint16_t delay) {
|
||||
if (m_store_cache.debounce_delay != delay) {
|
||||
m_store_cache.debounce_delay = delay;
|
||||
m_dirty = true;
|
||||
}
|
||||
}
|
||||
uint16_t SettingsStore::getDebounceDelay() { return m_store_cache.debounce_delay; }
|
||||
|
||||
void SettingsStore::store() {
|
||||
if (m_dirty) {
|
||||
multicore_lockout_start_blocking();
|
||||
|
Loading…
Reference in New Issue
Block a user