diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-01-15 12:31:20 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-01-15 12:31:20 +1100 |
| commit | 7cdcd44e0ca10ebdc796638190ed1d9b45d99ef0 (patch) | |
| tree | 637b43848d17c9dbdc1688cb4733eb235f223e37 /src/audio | |
| parent | 0e04eb918ec976017276306181282769d8896c83 (diff) | |
| download | tangara-fw-7cdcd44e0ca10ebdc796638190ed1d9b45d99ef0.tar.gz | |
Begin migration of remaining screens to Lua
Diffstat (limited to 'src/audio')
| -rw-r--r-- | src/audio/audio_fsm.cpp | 30 | ||||
| -rw-r--r-- | src/audio/include/audio_events.hpp | 19 | ||||
| -rw-r--r-- | src/audio/include/audio_fsm.hpp | 6 |
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&) {} |
