#pragma once #include #include // ---------------------- // I2C // ---------------------- // ---------------------- // System // ---------------------- #define ES8311_RESET 0x00 #define ES8311_CLK_MANAGE 0x01 #define ES8311_CLK_DIV 0x02 // ---------------------- // Power // ---------------------- #define ES8311_PWR_UP_DOWN 0x0C #define ES8311_PWR_ANALOG 0x0D #define ES8311_PWR_DAC_EN (1 << 0) #define ES8311_PWR_ADC_EN (1 << 1) // ---------------------- // Audio format // ---------------------- #define ES8311_SER_FMT 0x10 #define ES8311_FMT_I2S 0x18 #define ES8311_FMT_LEFT 0x10 #define ES8311_WORD_LEN_16 0x10 #define ES8311_WORD_LEN_24 0x20 // ---------------------- // ADC // ---------------------- #define ES8311_ADC_CTRL1 0x14 #define ES8311_ADC_CTRL2 0x15 #define ES8311_ADC_VOL 0x16 // ---------------------- // DAC // ---------------------- #define ES8311_DAC_CTRL1 0x17 #define ES8311_DAC_CTRL2 0x18 #define ES8311_DAC_VOL_L 0x33 #define ES8311_DAC_VOL_R 0x34 // ---------------------- // Output // ---------------------- #define ES8311_HP_CTRL 0x31 #define ES8311_SPK_CTRL 0x32 // ---------------------- // Common // ---------------------- #define ES8311_RESET_CMD 0x1F #define ES8311_ALL_ON 0xFF // ---------------------- // Clock Management Values // ---------------------- #define ES8311_CLK_ALL_EN 0x3F // Enable all clocks #define ES8311_CLK_DIV_DEFAULT 0x00 // Default divider // ---------------------- // Power Analog Values // ---------------------- #define ES8311_PWR_ANALOG_OFF 0x00 // All analog blocks off #define ES8311_PWR_ANALOG_ON 0xBF // Power up analog circuits // ---------------------- // ADC Control Values // ---------------------- #define ES8311_ADC_CTRL1_DEFAULT 0x44 // TODO: Document bit meanings #define ES8311_ADC_CTRL2_DEFAULT 0x0C // TODO: Document bit meanings // ---------------------- // DAC Control Values // ---------------------- #define ES8311_DAC_CTRL1_DEFAULT 0x04 // TODO: Document bit meanings #define ES8311_DAC_CTRL2_DEFAULT 0x0C // TODO: Document bit meanings // ---------------------- // Output Control Values // ---------------------- #define ES8311_HP_CTRL_DEFAULT 0xF0 // TODO: Document bit meanings #define ES8311_SPK_CTRL_MAX 0xFF // Maximum speaker output // ---------------------- // Volume Defaults // ---------------------- #define ES8311_DAC_VOL_DEFAULT 0xBF // ~75% volume #define ES8311_ADC_VOL_DEFAULT 0x88 // ~50% gain // ---------------------- // Timing Constants (milliseconds) // ---------------------- #define ES8311_RESET_DELAY_MS 20 #define ES8311_POWER_DELAY_MS 10 #define ES8311_STARTUP_DELAY_MS 50 // ---------------------- // Beep Configuration // ---------------------- #define ES8311_BEEP_DURATION_SAMPLES 4410 // 100ms at 44.1kHz #define ES8311_BEEP_AMPLITUDE 12000 // ~36% of 16-bit max #define ES8311_BEEP_HALF_PERIOD 20 // ~2.2kHz tone void es8311_init(void); void es8311_set_dac_volume(uint8_t vol); void es8311_set_adc_volume(uint8_t vol); int audio_write(const int16_t *samples, size_t count); int audio_read(int16_t *samples, size_t count); void audio_beep(void); void audio_test_tone(void); int es8311_write(uint8_t reg, uint8_t val); uint8_t es8311_read(uint8_t reg); void es8311_verify_init(void);