95 bool begin(uint32_t sample_rate, uint8_t bits) {
102 i2s_format_t fmt,
bool is_master, uint8_t channels)
override {
107 return begin(sample_rate, bits);
111 static const uint8_t default_reg_map[
N_REGISTERS] = {
148 bool setVolume(uint8_t channel, uint8_t volume,
bool apply =
true) {
149 if (channel == 0 || channel >
N_CHANNELS)
return false;
150 if (volume > 100) volume = 100;
156 uint8_t attenuation =
158 ? (uint8_t)(101 * volume / 100 + 154 + 0.5)
159 : (uint8_t)(127 * volume / 100 + 128 + 0.5);
164 return apply ?
writeReg(reg, attenuation) :
true;
170 for (uint8_t ch = 1; ch <=
N_CHANNELS; ch++) {
183 bool setMute(uint8_t channel,
bool mute,
bool apply =
true) {
184 if (channel == 0 || channel >
N_CHANNELS)
return false;
203 for (uint8_t ch = 1; ch <=
N_CHANNELS; ch++) {
204 rc &=
setMute(ch, mute,
false);
218 if (channel == 0 || channel >
N_CHANNELS)
return false;
238 for (uint8_t ch = 1; ch <=
N_CHANNELS; ch++) {
259 (((uint8_t)rate << 3) & 0x18));
272 (((uint8_t)roll_off << 5) & 0x20));
279 (((uint8_t)scale << 7) & 0x80));
316 reg_map[reg] |= (uint8_t)(1U << pos);
318 reg_map[reg] &= (uint8_t)~(1U << pos);
Header only C++ driver for the PCM1681 8-channel audio DAC.
Definition PCM1681.h:55
bool setDeemphasisRate(PCM1681DeemphasisRate rate, bool apply=true)
Configure the digital de-emphasis filter sample rate.
Definition PCM1681.h:257
bool setDacEnabled(uint8_t channel, bool enable, bool apply=true)
Enable or disable the DAC output of a single channel (used for start_output / stop_output).
Definition PCM1681.h:217
bool begin(uint32_t sample_rate, uint8_t bits)
Initialize the codec: reset the local register shadow to the factory defaults, configure the DAI form...
Definition PCM1681.h:95
static uint8_t attenuationReg(uint8_t channel)
Definition PCM1681.h:303
bool setFormat(PCM1681Format format, bool apply=true)
Configure the digital audio interface format.
Definition PCM1681.h:250
static constexpr int N_CHANNELS
Definition PCM1681.h:57
bool setDeemphasisEnabled(bool enable, bool apply=true)
Enable or disable the digital de-emphasis filter.
Definition PCM1681.h:264
uint8_t reg_map[N_REGISTERS]
Definition PCM1681.h:295
void updateBit(uint8_t reg, uint8_t pos, bool value)
Definition PCM1681.h:314
bool setMute(bool mute) override
Mute or unmute all 8 channels.
Definition PCM1681.h:201
static bool isWriteable(uint8_t reg)
Definition PCM1681.h:299
bool setVolume(uint8_t volume)
Set the volume (attenuation) for all 8 channels (0..100)
Definition PCM1681.h:168
bool setFilterRollOff(PCM1681FilterRollOff roll_off, bool apply=true)
Configure the digital filter roll-off characteristic.
Definition PCM1681.h:270
Reg
Definition PCM1681.h:61
@ REG_15
factory use only - not accessible
Definition PCM1681.h:77
@ MUTx_REG
Definition PCM1681.h:69
@ AT3x_REG
Definition PCM1681.h:65
@ DACx_REG
Definition PCM1681.h:70
@ SRST_REG
also ZREV/DREV/DMFx/DMC
Definition PCM1681.h:72
@ AT6x_REG
Definition PCM1681.h:68
@ FLTx_REG
also OVER_REG
Definition PCM1681.h:74
@ MUT_OR_REG
Definition PCM1681.h:80
@ DAMS_REG
also AZROx
Definition PCM1681.h:75
@ AT7x_REG
Definition PCM1681.h:78
@ REVx_REG
Definition PCM1681.h:73
@ AT2x_REG
Definition PCM1681.h:64
@ DAC_OR_REG
Definition PCM1681.h:81
@ AT1x_REG
Definition PCM1681.h:63
@ FMTx_REG
also FLT_REG (shares same register)
Definition PCM1681.h:71
@ AT5x_REG
Definition PCM1681.h:67
@ REG_14
read only - not writeable
Definition PCM1681.h:76
@ REG_0
Factory use only - not accessible.
Definition PCM1681.h:62
@ AT4x_REG
Definition PCM1681.h:66
@ AT8x_REG
Definition PCM1681.h:79
static constexpr int N_REGISTERS
Definition PCM1681.h:58
bool setVolume(uint8_t channel, uint8_t volume, bool apply=true)
Set the volume (attenuation) of a single output channel.
Definition PCM1681.h:148
static bool isAccessible(uint8_t reg)
Definition PCM1681.h:297
PCM1681()
Definition PCM1681.h:84
bool begin(uint32_t sample_rate, uint8_t bits, codec_mode_t mode, i2s_format_t fmt, bool is_master, uint8_t channels) override
Initializes the codec.
Definition PCM1681.h:101
bool setAttenuationScale(PCM1681AttenuationScale scale, bool apply=true)
Configure the attenuation scale (fine 0.5dB / wide 1.0dB steps)
Definition PCM1681.h:277
bool applyProperties()
Definition PCM1681.h:285
bool begin(PCM1681Format format=PCM1681Format::I2S_16_24)
Definition PCM1681.h:110
bool setDacEnabled(bool enable)
Enable or disable the DAC output of all channels.
Definition PCM1681.h:236
bool setMute(uint8_t channel, bool mute, bool apply=true)
Mute or unmute a single output channel.
Definition PCM1681.h:183
Common parent class for codec drivers that have been ported from the Zephyr RTOS audio driver impleme...
Definition ZephyrDriverCommon.h:22
uint8_t i2c_addr
Definition ZephyrDriverCommon.h:87
bool writeReg(uint8_t reg, uint8_t value)
Writes a single byte to an 8 bit register address.
Definition ZephyrDriverCommon.h:94
Namespace for audio driver components.
Definition AudioBoard.h:5
PCM1681Format
Digital audio interface format (PCM1681_FMTx_REG field)
Definition PCM1681.h:17
codec_mode_t
Definition DriverCommon.h:290
PCM1681FilterRollOff
Digital filter roll-off (PCM1681_FLT_REG)
Definition PCM1681.h:36
PCM1681DeemphasisRate
De-emphasis sample rate selection (PCM1681_DMFx_REG field)
Definition PCM1681.h:29
i2s_format_t
Definition DriverCommon.h:250
PCM1681AttenuationScale
Output attenuation scale (PCM1681_DAMS_REG)
Definition PCM1681.h:42