ESPHome 2025.5.0
Loading...
Searching...
No Matches
i2s_audio.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP32
4
8#ifdef USE_I2S_LEGACY
9#include <driver/i2s.h>
10#else
11#include <driver/i2s_std.h>
12#endif
13
14namespace esphome {
15namespace i2s_audio {
16
17class I2SAudioComponent;
18
19class I2SAudioBase : public Parented<I2SAudioComponent> {
20 public:
21#ifdef USE_I2S_LEGACY
22 void set_i2s_mode(i2s_mode_t mode) { this->i2s_mode_ = mode; }
23 void set_channel(i2s_channel_fmt_t channel) { this->channel_ = channel; }
24 void set_bits_per_sample(i2s_bits_per_sample_t bits_per_sample) { this->bits_per_sample_ = bits_per_sample; }
25 void set_bits_per_channel(i2s_bits_per_chan_t bits_per_channel) { this->bits_per_channel_ = bits_per_channel; }
26#else
27 void set_i2s_role(i2s_role_t role) { this->i2s_role_ = role; }
28 void set_slot_mode(i2s_slot_mode_t slot_mode) { this->slot_mode_ = slot_mode; }
29 void set_std_slot_mask(i2s_std_slot_mask_t std_slot_mask) { this->std_slot_mask_ = std_slot_mask; }
30 void set_slot_bit_width(i2s_slot_bit_width_t slot_bit_width) { this->slot_bit_width_ = slot_bit_width; }
31#endif
32 void set_sample_rate(uint32_t sample_rate) { this->sample_rate_ = sample_rate; }
33 void set_use_apll(uint32_t use_apll) { this->use_apll_ = use_apll; }
34 void set_mclk_multiple(i2s_mclk_multiple_t mclk_multiple) { this->mclk_multiple_ = mclk_multiple; }
35
36 protected:
37#ifdef USE_I2S_LEGACY
38 i2s_mode_t i2s_mode_{};
39 i2s_channel_fmt_t channel_;
40 i2s_bits_per_sample_t bits_per_sample_;
41 i2s_bits_per_chan_t bits_per_channel_;
42#else
43 i2s_role_t i2s_role_{};
44 i2s_slot_mode_t slot_mode_;
45 i2s_std_slot_mask_t std_slot_mask_;
46 i2s_slot_bit_width_t slot_bit_width_;
47#endif
48 uint32_t sample_rate_;
50 i2s_mclk_multiple_t mclk_multiple_;
51};
52
53class I2SAudioIn : public I2SAudioBase {};
54
55class I2SAudioOut : public I2SAudioBase {};
56
58 public:
59 void setup() override;
60
61#ifdef USE_I2S_LEGACY
62 i2s_pin_config_t get_pin_config() const {
63 return {
64 .mck_io_num = this->mclk_pin_,
65 .bck_io_num = this->bclk_pin_,
66 .ws_io_num = this->lrclk_pin_,
67 .data_out_num = I2S_PIN_NO_CHANGE,
68 .data_in_num = I2S_PIN_NO_CHANGE,
69 };
70 }
71#else
72 i2s_std_gpio_config_t get_pin_config() const {
73 return {.mclk = (gpio_num_t) this->mclk_pin_,
74 .bclk = (gpio_num_t) this->bclk_pin_,
75 .ws = (gpio_num_t) this->lrclk_pin_,
76 .dout = I2S_GPIO_UNUSED, // add local ports
77 .din = I2S_GPIO_UNUSED,
78 .invert_flags = {
79 .mclk_inv = false,
80 .bclk_inv = false,
81 .ws_inv = false,
82 }};
83 }
84#endif
85
86 void set_mclk_pin(int pin) { this->mclk_pin_ = pin; }
87 void set_bclk_pin(int pin) { this->bclk_pin_ = pin; }
88 void set_lrclk_pin(int pin) { this->lrclk_pin_ = pin; }
89
90 void lock() { this->lock_.lock(); }
91 bool try_lock() { return this->lock_.try_lock(); }
92 void unlock() { this->lock_.unlock(); }
93
94 i2s_port_t get_port() const { return this->port_; }
95
96 protected:
98
101#ifdef USE_I2S_LEGACY
102 int mclk_pin_{I2S_PIN_NO_CHANGE};
103 int bclk_pin_{I2S_PIN_NO_CHANGE};
104#else
105 int mclk_pin_{I2S_GPIO_UNUSED};
106 int bclk_pin_{I2S_GPIO_UNUSED};
107#endif
109 i2s_port_t port_{};
110};
111
112} // namespace i2s_audio
113} // namespace esphome
114
115#endif // USE_ESP32
BedjetMode mode
BedJet operating mode.
Mutex implementation, with API based on the unavailable std::mutex.
Definition helpers.h:561
bool try_lock()
Definition helpers.cpp:649
Helper class to easily give an object a parent of type T.
Definition helpers.h:538
i2s_std_slot_mask_t std_slot_mask_
Definition i2s_audio.h:45
i2s_slot_bit_width_t slot_bit_width_
Definition i2s_audio.h:46
void set_channel(i2s_channel_fmt_t channel)
Definition i2s_audio.h:23
void set_sample_rate(uint32_t sample_rate)
Definition i2s_audio.h:32
void set_bits_per_sample(i2s_bits_per_sample_t bits_per_sample)
Definition i2s_audio.h:24
i2s_bits_per_chan_t bits_per_channel_
Definition i2s_audio.h:41
void set_mclk_multiple(i2s_mclk_multiple_t mclk_multiple)
Definition i2s_audio.h:34
void set_i2s_role(i2s_role_t role)
Definition i2s_audio.h:27
void set_i2s_mode(i2s_mode_t mode)
Definition i2s_audio.h:22
void set_use_apll(uint32_t use_apll)
Definition i2s_audio.h:33
void set_std_slot_mask(i2s_std_slot_mask_t std_slot_mask)
Definition i2s_audio.h:29
void set_bits_per_channel(i2s_bits_per_chan_t bits_per_channel)
Definition i2s_audio.h:25
i2s_mclk_multiple_t mclk_multiple_
Definition i2s_audio.h:50
void set_slot_bit_width(i2s_slot_bit_width_t slot_bit_width)
Definition i2s_audio.h:30
i2s_bits_per_sample_t bits_per_sample_
Definition i2s_audio.h:40
void set_slot_mode(i2s_slot_mode_t slot_mode)
Definition i2s_audio.h:28
i2s_std_gpio_config_t get_pin_config() const
Definition i2s_audio.h:72
i2s_pin_config_t get_pin_config() const
Definition i2s_audio.h:62
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7