|
|
|
@ -288,6 +288,8 @@ void AudioState::react(const system_fsm::BluetoothEvent& ev) { |
|
|
|
|
if (bt.connectionState() != |
|
|
|
|
drivers::Bluetooth::ConnectionState::kConnected) { |
|
|
|
|
// If BT Disconnected, move to standby state
|
|
|
|
|
events::Audio().Dispatch(audio::OutputModeChanged{ |
|
|
|
|
.set_to = drivers::NvsStorage::Output::kHeadphones}); |
|
|
|
|
transit<states::Standby>(); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -295,6 +297,8 @@ void AudioState::react(const system_fsm::BluetoothEvent& ev) { |
|
|
|
|
if (!dev) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
events::Audio().Dispatch(audio::OutputModeChanged{ |
|
|
|
|
.set_to = drivers::NvsStorage::Output::kBluetooth}); |
|
|
|
|
sBtOutput->SetVolume(sServices->nvs().BluetoothVolume(dev->mac)); |
|
|
|
|
events::Ui().Dispatch(VolumeChanged{ |
|
|
|
|
.percent = sOutput->GetVolumePct(), |
|
|
|
@ -386,13 +390,14 @@ void AudioState::react(const OutputModeChanged& ev) { |
|
|
|
|
if (ev.set_to) { |
|
|
|
|
new_mode = *ev.set_to; |
|
|
|
|
} |
|
|
|
|
sOutput->mode(IAudioOutput::Modes::kOff); |
|
|
|
|
switch (new_mode) { |
|
|
|
|
case drivers::NvsStorage::Output::kBluetooth: |
|
|
|
|
sOutput = sBtOutput; |
|
|
|
|
sI2SOutput->mode(IAudioOutput::Modes::kOff); |
|
|
|
|
break; |
|
|
|
|
case drivers::NvsStorage::Output::kHeadphones: |
|
|
|
|
sOutput = sI2SOutput; |
|
|
|
|
sBtOutput->mode(IAudioOutput::Modes::kOff); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
sSampleProcessor->SetOutput(sOutput); |
|
|
|
@ -429,8 +434,8 @@ auto AudioState::updateTrackData(std::string uri, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
auto AudioState::updateSavedPosition(std::string uri, uint32_t position) |
|
|
|
|
-> void { |
|
|
|
|
auto AudioState::updateSavedPosition(std::string uri, |
|
|
|
|
uint32_t position) -> void { |
|
|
|
|
updateTrackData( |
|
|
|
|
uri, [=](database::TrackData& data) { data.last_position = position; }); |
|
|
|
|
} |
|
|
|
@ -486,13 +491,13 @@ void Uninitialised::react(const system_fsm::BootComplete& ev) { |
|
|
|
|
sI2SOutput->SetVolume(nvs.AmpCurrentVolume()); |
|
|
|
|
sI2SOutput->SetVolumeImbalance(nvs.AmpLeftBias()); |
|
|
|
|
|
|
|
|
|
if (sServices->nvs().OutputMode() == |
|
|
|
|
drivers::NvsStorage::Output::kHeadphones) { |
|
|
|
|
// Always set to headphones output initially
|
|
|
|
|
// Connecting bluetooth will change this
|
|
|
|
|
sOutput = sI2SOutput; |
|
|
|
|
} else { |
|
|
|
|
if (sServices->nvs().OutputMode() == |
|
|
|
|
drivers::NvsStorage::Output::kBluetooth) { |
|
|
|
|
// Ensure Bluetooth gets enabled if it's the default sink.
|
|
|
|
|
sServices->bluetooth().enable(true); |
|
|
|
|
sOutput = sBtOutput; |
|
|
|
|
} |
|
|
|
|
sOutput->mode(IAudioOutput::Modes::kOnPaused); |
|
|
|
|
|
|
|
|
|