diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-01-17 11:48:40 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-01-17 11:48:40 +1100 |
| commit | 71b46730394979ea528d152dbe884cc35c368759 (patch) | |
| tree | 516b3af32f8822a5f900ea10fd6ffba2e3de1ebb /src/audio | |
| parent | 7cdcd44e0ca10ebdc796638190ed1d9b45d99ef0 (diff) | |
| download | tangara-fw-71b46730394979ea528d152dbe884cc35c368759.tar.gz | |
all screens basically working, but bluetooth is rough
Diffstat (limited to 'src/audio')
| -rw-r--r-- | src/audio/audio_fsm.cpp | 25 | ||||
| -rw-r--r-- | src/audio/include/audio_events.hpp | 4 |
2 files changed, 22 insertions, 7 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); diff --git a/src/audio/include/audio_events.hpp b/src/audio/include/audio_events.hpp index 0e4d0bc9..b76d8c89 100644 --- a/src/audio/include/audio_events.hpp +++ b/src/audio/include/audio_events.hpp @@ -63,11 +63,11 @@ struct VolumeBalanceChanged : tinyfsm::Event { int left_bias; }; struct VolumeLimitChanged : tinyfsm::Event { - uint16_t new_limit; + int new_limit_db; }; struct SetVolumeLimit : tinyfsm::Event { - uint16_t new_limit; + int limit_db; }; struct TogglePlayPause : tinyfsm::Event {}; |
