/* * Copyright 2023 jacqueline * * SPDX-License-Identifier: GPL-3.0-only */ #pragma once #include #include #include #include "esp_err.h" #include "nvs.h" #include "bluetooth_types.hpp" #include "tasks.hpp" namespace drivers { class NvsStorage { public: static auto OpenSync() -> NvsStorage*; auto PreferredBluetoothDevice() -> std::future>; auto PreferredBluetoothDevice(std::optional) -> std::future; enum class Output : uint8_t { kHeadphones = 0, kBluetooth = 1, }; auto OutputMode() -> std::future; auto OutputMode(Output) -> std::future; auto ScreenBrightness() -> std::future; auto ScreenBrightness(uint_fast8_t) -> std::future; auto AmpMaxVolume() -> std::future; auto AmpMaxVolume(uint16_t) -> std::future; auto AmpCurrentVolume() -> std::future; auto AmpCurrentVolume(uint16_t) -> std::future; explicit NvsStorage(std::unique_ptr, nvs_handle_t); ~NvsStorage(); private: auto DowngradeSchemaSync() -> bool; auto SchemaVersionSync() -> uint8_t; std::unique_ptr writer_; nvs_handle_t handle_; }; } // namespace drivers