summaryrefslogtreecommitdiff
path: root/src/audio
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/audio_fsm.cpp13
-rw-r--r--src/audio/i2s_audio_output.cpp10
-rw-r--r--src/audio/include/audio_events.hpp3
-rw-r--r--src/audio/include/audio_fsm.hpp3
-rw-r--r--src/audio/include/audio_sink.hpp4
-rw-r--r--src/audio/include/i2s_audio_output.hpp4
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;