diff options
Diffstat (limited to 'src/tangara/audio/audio_fsm.cpp')
| -rw-r--r-- | src/tangara/audio/audio_fsm.cpp | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/tangara/audio/audio_fsm.cpp b/src/tangara/audio/audio_fsm.cpp index d6ddff8d..80611082 100644 --- a/src/tangara/audio/audio_fsm.cpp +++ b/src/tangara/audio/audio_fsm.cpp @@ -217,18 +217,32 @@ void AudioState::react(const internal::StreamEnded& ev) { } void AudioState::react(const system_fsm::BluetoothEvent& ev) { - if (ev.event != drivers::bluetooth::Event::kConnectionStateChanged) { - return; + using drivers::bluetooth::SimpleEvent; + if (std::holds_alternative<SimpleEvent>(ev.event)) { + auto simpleEvent = std::get<SimpleEvent>(ev.event); + switch (simpleEvent) { + case SimpleEvent::kConnectionStateChanged: { + auto dev = sServices->bluetooth().ConnectedDevice(); + if (!dev) { + return; + } + sBtOutput->SetVolume(sServices->nvs().BluetoothVolume(dev->mac)); + events::Ui().Dispatch(VolumeChanged{ + .percent = sOutput->GetVolumePct(), + .db = sOutput->GetVolumeDb(), + }); + break; + } + default: + break; + } } - auto dev = sServices->bluetooth().ConnectedDevice(); - if (!dev) { - return; + if (std::holds_alternative<drivers::bluetooth::RemoteVolumeChanged>(ev.event)) { + auto volume_chg = std::get<drivers::bluetooth::RemoteVolumeChanged>(ev.event).new_vol; + events::Ui().Dispatch(RemoteVolumeChanged{ + .value = volume_chg + }); } - sBtOutput->SetVolume(sServices->nvs().BluetoothVolume(dev->mac)); - events::Ui().Dispatch(VolumeChanged{ - .percent = sOutput->GetVolumePct(), - .db = sOutput->GetVolumeDb(), - }); } void AudioState::react(const StepUpVolume& ev) { |
