diff --git a/_i2_s_e_s_p32_v1_8h_source.html b/_i2_s_e_s_p32_v1_8h_source.html index df2267988..dcbb92661 100644 --- a/_i2_s_e_s_p32_v1_8h_source.html +++ b/_i2_s_e_s_p32_v1_8h_source.html @@ -255,285 +255,286 @@
202  int size = cfg.buffer_size * cfg.buffer_count;
203  int frame_size = cfg.bits_per_sample * cfg.channels / 8;
204  if (size > 0) result.dma_frame_num = size / frame_size;
-
205  return result;
-
206  }
-
207 
-
208  i2s_std_clk_config_t getClockConfig(I2SConfigESP32V1 &cfg) {
-
209  TRACED();
-
210  i2s_std_clk_config_t clk_cfg =
-
211  I2S_STD_CLK_DEFAULT_CONFIG((uint32_t)cfg.sample_rate);
-
212  if (cfg.mclk_multiple > 0){
-
213  clk_cfg.mclk_multiple = (i2s_mclk_multiple_t) cfg.mclk_multiple;
-
214  } else {
-
215  if (cfg.pin_mck !=-1 && cfg.bits_per_sample == 24) {
-
216  // mclk_multiple' should be the multiple of 3 while using 24-bit
-
217  clk_cfg.mclk_multiple = I2S_MCLK_MULTIPLE_384;
-
218  LOGI("mclk_multiple=384");
-
219  }
-
220  }
-
221  return clk_cfg;
-
222  }
-
223 
-
224  bool startChannels(I2SConfigESP32V1 &cfg, i2s_chan_handle_t &tx_chan,
-
225  i2s_chan_handle_t &rx_chan, int txPin, int rxPin) {
-
226  TRACED();
-
227  LOGI("tx: %d, rx: %d", txPin, rxPin);
-
228  i2s_std_config_t std_cfg = {
-
229  .clk_cfg = getClockConfig(cfg),
-
230  .slot_cfg = getSlotConfig(cfg),
-
231  .gpio_cfg =
-
232  {
-
233  .mclk = (gpio_num_t)cfg.pin_mck,
-
234  .bclk = (gpio_num_t)cfg.pin_bck,
-
235  .ws = (gpio_num_t)cfg.pin_ws,
-
236  .dout = (gpio_num_t)txPin,
-
237  .din = (gpio_num_t)rxPin,
-
238  .invert_flags =
-
239  {
-
240  .mclk_inv = false,
-
241  .bclk_inv = false,
-
242  .ws_inv = false,
-
243  },
-
244  },
-
245  };
-
246 
-
247  if (cfg.rx_tx_mode == RXTX_MODE || cfg.rx_tx_mode == TX_MODE) {
-
248  if (i2s_channel_init_std_mode(tx_chan, &std_cfg) != ESP_OK) {
-
249  LOGE("i2s_channel_init_std_mode %s", "tx");
-
250  return false;
-
251  }
-
252  if (i2s_channel_enable(tx_chan) != ESP_OK) {
-
253  LOGE("i2s_channel_enable %s", "tx");
-
254  return false;
-
255  }
-
256  }
-
257 
-
258  if (cfg.rx_tx_mode == RXTX_MODE || cfg.rx_tx_mode == RX_MODE) {
-
259  if (i2s_channel_init_std_mode(rx_chan, &std_cfg) != ESP_OK) {
-
260  LOGE("i2s_channel_init_std_mode %s", "rx");
-
261  return false;
-
262  }
-
263  if (i2s_channel_enable(rx_chan) != ESP_OK) {
-
264  LOGE("i2s_channel_enable %s", "rx");
-
265  return false;
-
266  }
-
267  }
-
268 
-
269  LOGD("%s - %s", __func__, "started");
-
270  return true;
-
271  }
-
272 
-
273  bool changeSampleRate(I2SConfigESP32V1 &cfg, i2s_chan_handle_t &tx_chan,
-
274  i2s_chan_handle_t &rx_chan) override {
-
275  bool rc = false;
-
276  auto clock_cfg = getClockConfig(cfg);
-
277  if (tx_chan != nullptr) {
-
278  i2s_channel_disable(tx_chan);
-
279  rc = i2s_channel_reconfig_std_clock(tx_chan, &clock_cfg) == ESP_OK;
-
280  i2s_channel_enable(tx_chan);
-
281  }
-
282  if (rx_chan != nullptr) {
-
283  i2s_channel_disable(rx_chan);
-
284  rc = i2s_channel_reconfig_std_clock(rx_chan, &clock_cfg) == ESP_OK;
-
285  i2s_channel_enable(rx_chan);
-
286  }
-
287  return rc;
-
288  }
-
289 
-
290  } i2s;
-
291 
-
292 #ifdef USE_PDM
-
293 
-
294  struct DriverPDM : public DriverCommon {
-
295  i2s_pdm_tx_slot_config_t getTxSlotConfig(I2SConfigESP32V1 &cfg) {
-
296  return I2S_PDM_TX_SLOT_DEFAULT_CONFIG(
-
297  (i2s_data_bit_width_t)cfg.bits_per_sample,
-
298  (i2s_slot_mode_t)cfg.channels);
-
299  }
-
300 
-
301  i2s_chan_config_t getChannelConfig(I2SConfigESP32V1 &cfg) {
-
302  return I2S_CHANNEL_DEFAULT_CONFIG(
-
303  (i2s_port_t)cfg.port_no,
-
304  cfg.is_master ? I2S_ROLE_MASTER : I2S_ROLE_SLAVE);
-
305  }
-
306 
-
307  i2s_pdm_tx_clk_config_t getTxClockConfig(I2SConfigESP32V1 &cfg) {
-
308  return I2S_PDM_TX_CLK_DEFAULT_CONFIG((uint32_t)cfg.sample_rate);
-
309  }
-
310 
-
311  bool startChannels(I2SConfigESP32V1 &cfg, i2s_chan_handle_t &tx_chan,
-
312  i2s_chan_handle_t &rx_chan, int txPin, int rxPin) {
-
313  if (cfg.rx_tx_mode == TX_MODE) {
-
314  i2s_pdm_tx_config_t pdm_tx_cfg = {
-
315  .clk_cfg = getTxClockConfig(cfg),
-
316  .slot_cfg = getTxSlotConfig(cfg),
-
317  .gpio_cfg =
-
318  {
-
319  .clk = (gpio_num_t)cfg.pin_bck,
-
320  .dout = (gpio_num_t)txPin,
-
321  .invert_flags =
-
322  {
-
323  .clk_inv = false,
-
324  },
-
325  },
-
326  };
-
327 
-
328  if (i2s_channel_init_pdm_tx_mode(tx_chan, &pdm_tx_cfg) != ESP_OK) {
-
329  LOGE("i2s_channel_init_pdm_tx_mode %s", "tx");
-
330  return false;
-
331  }
-
332  if (i2s_channel_enable(tx_chan) != ESP_OK) {
-
333  LOGE("i2s_channel_enable %s", "tx");
-
334  return false;
-
335  }
-
336  } else {
-
337  LOGE("Only TX supported for PDM");
-
338  return false;
-
339  }
-
340  return true;
-
341  }
-
342  } pdm;
-
343 
-
344 #endif
-
345 
-
346 #ifdef USE_TDM
-
347  // example at
-
348  // https://github.com/espressif/esp-idf/blob/v5.3-dev/examples/peripherals/i2s/i2s_basic/i2s_tdm/main/i2s_tdm_example_main.c
-
349  struct DriverTDM : public DriverCommon {
-
350  i2s_tdm_slot_config_t getSlotConfig(I2SConfigESP32V1 &cfg) {
-
351  int slots = 0;
-
352  for (int j = 0; j < cfg.channels; j++) {
-
353  slots |= 1 << j;
-
354  }
-
355  return I2S_TDM_MSB_SLOT_DEFAULT_CONFIG(
-
356  (i2s_data_bit_width_t)cfg.bits_per_sample, I2S_SLOT_MODE_STEREO,
-
357  (i2s_tdm_slot_mask_t)slots);
-
358  }
-
359 
-
360  i2s_chan_config_t getChannelConfig(I2SConfigESP32V1 &cfg) {
-
361  return I2S_CHANNEL_DEFAULT_CONFIG(
-
362  (i2s_port_t)cfg.port_no,
-
363  cfg.is_master ? I2S_ROLE_MASTER : I2S_ROLE_SLAVE);
-
364  }
-
365 
-
366  i2s_tdm_clk_config_t getClockConfig(I2SConfigESP32V1 &cfg) {
-
367  return I2S_TDM_CLK_DEFAULT_CONFIG((uint32_t)cfg.sample_rate);
-
368  }
-
369 
-
370  bool startChannels(I2SConfigESP32V1 &cfg, i2s_chan_handle_t &tx_chan,
-
371  i2s_chan_handle_t &rx_chan, int txPin, int rxPin) {
-
372  i2s_tdm_config_t tdm_cfg = {
-
373  .clk_cfg = getClockConfig(cfg),
-
374  .slot_cfg = getSlotConfig(cfg),
-
375  .gpio_cfg =
-
376  {
-
377  .mclk = (gpio_num_t)cfg.pin_mck,
-
378  .bclk = (gpio_num_t)cfg.pin_bck,
-
379  .ws = (gpio_num_t)cfg.pin_ws,
-
380  .dout = (gpio_num_t)txPin,
-
381  .din = (gpio_num_t)rxPin,
-
382  .invert_flags =
-
383  {
-
384  .mclk_inv = false,
-
385  .bclk_inv = false,
-
386  .ws_inv = false,
-
387  },
-
388  },
-
389  };
-
390 
-
391  if (cfg.rx_tx_mode == TX_MODE) {
-
392  if (i2s_channel_init_tdm_mode(tx_chan, &tdm_cfg) != ESP_OK) {
-
393  LOGE("i2s_channel_init_tdm_tx_mode %s", "tx");
-
394  return false;
-
395  }
-
396  }
-
397  if (cfg.rx_tx_mode == RX_MODE) {
-
398  if (i2s_channel_init_tdm_mode(rx_chan, &tdm_cfg) != ESP_OK) {
-
399  LOGE("i2s_channel_init_tdm_tx_mode %s", "rx");
-
400  return false;
-
401  }
-
402  return true;
-
403  }
-
404  return false;
-
405  }
-
406  } tdm;
-
407 
-
408 #endif
-
409 
-
411 
-
413  bool begin(I2SConfigESP32V1 cfg, int txPin, int rxPin) {
-
414  TRACED();
-
415  cfg.logInfo();
-
416  this->cfg = cfg;
-
417  if (cfg.channels <= 0 || cfg.channels > 2) {
-
418  LOGE("invalid channels: %d", cfg.channels);
-
419  return false;
-
420  }
-
421 
-
422  DriverCommon &driver = getDriver(cfg);
-
423  if (!newChannels(cfg, driver)) {
-
424  end();
-
425  return false;
-
426  }
-
427 
-
428  is_started = driver.startChannels(cfg, tx_chan, rx_chan, txPin, rxPin);
-
429  if (!is_started) {
-
430  end();
-
431  LOGE("Channels not started");
-
432  }
-
433  return is_started;
-
434  }
-
435 
-
436  bool newChannels(I2SConfigESP32V1 &cfg, DriverCommon &driver) {
-
437  i2s_chan_config_t chan_cfg = driver.getChannelConfig(cfg);
-
438  switch (cfg.rx_tx_mode) {
-
439  case RX_MODE:
-
440  if (i2s_new_channel(&chan_cfg, NULL, &rx_chan) != ESP_OK) {
-
441  LOGE("i2s_channel");
-
442  return false;
-
443  }
-
444  break;
-
445  case TX_MODE:
-
446  if (i2s_new_channel(&chan_cfg, &tx_chan, NULL) != ESP_OK) {
-
447  LOGE("i2s_channel");
-
448  return false;
-
449  }
-
450  break;
-
451  default:
-
452  if (i2s_new_channel(&chan_cfg, &tx_chan, &rx_chan) != ESP_OK) {
-
453  LOGE("i2s_channel");
-
454  return false;
-
455  }
-
456  }
-
457  return true;
-
458  }
-
459 
-
460  DriverCommon &getDriver(I2SConfigESP32V1 &cfg) {
-
461  switch (cfg.signal_type) {
-
462  case Digital:
-
463  return i2s;
-
464 #ifdef USE_PDM
-
465  case Analog:
-
466  case PDM:
-
467  return pdm;
-
468 #endif
-
469 #ifdef USE_TDM
-
470  case TDM:
-
471  return tdm;
-
472 #endif
-
473  default:
-
474  break;
-
475  }
-
476  LOGE("Unsupported singal_type");
-
477  return i2s;
-
478  }
-
479 };
-
480 
-
481 using I2SDriver = I2SDriverESP32V1;
-
482 
-
483 } // namespace audio_tools
-
484 
-
485 #endif
+
205  LOGI("dma_frame_num: %d", result.dma_frame_num);
+
206  return result;
+
207  }
+
208 
+
209  i2s_std_clk_config_t getClockConfig(I2SConfigESP32V1 &cfg) {
+
210  TRACED();
+
211  i2s_std_clk_config_t clk_cfg =
+
212  I2S_STD_CLK_DEFAULT_CONFIG((uint32_t)cfg.sample_rate);
+
213  if (cfg.mclk_multiple > 0){
+
214  clk_cfg.mclk_multiple = (i2s_mclk_multiple_t) cfg.mclk_multiple;
+
215  } else {
+
216  if (cfg.pin_mck !=-1 && cfg.bits_per_sample == 24) {
+
217  // mclk_multiple' should be the multiple of 3 while using 24-bit
+
218  clk_cfg.mclk_multiple = I2S_MCLK_MULTIPLE_384;
+
219  LOGI("mclk_multiple=384");
+
220  }
+
221  }
+
222  return clk_cfg;
+
223  }
+
224 
+
225  bool startChannels(I2SConfigESP32V1 &cfg, i2s_chan_handle_t &tx_chan,
+
226  i2s_chan_handle_t &rx_chan, int txPin, int rxPin) {
+
227  TRACED();
+
228  LOGI("tx: %d, rx: %d", txPin, rxPin);
+
229  i2s_std_config_t std_cfg = {
+
230  .clk_cfg = getClockConfig(cfg),
+
231  .slot_cfg = getSlotConfig(cfg),
+
232  .gpio_cfg =
+
233  {
+
234  .mclk = (gpio_num_t)cfg.pin_mck,
+
235  .bclk = (gpio_num_t)cfg.pin_bck,
+
236  .ws = (gpio_num_t)cfg.pin_ws,
+
237  .dout = (gpio_num_t)txPin,
+
238  .din = (gpio_num_t)rxPin,
+
239  .invert_flags =
+
240  {
+
241  .mclk_inv = false,
+
242  .bclk_inv = false,
+
243  .ws_inv = false,
+
244  },
+
245  },
+
246  };
+
247 
+
248  if (cfg.rx_tx_mode == RXTX_MODE || cfg.rx_tx_mode == TX_MODE) {
+
249  if (i2s_channel_init_std_mode(tx_chan, &std_cfg) != ESP_OK) {
+
250  LOGE("i2s_channel_init_std_mode %s", "tx");
+
251  return false;
+
252  }
+
253  if (i2s_channel_enable(tx_chan) != ESP_OK) {
+
254  LOGE("i2s_channel_enable %s", "tx");
+
255  return false;
+
256  }
+
257  }
+
258 
+
259  if (cfg.rx_tx_mode == RXTX_MODE || cfg.rx_tx_mode == RX_MODE) {
+
260  if (i2s_channel_init_std_mode(rx_chan, &std_cfg) != ESP_OK) {
+
261  LOGE("i2s_channel_init_std_mode %s", "rx");
+
262  return false;
+
263  }
+
264  if (i2s_channel_enable(rx_chan) != ESP_OK) {
+
265  LOGE("i2s_channel_enable %s", "rx");
+
266  return false;
+
267  }
+
268  }
+
269 
+
270  LOGD("%s - %s", __func__, "started");
+
271  return true;
+
272  }
+
273 
+
274  bool changeSampleRate(I2SConfigESP32V1 &cfg, i2s_chan_handle_t &tx_chan,
+
275  i2s_chan_handle_t &rx_chan) override {
+
276  bool rc = false;
+
277  auto clock_cfg = getClockConfig(cfg);
+
278  if (tx_chan != nullptr) {
+
279  i2s_channel_disable(tx_chan);
+
280  rc = i2s_channel_reconfig_std_clock(tx_chan, &clock_cfg) == ESP_OK;
+
281  i2s_channel_enable(tx_chan);
+
282  }
+
283  if (rx_chan != nullptr) {
+
284  i2s_channel_disable(rx_chan);
+
285  rc = i2s_channel_reconfig_std_clock(rx_chan, &clock_cfg) == ESP_OK;
+
286  i2s_channel_enable(rx_chan);
+
287  }
+
288  return rc;
+
289  }
+
290 
+
291  } i2s;
+
292 
+
293 #ifdef USE_PDM
+
294 
+
295  struct DriverPDM : public DriverCommon {
+
296  i2s_pdm_tx_slot_config_t getTxSlotConfig(I2SConfigESP32V1 &cfg) {
+
297  return I2S_PDM_TX_SLOT_DEFAULT_CONFIG(
+
298  (i2s_data_bit_width_t)cfg.bits_per_sample,
+
299  (i2s_slot_mode_t)cfg.channels);
+
300  }
+
301 
+
302  i2s_chan_config_t getChannelConfig(I2SConfigESP32V1 &cfg) {
+
303  return I2S_CHANNEL_DEFAULT_CONFIG(
+
304  (i2s_port_t)cfg.port_no,
+
305  cfg.is_master ? I2S_ROLE_MASTER : I2S_ROLE_SLAVE);
+
306  }
+
307 
+
308  i2s_pdm_tx_clk_config_t getTxClockConfig(I2SConfigESP32V1 &cfg) {
+
309  return I2S_PDM_TX_CLK_DEFAULT_CONFIG((uint32_t)cfg.sample_rate);
+
310  }
+
311 
+
312  bool startChannels(I2SConfigESP32V1 &cfg, i2s_chan_handle_t &tx_chan,
+
313  i2s_chan_handle_t &rx_chan, int txPin, int rxPin) {
+
314  if (cfg.rx_tx_mode == TX_MODE) {
+
315  i2s_pdm_tx_config_t pdm_tx_cfg = {
+
316  .clk_cfg = getTxClockConfig(cfg),
+
317  .slot_cfg = getTxSlotConfig(cfg),
+
318  .gpio_cfg =
+
319  {
+
320  .clk = (gpio_num_t)cfg.pin_bck,
+
321  .dout = (gpio_num_t)txPin,
+
322  .invert_flags =
+
323  {
+
324  .clk_inv = false,
+
325  },
+
326  },
+
327  };
+
328 
+
329  if (i2s_channel_init_pdm_tx_mode(tx_chan, &pdm_tx_cfg) != ESP_OK) {
+
330  LOGE("i2s_channel_init_pdm_tx_mode %s", "tx");
+
331  return false;
+
332  }
+
333  if (i2s_channel_enable(tx_chan) != ESP_OK) {
+
334  LOGE("i2s_channel_enable %s", "tx");
+
335  return false;
+
336  }
+
337  } else {
+
338  LOGE("Only TX supported for PDM");
+
339  return false;
+
340  }
+
341  return true;
+
342  }
+
343  } pdm;
+
344 
+
345 #endif
+
346 
+
347 #ifdef USE_TDM
+
348  // example at
+
349  // https://github.com/espressif/esp-idf/blob/v5.3-dev/examples/peripherals/i2s/i2s_basic/i2s_tdm/main/i2s_tdm_example_main.c
+
350  struct DriverTDM : public DriverCommon {
+
351  i2s_tdm_slot_config_t getSlotConfig(I2SConfigESP32V1 &cfg) {
+
352  int slots = 0;
+
353  for (int j = 0; j < cfg.channels; j++) {
+
354  slots |= 1 << j;
+
355  }
+
356  return I2S_TDM_MSB_SLOT_DEFAULT_CONFIG(
+
357  (i2s_data_bit_width_t)cfg.bits_per_sample, I2S_SLOT_MODE_STEREO,
+
358  (i2s_tdm_slot_mask_t)slots);
+
359  }
+
360 
+
361  i2s_chan_config_t getChannelConfig(I2SConfigESP32V1 &cfg) {
+
362  return I2S_CHANNEL_DEFAULT_CONFIG(
+
363  (i2s_port_t)cfg.port_no,
+
364  cfg.is_master ? I2S_ROLE_MASTER : I2S_ROLE_SLAVE);
+
365  }
+
366 
+
367  i2s_tdm_clk_config_t getClockConfig(I2SConfigESP32V1 &cfg) {
+
368  return I2S_TDM_CLK_DEFAULT_CONFIG((uint32_t)cfg.sample_rate);
+
369  }
+
370 
+
371  bool startChannels(I2SConfigESP32V1 &cfg, i2s_chan_handle_t &tx_chan,
+
372  i2s_chan_handle_t &rx_chan, int txPin, int rxPin) {
+
373  i2s_tdm_config_t tdm_cfg = {
+
374  .clk_cfg = getClockConfig(cfg),
+
375  .slot_cfg = getSlotConfig(cfg),
+
376  .gpio_cfg =
+
377  {
+
378  .mclk = (gpio_num_t)cfg.pin_mck,
+
379  .bclk = (gpio_num_t)cfg.pin_bck,
+
380  .ws = (gpio_num_t)cfg.pin_ws,
+
381  .dout = (gpio_num_t)txPin,
+
382  .din = (gpio_num_t)rxPin,
+
383  .invert_flags =
+
384  {
+
385  .mclk_inv = false,
+
386  .bclk_inv = false,
+
387  .ws_inv = false,
+
388  },
+
389  },
+
390  };
+
391 
+
392  if (cfg.rx_tx_mode == TX_MODE) {
+
393  if (i2s_channel_init_tdm_mode(tx_chan, &tdm_cfg) != ESP_OK) {
+
394  LOGE("i2s_channel_init_tdm_tx_mode %s", "tx");
+
395  return false;
+
396  }
+
397  }
+
398  if (cfg.rx_tx_mode == RX_MODE) {
+
399  if (i2s_channel_init_tdm_mode(rx_chan, &tdm_cfg) != ESP_OK) {
+
400  LOGE("i2s_channel_init_tdm_tx_mode %s", "rx");
+
401  return false;
+
402  }
+
403  return true;
+
404  }
+
405  return false;
+
406  }
+
407  } tdm;
+
408 
+
409 #endif
+
410 
+
412 
+
414  bool begin(I2SConfigESP32V1 cfg, int txPin, int rxPin) {
+
415  TRACED();
+
416  cfg.logInfo();
+
417  this->cfg = cfg;
+
418  if (cfg.channels <= 0 || cfg.channels > 2) {
+
419  LOGE("invalid channels: %d", cfg.channels);
+
420  return false;
+
421  }
+
422 
+
423  DriverCommon &driver = getDriver(cfg);
+
424  if (!newChannels(cfg, driver)) {
+
425  end();
+
426  return false;
+
427  }
+
428 
+
429  is_started = driver.startChannels(cfg, tx_chan, rx_chan, txPin, rxPin);
+
430  if (!is_started) {
+
431  end();
+
432  LOGE("Channels not started");
+
433  }
+
434  return is_started;
+
435  }
+
436 
+
437  bool newChannels(I2SConfigESP32V1 &cfg, DriverCommon &driver) {
+
438  i2s_chan_config_t chan_cfg = driver.getChannelConfig(cfg);
+
439  switch (cfg.rx_tx_mode) {
+
440  case RX_MODE:
+
441  if (i2s_new_channel(&chan_cfg, NULL, &rx_chan) != ESP_OK) {
+
442  LOGE("i2s_channel");
+
443  return false;
+
444  }
+
445  break;
+
446  case TX_MODE:
+
447  if (i2s_new_channel(&chan_cfg, &tx_chan, NULL) != ESP_OK) {
+
448  LOGE("i2s_channel");
+
449  return false;
+
450  }
+
451  break;
+
452  default:
+
453  if (i2s_new_channel(&chan_cfg, &tx_chan, &rx_chan) != ESP_OK) {
+
454  LOGE("i2s_channel");
+
455  return false;
+
456  }
+
457  }
+
458  return true;
+
459  }
+
460 
+
461  DriverCommon &getDriver(I2SConfigESP32V1 &cfg) {
+
462  switch (cfg.signal_type) {
+
463  case Digital:
+
464  return i2s;
+
465 #ifdef USE_PDM
+
466  case Analog:
+
467  case PDM:
+
468  return pdm;
+
469 #endif
+
470 #ifdef USE_TDM
+
471  case TDM:
+
472  return tdm;
+
473 #endif
+
474  default:
+
475  break;
+
476  }
+
477  LOGE("Unsupported singal_type");
+
478  return i2s;
+
479  }
+
480 };
+
481 
+
482 using I2SDriver = I2SDriverESP32V1;
+
483 
+
484 } // namespace audio_tools
+
485 
+
486 #endif
audio_tools::I2SConfigESP32V1
Configuration for ESP32 i2s for IDF > 5.0.
Definition: I2SConfigESP32V1.h:20
audio_tools::I2SConfigESP32V1::buffer_count
int buffer_count
not used any more
Definition: I2SConfigESP32V1.h:64
audio_tools::I2SConfigESP32V1::rx_tx_mode
RxTxMode rx_tx_mode
public settings
Definition: I2SConfigESP32V1.h:53
@@ -550,7 +551,7 @@
audio_tools::I2SDriverESP32V1::config
I2SConfigESP32V1 config()
provides the actual configuration
Definition: I2SESP32V1.h:103
audio_tools::I2SDriverESP32V1::end
void end()
stops the I2C and unistalls the driver
Definition: I2SESP32V1.h:86
audio_tools::I2SDriverESP32V1::begin
bool begin(RxTxMode mode)
starts the DAC with the default config
Definition: I2SESP32V1.h:50
-
audio_tools::I2SDriverESP32V1::begin
bool begin(I2SConfigESP32V1 cfg, int txPin, int rxPin)
-> protected methods from I2SDriverESP32V1
Definition: I2SESP32V1.h:413
+
audio_tools::I2SDriverESP32V1::begin
bool begin(I2SConfigESP32V1 cfg, int txPin, int rxPin)
-> protected methods from I2SDriverESP32V1
Definition: I2SESP32V1.h:414
audio_tools::I2SDriverESP32V1::writeBytes
size_t writeBytes(const void *src, size_t size_bytes)
writes the data to the I2S interface
Definition: I2SESP32V1.h:106
audio_tools::RxTxMode
RxTxMode
The Microcontroller is the Audio Source (TX_MODE) or Audio Sink (RX_MODE). RXTX_MODE is Source and Si...
Definition: AudioTypes.h:26
audio_tools
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition: AnalogAudioArduino.h:12