diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-06-30 17:05:11 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-06-30 17:05:11 +1000 |
| commit | 0347555d5b2314e1be58261ef29fa13a76c039e6 (patch) | |
| tree | e38879c0dc8bbf0a58057d22b26f28c0a9b86e93 /src/audio | |
| parent | 9763cc955c4f3b2c2af54b61c2c5ad77afef9603 (diff) | |
| download | tangara-fw-0347555d5b2314e1be58261ef29fa13a76c039e6.tar.gz | |
Start on converting gpio expander interupts to fsm events
Diffstat (limited to 'src/audio')
| -rw-r--r-- | src/audio/audio_fsm.cpp | 13 | ||||
| -rw-r--r-- | src/audio/i2s_audio_output.cpp | 10 | ||||
| -rw-r--r-- | src/audio/include/audio_events.hpp | 3 | ||||
| -rw-r--r-- | src/audio/include/audio_fsm.hpp | 3 | ||||
| -rw-r--r-- | src/audio/include/audio_sink.hpp | 4 | ||||
| -rw-r--r-- | src/audio/include/i2s_audio_output.hpp | 4 |
6 files changed, 29 insertions, 8 deletions
diff --git a/src/audio/audio_fsm.cpp b/src/audio/audio_fsm.cpp index ffd0d5c3..1f4f1f44 100644 --- a/src/audio/audio_fsm.cpp +++ b/src/audio/audio_fsm.cpp @@ -11,6 +11,7 @@ #include "audio_decoder.hpp" #include "audio_events.hpp" #include "audio_task.hpp" +#include "event_queue.hpp" #include "fatfs_audio_input.hpp" #include "i2s_audio_output.hpp" #include "i2s_dac.hpp" @@ -65,6 +66,18 @@ void AudioState::react(const system_fsm::StorageMounted& ev) { sDatabase = ev.db; } +void AudioState::react(const system_fsm::KeyUpChanged& ev) { + if (ev.falling && sI2SOutput->AdjustVolumeUp()) { + events::Dispatch<VolumeChanged, ui::UiState>({}); + } +} + +void AudioState::react(const system_fsm::KeyDownChanged& ev) { + if (ev.falling && sI2SOutput->AdjustVolumeDown()) { + events::Dispatch<VolumeChanged, ui::UiState>({}); + } +} + namespace states { void Uninitialised::react(const system_fsm::BootComplete&) { diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp index b61259ad..77de7b43 100644 --- a/src/audio/i2s_audio_output.cpp +++ b/src/audio/i2s_audio_output.cpp @@ -100,20 +100,22 @@ auto I2SAudioOutput::GetAdjustedMaxAttenuation() -> int_fast8_t { return adjusted_max; } -auto I2SAudioOutput::AdjustVolumeUp() -> void { +auto I2SAudioOutput::AdjustVolumeUp() -> bool { if (attenuation_ + left_difference_ <= pots_->GetMinAttenuation()) { - return; + return false; } attenuation_--; pots_->SetRelative(-1); + return true; } -auto I2SAudioOutput::AdjustVolumeDown() -> void { +auto I2SAudioOutput::AdjustVolumeDown() -> bool { if (attenuation_ - left_difference_ >= pots_->GetMaxAttenuation()) { - return; + return false; } attenuation_++; pots_->SetRelative(1); + return true; } auto I2SAudioOutput::Configure(const StreamInfo::Format& format) -> bool { diff --git a/src/audio/include/audio_events.hpp b/src/audio/include/audio_events.hpp index 7359e8ac..019b65a2 100644 --- a/src/audio/include/audio_events.hpp +++ b/src/audio/include/audio_events.hpp @@ -7,6 +7,7 @@ #pragma once #include <stdint.h> +#include <cstdint> #include <string> #include "tinyfsm.hpp" @@ -32,4 +33,6 @@ struct InputFileOpened : tinyfsm::Event {}; struct InputFileFinished : tinyfsm::Event {}; struct AudioPipelineIdle : tinyfsm::Event {}; +struct VolumeChanged : tinyfsm::Event {}; + } // namespace audio diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp index 1f3b1dbd..7e84785f 100644 --- a/src/audio/include/audio_fsm.hpp +++ b/src/audio/include/audio_fsm.hpp @@ -40,6 +40,9 @@ class AudioState : public tinyfsm::Fsm<AudioState> { void react(const system_fsm::StorageMounted&); + void react(const system_fsm::KeyUpChanged&); + void react(const system_fsm::KeyDownChanged&); + virtual void react(const system_fsm::BootComplete&) {} virtual void react(const PlayTrack&) {} virtual void react(const PlayFile&) {} diff --git a/src/audio/include/audio_sink.hpp b/src/audio/include/audio_sink.hpp index e6538bda..ac007bf8 100644 --- a/src/audio/include/audio_sink.hpp +++ b/src/audio/include/audio_sink.hpp @@ -45,8 +45,8 @@ class IAudioSink { virtual auto SetVolumeImbalance(int_fast8_t balance) -> void = 0; virtual auto SetVolume(uint_fast8_t percent) -> void = 0; virtual auto GetVolume() -> uint_fast8_t = 0; - virtual auto AdjustVolumeUp() -> void = 0; - virtual auto AdjustVolumeDown() -> void = 0; + virtual auto AdjustVolumeUp() -> bool = 0; + virtual auto AdjustVolumeDown() -> bool = 0; virtual auto Configure(const StreamInfo::Format& format) -> bool = 0; virtual auto Send(const cpp::span<std::byte>& data) -> void = 0; diff --git a/src/audio/include/i2s_audio_output.hpp b/src/audio/include/i2s_audio_output.hpp index 7c125476..5dd6cc27 100644 --- a/src/audio/include/i2s_audio_output.hpp +++ b/src/audio/include/i2s_audio_output.hpp @@ -34,8 +34,8 @@ class I2SAudioOutput : public IAudioSink { auto SetVolumeImbalance(int_fast8_t balance) -> void override; auto SetVolume(uint_fast8_t percent) -> void override; auto GetVolume() -> uint_fast8_t override; - auto AdjustVolumeUp() -> void override; - auto AdjustVolumeDown() -> void override; + auto AdjustVolumeUp() -> bool override; + auto AdjustVolumeDown() -> bool override; auto Configure(const StreamInfo::Format& format) -> bool override; auto Send(const cpp::span<std::byte>& data) -> void override; |
