ESPHome 2025.9.0-dev
Loading...
Searching...
No Matches
es8311.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace esphome {
8namespace es8311 {
9
22
30
32 uint32_t mclk; // mclk frequency
33 uint32_t rate; // sample rate
34 uint8_t pre_div; // the pre divider with range from 1 to 8
35 uint8_t pre_mult; // the pre multiplier with x1, x2, x4 and x8 selection
36 uint8_t adc_div; // adcclk divider
37 uint8_t dac_div; // dacclk divider
38 uint8_t fs_mode; // single speed (0) or double speed (1)
39 uint8_t lrck_h; // adc lrck divider and dac lrck divider
40 uint8_t lrck_l; //
41 uint8_t bclk_div; // sclk divider
42 uint8_t adc_osr; // adc osr
43 uint8_t dac_osr; // dac osr
44};
45
46class ES8311 : public audio_dac::AudioDac, public Component, public i2c::I2CDevice {
47 public:
49 // Component overrides //
51
52 void setup() override;
53 void dump_config() override;
54
56 // AudioDac overrides //
58
62 bool set_volume(float volume) override;
63
66 float volume() override;
67
70 bool set_mute_off() override { return this->set_mute_state_(false); }
71
74 bool set_mute_on() override { return this->set_mute_state_(true); }
75
76 bool is_muted() override { return this->is_muted_; }
77
79 // ES8311 configuration setters //
81
82 void set_use_mclk(bool use_mclk) { this->use_mclk_ = use_mclk; }
87 void set_sample_frequency(uint32_t sample_frequency) { this->sample_frequency_ = sample_frequency; }
88 void set_use_mic(bool use_mic) { this->use_mic_ = use_mic; }
89 void set_mic_gain(ES8311MicGain mic_gain) { this->mic_gain_ = mic_gain; }
90
91 protected:
96
101 static const ES8311Coefficient *get_coefficient(uint32_t mclk, uint32_t rate);
102
105 bool configure_clock_();
106
109 bool configure_format_();
110
113 bool configure_mic_();
114
118 bool set_mute_state_(bool mute_state);
119
122
123 bool use_mclk_; // true = use dedicated MCLK pin, false = use SCLK
124 bool sclk_inverted_{false}; // SCLK is inverted
125 bool mclk_inverted_{false}; // MCLK is inverted (ignored if use_mclk_ == false)
126 uint32_t mclk_multiple_{256}; // MCLK frequency is sample rate * mclk_multiple_ (ignored if use_mclk_ == false)
127
128 uint32_t sample_frequency_; // in Hz
131};
132
133} // namespace es8311
134} // namespace esphome
bool set_mute_on() override
Enables mute for audio out.
Definition es8311.h:74
void set_mic_gain(ES8311MicGain mic_gain)
Definition es8311.h:89
bool is_muted() override
Definition es8311.h:76
bool set_mute_off() override
Disables mute for audio out.
Definition es8311.h:70
void set_bits_per_sample(ES8311Resolution resolution)
Definition es8311.h:83
float volume() override
Gets the current volume out from the DAC.
Definition es8311.cpp:73
void set_use_mic(bool use_mic)
Definition es8311.h:88
ES8311Resolution resolution_out_
Definition es8311.h:130
static const ES8311Coefficient * get_coefficient(uint32_t mclk, uint32_t rate)
Retrieves the appropriate registers values for the configured mclk and rate.
Definition es8311.cpp:96
ES8311Resolution resolution_in_
Definition es8311.h:129
uint32_t sample_frequency_
Definition es8311.h:128
uint32_t mclk_multiple_
Definition es8311.h:126
static uint8_t calculate_resolution_value(ES8311Resolution resolution)
Computes the register value for the configured resolution (bits per sample)
Definition es8311.cpp:79
void dump_config() override
Definition es8311.cpp:52
void set_use_mclk(bool use_mclk)
Definition es8311.h:82
bool configure_format_()
Configures the ES8311 registers for the chosen bits per sample.
Definition es8311.cpp:175
bool configure_clock_()
Configures the ES8311 registers for the chosen sample rate.
Definition es8311.cpp:104
void setup() override
Definition es8311.cpp:24
bool configure_mic_()
Configures the ES8311 microphone registers.
Definition es8311.cpp:194
void set_sample_frequency(uint32_t sample_frequency)
Definition es8311.h:87
bool set_mute_state_(bool mute_state)
Mutes or unmute the DAC audio out.
Definition es8311.cpp:208
bool set_volume(float volume) override
Writes the volume out to the DAC.
Definition es8311.cpp:67
ES8311MicGain mic_gain_
Definition es8311.h:121
This Class provides the methods to read/write bytes from/to an i2c device.
Definition i2c.h:133
Resolution resolution
Definition msa3xx.h:1
@ ES8311_RESOLUTION_32
Definition es8311.h:28
@ ES8311_RESOLUTION_16
Definition es8311.h:24
@ ES8311_RESOLUTION_20
Definition es8311.h:26
@ ES8311_RESOLUTION_24
Definition es8311.h:27
@ ES8311_RESOLUTION_18
Definition es8311.h:25
@ ES8311_MIC_GAIN_36DB
Definition es8311.h:18
@ ES8311_MIC_GAIN_30DB
Definition es8311.h:17
@ ES8311_MIC_GAIN_6DB
Definition es8311.h:13
@ ES8311_MIC_GAIN_MAX
Definition es8311.h:20
@ ES8311_MIC_GAIN_MIN
Definition es8311.h:11
@ ES8311_MIC_GAIN_18DB
Definition es8311.h:15
@ ES8311_MIC_GAIN_0DB
Definition es8311.h:12
@ ES8311_MIC_GAIN_12DB
Definition es8311.h:14
@ ES8311_MIC_GAIN_24DB
Definition es8311.h:16
@ ES8311_MIC_GAIN_42DB
Definition es8311.h:19
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7