summaryrefslogtreecommitdiff
path: root/src/audio
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-01-15 12:31:20 +1100
committerjacqueline <me@jacqueline.id.au>2024-01-15 12:31:20 +1100
commit7cdcd44e0ca10ebdc796638190ed1d9b45d99ef0 (patch)
tree637b43848d17c9dbdc1688cb4733eb235f223e37 /src/audio
parent0e04eb918ec976017276306181282769d8896c83 (diff)
downloadtangara-fw-7cdcd44e0ca10ebdc796638190ed1d9b45d99ef0.tar.gz
Begin migration of remaining screens to Lua
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/audio_fsm.cpp30
-rw-r--r--src/audio/include/audio_events.hpp19
-rw-r--r--src/audio/include/audio_fsm.hpp6
3 files changed, 48 insertions, 7 deletions
diff --git a/src/audio/audio_fsm.cpp b/src/audio/audio_fsm.cpp
index a2f467cb..b903a171 100644
--- a/src/audio/audio_fsm.cpp
+++ b/src/audio/audio_fsm.cpp
@@ -82,11 +82,32 @@ void AudioState::react(const system_fsm::HasPhonesChanged& ev) {
}
}
-void AudioState::react(const ChangeMaxVolume& ev) {
+void AudioState::react(const SetVolume& ev) {
+ // TODO.
+}
+
+void AudioState::react(const SetVolumeLimit& ev) {
ESP_LOGI(kTag, "new max volume %i db",
- (ev.new_max - drivers::wm8523::kLineLevelReferenceVolume) / 4);
- sI2SOutput->SetMaxVolume(ev.new_max);
- sServices->nvs().AmpMaxVolume(ev.new_max);
+ (ev.new_limit - drivers::wm8523::kLineLevelReferenceVolume) / 4);
+ sI2SOutput->SetMaxVolume(ev.new_limit);
+ sServices->nvs().AmpMaxVolume(ev.new_limit);
+
+ events::Ui().Dispatch(VolumeLimitChanged{
+ .new_limit = ev.new_limit,
+ });
+ events::Ui().Dispatch(VolumeChanged{
+ .percent = sOutput->GetVolumePct(),
+ .db = sOutput->GetVolumeDb(),
+ });
+}
+
+void AudioState::react(const SetVolumeBalance& ev) {
+ sOutput->SetVolumeImbalance(ev.left_bias);
+ sServices->nvs().AmpLeftBias(ev.left_bias);
+
+ events::Ui().Dispatch(VolumeBalanceChanged{
+ .left_bias = ev.left_bias,
+ });
}
void AudioState::react(const OutputModeChanged& ev) {
@@ -136,6 +157,7 @@ void Uninitialised::react(const system_fsm::BootComplete& ev) {
auto& nvs = sServices->nvs();
sI2SOutput->SetMaxVolume(nvs.AmpMaxVolume());
sI2SOutput->SetVolume(nvs.AmpCurrentVolume());
+ sI2SOutput->SetVolumeImbalance(nvs.AmpLeftBias());
if (sServices->nvs().OutputMode() ==
drivers::NvsStorage::Output::kHeadphones) {
diff --git a/src/audio/include/audio_events.hpp b/src/audio/include/audio_events.hpp
index 3c5ab723..0e4d0bc9 100644
--- a/src/audio/include/audio_events.hpp
+++ b/src/audio/include/audio_events.hpp
@@ -47,12 +47,27 @@ struct PlayFile : tinyfsm::Event {
struct StepUpVolume : tinyfsm::Event {};
struct StepDownVolume : tinyfsm::Event {};
+struct SetVolume : tinyfsm::Event {
+ std::optional<uint_fast8_t> percent;
+ std::optional<int32_t> db;
+};
+struct SetVolumeBalance : tinyfsm::Event {
+ int left_bias;
+};
+
struct VolumeChanged : tinyfsm::Event {
uint_fast8_t percent;
int db;
};
-struct ChangeMaxVolume : tinyfsm::Event {
- uint16_t new_max;
+struct VolumeBalanceChanged : tinyfsm::Event {
+ int left_bias;
+};
+struct VolumeLimitChanged : tinyfsm::Event {
+ uint16_t new_limit;
+};
+
+struct SetVolumeLimit : tinyfsm::Event {
+ uint16_t new_limit;
};
struct TogglePlayPause : tinyfsm::Event {};
diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp
index 590c6463..b8c505b0 100644
--- a/src/audio/include/audio_fsm.hpp
+++ b/src/audio/include/audio_fsm.hpp
@@ -44,7 +44,11 @@ class AudioState : public tinyfsm::Fsm<AudioState> {
void react(const StepUpVolume&);
void react(const StepDownVolume&);
virtual void react(const system_fsm::HasPhonesChanged&);
- void react(const ChangeMaxVolume&);
+
+ void react(const SetVolume&);
+ void react(const SetVolumeLimit&);
+ void react(const SetVolumeBalance&);
+
void react(const OutputModeChanged&);
virtual void react(const system_fsm::BootComplete&) {}