diff options
Diffstat (limited to 'src/audio/audio_fsm.cpp')
| -rw-r--r-- | src/audio/audio_fsm.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/audio/audio_fsm.cpp b/src/audio/audio_fsm.cpp index b903a171..560e655a 100644 --- a/src/audio/audio_fsm.cpp +++ b/src/audio/audio_fsm.cpp @@ -87,13 +87,14 @@ void AudioState::react(const SetVolume& ev) { } void AudioState::react(const SetVolumeLimit& ev) { - ESP_LOGI(kTag, "new max volume %i db", - (ev.new_limit - drivers::wm8523::kLineLevelReferenceVolume) / 4); - sI2SOutput->SetMaxVolume(ev.new_limit); - sServices->nvs().AmpMaxVolume(ev.new_limit); + uint16_t limit_in_dac_units = + drivers::wm8523::kLineLevelReferenceVolume + (ev.limit_db * 4); + + sI2SOutput->SetMaxVolume(limit_in_dac_units); + sServices->nvs().AmpMaxVolume(limit_in_dac_units); events::Ui().Dispatch(VolumeLimitChanged{ - .new_limit = ev.new_limit, + .new_limit_db = ev.limit_db, }); events::Ui().Dispatch(VolumeChanged{ .percent = sOutput->GetVolumePct(), @@ -167,6 +168,20 @@ void Uninitialised::react(const system_fsm::BootComplete& ev) { } sOutput->SetMode(IAudioOutput::Modes::kOnPaused); + events::Ui().Dispatch(VolumeLimitChanged{ + .new_limit_db = + (static_cast<int>(nvs.AmpMaxVolume()) - + static_cast<int>(drivers::wm8523::kLineLevelReferenceVolume)) / + 4, + }); + events::Ui().Dispatch(VolumeChanged{ + .percent = sOutput->GetVolumePct(), + .db = sOutput->GetVolumeDb(), + }); + events::Ui().Dispatch(VolumeBalanceChanged{ + .left_bias = nvs.AmpLeftBias(), + }); + sSampleConverter.reset(new SampleConverter()); sSampleConverter->SetOutput(sOutput); |
