4#if defined(ESP32) && USE_LEGACY_I2S || defined(DOXYGEN)
10#include "driver/i2s.h"
11#include "esp_system.h"
13#ifndef I2S_MCLK_MULTIPLE_DEFAULT
14# define I2S_MCLK_MULTIPLE_DEFAULT ((i2s_mclk_multiple_t)0)
17#define IS_I2S_IMPLEMENTED
73 cfg, I2S_PIN_NO_CHANGE,
78 LOGE(
"Did not expect go get here");
107 LOGD(
"i2s_write %d -> %d bytes", size_bytes, result);
124 uint8_t temp[size_bytes * 2];
125 if (i2s_read(
i2s_num, temp, size_bytes * 2, &result,
133 result = reducer16.
convert((uint8_t *)dest, temp, result);
137 result = reducer24.
convert((uint8_t *)dest, temp, result);
141 result = reducer32.
convert((uint8_t *)dest, temp, result);
189 i2s_config_t i2s_config_new = {
195 .intr_alloc_flags = 0,
200#
if ESP_IDF_VERSION_MAJOR >= 4
203 .bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT,
211 LOGD(
"%s",
"I2S restarting");
215 LOGD(
"i2s_driver_install");
217 LOGE(
"%s - %s", __func__,
"i2s_driver_install");
222 i2s_pin_config_t pin_config = {
223#if ESP_IDF_VERSION > ESP_IDF_VERSION_VAL(4, 4, 0)
228 .data_out_num = txPin,
229 .data_in_num = rxPin};
232 if (i2s_set_pin(
i2s_num, &pin_config) != ESP_OK) {
233 LOGE(
"%s - %s", __func__,
"i2s_set_pin");
236 LOGD(
"Using built in DAC");
242 LOGD(
"i2s_zero_dma_buffer");
246 LOGD(
"%s - %s", __func__,
"started");
255 const void *src,
size_t size_bytes) {
258 switch (bits_per_sample) {
260 for (j = 0; j < size_bytes; j++) {
262 int8_t *data = (int8_t *)src;
265 size_t result_call = 0;
266 if (i2s_write(
i2s_num, frame,
sizeof(int8_t) * 2, &result_call,
270 result += result_call;
276 for (j = 0; j < size_bytes / 2; j++) {
278 int16_t *data = (int16_t *)src;
281 size_t result_call = 0;
282 if (i2s_write(
i2s_num, frame,
sizeof(int16_t) * 2, &result_call,
286 result += result_call;
292 for (j = 0; j < size_bytes / 4; j++) {
297 size_t result_call = 0;
302 result += result_call;
308 for (j = 0; j < size_bytes / 4; j++) {
310 int32_t *data = (int32_t *)src;
313 size_t result_call = 0;
314 if (i2s_write(
i2s_num, frame,
sizeof(int32_t) * 2, &result_call,
318 result += result_call;
326#pragma GCC diagnostic push
327#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
335 return (i2s_comm_format_t)I2S_COMM_FORMAT_STAND_I2S;
338 return (i2s_comm_format_t)(I2S_COMM_FORMAT_I2S |
339 I2S_COMM_FORMAT_I2S_MSB);
342 return (i2s_comm_format_t)(I2S_COMM_FORMAT_I2S |
343 I2S_COMM_FORMAT_I2S_LSB);
345 return (i2s_comm_format_t)I2S_COMM_FORMAT_STAND_PCM_SHORT;
348 LOGE(
"unsupported mode");
349 return (i2s_comm_format_t)I2S_COMM_FORMAT_STAND_I2S;
352#pragma GCC diagnostic pop
355 int i2s_format =
cfg.
is_master ? I2S_MODE_MASTER : I2S_MODE_SLAVE;
359 i2s_rx_tx = I2S_MODE_TX;
362 i2s_rx_tx = I2S_MODE_RX;
365 i2s_rx_tx = I2S_MODE_RX | I2S_MODE_TX;
370 return (i2s_format | i2s_rx_tx);
375 i2s_mode_t mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX);
386#if defined(USE_ANALOG)
388 : I2S_MODE_ADC_BUILT_IN);
390 LOGE(
"mode not supported");
395 LOGW(
"signal_type undefined");
396 mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX);
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define TRACEE()
Definition AudioLoggerIDF.h:34
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define I2S_MCLK_MULTIPLE_DEFAULT
Definition I2SDriverESP32.h:14
#define portMAX_DELAY
Definition QueueZephyr.h:14
#define pdMS_TO_TICKS(ms)
Definition QueueZephyr.h:17
uint32_t TickType_t
Definition QueueZephyr.h:11
RxTxMode
The Microcontroller is the Audio Source (TX_MODE) or Audio Sink (RX_MODE). RXTX_MODE is Source and Si...
Definition AudioTypes.h:26
@ RXTX_MODE
Definition AudioTypes.h:26
@ TX_MODE
Definition AudioTypes.h:26
@ RX_MODE
Definition AudioTypes.h:26