31 enum class Reg : uint16_t {
85 AD_LOGW(
"The SGTL5000 has already been initialized");
146 uint16_t i2s_ctrl = 0;
148 switch (iface->
fmt) {
164 switch (iface->
bits) {
166 i2s_ctrl |= (0x2 << 4);
169 i2s_ctrl |= (0x1 << 4);
172 i2s_ctrl |= (0x0 << 4);
176 i2s_ctrl |= (0x3 << 4);
181 i2s_ctrl |= (1 << 7);
204 if (volume < 0) volume = 0;
205 if (volume > 100) volume = 100;
213 uint16_t reg_value = 0x7F - ((volume * 0x7F) / 100);
227 uint16_t reg_addr =
static_cast<uint16_t
>(reg);
228 uint8_t addr_bytes[2] = {(uint8_t)(reg_addr >> 8),
229 (uint8_t)(reg_addr & 0xFF)};
230 uint8_t data[2] = {0, 0};
232 return ((uint16_t)data[0] << 8) | data[1];
237 uint16_t reg_addr =
static_cast<uint16_t
>(reg);
238 uint8_t addr_bytes[2] = {(uint8_t)(reg_addr >> 8),
239 (uint8_t)(reg_addr & 0xFF)};
240 uint8_t data[2] = {(uint8_t)(value >> 8), (uint8_t)(value & 0xFF)};
267 return (sys_fs << 2);
#define RESULT_OK
Definition DriverCommon.h:74
#define AD_LOGW(...)
Definition Logger.h:14
Header-only driver class for the SGTL5000 codec chip.
Definition SGTL5000.h:28
Reg
SGTL5000 register addresses.
Definition SGTL5000.h:31
error_t ctrlStateActive(codec_mode_t mode, bool ctrl_state_active)
Activate or mute the codec.
Definition SGTL5000.h:140
uint16_t ana_ctrl
Definition SGTL5000.h:274
void setAddress(int addr)
Defines the I2C device address.
Definition SGTL5000.h:80
error_t init(codec_config_t *cfg)
Initialize the SGTL5000 codec chip.
Definition SGTL5000.h:83
error_t deinit(void)
Deinitialize the SGTL5000 codec chip.
Definition SGTL5000.h:130
I2SMode
I2S_MODE field of the I2S_CTRL register (0x0006)
Definition SGTL5000.h:68
@ I2SModeI2SOrLeftJustified
Definition SGTL5000.h:69
@ I2SModePcm
Definition SGTL5000.h:71
@ I2SModeRightJustified
Definition SGTL5000.h:70
error_t setVoiceMute(bool enable)
Mute / unmute the headphone and line outputs.
Definition SGTL5000.h:190
int i2c_addr
Definition SGTL5000.h:272
uint16_t readReg(Reg reg)
Read a 16 bit value from a SGTL5000 register.
Definition SGTL5000.h:226
error_t configI2S(codec_mode_t mode, I2SDefinition *iface)
Configure the digital audio interface format and sample rate.
Definition SGTL5000.h:145
error_t writeReg(Reg reg, uint16_t value)
Write a 16 bit value to a SGTL5000 register.
Definition SGTL5000.h:236
void setWire(i2c_bus_handle_t handle)
Defines the I2C bus instance to be used.
Definition SGTL5000.h:77
i2c_bus_handle_t i2c_handle
Definition SGTL5000.h:271
error_t setVoiceVolume(int volume)
Set the headphone / line output volume.
Definition SGTL5000.h:203
int voice_volume
Definition SGTL5000.h:275
AnaCtrlBits
Bit flags for the ANA_CTRL register (0x0024)
Definition SGTL5000.h:57
@ MuteHeadphone
Definition SGTL5000.h:61
@ EnableZeroCrossAdc
Definition SGTL5000.h:63
@ MuteLineOut
Definition SGTL5000.h:58
@ EnableZeroCrossHp
Definition SGTL5000.h:60
@ SelectHeadphoneLineIn
Definition SGTL5000.h:59
@ SelectAdcLineIn
Definition SGTL5000.h:62
@ MuteAdc
Definition SGTL5000.h:64
uint16_t getClkCtrl(samplerate_t rate)
Determine the CLK_CTRL register value for the requested sample rate.
Definition SGTL5000.h:249
error_t getVoiceVolume(int *volume)
Get the headphone / line output volume (0~100)
Definition SGTL5000.h:220
bool initialized
Definition SGTL5000.h:273
Namespace for audio driver components.
Definition AudioBoard.h:5
void delayMs(unsigned long ms)
Definition API_Delay.h:19
@ 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
constexpr int SGTL5000_ADDR
7-bit I2C address with CTRL_ADR0_CS pin low (normal configuration)
Definition SGTL5000.h:19
codec_mode_t
Definition DriverCommon.h:290
@ CODEC_MODE_BOTH
Definition DriverCommon.h:295
int error_t
Definition DriverCommon.h:150
samplerate_t
Definition DriverCommon.h:213
@ RATE_44K
Definition DriverCommon.h:220
@ RATE_32K
Definition DriverCommon.h:219
@ RATE_96K
Definition DriverCommon.h:224
@ RATE_48K
Definition DriverCommon.h:221
constexpr int SGTL5000_ADDR_CS_HIGH
7-bit I2C address with CTRL_ADR0_CS pin high
Definition SGTL5000.h:21
@ 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
I2SDefinition i2s
Definition DriverCommon.h:400