summaryrefslogtreecommitdiff
path: root/src/audio/i2s_audio_output.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-07-25 17:42:36 +1000
committerjacqueline <me@jacqueline.id.au>2023-07-25 17:43:12 +1000
commit80d7df910987db5201402fe987124f29f09344f3 (patch)
tree7e8c1e04ab40026087343efee95a771c7839b32f /src/audio/i2s_audio_output.cpp
parent7b72e5479ee6d11f76c49f7463ba0e7f4e5165c5 (diff)
downloadtangara-fw-80d7df910987db5201402fe987124f29f09344f3.tar.gz
fuck off
Diffstat (limited to 'src/audio/i2s_audio_output.cpp')
-rw-r--r--src/audio/i2s_audio_output.cpp42
1 files changed, 39 insertions, 3 deletions
diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp
index 5f705dd1..57b5e071 100644
--- a/src/audio/i2s_audio_output.cpp
+++ b/src/audio/i2s_audio_output.cpp
@@ -6,6 +6,7 @@
#include "i2s_audio_output.hpp"
#include <stdint.h>
+#include <sys/_stdint.h>
#include <algorithm>
#include <cstddef>
@@ -18,6 +19,7 @@
#include "audio_element.hpp"
#include "freertos/projdefs.h"
#include "gpios.hpp"
+#include "i2c.hpp"
#include "i2s_dac.hpp"
#include "result.hpp"
#include "stream_info.hpp"
@@ -34,7 +36,7 @@ I2SAudioOutput::I2SAudioOutput(drivers::IGpios* expander,
left_difference_(0),
attenuation_() {
SetVolume(25); // For testing
- dac_->SetSource(buffer());
+ dac_->SetSource(stream());
}
I2SAudioOutput::~I2SAudioOutput() {
@@ -68,13 +70,47 @@ auto I2SAudioOutput::GetAdjustedMaxAttenuation() -> int_fast8_t {
return 0;
}
+static uint8_t vol = 0xFF;
+
auto I2SAudioOutput::AdjustVolumeUp() -> bool {
- // TODO
+ vol += 0xF;
+ {
+ drivers::I2CTransaction transaction;
+ transaction.start()
+ .write_addr(0b0011010, I2C_MASTER_WRITE)
+ .write_ack(6, 0b01, vol)
+ .stop();
+ transaction.Execute();
+ }
+ {
+ drivers::I2CTransaction transaction;
+ transaction.start()
+ .write_addr(0b0011010, I2C_MASTER_WRITE)
+ .write_ack(7, 0b11, vol)
+ .stop();
+ transaction.Execute();
+ }
return true;
}
auto I2SAudioOutput::AdjustVolumeDown() -> bool {
- // TODO
+ vol -= 0xF;
+ {
+ drivers::I2CTransaction transaction;
+ transaction.start()
+ .write_addr(0b0011010, I2C_MASTER_WRITE)
+ .write_ack(6, 0b01, vol)
+ .stop();
+ transaction.Execute();
+ }
+ {
+ drivers::I2CTransaction transaction;
+ transaction.start()
+ .write_addr(0b0011010, I2C_MASTER_WRITE)
+ .write_ack(7, 0b11, vol)
+ .stop();
+ transaction.Execute();
+ }
return true;
}