mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-08-14 21:17:43 +00:00
Persistent audio mute support (#1161)
* Persistent speaker mute support #1100 * Moving persistent mute support from WM8731/AK4951 codec files to audio.cpp module for simplification
This commit is contained in:
@@ -97,7 +97,7 @@ struct ui_config_t {
|
||||
HideClock = 25,
|
||||
ClockWithDate = 26,
|
||||
ClkOutEnabled = 27,
|
||||
ConfigSpeaker = 28,
|
||||
ConfigSpeakerHidden = 28,
|
||||
StealthMode = 29,
|
||||
ConfigLogin = 30,
|
||||
ConfigSplash = 31,
|
||||
@@ -216,14 +216,6 @@ struct ui_config_t {
|
||||
bit_write(bits_t::ClkOutEnabled, v);
|
||||
}
|
||||
|
||||
constexpr bool config_speaker() const {
|
||||
return bit_read(bits_t::ConfigSpeaker);
|
||||
}
|
||||
|
||||
constexpr void set_config_speaker(bool v) {
|
||||
bit_write(bits_t::ConfigSpeaker, v);
|
||||
}
|
||||
|
||||
constexpr bool stealth_mode() const {
|
||||
return bit_read(bits_t::StealthMode);
|
||||
}
|
||||
@@ -250,7 +242,52 @@ struct ui_config_t {
|
||||
|
||||
constexpr ui_config_t()
|
||||
: values(
|
||||
(1 << ConfigSplash) | (1 << ConfigSpeaker) | (clkout_freq_reset_value << ClkoutFreqLSB) | (7 << BacklightTimeoutLSB)) {
|
||||
(1 << ConfigSplash) | (clkout_freq_reset_value << ClkoutFreqLSB) | (7 << BacklightTimeoutLSB)) {
|
||||
}
|
||||
};
|
||||
|
||||
struct misc_config_t {
|
||||
private:
|
||||
enum bits_t {
|
||||
ConfigAudioMute = 0,
|
||||
ConfigSpeakerDisable = 1,
|
||||
};
|
||||
|
||||
// misc_config_t bits:
|
||||
// ConfigAudioMute = set to mute all audio output (speakers & headphones)
|
||||
// ConfigSpeakerDisable = set to disable only the speaker and leave headphones enabled (only supported on AK4951 codec)
|
||||
|
||||
uint32_t values;
|
||||
|
||||
constexpr bool bit_read(const bits_t n) const {
|
||||
return ((values >> n) & 1) != 0;
|
||||
}
|
||||
|
||||
constexpr void bit_write(const bits_t n, const bool v) {
|
||||
if (bit_read(n) != v) {
|
||||
values ^= 1 << n;
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
constexpr bool config_audio_mute() const {
|
||||
return bit_read(bits_t::ConfigAudioMute);
|
||||
}
|
||||
|
||||
constexpr void set_config_audio_mute(bool v) {
|
||||
bit_write(bits_t::ConfigAudioMute, v);
|
||||
}
|
||||
|
||||
constexpr bool config_speaker_disable() const {
|
||||
return bit_read(bits_t::ConfigSpeakerDisable);
|
||||
}
|
||||
|
||||
constexpr void set_config_speaker_disable(bool v) {
|
||||
bit_write(bits_t::ConfigSpeakerDisable, v);
|
||||
}
|
||||
|
||||
constexpr misc_config_t()
|
||||
: values(0) {
|
||||
}
|
||||
};
|
||||
|
||||
@@ -311,6 +348,9 @@ struct data_t {
|
||||
// Headphone volume in centibels.
|
||||
int32_t headphone_volume_cb;
|
||||
|
||||
// Misc flags
|
||||
misc_config_t misc_config;
|
||||
|
||||
constexpr data_t()
|
||||
: structure_version(data_structure_version_enum::VERSION_CURRENT),
|
||||
target_frequency(target_frequency_reset_value),
|
||||
@@ -348,7 +388,8 @@ struct data_t {
|
||||
frequency_tx_correction(0),
|
||||
updown_frequency_tx_correction(0),
|
||||
encoder_dial_sensitivity(0),
|
||||
headphone_volume_cb(-600) {
|
||||
headphone_volume_cb(-600),
|
||||
misc_config() {
|
||||
}
|
||||
};
|
||||
|
||||
@@ -608,8 +649,12 @@ bool clkout_enabled() {
|
||||
return data->ui_config.clkout_enabled();
|
||||
}
|
||||
|
||||
bool config_speaker() {
|
||||
return data->ui_config.config_speaker();
|
||||
bool config_audio_mute() {
|
||||
return data->misc_config.config_audio_mute();
|
||||
}
|
||||
|
||||
bool config_speaker_disable() {
|
||||
return data->misc_config.config_speaker_disable();
|
||||
}
|
||||
|
||||
bool stealth_mode() {
|
||||
@@ -664,8 +709,12 @@ void set_clkout_enabled(bool v) {
|
||||
data->ui_config.set_clkout_enabled(v);
|
||||
}
|
||||
|
||||
void set_config_speaker(bool v) {
|
||||
data->ui_config.set_config_speaker(v);
|
||||
void set_config_audio_mute(bool v) {
|
||||
data->misc_config.set_config_audio_mute(v);
|
||||
}
|
||||
|
||||
void set_config_speaker_disable(bool v) {
|
||||
data->misc_config.set_config_speaker_disable(v);
|
||||
}
|
||||
|
||||
void set_stealth_mode(bool v) {
|
||||
|
@@ -184,7 +184,8 @@ bool show_bigger_qr_code();
|
||||
bool hide_clock();
|
||||
bool clock_with_date();
|
||||
bool config_login();
|
||||
bool config_speaker();
|
||||
bool config_audio_mute();
|
||||
bool config_speaker_disable();
|
||||
backlight_config_t config_backlight_timer();
|
||||
bool disable_touchscreen();
|
||||
|
||||
@@ -212,7 +213,8 @@ void set_config_freq_rx_correction(uint32_t v);
|
||||
void set_clock_hidden(bool v);
|
||||
void set_clock_with_date(bool v);
|
||||
void set_config_login(bool v);
|
||||
void set_config_speaker(bool v);
|
||||
void set_config_audio_mute(bool v);
|
||||
void set_config_speaker_disable(bool v);
|
||||
void set_config_backlight_timer(const backlight_config_t& new_value);
|
||||
void set_disable_touchscreen(bool v);
|
||||
uint8_t config_encoder_dial_sensitivity();
|
||||
|
@@ -306,8 +306,7 @@ class WM8731 : public audio::Codec {
|
||||
});
|
||||
}
|
||||
|
||||
void set_headphone_volume(const volume_t volume) override {
|
||||
headphone_volume = volume;
|
||||
void set_wm_headphone_volume(const volume_t volume) {
|
||||
const auto normalized = headphone_gain_range().normalize(volume);
|
||||
auto n = normalized.centibel() / 10;
|
||||
|
||||
@@ -319,6 +318,11 @@ class WM8731 : public audio::Codec {
|
||||
});
|
||||
}
|
||||
|
||||
void set_headphone_volume(const volume_t volume) override {
|
||||
headphone_volume = volume;
|
||||
set_wm_headphone_volume(volume);
|
||||
}
|
||||
|
||||
volume_range_t headphone_gain_range() const override {
|
||||
return {-121.0_dB, 6.0_dB};
|
||||
}
|
||||
@@ -328,11 +332,11 @@ class WM8731 : public audio::Codec {
|
||||
}
|
||||
|
||||
void headphone_mute() {
|
||||
set_headphone_volume(headphone_gain_range().min);
|
||||
set_wm_headphone_volume(headphone_gain_range().min);
|
||||
}
|
||||
|
||||
void headphone_enable() override {
|
||||
set_headphone_volume(headphone_volume);
|
||||
set_wm_headphone_volume(headphone_volume);
|
||||
}
|
||||
|
||||
void headphone_disable() override {
|
||||
|
Reference in New Issue
Block a user