From b192975cb1eeb4e6b7c7bf53cdf42701c55f034a Mon Sep 17 00:00:00 2001 From: jacqueline Date: Fri, 22 Sep 2023 15:48:41 +1000 Subject: make bluetooth pairing ui functional --- src/audio/audio_fsm.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'src/audio/audio_fsm.cpp') diff --git a/src/audio/audio_fsm.cpp b/src/audio/audio_fsm.cpp index af43c9b9..06b98420 100644 --- a/src/audio/audio_fsm.cpp +++ b/src/audio/audio_fsm.cpp @@ -26,6 +26,7 @@ #include "future_fetcher.hpp" #include "i2s_audio_output.hpp" #include "i2s_dac.hpp" +#include "nvs.hpp" #include "service_locator.hpp" #include "system_events.hpp" #include "track.hpp" @@ -42,6 +43,7 @@ std::shared_ptr AudioState::sFileSource; std::unique_ptr AudioState::sDecoder; std::shared_ptr AudioState::sSampleConverter; std::shared_ptr AudioState::sI2SOutput; +std::shared_ptr AudioState::sBtOutput; std::shared_ptr AudioState::sOutput; std::optional AudioState::sCurrentTrack; @@ -75,6 +77,20 @@ void AudioState::react(const ChangeMaxVolume& ev) { sServices->nvs().AmpMaxVolume(ev.new_max); } +void AudioState::react(const OutputModeChanged& ev) { + // TODO: handle SetInUse + ESP_LOGI(kTag, "output mode changed"); + auto new_mode = sServices->nvs().OutputMode(); + switch (new_mode.get()) { + case drivers::NvsStorage::Output::kBluetooth: + sOutput = sBtOutput; + break; + case drivers::NvsStorage::Output::kHeadphones: + sOutput = sI2SOutput; + break; + } +} + namespace states { void Uninitialised::react(const system_fsm::BootComplete& ev) { @@ -90,13 +106,18 @@ void Uninitialised::react(const system_fsm::BootComplete& ev) { sFileSource.reset(new FatfsAudioInput(sServices->tag_parser())); sI2SOutput.reset(new I2SAudioOutput(sServices->gpios(), std::unique_ptr{*dac})); + sBtOutput.reset(new BluetoothAudioOutput(sServices->bluetooth())); auto& nvs = sServices->nvs(); sI2SOutput->SetMaxVolume(nvs.AmpMaxVolume().get()); sI2SOutput->SetVolumeDb(nvs.AmpCurrentVolume().get()); - sOutput = sI2SOutput; - // sOutput.reset(new BluetoothAudioOutput(bluetooth)); + if (sServices->nvs().OutputMode().get() == + drivers::NvsStorage::Output::kHeadphones) { + sOutput = sI2SOutput; + } else { + sOutput = sBtOutput; + } sSampleConverter.reset(new SampleConverter()); sSampleConverter->SetOutput(sOutput); -- cgit v1.2.3