From 7fcdfe5b5c795da19d7d8db03eacf7d4a811d709 Mon Sep 17 00:00:00 2001 From: 3djc <5167938+3djc@users.noreply.github.com> Date: Mon, 16 Feb 2026 09:39:13 +0100 Subject: [PATCH] feat(radio): bluetooth audio KCX mod support for TX16S MK3 (#7056) --- radio/src/boards/rm-h750/audio_driver.cpp | 2 +- radio/src/drivers/kcx_btaudio.cpp | 6 +++++- radio/src/targets/tx16smk3/CMakeLists.txt | 15 +++++++++++++-- radio/src/targets/tx16smk3/hal.h | 6 ++++++ 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/radio/src/boards/rm-h750/audio_driver.cpp b/radio/src/boards/rm-h750/audio_driver.cpp index ee83c1fc8..732288da7 100644 --- a/radio/src/boards/rm-h750/audio_driver.cpp +++ b/radio/src/boards/rm-h750/audio_driver.cpp @@ -163,7 +163,7 @@ static void audio_update_dma_buffer(uint8_t tc) bool audioHeadphoneDetect() { #if defined(KCX_BTAUDIO) - return gpio_read(AUDIO_HP_DETECT_PIN) || gpio_read(BTAUDIO_LINKED_GPIO); + return gpio_read(AUDIO_HP_DETECT_PIN) || btAudioLinked(); #else return gpio_read(AUDIO_HP_DETECT_PIN); #endif diff --git a/radio/src/drivers/kcx_btaudio.cpp b/radio/src/drivers/kcx_btaudio.cpp index 4c2dc3075..e848bfe56 100644 --- a/radio/src/drivers/kcx_btaudio.cpp +++ b/radio/src/drivers/kcx_btaudio.cpp @@ -26,6 +26,10 @@ void btAudioInit() { +#if defined(BTAUDIO_POWER_GPIO) + gpio_init(BTAUDIO_POWER_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW); + gpio_set(BTAUDIO_POWER_GPIO); +#endif gpio_init(BTAUDIO_LINKED_GPIO, GPIO_IN, GPIO_PIN_SPEED_LOW); gpio_init(BTAUDIO_CONNECT_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW); gpio_set(BTAUDIO_CONNECT_GPIO); @@ -33,7 +37,7 @@ void btAudioInit() bool btAudioLinked() { - return gpio_read(BTAUDIO_LINKED_GPIO); + return gpio_read(BTAUDIO_LINKED_GPIO) != 0; } void btAudioConnect() diff --git a/radio/src/targets/tx16smk3/CMakeLists.txt b/radio/src/targets/tx16smk3/CMakeLists.txt index 61080fc12..8c3e21442 100644 --- a/radio/src/targets/tx16smk3/CMakeLists.txt +++ b/radio/src/targets/tx16smk3/CMakeLists.txt @@ -8,6 +8,7 @@ option(MODULE_SIZE_STD "Standard size TX Module" ON) option(LUA_MIXER "Enable LUA mixer/model scripts support" ON) option(DISK_CACHE "Enable SD card disk cache" ON) option(INTERNAL_GPS "Support for internal GPS" ON) +option(KCX_BTAUDIO "KCX_BTAUDIO audio emitter installed" OFF) set(FIRMWARE_QSPI YES) set(FIRMWARE_FORMAT_UF2 YES) @@ -71,8 +72,11 @@ set(SOFTWARE_KEYBOARD ON) set(FUNCTION_SWITCHES ON) set(USB_CHARGER YES) set(AUX_SERIAL YES) -set(AUX2_SERIAL YES) - +if(KCX_BTAUDIO) + set(AUX2_SERIAL NO) +else() + set(AUX2_SERIAL YES) +endif() add_definitions( -DSTM32H750XBTx -DSTM32H750xx -DSDRAM -DCCMRAM @@ -208,5 +212,12 @@ if (MULTIMODULE) ) endif() +if(KCX_BTAUDIO) + set(SRC ${SRC} + drivers/kcx_btaudio.cpp + ) + add_definitions(-DKCX_BTAUDIO) +endif() + # Make malloc() thread-safe add_definitions(-DTHREADSAFE_MALLOC) diff --git a/radio/src/targets/tx16smk3/hal.h b/radio/src/targets/tx16smk3/hal.h index 9f0797d3e..0178280a0 100644 --- a/radio/src/targets/tx16smk3/hal.h +++ b/radio/src/targets/tx16smk3/hal.h @@ -541,6 +541,7 @@ USART6: INTMODULE_USART #define AUX_SERIAL_DMA_RX_CHANNEL LL_DMAMUX1_REQ_UART5_RX #define AUX_SERIAL_PWR_GPIO GPIO_PIN(GPIOB, 7) // PB.07 +#if defined(AUX2_SERIAL) #define AUX2_SERIAL_TX_GPIO GPIO_PIN(GPIOB, 10) // PB.10 #define AUX2_SERIAL_RX_GPIO GPIO_PIN(GPIOB, 11) // PB.11 #define AUX2_SERIAL_USART USART3 @@ -553,6 +554,11 @@ USART6: INTMODULE_USART #define AUX2_SERIAL_DMA_RX_STREAM LL_DMA_STREAM_6 #define AUX2_SERIAL_DMA_RX_CHANNEL LL_DMAMUX1_REQ_USART3_RX #define AUX2_SERIAL_PWR_GPIO GPIO_PIN(GPIOC, 13) // PC.13 +#elif defined(KCX_BTAUDIO) +#define BTAUDIO_POWER_GPIO GPIO_PIN(GPIOC, 13) +#define BTAUDIO_LINKED_GPIO GPIO_PIN(GPIOB, 11) +#define BTAUDIO_CONNECT_GPIO GPIO_PIN(GPIOB, 10) +#endif // Touch #define TOUCH_I2C_BUS I2C_Bus_1