28 enum class Reg : uint8_t {
133 AD_LOGW(
"The WM8731 has already been initialized");
189 switch (iface->
fmt) {
205 switch (iface->
bits) {
245 if (volume < 0) volume = 0;
246 if (volume > 100) volume = 100;
249 uint16_t reg_value = (volume == 0)
251 : 0x30 + ((volume * (0x7F - 0x30)) / 100);
267 ((
static_cast<uint8_t
>(reg_addr) & 0x7F) << 9) | (value & 0x1FF);
268 uint8_t data[2] = {(uint8_t)((word >> 8) & 0xFF), (uint8_t)(word & 0xFF)};
#define RESULT_OK
Definition DriverCommon.h:74
#define AD_LOGW(...)
Definition Logger.h:14
Header-only driver class for the WM8731 codec chip.
Definition WM8731.h:25
uint16_t active_control
Definition WM8731.h:298
error_t ctrlStateActive(codec_mode_t mode, bool ctrl_state_active)
Activate or standby the codec.
Definition WM8731.h:182
error_t resume(void)
Restores the power configuration that was active before standby.
Definition WM8731.h:289
void setAddress(int addr)
Defines the I2C device address.
Definition WM8731.h:128
error_t init(codec_config_t *cfg)
Initialize the WM8731 codec chip.
Definition WM8731.h:131
error_t deinit(void)
Deinitialize the WM8731 codec chip.
Definition WM8731.h:173
error_t setVoiceMute(bool enable)
Mute / unmute the DAC output.
Definition WM8731.h:231
uint16_t getSamplingControl(samplerate_t rate)
Determine the SamplingControl register value for the requested sample rate.
Definition WM8731.h:320
SamplingControl
Bit flags for the Sampling Control register.
Definition WM8731.h:109
@ UsbMode
Definition WM8731.h:110
@ BaseOversamplingRate
Definition WM8731.h:111
@ ClkInDiv2
Definition WM8731.h:113
@ SampleRateMask
Definition WM8731.h:112
@ ClkOutDiv2
Definition WM8731.h:114
int i2c_addr
Definition WM8731.h:293
error_t configI2S(codec_mode_t mode, I2SDefinition *iface)
Configure the digital audio interface format and sample rate.
Definition WM8731.h:187
error_t reset()
Reset all registers to their default values.
Definition WM8731.h:273
AnaloguePath
Bit flags for the Analogue Audio Path Control register.
Definition WM8731.h:57
@ Bypass
Definition WM8731.h:61
@ DacSelect
Definition WM8731.h:62
@ SideTone
Definition WM8731.h:63
@ MuteMic
Definition WM8731.h:59
@ SideToneAttenuationMask
Definition WM8731.h:64
@ InputSelectMic
Definition WM8731.h:60
@ MicBoost
Definition WM8731.h:58
DigitalPath
Bit flags for the Digital Audio Path Control register.
Definition WM8731.h:68
@ DeEmphasis32k
Definition WM8731.h:71
@ DeEmphasis48k
Definition WM8731.h:73
@ DacSoftMute
Definition WM8731.h:74
@ HighPassOnReset
Definition WM8731.h:75
@ DeEmphasisDisable
Definition WM8731.h:70
@ DeEmphasis44_1k
Definition WM8731.h:72
@ AdcHighPassDisable
Definition WM8731.h:69
Reg
WM8731 register addresses.
Definition WM8731.h:28
Format
Bit flags / values for the Digital Audio Interface Format register.
Definition WM8731.h:91
@ WordLength32Bit
Definition WM8731.h:100
@ WordLength24Bit
Definition WM8731.h:99
@ WordLength20Bit
Definition WM8731.h:98
@ LrSwapPolarity
Definition WM8731.h:102
@ FormatI2S
Definition WM8731.h:94
@ FormatRightJustified
Definition WM8731.h:92
@ FormatLeftJustified
Definition WM8731.h:93
@ FormatMask
Definition WM8731.h:96
@ FormatDsp
Definition WM8731.h:95
@ WordLengthMask
Definition WM8731.h:101
@ BitClockInvert
Definition WM8731.h:105
@ LrSwap
Definition WM8731.h:103
@ MasterMode
Definition WM8731.h:104
@ WordLength16Bit
Definition WM8731.h:97
error_t writeReg(Reg reg_addr, uint16_t value)
Write a value to a WM8731 register.
Definition WM8731.h:265
void setWire(i2c_bus_handle_t handle)
Defines the I2C bus instance to be used.
Definition WM8731.h:125
ActiveControl
Bit flags for the Active Control register.
Definition WM8731.h:118
@ Active
Definition WM8731.h:119
error_t setActive(bool active)
Activates / deactivates the digital audio interface.
Definition WM8731.h:276
i2c_bus_handle_t i2c_handle
Definition WM8731.h:292
error_t updatePower(input_device_t input_device, output_device_t output_device)
Powers up the input/output sections that are actually used.
Definition WM8731.h:302
LineIn
Bit flags for the Left/Right Line In registers.
Definition WM8731.h:43
@ LineInBoth
Definition WM8731.h:46
@ LineInVolMask
Definition WM8731.h:44
@ LineInMute
Definition WM8731.h:45
uint16_t analogue_path
Definition WM8731.h:295
error_t setVoiceVolume(int volume)
Set the headphone / line output volume.
Definition WM8731.h:244
HeadphoneOut
Bit flags for the Left/Right Headphone Out registers.
Definition WM8731.h:50
@ HeadphoneZeroCross
Definition WM8731.h:52
@ HeadphoneVolMask
Definition WM8731.h:51
@ HeadphoneBoth
Definition WM8731.h:53
int voice_volume
Definition WM8731.h:299
PowerDown
Bit flags for the Power Down Control register.
Definition WM8731.h:79
@ PowerOff
Definition WM8731.h:87
@ DacPowerDown
Definition WM8731.h:83
@ MicPowerDown
Definition WM8731.h:81
@ ClockOutPowerDown
Definition WM8731.h:86
@ AdcPowerDown
Definition WM8731.h:82
@ OutputPowerDown
Definition WM8731.h:84
@ LineInPowerDown
Definition WM8731.h:80
@ OscillatorPowerDown
Definition WM8731.h:85
error_t standby(void)
Powers down all sections (standby)
Definition WM8731.h:282
uint16_t digital_path
Definition WM8731.h:296
uint16_t power_down
Definition WM8731.h:297
error_t getVoiceVolume(int *volume)
Get the headphone / line output volume (0~100)
Definition WM8731.h:259
bool initialized
Definition WM8731.h:294
Namespace for audio driver components.
Definition AudioBoard.h:5
constexpr int WM8731_ADDR
7-bit I2C address (CSB pin low). If CSB is pulled high use 0x1B.
Definition WM8731.h:18
input_device_t
Definition DriverCommon.h:170
@ ADC_INPUT_ALL
Definition DriverCommon.h:175
@ ADC_INPUT_NONE
Definition DriverCommon.h:171
@ ADC_INPUT_LINE1
Definition DriverCommon.h:172
@ BIT_LENGTH_24BITS
Definition DriverCommon.h:240
@ BIT_LENGTH_20BITS
Definition DriverCommon.h:239
@ BIT_LENGTH_32BITS
Definition DriverCommon.h:241
@ BIT_LENGTH_16BITS
Definition DriverCommon.h:237
codec_mode_t
Definition DriverCommon.h:290
@ CODEC_MODE_BOTH
Definition DriverCommon.h:295
int error_t
Definition DriverCommon.h:150
output_device_t
Definition DriverCommon.h:186
@ DAC_OUTPUT_NONE
Definition DriverCommon.h:187
samplerate_t
Definition DriverCommon.h:213
@ RATE_44K
Definition DriverCommon.h:220
@ RATE_8K
Definition DriverCommon.h:214
@ RATE_88K
Definition DriverCommon.h:223
@ RATE_32K
Definition DriverCommon.h:219
@ RATE_96K
Definition DriverCommon.h:224
@ RATE_48K
Definition DriverCommon.h:221
@ I2S_RIGHT
Definition DriverCommon.h:253
@ I2S_DSP
Definition DriverCommon.h:254
@ I2S_LEFT
Definition DriverCommon.h:252
@ I2S_NORMAL
Definition DriverCommon.h:251
@ MODE_MASTER
Definition DriverCommon.h:205
void * i2c_bus_handle_t
Definition DriverCommon.h:155
I2S interface parameters for the audio codec.
Definition DriverCommon.h:384
i2s_format_t fmt
Definition DriverCommon.h:386
samplerate_t rate
Definition DriverCommon.h:387
i2s_master_slave_t mode
Definition DriverCommon.h:385
sample_bits_t bits
Definition DriverCommon.h:388
Top-level codec configuration passed to the audio driver at init.
Definition DriverCommon.h:397
output_device_t output_device
Definition DriverCommon.h:399
I2SDefinition i2s
Definition DriverCommon.h:400
input_device_t input_device
Definition DriverCommon.h:398