feat(tx15): support for KCX BT audio (#6777)
This commit is contained in:
@@ -1,3 +1,24 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "drivers/tas2505.h"
|
||||
|
||||
#include "stm32_dma.h"
|
||||
@@ -141,11 +162,20 @@ 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);
|
||||
#else
|
||||
return gpio_read(AUDIO_HP_DETECT_PIN);
|
||||
#endif
|
||||
}
|
||||
|
||||
void audioSetVolume(uint8_t volume)
|
||||
{
|
||||
#if defined(KCX_BTAUDIO)
|
||||
// KCX need a volume boost
|
||||
if (btAudioLinked())
|
||||
volume = volume + (volume >> 2);
|
||||
#endif
|
||||
tas2505_set_volume(&_tas2505, volume * 9 / 10, audioHeadphoneDetect()); // TX15 HP cannot handle the full power of TAS2505
|
||||
}
|
||||
|
||||
|
||||
@@ -135,6 +135,10 @@ void boardInit()
|
||||
// enable interrupts
|
||||
__enable_irq();
|
||||
|
||||
#if defined(KCX_BTAUDIO)
|
||||
btAudioInit();
|
||||
#endif
|
||||
|
||||
ledInit();
|
||||
boardInitModulePorts();
|
||||
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "hal.h"
|
||||
#include "stm32_gpio_driver.h"
|
||||
#include "stm32_gpio.h"
|
||||
#include "os/sleep.h"
|
||||
|
||||
void btAudioInit()
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
bool btAudioLinked()
|
||||
{
|
||||
return gpio_read(BTAUDIO_LINKED_GPIO);
|
||||
}
|
||||
|
||||
void btAudioConnect()
|
||||
{
|
||||
gpio_clear(BTAUDIO_CONNECT_GPIO);
|
||||
sleep_ms(100);
|
||||
gpio_set(BTAUDIO_CONNECT_GPIO);
|
||||
}
|
||||
@@ -255,6 +255,17 @@ static SetupLineDef soundPageSetupLines[] = {
|
||||
GET_SET_DEFAULT(g_eeGeneral.backgroundVolume)))->setPos(x, y);
|
||||
}
|
||||
},
|
||||
#if defined(KCX_BTAUDIO)
|
||||
{
|
||||
STR_DEF(STR_BTAUDIO),
|
||||
[](Window* parent, coord_t x, coord_t y) {
|
||||
new TextButton(parent, {x, y, 0, 0}, STR_PAIRING, [=]() {
|
||||
btAudioConnect();
|
||||
return 0;
|
||||
});
|
||||
}
|
||||
},
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
@@ -36,3 +36,8 @@ bool audioHeadphoneDetect();
|
||||
void audioSetVolume(uint8_t volume);
|
||||
void audioConsumeCurrentBuffer();
|
||||
|
||||
#if defined(KCX_BTAUDIO)
|
||||
void btAudioInit();
|
||||
bool btAudioLinked();
|
||||
void btAudioConnect();
|
||||
#endif
|
||||
|
||||
@@ -29,6 +29,10 @@ bool audioHeadphoneDetect()
|
||||
}
|
||||
#endif
|
||||
|
||||
void btAudioInit() {}
|
||||
bool btAudioLinked() { return false; }
|
||||
void btAudioConnect() {}
|
||||
|
||||
#if !defined(SOFTWARE_VOLUME)
|
||||
static int _simu_volume = 0;
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@ 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(BLUETOOTH "FrSky BT module support" OFF)
|
||||
option(FLYSKY_GIMBAL "Serial gimbal support" ON)
|
||||
option(FLYSKY_GIMBAL "Serial gimbal support" OFF)
|
||||
option(KCX_BTAUDIO "KCX_BTAUDIO audio emitter installed" OFF)
|
||||
|
||||
set(FIRMWARE_QSPI YES)
|
||||
set(FIRMWARE_FORMAT_UF2 YES)
|
||||
@@ -32,6 +33,9 @@ set(FUNCTION_SWITCHES_WITH_RGB YES)
|
||||
# BT and serial gimbal share same UART
|
||||
if(BLUETOOTH)
|
||||
set(FLYSKY_GIMBAL OFF)
|
||||
set(KCX_BTAUDIO OFF)
|
||||
elseif(KCX_BTAUDIO)
|
||||
set(FLYSKY_GIMBAL OFF)
|
||||
endif()
|
||||
|
||||
#option(STICK_DEAD_ZONE "Enable sticks dead zone" YES)
|
||||
@@ -150,6 +154,13 @@ if(BLUETOOTH)
|
||||
)
|
||||
endif()
|
||||
|
||||
if(KCX_BTAUDIO)
|
||||
set(BOARD_COMMON_SRC ${BOARD_COMMON_SRC}
|
||||
drivers/kcx_btaudio.cpp
|
||||
)
|
||||
add_definitions(-DKCX_BTAUDIO)
|
||||
endif()
|
||||
|
||||
# Bootloader board library
|
||||
add_library(board_bl OBJECT EXCLUDE_FROM_ALL
|
||||
${BOARD_COMMON_SRC}
|
||||
|
||||
@@ -504,6 +504,9 @@ TIM17: ROTARY_ENCODER_TIMER
|
||||
#define BT_TX_GPIO GPIO_PIN(GPIOB, 9)
|
||||
#define BT_RX_GPIO GPIO_PIN(GPIOB, 8)
|
||||
#define BT_EN_GPIO GPIO_PIN(GPIOH, 11)
|
||||
#elif defined(KCX_BTAUDIO)
|
||||
#define BTAUDIO_LINKED_GPIO GPIO_PIN(GPIOH, 11)
|
||||
#define BTAUDIO_CONNECT_GPIO GPIO_PIN(GPIOB, 9)
|
||||
#endif
|
||||
|
||||
#if defined(FLYSKY_GIMBAL)
|
||||
|
||||
@@ -1014,6 +1014,8 @@
|
||||
#define TR_RECEIVER_RESET "是否复位接收机?"
|
||||
#define TR_SHARE "分享"
|
||||
#define TR_BIND "对频"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("注册", "注册"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("测距", "测距"))
|
||||
#define TR_RANGE_TEST "距离测试(低功率)"
|
||||
|
||||
@@ -1012,6 +1012,8 @@
|
||||
#define TR_RECEIVER_RESET "Resetovat přijímač?"
|
||||
#define TR_SHARE "Sdílet"
|
||||
#define TR_BIND "Párovat"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Registrovat"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Rng", "Dosah"))
|
||||
#define TR_RANGE_TEST "Test dosahu"
|
||||
|
||||
@@ -1019,6 +1019,8 @@
|
||||
#define TR_RECEIVER_RESET "Nulstil modtager?"
|
||||
#define TR_SHARE "Del"
|
||||
#define TR_BIND "Tilslut"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Registrer"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Ræk", "Rækkevidde"))
|
||||
#define TR_RANGE_TEST "Test af rækkevidde"
|
||||
|
||||
@@ -1008,6 +1008,8 @@
|
||||
#define TR_RECEIVER_RESET "Empfänger resetten?"
|
||||
#define TR_SHARE "Share"
|
||||
#define TR_BIND "Binden"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Register"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Rng", "Reichweite"))
|
||||
#define TR_RANGE_TEST "Reichweitentest"
|
||||
|
||||
@@ -1015,6 +1015,8 @@
|
||||
#define TR_RECEIVER_RESET "Reset receiver?"
|
||||
#define TR_SHARE "Share"
|
||||
#define TR_BIND "Bind"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Register"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Rng", "Range"))
|
||||
#define TR_RANGE_TEST "Range Test"
|
||||
|
||||
@@ -1008,6 +1008,8 @@
|
||||
#define TR_RECEIVER_RESET "Reset receptor?"
|
||||
#define TR_SHARE "Compartido"
|
||||
#define TR_BIND "Emparejar"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Registrar"))
|
||||
#define TR_MODULE_RANGE "[Lim.]"
|
||||
#define TR_RANGE_TEST "Range test"
|
||||
|
||||
@@ -1008,6 +1008,8 @@
|
||||
#define TR_RECEIVER_RESET "Reset receiver?"
|
||||
#define TR_SHARE "Share"
|
||||
#define TR_BIND "Bind"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Register"))
|
||||
#define TR_MODULE_RANGE "[Range]"
|
||||
#define TR_RANGE_TEST "Range test"
|
||||
|
||||
@@ -1012,6 +1012,8 @@
|
||||
#define TR_RECEIVER_RESET "Réinit. récept.?"
|
||||
#define TR_SHARE "Partager"
|
||||
#define TR_BIND "Bind"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Enr", "Enregistr."))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Prt", "Port."))
|
||||
#define TR_RANGE_TEST "Test de portée"
|
||||
|
||||
@@ -1017,6 +1017,8 @@
|
||||
#define TR_RECEIVER_RESET "? איפוס מקלט"
|
||||
#define TR_SHARE "שיתוף"
|
||||
#define TR_BIND "צימוד"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Register"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Rng", "בדיקת טווח קליטה"))
|
||||
#define TR_RANGE_TEST "בדיקת טווח"
|
||||
|
||||
@@ -1014,6 +1014,8 @@
|
||||
#define TR_RECEIVER_RESET "Resetto RX?"
|
||||
#define TR_SHARE "Condividere"
|
||||
#define TR_BIND "Bind"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Registrare"))
|
||||
#define TR_MODULE_RANGE TR("[Rng]","[Range]")
|
||||
#define TR_RANGE_TEST "Test del link radio a bassa potenza"
|
||||
|
||||
@@ -1013,6 +1013,8 @@
|
||||
#define TR_RECEIVER_RESET "受信機をリセットしますか?"
|
||||
#define TR_SHARE "共有"
|
||||
#define TR_BIND "Bind"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "登録"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Rng", "受信強度"))
|
||||
#define TR_RANGE_TEST "受信強度テスト"
|
||||
|
||||
@@ -1060,6 +1060,8 @@
|
||||
#define TR_RECEIVER_RESET "수신기를 초기화할까요?"
|
||||
#define TR_SHARE "공유"
|
||||
#define TR_BIND "바인딩"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("등록", "등록"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("범위", "범위 테스트"))
|
||||
#define TR_RANGE_TEST "범위 테스트"
|
||||
|
||||
@@ -1010,6 +1010,8 @@
|
||||
#define TR_RECEIVER_RESET "Reset receiver?"
|
||||
#define TR_SHARE "Share"
|
||||
#define TR_BIND "Bind"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Register"))
|
||||
#define TR_MODULE_RANGE TR("[Rng]", "[Range]")
|
||||
#define TR_RANGE_TEST "Range test"
|
||||
|
||||
@@ -1007,6 +1007,8 @@
|
||||
#define TR_RECEIVER_RESET "Reset receiver?"
|
||||
#define TR_SHARE "Share"
|
||||
#define TR_BIND "Bind"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Register"))
|
||||
#define TR_MODULE_RANGE TR("[Zas]","Zasięg")
|
||||
#define TR_RANGE_TEST "Test zasięgu"
|
||||
|
||||
@@ -1015,6 +1015,8 @@
|
||||
#define TR_RECEIVER_RESET "Reset receiver?"
|
||||
#define TR_SHARE "Share"
|
||||
#define TR_BIND "Bind"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Register"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Rng", "Range"))
|
||||
#define TR_RANGE_TEST "Range Test"
|
||||
|
||||
@@ -1016,6 +1016,8 @@
|
||||
#define TR_RECEIVER_RESET "Сбросить приемник?"
|
||||
#define TR_SHARE "Поделиться"
|
||||
#define TR_BIND "Bind"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Рег", "Регистр"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Диап", "Диапазон"))
|
||||
#define TR_RANGE_TEST "Тест диапазона"
|
||||
|
||||
@@ -1015,6 +1015,8 @@
|
||||
#define TR_RECEIVER_RESET "Återställ mottagare?"
|
||||
#define TR_SHARE "Dela"
|
||||
#define TR_BIND "Parkopplar"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Reg", "Registrera"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Tst", "Testa"))
|
||||
#define TR_RANGE_TEST "Test av radiolänkkvalitet (begränsad signalstyrka)"
|
||||
|
||||
@@ -1011,6 +1011,8 @@
|
||||
#define TR_RECEIVER_RESET "是否重啟接收機?"
|
||||
#define TR_SHARE "分享"
|
||||
#define TR_BIND "對頻"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("註冊", "註冊"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("測距", "測距"))
|
||||
#define TR_RANGE_TEST "距離測試(低功率)"
|
||||
|
||||
@@ -1015,6 +1015,8 @@
|
||||
#define TR_RECEIVER_RESET "Скинути приймач?"
|
||||
#define TR_SHARE "Поділитися"
|
||||
#define TR_BIND "Прив'язати"
|
||||
#define TR_PAIRING "Pairing"
|
||||
#define TR_BTAUDIO "BT Audio"
|
||||
#define TR_REGISTER BUTTON(TR("Регі.", "Регістр"))
|
||||
#define TR_MODULE_RANGE BUTTON(TR("Діап.", "Діапазон"))
|
||||
#define TR_RANGE_TEST "Тест діапазону"
|
||||
|
||||
@@ -429,6 +429,8 @@
|
||||
#define STR_BEEPCTR currentLangStrings->STR_BEEPCTR
|
||||
#define STR_BG_VOLUME currentLangStrings->STR_BG_VOLUME
|
||||
#define STR_BIND currentLangStrings->STR_BIND
|
||||
#define STR_PAIRING currentLangStrings->STR_PAIRING
|
||||
#define STR_BTAUDIO currentLangStrings->STR_BTAUDIO
|
||||
#define STR_BINDING_CH1_8_TELEM_OFF currentLangStrings->STR_BINDING_CH1_8_TELEM_OFF
|
||||
#define STR_BINDING_CH1_8_TELEM_ON currentLangStrings->STR_BINDING_CH1_8_TELEM_ON
|
||||
#define STR_BINDING_CH9_16_TELEM_OFF currentLangStrings->STR_BINDING_CH9_16_TELEM_OFF
|
||||
|
||||
@@ -428,6 +428,8 @@ STR(BEEPCOUNTDOWN)
|
||||
STR(BEEPCTR)
|
||||
STR(BG_VOLUME)
|
||||
STR(BIND)
|
||||
STR(PAIRING)
|
||||
STR(BTAUDIO)
|
||||
STR(BINDING_CH1_8_TELEM_OFF)
|
||||
STR(BINDING_CH1_8_TELEM_ON)
|
||||
STR(BINDING_CH9_16_TELEM_OFF)
|
||||
|
||||
Reference in New Issue
Block a user