summaryrefslogtreecommitdiff
path: root/src/audio/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-07 09:50:25 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-07 09:50:25 +1000
commit610991455d335663de1dd6c0c6a3e0247ffd46df (patch)
tree8022526de2d30ca39386cf72d6fb5752d0c22803 /src/audio/include
parentd2e5d2ab3cff0723cd995b0fca62aeb2a681d32d (diff)
downloadtangara-fw-610991455d335663de1dd6c0c6a3e0247ffd46df.tar.gz
R4 pre-emptive bringup
Includes stripping out the IC-specific I2S stuff, and doing more manual volume control using pots
Diffstat (limited to 'src/audio/include')
-rw-r--r--src/audio/include/audio_fsm.hpp10
-rw-r--r--src/audio/include/audio_sink.hpp7
-rw-r--r--src/audio/include/audio_task.hpp8
-rw-r--r--src/audio/include/i2s_audio_output.hpp20
4 files changed, 27 insertions, 18 deletions
diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp
index 7368cfc8..6274041c 100644
--- a/src/audio/include/audio_fsm.hpp
+++ b/src/audio/include/audio_fsm.hpp
@@ -5,15 +5,17 @@
*/
#pragma once
+
#include <memory>
+#include <vector>
#include "audio_events.hpp"
-#include "dac.hpp"
#include "database.hpp"
#include "display.hpp"
#include "fatfs_audio_input.hpp"
#include "gpio_expander.hpp"
#include "i2s_audio_output.hpp"
+#include "i2s_dac.hpp"
#include "storage.hpp"
#include "tinyfsm.hpp"
@@ -24,8 +26,7 @@ namespace audio {
class AudioState : public tinyfsm::Fsm<AudioState> {
public:
static auto Init(drivers::GpioExpander* gpio_expander,
- std::weak_ptr<drivers::AudioDac>,
- std::weak_ptr<database::Database>) -> void;
+ std::weak_ptr<database::Database>) -> bool;
virtual ~AudioState() {}
@@ -41,7 +42,8 @@ class AudioState : public tinyfsm::Fsm<AudioState> {
protected:
static drivers::GpioExpander* sGpioExpander;
- static std::weak_ptr<drivers::AudioDac> sDac;
+ static std::shared_ptr<drivers::I2SDac> sDac;
+ static std::shared_ptr<drivers::DigitalPot> sPots;
static std::weak_ptr<database::Database> sDatabase;
static std::unique_ptr<FatfsAudioInput> sFileSource;
diff --git a/src/audio/include/audio_sink.hpp b/src/audio/include/audio_sink.hpp
index 331105af..2cc706ff 100644
--- a/src/audio/include/audio_sink.hpp
+++ b/src/audio/include/audio_sink.hpp
@@ -40,9 +40,14 @@ class IAudioSink {
free(metadata_);
}
+ 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 Configure(const StreamInfo::Format& format) -> bool = 0;
virtual auto Send(const cpp::span<std::byte>& data) -> void = 0;
- virtual auto Log() -> void {}
auto buffer() -> StreamBufferHandle_t { return handle_; }
};
diff --git a/src/audio/include/audio_task.hpp b/src/audio/include/audio_task.hpp
index 298bd591..f997caee 100644
--- a/src/audio/include/audio_task.hpp
+++ b/src/audio/include/audio_task.hpp
@@ -6,16 +6,8 @@
#pragma once
-#include <memory>
-#include <optional>
-#include <string>
-
-#include "audio_element.hpp"
#include "audio_sink.hpp"
-#include "dac.hpp"
-#include "freertos/portmacro.h"
#include "pipeline.hpp"
-#include "stream_buffer.hpp"
namespace audio {
diff --git a/src/audio/include/i2s_audio_output.hpp b/src/audio/include/i2s_audio_output.hpp
index 46c3ada8..20980573 100644
--- a/src/audio/include/i2s_audio_output.hpp
+++ b/src/audio/include/i2s_audio_output.hpp
@@ -15,8 +15,9 @@
#include "chunk.hpp"
#include "result.hpp"
-#include "dac.hpp"
+#include "digital_pot.hpp"
#include "gpio_expander.hpp"
+#include "i2s_dac.hpp"
#include "stream_info.hpp"
namespace audio {
@@ -24,23 +25,32 @@ namespace audio {
class I2SAudioOutput : public IAudioSink {
public:
I2SAudioOutput(drivers::GpioExpander* expander,
- std::weak_ptr<drivers::AudioDac> dac);
+ std::weak_ptr<drivers::I2SDac> dac,
+ std::weak_ptr<drivers::DigitalPot> pots);
~I2SAudioOutput();
+ 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 Configure(const StreamInfo::Format& format) -> bool override;
auto Send(const cpp::span<std::byte>& data) -> void override;
- auto Log() -> void override;
I2SAudioOutput(const I2SAudioOutput&) = delete;
I2SAudioOutput& operator=(const I2SAudioOutput&) = delete;
private:
- auto SetVolume(uint8_t volume) -> void;
+ auto GetAdjustedMaxAttenuation() -> int_fast8_t;
drivers::GpioExpander* expander_;
- std::shared_ptr<drivers::AudioDac> dac_;
+ std::shared_ptr<drivers::I2SDac> dac_;
+ std::shared_ptr<drivers::DigitalPot> pots_;
std::optional<StreamInfo::Pcm> current_config_;
+ int_fast8_t left_difference_;
+ uint_fast8_t attenuation_;
};
} // namespace audio