Add settings reset via on-screen menu

This commit is contained in:
Frederik Walk 2023-07-17 00:08:24 +02:00
parent b278f76ba0
commit 753a1cd59f
4 changed files with 39 additions and 0 deletions

View File

@ -25,6 +25,7 @@ class Menu {
TriggerThresholdKaRight, TriggerThresholdKaRight,
TriggerThresholdScaleLevel, TriggerThresholdScaleLevel,
LedBrightness, LedBrightness,
Reset,
Bootsel, Bootsel,
BootselMsg, BootselMsg,
}; };
@ -44,6 +45,7 @@ class Menu {
enum class Action { enum class Action {
None, None,
GotoParent,
GotoPageDeviceMode, GotoPageDeviceMode,
GotoPageTriggerThreshold, GotoPageTriggerThreshold,
@ -53,6 +55,7 @@ class Menu {
GotoPageTriggerThresholdKaRight, GotoPageTriggerThresholdKaRight,
GotoPageTriggerThresholdScaleLevel, GotoPageTriggerThresholdScaleLevel,
GotoPageLedBrightness, GotoPageLedBrightness,
GotoPageReset,
GotoPageBootsel, GotoPageBootsel,
ChangeUsbModeSwitchTatacon, ChangeUsbModeSwitchTatacon,
@ -71,6 +74,7 @@ class Menu {
SetLedBrightness, SetLedBrightness,
DoRebootToBootsel, DoRebootToBootsel,
DoReset,
}; };
Type type; Type type;

View File

@ -60,6 +60,7 @@ class SettingsStore {
void scheduleReboot(const bool bootsel = false); void scheduleReboot(const bool bootsel = false);
void store(); void store();
void reset();
}; };
} // namespace Doncon::Utils } // namespace Doncon::Utils

View File

@ -9,6 +9,7 @@ const std::map<Menu::Page, const Menu::Descriptor> Menu::descriptors = {
{{"Mode", Menu::Descriptor::Action::GotoPageDeviceMode}, // {{"Mode", Menu::Descriptor::Action::GotoPageDeviceMode}, //
{"Brightness", Menu::Descriptor::Action::GotoPageLedBrightness}, // {"Brightness", Menu::Descriptor::Action::GotoPageLedBrightness}, //
{"Sensitvty", Menu::Descriptor::Action::GotoPageTriggerThreshold}, // {"Sensitvty", Menu::Descriptor::Action::GotoPageTriggerThreshold}, //
{"Reset", Menu::Descriptor::Action::GotoPageReset}, //
{"BOOTSEL", Menu::Descriptor::Action::GotoPageBootsel}}, // {"BOOTSEL", Menu::Descriptor::Action::GotoPageBootsel}}, //
0, // 0, //
Menu::Page::None}}, // Menu::Page::None}}, //
@ -79,6 +80,14 @@ const std::map<Menu::Page, const Menu::Descriptor> Menu::descriptors = {
UINT8_MAX, // UINT8_MAX, //
Menu::Page::Main}}, // Menu::Page::Main}}, //
{Menu::Page::Reset, //
{Menu::Descriptor::Type::Selection, //
"Reset all Settings?", //
{{"No", Menu::Descriptor::Action::GotoParent}, //
{"Yes", Menu::Descriptor::Action::DoReset}}, //
0, //
Menu::Page::Main}}, //
{Menu::Page::Bootsel, // {Menu::Page::Bootsel, //
{Menu::Descriptor::Type::Selection, // {Menu::Descriptor::Type::Selection, //
"Reboot to BOOTSEL", // "Reboot to BOOTSEL", //
@ -204,6 +213,7 @@ uint16_t Menu::getCurrentSelection(Menu::Page page) {
break; break;
case Page::Main: case Page::Main:
case Page::TriggerThreshold: case Page::TriggerThreshold:
case Page::Reset:
case Page::Bootsel: case Page::Bootsel:
case Page::BootselMsg: case Page::BootselMsg:
case Page::None: case Page::None:
@ -250,6 +260,9 @@ void Menu::performSelectionAction(Menu::Descriptor::Action action) {
case Descriptor::Action::GotoPageLedBrightness: case Descriptor::Action::GotoPageLedBrightness:
gotoPage(Page::LedBrightness); gotoPage(Page::LedBrightness);
break; break;
case Descriptor::Action::GotoPageReset:
gotoPage(Page::Reset);
break;
case Descriptor::Action::GotoPageBootsel: case Descriptor::Action::GotoPageBootsel:
gotoPage(Page::Bootsel); gotoPage(Page::Bootsel);
break; break;
@ -291,10 +304,16 @@ void Menu::performSelectionAction(Menu::Descriptor::Action action) {
case Descriptor::Action::SetLedBrightness: case Descriptor::Action::SetLedBrightness:
gotoPage(descriptor_it->second.parent); gotoPage(descriptor_it->second.parent);
break; break;
case Descriptor::Action::DoReset:
m_store->reset();
break;
case Descriptor::Action::DoRebootToBootsel: case Descriptor::Action::DoRebootToBootsel:
m_store->scheduleReboot(true); m_store->scheduleReboot(true);
gotoPage(Page::BootselMsg); gotoPage(Page::BootselMsg);
break; break;
case Descriptor::Action::GotoParent:
gotoPage(descriptor_it->second.parent);
break;
case Descriptor::Action::None: case Descriptor::Action::None:
break; break;
} }

View File

@ -118,6 +118,21 @@ void SettingsStore::store() {
} }
} }
void SettingsStore::reset() {
multicore_lockout_start_blocking();
uint32_t interrupts = save_and_disable_interrupts();
flash_range_erase(m_flash_offset, m_flash_size);
restore_interrupts(interrupts);
multicore_lockout_end_blocking();
m_dirty = false;
scheduleReboot();
store();
}
void SettingsStore::scheduleReboot(const bool bootsel) { void SettingsStore::scheduleReboot(const bool bootsel) {
if (m_scheduled_reboot != RebootType::Bootsel) { if (m_scheduled_reboot != RebootType::Bootsel) {
m_scheduled_reboot = (bootsel ? RebootType::Bootsel : RebootType::Normal); m_scheduled_reboot = (bootsel ? RebootType::Bootsel : RebootType::Normal);