9#include <zephyr/device.h>
10#include <zephyr/drivers/i2s.h>
11#include <zephyr/kernel.h>
17#if defined(CONFIG_SOC_ESP32)
18#include <zephyr/drivers/gpio.h>
19#define I2S0O_CLK_OUT_IDX 80
21void esp_rom_gpio_connect_out_signal(uint32_t gpio_num, uint32_t signal_idx,
22 bool out_inv,
bool oen_inv);
26#define IS_I2S_IMPLEMENTED
83 LOGE(
"Invalid Zephyr I2S slab size");
89 LOGE(
"Could not resize Zephyr I2S slabs");
94 LOGE(
"Failed to initialize Zephyr I2S slabs");
102 LOGE(
"No Zephyr I2S device found");
109 LOGE(
"i2s_configure failed for TX");
117 LOGE(
"i2s_configure failed for RX");
141 i2s_trigger(
i2s_dev, I2S_DIR_TX, I2S_TRIGGER_DROP);
142 i2s_config disable_cfg =
tx_cfg;
143 disable_cfg.frame_clk_freq = 0U;
144 i2s_configure(
i2s_dev, I2S_DIR_TX, &disable_cfg);
148 i2s_trigger(
i2s_dev, I2S_DIR_RX, I2S_TRIGGER_DROP);
149 i2s_config disable_cfg =
rx_cfg;
150 disable_cfg.frame_clk_freq = 0U;
151 i2s_configure(
i2s_dev, I2S_DIR_RX, &disable_cfg);
165 int result = i2s_buf_write(
i2s_dev,
const_cast<void*
>(src), size_bytes);
166 return (result == 0) ? size_bytes : 0;
173 size_t result_size = size_bytes;
174 int result = i2s_buf_read(
i2s_dev, dest, &result_size);
175 return (result == 0) ? result_size : 0;
197#if defined(CONFIG_SOC_ESP32)
201 esp_rom_gpio_connect_out_signal(0, I2S0O_CLK_OUT_IDX,
false,
false);
206 i2s_config i2s_cfg = {0};
209 i2s_cfg.format = I2S_FMT_DATA_FORMAT_I2S;
212 ? (I2S_OPT_BIT_CLK_CONTROLLER | I2S_OPT_FRAME_CLK_CONTROLLER)
213 : (I2S_OPT_BIT_CLK_TARGET | I2S_OPT_FRAME_CLK_TARGET);
215 i2s_cfg.mem_slab = mem_slab;
217 i2s_cfg.timeout = -1;
232 return i2s_trigger(
i2s_dev, I2S_DIR_TX, I2S_TRIGGER_START) == 0;
236 return i2s_trigger(
i2s_dev, I2S_DIR_RX, I2S_TRIGGER_START) == 0;
239 int result = i2s_trigger(
i2s_dev, I2S_DIR_BOTH, I2S_TRIGGER_START);
240 if (result == 0)
return true;
241 if (result != -ENOSYS)
return false;
243 return i2s_trigger(
i2s_dev, I2S_DIR_TX, I2S_TRIGGER_START) == 0 &&
244 i2s_trigger(
i2s_dev, I2S_DIR_RX, I2S_TRIGGER_START) == 0;
253 LOGI(
"Using provided I2S device");
255 LOGI(
"Using i2s device %s",
260 LOGE(
"I2S device is not set in configuration");
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGE(...)
Definition AudioLoggerIDF.h:30
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