From 32d9a3dfcc682928bfeb462080a4a0d3e93fbe3d Mon Sep 17 00:00:00 2001 From: Dirk Helbig Date: Thu, 4 May 2023 15:40:03 +0200 Subject: [PATCH] stm32: added samplerate compensation support embedded: update audio api --- platform/embedded/btstack_audio_embedded.c | 23 +++++++++++++++---- port/stm32-f4discovery-cc256x/Makefile | 2 ++ .../port/btstack_config.h | 1 + 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/platform/embedded/btstack_audio_embedded.c b/platform/embedded/btstack_audio_embedded.c index 9c9ae0baf..6c9233b68 100644 --- a/platform/embedded/btstack_audio_embedded.c +++ b/platform/embedded/btstack_audio_embedded.c @@ -133,9 +133,12 @@ static void driver_timer_handler_source(btstack_timer_source_t * ts){ btstack_run_loop_add_timer(ts); } + +static uint32_t sink_samplerate = 0; + static int btstack_audio_embedded_sink_init( uint8_t channels, - uint32_t samplerate, + uint32_t samplerate, void (*playback)(int16_t * buffer, uint16_t num_samples) ){ btstack_assert(playback != NULL); @@ -148,15 +151,21 @@ static int btstack_audio_embedded_sink_init( #endif playback_callback = playback; - + sink_samplerate = samplerate; hal_audio_sink_init(channels, samplerate, &btstack_audio_audio_played); return 0; } +static uint32_t btstack_audio_embedded_sink_get_samplerate() { + return sink_samplerate; +} + +static uint32_t source_samplerate = 0; + static int btstack_audio_embedded_source_init( uint8_t channels, - uint32_t samplerate, + uint32_t samplerate, void (*recording)(const int16_t * buffer, uint16_t num_samples) ){ if (!recording){ @@ -165,12 +174,16 @@ static int btstack_audio_embedded_source_init( } recording_callback = recording; - + source_samplerate = samplerate; hal_audio_source_init(channels, samplerate, &btstack_audio_audio_recorded); return 0; } +static uint32_t btstack_audio_embedded_source_get_samplerate() { + return source_samplerate; +} + static void btstack_audio_embedded_sink_set_volume(uint8_t volume){ UNUSED(volume); } @@ -261,6 +274,7 @@ static void btstack_audio_embedded_source_close(void){ static const btstack_audio_sink_t btstack_audio_embedded_sink = { .init = &btstack_audio_embedded_sink_init, + .get_samplerate = &btstack_audio_embedded_sink_get_samplerate, .set_volume = &btstack_audio_embedded_sink_set_volume, .start_stream = &btstack_audio_embedded_sink_start_stream, .stop_stream = &btstack_audio_embedded_sink_stop_stream, @@ -269,6 +283,7 @@ static const btstack_audio_sink_t btstack_audio_embedded_sink = { static const btstack_audio_source_t btstack_audio_embedded_source = { .init = &btstack_audio_embedded_source_init, + .get_samplerate = &btstack_audio_embedded_source_get_samplerate, .set_gain = &btstack_audio_embedded_source_set_gain, .start_stream = &btstack_audio_embedded_source_start_stream, .stop_stream = &btstack_audio_embedded_source_stop_stream, diff --git a/port/stm32-f4discovery-cc256x/Makefile b/port/stm32-f4discovery-cc256x/Makefile index cdb71ca6e..b08210192 100644 --- a/port/stm32-f4discovery-cc256x/Makefile +++ b/port/stm32-f4discovery-cc256x/Makefile @@ -71,6 +71,7 @@ ${BTSTACK_ROOT}/src/ble/le_device_db_memory.c \ ${BTSTACK_ROOT}/src/ble/le_device_db_tlv.c \ ${BTSTACK_ROOT}/src/ble/sm.c \ ${BTSTACK_ROOT}/src/btstack_audio.c \ +${BTSTACK_ROOT}/src/btstack_sample_rate_compensation.c \ ${BTSTACK_ROOT}/src/btstack_crypto.c \ ${BTSTACK_ROOT}/src/btstack_hid_parser.c \ ${BTSTACK_ROOT}/src/btstack_linked_list.c \ @@ -304,6 +305,7 @@ LDSCRIPT = STM32F407VGTx_FLASH.ld LIBS = -lPDMFilter_CM4_GCC -lc -lm -lnosys LIBDIR = -Lpdm LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections +#LDFLAGS += -u_printf_float # default action: build all EXAMPLES = \ diff --git a/port/stm32-f4discovery-cc256x/port/btstack_config.h b/port/stm32-f4discovery-cc256x/port/btstack_config.h index aed6a47ad..6043b02a7 100644 --- a/port/stm32-f4discovery-cc256x/port/btstack_config.h +++ b/port/stm32-f4discovery-cc256x/port/btstack_config.h @@ -12,6 +12,7 @@ #define HAVE_EMBEDDED_TIME_MS #define HAVE_HAL_AUDIO #define HAVE_HAL_AUDIO_SINK_STEREO_ONLY +#define HAVE_BTSTACK_AUDIO_EFFECTIVE_SAMPLERATE // BTstack features that can be enabled #define ENABLE_BLE