Merge pull request 'Switch output mode to headphones when plugged in' (#90) from daniel/output_mode_switch into main

Reviewed-on: https://codeberg.org/cool-tech-zone/tangara-fw/pulls/90
Reviewed-by: cooljqln <cooljqln@noreply.codeberg.org>
custom
ailurux 8 months ago
commit 88e44694f0
  1. 5
      src/tangara/audio/audio_events.hpp
  2. 13
      src/tangara/audio/audio_fsm.cpp
  3. 1
      src/tangara/audio/audio_fsm.hpp

@ -16,6 +16,7 @@
#include "tinyfsm.hpp"
#include "database/track.hpp"
#include "drivers/nvs.hpp"
#include "types.hpp"
namespace audio {
@ -137,7 +138,9 @@ struct SetVolumeLimit : tinyfsm::Event {
int limit_db;
};
struct OutputModeChanged : tinyfsm::Event {};
struct OutputModeChanged : tinyfsm::Event {
std::optional<drivers::NvsStorage::Output> set_to;
};
namespace internal {

@ -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:

@ -67,6 +67,7 @@ class AudioState : public tinyfsm::Fsm<AudioState> {
virtual void react(const system_fsm::KeyLockChanged&){};
virtual void react(const system_fsm::SdStateChanged&) {}
virtual void react(const system_fsm::BluetoothEvent&);
virtual void react(const system_fsm::HasPhonesChanged&);
protected:
auto emitPlaybackUpdate(bool paused) -> void;

Loading…
Cancel
Save