ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
i2s_audio.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP32
4
8#include <esp_idf_version.h>
9#include <driver/i2s_std.h>
10
12
14
15class I2SAudioBase : public Parented<I2SAudioComponent> {
16 public:
17 void set_i2s_role(i2s_role_t role) { this->i2s_role_ = role; }
18 void set_slot_mode(i2s_slot_mode_t slot_mode) { this->slot_mode_ = slot_mode; }
19 void set_std_slot_mask(i2s_std_slot_mask_t std_slot_mask) { this->std_slot_mask_ = std_slot_mask; }
20 void set_slot_bit_width(i2s_slot_bit_width_t slot_bit_width) { this->slot_bit_width_ = slot_bit_width; }
21 void set_sample_rate(uint32_t sample_rate) { this->sample_rate_ = sample_rate; }
22 void set_use_apll(uint32_t use_apll) { this->use_apll_ = use_apll; }
23 void set_mclk_multiple(i2s_mclk_multiple_t mclk_multiple) { this->mclk_multiple_ = mclk_multiple; }
24
25 protected:
26 i2s_role_t i2s_role_{};
27 i2s_slot_mode_t slot_mode_;
28 i2s_std_slot_mask_t std_slot_mask_;
29 i2s_slot_bit_width_t slot_bit_width_;
32 i2s_mclk_multiple_t mclk_multiple_;
33};
34
35class I2SAudioIn : public I2SAudioBase {};
36
37class I2SAudioOut : public I2SAudioBase {};
38
40 public:
41 i2s_std_gpio_config_t get_pin_config() const {
42 return {.mclk = (gpio_num_t) this->mclk_pin_,
43 .bclk = (gpio_num_t) this->bclk_pin_,
44 .ws = (gpio_num_t) this->lrclk_pin_,
45 .dout = I2S_GPIO_UNUSED, // add local ports
46 .din = I2S_GPIO_UNUSED,
47 .invert_flags = {
48 .mclk_inv = false,
49 .bclk_inv = false,
50 .ws_inv = false,
51 }};
52 }
53
54 void set_mclk_pin(int pin) { this->mclk_pin_ = pin; }
55 void set_bclk_pin(int pin) { this->bclk_pin_ = pin; }
56 void set_lrclk_pin(int pin) { this->lrclk_pin_ = pin; }
57 void set_port(int port) { this->port_ = port; }
58#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(6, 0, 0)
59 int get_port() const { return this->port_; }
60#else
61 i2s_port_t get_port() const { return static_cast<i2s_port_t>(this->port_); }
62#endif
63
64 void lock() { this->lock_.lock(); }
65 bool try_lock() { return this->lock_.try_lock(); }
66 void unlock() { this->lock_.unlock(); }
67
68 protected:
70
73 int mclk_pin_{I2S_GPIO_UNUSED};
74 int bclk_pin_{I2S_GPIO_UNUSED};
76 int port_{};
77};
78
79} // namespace esphome::i2s_audio
80
81#endif // USE_ESP32
Mutex implementation, with API based on the unavailable std::mutex.
Definition helpers.h:1884
void unlock()
Definition helpers.h:1895
bool try_lock()
Definition helpers.h:1894
Helper class to easily give an object a parent of type T.
Definition helpers.h:1861
i2s_std_slot_mask_t std_slot_mask_
Definition i2s_audio.h:28
i2s_slot_bit_width_t slot_bit_width_
Definition i2s_audio.h:29
void set_sample_rate(uint32_t sample_rate)
Definition i2s_audio.h:21
void set_mclk_multiple(i2s_mclk_multiple_t mclk_multiple)
Definition i2s_audio.h:23
void set_i2s_role(i2s_role_t role)
Definition i2s_audio.h:17
void set_use_apll(uint32_t use_apll)
Definition i2s_audio.h:22
void set_std_slot_mask(i2s_std_slot_mask_t std_slot_mask)
Definition i2s_audio.h:19
i2s_mclk_multiple_t mclk_multiple_
Definition i2s_audio.h:32
void set_slot_bit_width(i2s_slot_bit_width_t slot_bit_width)
Definition i2s_audio.h:20
void set_slot_mode(i2s_slot_mode_t slot_mode)
Definition i2s_audio.h:18
i2s_std_gpio_config_t get_pin_config() const
Definition i2s_audio.h:41
static void uint32_t