diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-09-04 16:17:55 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-09-04 16:17:55 +1000 |
| commit | d5d6e3993cd67238ff245446e69e2f200c3fd0e5 (patch) | |
| tree | 6245939ab341694363eac8bc24ab1b91b5140c6e /src/drivers/include | |
| parent | 6d831fa7a8c50e15424814fd2be1dd3951e06a4f (diff) | |
| download | tangara-fw-d5d6e3993cd67238ff245446e69e2f200c3fd0e5.tar.gz | |
Support changing max volume, persisted to nvs
Diffstat (limited to 'src/drivers/include')
| -rw-r--r-- | src/drivers/include/nvs.hpp | 6 | ||||
| -rw-r--r-- | src/drivers/include/wm8523.hpp | 20 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/drivers/include/nvs.hpp b/src/drivers/include/nvs.hpp index bc88f88d..d7b3dfdd 100644 --- a/src/drivers/include/nvs.hpp +++ b/src/drivers/include/nvs.hpp @@ -37,6 +37,12 @@ class NvsStorage { auto ScreenBrightness() -> std::future<uint_fast8_t>; auto ScreenBrightness(uint_fast8_t) -> std::future<bool>; + auto AmpMaxVolume() -> std::future<uint16_t>; + auto AmpMaxVolume(uint16_t) -> std::future<bool>; + + auto AmpCurrentVolume() -> std::future<uint16_t>; + auto AmpCurrentVolume(uint16_t) -> std::future<bool>; + explicit NvsStorage(std::unique_ptr<tasks::Worker>, nvs_handle_t); ~NvsStorage(); diff --git a/src/drivers/include/wm8523.hpp b/src/drivers/include/wm8523.hpp index 6dc2e56e..b13cf34b 100644 --- a/src/drivers/include/wm8523.hpp +++ b/src/drivers/include/wm8523.hpp @@ -5,12 +5,32 @@ */ #pragma once +#include <stdint.h> #include <cstdint> #include <optional> namespace drivers { namespace wm8523 { +extern const uint16_t kAbsoluteMaxVolume; + +extern const uint16_t kAbsoluteMinVolume; + +extern const uint16_t kMaxVolumeBeforeClipping; + +extern const uint16_t kLineLevelReferenceVolume; + +extern const uint16_t kDefaultVolume; +extern const uint16_t kDefaultMaxVolume; + +constexpr auto VolumeToDb(uint16_t vol) -> int_fast8_t { + return (vol - kLineLevelReferenceVolume) / 4; +} + +constexpr auto DbToVolume(int_fast8_t db) -> uint16_t { + return (db * 4) + kLineLevelReferenceVolume; +} + enum class Register : uint8_t { kReset = 0, kRevision = 1, |
