summaryrefslogtreecommitdiff
path: root/src/audio/audio_fsm.cpp
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/audio_fsm.cpp
parent0e04eb918ec976017276306181282769d8896c83 (diff)
downloadtangara-fw-7cdcd44e0ca10ebdc796638190ed1d9b45d99ef0.tar.gz
Begin migration of remaining screens to Lua
Diffstat (limited to 'src/audio/audio_fsm.cpp')
-rw-r--r--src/audio/audio_fsm.cpp30
1 files changed, 26 insertions, 4 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) {