summaryrefslogtreecommitdiff
path: root/src/drivers/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-09-04 16:17:55 +1000
committerjacqueline <me@jacqueline.id.au>2023-09-04 16:17:55 +1000
commitd5d6e3993cd67238ff245446e69e2f200c3fd0e5 (patch)
tree6245939ab341694363eac8bc24ab1b91b5140c6e /src/drivers/include
parent6d831fa7a8c50e15424814fd2be1dd3951e06a4f (diff)
downloadtangara-fw-d5d6e3993cd67238ff245446e69e2f200c3fd0e5.tar.gz
Support changing max volume, persisted to nvs
Diffstat (limited to 'src/drivers/include')
-rw-r--r--src/drivers/include/nvs.hpp6
-rw-r--r--src/drivers/include/wm8523.hpp20
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,