summaryrefslogtreecommitdiff
path: root/src/audio
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-01-17 11:48:40 +1100
committerjacqueline <me@jacqueline.id.au>2024-01-17 11:48:40 +1100
commit71b46730394979ea528d152dbe884cc35c368759 (patch)
tree516b3af32f8822a5f900ea10fd6ffba2e3de1ebb /src/audio
parent7cdcd44e0ca10ebdc796638190ed1d9b45d99ef0 (diff)
downloadtangara-fw-71b46730394979ea528d152dbe884cc35c368759.tar.gz
all screens basically working, but bluetooth is rough
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/audio_fsm.cpp25
-rw-r--r--src/audio/include/audio_events.hpp4
2 files changed, 22 insertions, 7 deletions
diff --git a/src/audio/audio_fsm.cpp b/src/audio/audio_fsm.cpp
index b903a171..560e655a 100644
--- a/src/audio/audio_fsm.cpp
+++ b/src/audio/audio_fsm.cpp
@@ -87,13 +87,14 @@ void AudioState::react(const SetVolume& ev) {
}
void AudioState::react(const SetVolumeLimit& ev) {
- ESP_LOGI(kTag, "new max volume %i db",
- (ev.new_limit - drivers::wm8523::kLineLevelReferenceVolume) / 4);
- sI2SOutput->SetMaxVolume(ev.new_limit);
- sServices->nvs().AmpMaxVolume(ev.new_limit);
+ uint16_t limit_in_dac_units =
+ drivers::wm8523::kLineLevelReferenceVolume + (ev.limit_db * 4);
+
+ sI2SOutput->SetMaxVolume(limit_in_dac_units);
+ sServices->nvs().AmpMaxVolume(limit_in_dac_units);
events::Ui().Dispatch(VolumeLimitChanged{
- .new_limit = ev.new_limit,
+ .new_limit_db = ev.limit_db,
});
events::Ui().Dispatch(VolumeChanged{
.percent = sOutput->GetVolumePct(),
@@ -167,6 +168,20 @@ void Uninitialised::react(const system_fsm::BootComplete& ev) {
}
sOutput->SetMode(IAudioOutput::Modes::kOnPaused);
+ events::Ui().Dispatch(VolumeLimitChanged{
+ .new_limit_db =
+ (static_cast<int>(nvs.AmpMaxVolume()) -
+ static_cast<int>(drivers::wm8523::kLineLevelReferenceVolume)) /
+ 4,
+ });
+ events::Ui().Dispatch(VolumeChanged{
+ .percent = sOutput->GetVolumePct(),
+ .db = sOutput->GetVolumeDb(),
+ });
+ events::Ui().Dispatch(VolumeBalanceChanged{
+ .left_bias = nvs.AmpLeftBias(),
+ });
+
sSampleConverter.reset(new SampleConverter());
sSampleConverter->SetOutput(sOutput);
diff --git a/src/audio/include/audio_events.hpp b/src/audio/include/audio_events.hpp
index 0e4d0bc9..b76d8c89 100644
--- a/src/audio/include/audio_events.hpp
+++ b/src/audio/include/audio_events.hpp
@@ -63,11 +63,11 @@ struct VolumeBalanceChanged : tinyfsm::Event {
int left_bias;
};
struct VolumeLimitChanged : tinyfsm::Event {
- uint16_t new_limit;
+ int new_limit_db;
};
struct SetVolumeLimit : tinyfsm::Event {
- uint16_t new_limit;
+ int limit_db;
};
struct TogglePlayPause : tinyfsm::Event {};