From 559544deb6b131a90b60d63399947b2a43fb1bde Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Mon, 27 Dec 2021 23:44:44 +0100 Subject: [PATCH] esp32: generalize i2s queue handling --- .../components/btstack/btstack_audio_esp32.c | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/port/esp32/components/btstack/btstack_audio_esp32.c b/port/esp32/components/btstack/btstack_audio_esp32.c index bec75bce5..70f3a28f1 100644 --- a/port/esp32/components/btstack/btstack_audio_esp32.c +++ b/port/esp32/components/btstack/btstack_audio_esp32.c @@ -53,6 +53,7 @@ #include "freertos/FreeRTOS.h" #include "freertos/queue.h" #include "driver/i2s.h" +#include #ifdef CONFIG_ESP_LYRAT_V4_3_BOARD #include "driver/i2c.h" @@ -122,21 +123,21 @@ void btstack_audio_esp32_es8388_init(void){ static void btstack_audio_esp32_sink_fill_buffer(void){ size_t bytes_written; uint8_t buffer[DMA_BUFFER_SAMPLES * BYTES_PER_SAMPLE_STEREO]; - (*btstack_audio_esp32_sink_playback_callback)((int16_t*)buffer, DMA_BUFFER_SAMPLES); + if ((btstack_audio_esp32_sink_playback_callback != NULL) && (btstack_audio_esp32_sink_state == BTSTACK_AUDIO_ESP32_STREAMING)){ + (*btstack_audio_esp32_sink_playback_callback)((int16_t *) buffer, DMA_BUFFER_SAMPLES); + } else { + memset(buffer, 0, sizeof(buffer)); + } i2s_write(i2s_num, buffer, DMA_BUFFER_SAMPLES * btstack_audio_esp32_sink_bytes_per_sample, &bytes_written, portMAX_DELAY); } static void btstack_audio_esp32_driver_timer_handler(btstack_timer_source_t * ts){ - - // playback buffer ready to fill - if (btstack_audio_esp32_sink_playback_callback){ - // read from i2s event queue - i2s_event_t i2s_event; - if( xQueueReceive( btstack_audio_esp32_i2s_event_queue, &i2s_event, 0) ){ - // fill buffer when DMA buffer was sent - if (i2s_event.type == I2S_EVENT_TX_DONE){ - btstack_audio_esp32_sink_fill_buffer(); - } + // read from i2s event queue + i2s_event_t i2s_event; + if( xQueueReceive( btstack_audio_esp32_i2s_event_queue, &i2s_event, 0) ){ + // fill buffer when DMA buffer was sent + if (i2s_event.type == I2S_EVENT_TX_DONE){ + btstack_audio_esp32_sink_fill_buffer(); } }