4#if (defined(ESP32) && defined(USE_ANALOG) && USE_LEGACY_I2S) || defined(DOXYGEN)
8#include "soc/dac_channel.h"
9#include "soc/adc_channel.h"
17static inline uint16_t
convert8DAC(int64_t value,
int value_bits_per_sample){
18 uint16_t result = value;
19 if (value_bits_per_sample!=16){
59 i2s_config_t i2s_config = {
61 .sample_rate = (eps32_i2s_sample_rate_type)cfg.
sample_rate,
63 .channel_format = (cfg.
channels == 1 && cfg.
rx_tx_mode ==
RX_MODE) ? I2S_CHANNEL_FMT_ONLY_LEFT :I2S_CHANNEL_FMT_RIGHT_LEFT,
64 .communication_format = (i2s_comm_format_t)0,
65 .intr_alloc_flags = 0,
70#
if ESP_IDF_VERSION_MAJOR >= 4
73 .bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT,
78 if (i2s_driver_install(
port_no, &i2s_config, 0,
nullptr)!=ESP_OK){
79 LOGE(
"%s - %s", __func__,
"i2s_driver_install");
87 if (i2s_zero_dma_buffer(
port_no)!=ESP_OK) {
88 LOGE(
"%s - %s", __func__,
"i2s_zero_dma_buffer");
99 LOGE(
"%s - %s", __func__,
"i2s_driver_install");
104 if (i2s_adc_enable(
port_no)!=ESP_OK) {
105 LOGE(
"%s - %s", __func__,
"i2s_adc_enable");
113 if (i2s_set_pin(
port_no,
nullptr) != ESP_OK)
LOGE(
"i2s_set_pin");
114 if (i2s_set_dac_mode( I2S_DAC_CHANNEL_BOTH_EN) != ESP_OK)
LOGE(
"i2s_set_dac_mode");
166 size_t write(
const uint8_t *src,
size_t size_bytes)
override {
170 if (size_bytes>0 && src!=
nullptr){
187 size_t readBytes(uint8_t *dest,
size_t size_bytes)
override {
197 LOGD(
"%s - len: %d -> %d", __func__, size_bytes,
result);
256 LOGE(
"%s - pin GPIO%d is not supported", __func__,gpio);
263 size_t output_size = 0;
265 uint16_t *dst = (uint16_t *)src;
268 int16_t *data=(int16_t *)src;
269 output_size = size_bytes;
270 for (
int j=0;j<size_bytes/2;j++){
276 output_size = (size_bytes/3) * 2;
277 for (
int j=0;j<size_bytes/3;j++){
282 int32_t *data=(int32_t *)src;
283 output_size = (size_bytes/4) * 2;
284 for (
int j=0;j<size_bytes/4;j++){
296 LOGD(
"i2s_write %d -> %d bytes", size_bytes,
result);
304 size_t output_size = 0;
306 size_t resultTotal = 0;
309 int16_t *data=(int16_t *)src;
310 for (
int j=0;j<size_bytes/2;j++){
321 for (
int j=0;j<size_bytes/3;j++){
331 int32_t *data=(int32_t *)src;
332 for (
int j=0;j<size_bytes/4;j++){
343 LOGD(
"i2s_write %d -> %d bytes", size_bytes, resultTotal);
#define TRACEI()
Definition AudioLoggerIDF.h:32
#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
void stop()
stops any further processing by spinning in an endless loop
Definition AudioRuntime.h:71
@ TX_MODE
Definition AudioTypes.h:26
@ RX_MODE
Definition AudioTypes.h:26