summaryrefslogtreecommitdiff
path: root/src/tangara/audio/audio_fsm.cpp
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2024-08-26 15:43:00 +1000
committerailurux <ailuruxx@gmail.com>2024-08-26 15:43:00 +1000
commite6c77f17b87a4cbf358bd2ddd3b82724771ee03c (patch)
tree98aafef4127dca67ff16b83aacb7cf3ae5261fba /src/tangara/audio/audio_fsm.cpp
parent91f26afa755e4efd2dcb97f6010f0ceb226e91f2 (diff)
downloadtangara-fw-e6c77f17b87a4cbf358bd2ddd3b82724771ee03c.tar.gz
Switch output mode to headphones when plugged in
Diffstat (limited to 'src/tangara/audio/audio_fsm.cpp')
-rw-r--r--src/tangara/audio/audio_fsm.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/tangara/audio/audio_fsm.cpp b/src/tangara/audio/audio_fsm.cpp
index 8da11665..16c16002 100644
--- a/src/tangara/audio/audio_fsm.cpp
+++ b/src/tangara/audio/audio_fsm.cpp
@@ -231,6 +231,16 @@ void AudioState::react(const internal::StreamEnded& ev) {
sStreamCues.addCue({}, ev.cue_at_sample);
}
+void AudioState::react(const system_fsm::HasPhonesChanged& ev) {
+ if (ev.has_headphones) {
+ events::Audio().Dispatch(audio::OutputModeChanged{.set_to = drivers::NvsStorage::Output::kHeadphones});
+ } else {
+ if (sServices->bluetooth().enabled()) {
+ events::Audio().Dispatch(audio::OutputModeChanged{.set_to = drivers::NvsStorage::Output::kBluetooth});
+ }
+ }
+}
+
void AudioState::react(const system_fsm::BluetoothEvent& ev) {
using drivers::bluetooth::SimpleEvent;
if (std::holds_alternative<SimpleEvent>(ev.event)) {
@@ -334,6 +344,9 @@ void AudioState::react(const SetVolumeBalance& ev) {
void AudioState::react(const OutputModeChanged& ev) {
ESP_LOGI(kTag, "output mode changed");
auto new_mode = sServices->nvs().OutputMode();
+ if (ev.set_to) {
+ new_mode = *ev.set_to;
+ }
sOutput->mode(IAudioOutput::Modes::kOff);
switch (new_mode) {
case drivers::NvsStorage::Output::kBluetooth: