Components/driver/include/driver/i2s.h
Go to the documentation of this file.
1 
26 #pragma once
27 
28 #include <stdint.h>
29 #include <stddef.h>
30 #include <esp_attr.h>
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
51 typedef union {
52  uint32_t u32;
53  struct {
54  int16_t left;
55  int16_t right;
56  };
57 } i2s_sample_t;
58 
62 typedef enum {
67 
71 typedef enum {
75 
79 typedef enum {
84 
88 typedef enum {
95 
99 typedef enum {
103 } i2s_mode_t;
104 
108 typedef enum {
114 
119 typedef void (*i2s_callback_t)(void* param, i2s_event_type_t event);
120 
124 typedef struct {
125  i2s_mode_t mode;
127  i2s_channel_fmt_t channel_format;
130  uint8_t dma_buf_count;
134 
138 typedef struct {
141  unsigned sample_rate;
143  bool auto_start;
145  void* param;
146  uint8_t bits_mod;
147 } i2s_config_t;
148 
155 bool i2s_driver_install(const i2s_config_t* config);
156 
160 void i2s_driver_uninstall();
161 
168 bool i2s_start();
169 
175 bool i2s_stop();
176 
180 bool i2s_set_sample_rates(uint32_t rate);
181 
185 bool i2s_set_dividers(uint8_t bck_div, uint8_t mclk_div);
186 
190 float i2s_get_real_rate();
191 
195 typedef struct {
196  union {
197  void* buffer;
199  };
200  size_t size;
201  // debugging
205 
209 typedef unsigned TickType_t;
210 
220 bool IRAM_ATTR i2s_dma_read(i2s_buffer_info_t* info, size_t max_bytes);
221 
231 bool IRAM_ATTR i2s_dma_write(i2s_buffer_info_t* info, size_t max_bytes);
232 
241 size_t i2s_write(const void* src, size_t size, TickType_t ticks_to_wait);
242 
250 size_t i2s_read(void* dest, size_t size, TickType_t ticks_to_wait);
251 
256 bool i2s_zero_dma_buffer();
257 
261 typedef enum {
263  I2S_PIN_WS_OUT = 0x02,
265  I2S_PIN_BC_IN = 0x10,
266  I2S_PIN_WS_IN = 0x20,
268 } i2s_pin_t;
269 
270 typedef uint8_t i2s_pin_set_t;
271 
282 void i2s_set_pins(i2s_pin_set_t pins, bool enable);
283 
284 bool i2s_enable_loopback(bool enable);
285 
290 typedef struct {
294 
300 bool i2s_stat_tx(i2s_buffer_stat_t* stat);
301 
307 bool i2s_stat_rx(i2s_buffer_stat_t* stat);
308 
312 //unsigned i2s_rx_available();
313 
314 
317 #ifdef __cplusplus
318 }
319 #endif
size_t i2s_write(const void *src, size_t size, TickType_t ticks_to_wait)
writes a buffer of frames into the DMA memory, returns the amount of frames written.
I2S bits per sample: 16-bits.
Definition: Components/driver/include/driver/i2s.h:64
bool i2s_zero_dma_buffer()
Zero the contents of the TX DMA buffer.
I2S sample.
Definition: Components/driver/include/driver/i2s.h:51
Definition: Components/driver/include/driver/i2s.h:110
i2s_sample_t * samples
Definition: Components/driver/include/driver/i2s.h:198
void(* i2s_callback_t)(void *param, i2s_event_type_t event)
Callback function type.
Definition: Components/driver/include/driver/i2s.h:119
uint8_t bits_mod
Evaluate what this does (4 bits)
Definition: Components/driver/include/driver/i2s.h:146
i2s_bits_per_sample_t
I2S bit width per sample.
Definition: Components/driver/include/driver/i2s.h:62
GPIO 15 / TXD2 / D8.
Definition: Components/driver/include/driver/i2s.h:262
i2s_channel_fmt_t channel_format
I2S channel format.
Definition: Components/driver/include/driver/i2s.h:127
i2s_event_type_t
I2S event types.
Definition: Components/driver/include/driver/i2s.h:108
i2s_comm_format_t
I2S communication standard format.
Definition: Components/driver/include/driver/i2s.h:79
bool i2s_stat_rx(i2s_buffer_stat_t *stat)
Obtain state information for RX buffers.
I2S 2 channel (stereo)
Definition: Components/driver/include/driver/i2s.h:73
bool i2s_set_dividers(uint8_t bck_div, uint8_t mclk_div)
GPIO 12 / D6.
Definition: Components/driver/include/driver/i2s.h:267
I2S bits per sample: 8-bits.
Definition: Components/driver/include/driver/i2s.h:63
Definition: Components/driver/include/driver/i2s.h:90
i2s_callback_t callback
Callback handler.
Definition: Components/driver/include/driver/i2s.h:144
Definition: Components/driver/include/driver/i2s.h:93
int16_t right
Definition: Components/driver/include/driver/i2s.h:55
i2s_mode_t
I2S Mode, default is I2S_MODE_MASTER.
Definition: Components/driver/include/driver/i2s.h:99
bool i2s_stop()
Stop I2S driver.
Definition: Components/driver/include/driver/i2s.h:89
i2s_channel_fmt_t
I2S channel format type.
Definition: Components/driver/include/driver/i2s.h:88
unsigned sample_rate
I2S sample rate.
Definition: Components/driver/include/driver/i2s.h:141
uint16_t used
Definition: Components/driver/include/driver/i2s.h:292
i2s_bits_per_sample_t bits_per_sample
I2S bits per sample.
Definition: Components/driver/include/driver/i2s.h:126
i2s_pin_t
I2S pin enable for i2s_set_pin.
Definition: Components/driver/include/driver/i2s.h:261
bool i2s_driver_install(const i2s_config_t *config)
Install and start I2S driver.
bool i2s_stat_tx(i2s_buffer_stat_t *stat)
Obtain state information for TX buffers.
void i2s_set_pins(i2s_pin_set_t pins, bool enable)
Configure I2S pins.
size_t i2s_read(void *dest, size_t size, TickType_t ticks_to_wait)
Reads a block of received data.
GPIO 14 / D5.
Definition: Components/driver/include/driver/i2s.h:266
I2S configuration parameters.
Definition: Components/driver/include/driver/i2s.h:138
Definition: Components/driver/include/driver/i2s.h:111
Definition: Components/driver/include/driver/i2s.h:102
I2S 1 channel (mono)
Definition: Components/driver/include/driver/i2s.h:72
unsigned TickType_t
Defines the wait interval (presently milliseconds)
Definition: Components/driver/include/driver/i2s.h:209
i2s_mode_t mode
I2S work mode (combination of i2s_mode_t)
Definition: Components/driver/include/driver/i2s.h:125
Definition: Components/driver/include/driver/i2s.h:109
GPIO 13 / RXD2 / D7.
Definition: Components/driver/include/driver/i2s.h:265
bool i2s_enable_loopback(bool enable)
i2s_comm_format_t communication_format
I2S communication format.
Definition: Components/driver/include/driver/i2s.h:128
Defines a buffer with available content.
Definition: Components/driver/include/driver/i2s.h:195
uint16_t pos
Definition: Components/driver/include/driver/i2s.h:203
I2S format MSB.
Definition: Components/driver/include/driver/i2s.h:81
bool auto_start
Start immediately on successful initialisation.
Definition: Components/driver/include/driver/i2s.h:143
bool i2s_set_sample_rates(uint32_t rate)
uint32_t u32
Definition: Components/driver/include/driver/i2s.h:52
Definition: Components/driver/include/driver/i2s.h:91
void * param
Callback parameter.
Definition: Components/driver/include/driver/i2s.h:145
I2S communication format I2S.
Definition: Components/driver/include/driver/i2s.h:80
uint8_t callback_threshold
Definition: Components/driver/include/driver/i2s.h:131
Definition: Components/driver/include/driver/i2s.h:101
float i2s_get_real_rate()
Definition: Components/driver/include/driver/i2s.h:112
GPIO 2 / TXD1 / D4.
Definition: Components/driver/include/driver/i2s.h:263
I2S format LSB.
Definition: Components/driver/include/driver/i2s.h:82
bool i2s_dma_read(i2s_buffer_info_t *info, size_t max_bytes)
Fetch a DMA buffer containing received data (zero-copy)
uint16_t dma_buf_len
I2S DMA Buffer Length (in samples)
Definition: Components/driver/include/driver/i2s.h:129
Definition: Components/driver/include/driver/i2s.h:100
i2s_module_config_t rx
RX module configuration.
Definition: Components/driver/include/driver/i2s.h:140
void * buffer
Definition: Components/driver/include/driver/i2s.h:197
bool i2s_start()
Start I2S driver.
I2S bits per sample: 24-bits.
Definition: Components/driver/include/driver/i2s.h:65
bool tx_desc_auto_clear
I2S auto clear tx descriptor if there is underflow condition (Mutes output)
Definition: Components/driver/include/driver/i2s.h:142
i2s_module_config_t tx
TX module configuration.
Definition: Components/driver/include/driver/i2s.h:139
i2s_channel_t
I2S channel.
Definition: Components/driver/include/driver/i2s.h:71
size_t size
Available space (TX) or data (RX) in bytes.
Definition: Components/driver/include/driver/i2s.h:200
int16_t left
Definition: Components/driver/include/driver/i2s.h:54
I2S module configuration (TX or RX)
Definition: Components/driver/include/driver/i2s.h:124
GPIO 3 / RXD0 / D9.
Definition: Components/driver/include/driver/i2s.h:264
void i2s_driver_uninstall()
Uninstall I2S driver.
uint8_t dma_buf_count
I2S DMA Buffer Count.
Definition: Components/driver/include/driver/i2s.h:130
Definition: Components/driver/include/driver/i2s.h:92
Contains I2S buffer status information.
Definition: Components/driver/include/driver/i2s.h:290
uint16_t size
Definition: Components/driver/include/driver/i2s.h:291
uint16_t buf
Definition: Components/driver/include/driver/i2s.h:202
uint8_t i2s_pin_set_t
Definition: Components/driver/include/driver/i2s.h:270
bool i2s_dma_write(i2s_buffer_info_t *info, size_t max_bytes)
Fetch a DMA buffer for direct writing (zero-copy)