diff --git a/src/drivers/include/nvs.hpp b/src/drivers/include/nvs.hpp index bf0bebab..f592b1c3 100644 --- a/src/drivers/include/nvs.hpp +++ b/src/drivers/include/nvs.hpp @@ -22,6 +22,9 @@ class NvsStorage { public: static auto OpenSync() -> NvsStorage*; + auto LockPolarity() -> bool; + auto LockPolarity(bool) -> bool; + auto PreferredBluetoothDevice() -> std::optional; auto PreferredBluetoothDevice(std::optional) -> bool; diff --git a/src/drivers/nvs.cpp b/src/drivers/nvs.cpp index c8d4d636..8c9aa361 100644 --- a/src/drivers/nvs.cpp +++ b/src/drivers/nvs.cpp @@ -33,6 +33,7 @@ static constexpr char kKeyAmpCurrentVolume[] = "hp_vol"; static constexpr char kKeyAmpLeftBias[] = "hp_bias"; static constexpr char kKeyOnboarded[] = "intro"; static constexpr char kKeyPrimaryInput[] = "in_pri"; +static constexpr char kKeyLockPolarity[] = "lockpol"; auto NvsStorage::OpenSync() -> NvsStorage* { esp_err_t err = nvs_flash_init(); @@ -85,6 +86,19 @@ auto NvsStorage::SchemaVersionSync() -> uint8_t { return ret; } +auto NvsStorage::LockPolarity() -> bool { + uint8_t res; + if (nvs_get_u8(handle_, kKeyLockPolarity, &res) != ESP_OK) { + return false; + } + return res > 0; +} + +auto NvsStorage::LockPolarity(bool p) -> bool { + nvs_set_u8(handle_, kKeyLockPolarity, p); + return nvs_commit(handle_) == ESP_OK; +} + auto NvsStorage::PreferredBluetoothDevice() -> std::optional { bluetooth::mac_addr_t out{0}; diff --git a/src/system_fsm/booting.cpp b/src/system_fsm/booting.cpp index e6267879..888ce5d3 100644 --- a/src/system_fsm/booting.cpp +++ b/src/system_fsm/booting.cpp @@ -98,6 +98,8 @@ auto Booting::entry() -> void { sServices->bluetooth().Enable(); } + sServices->nvs().LockPolarity(true); + BootComplete ev{.services = sServices}; events::Audio().Dispatch(ev); events::Ui().Dispatch(ev);