From 22f35c6d27a17b21c03f544410497f4f9ab16cc8 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 15 Feb 2019 18:51:40 +0100 Subject: [PATCH] BT fixes on X-LiteS --- radio/src/bluetooth.h | 6 ++-- radio/src/dataconstants.h | 4 +-- radio/src/gui/128x64/model_setup.cpp | 6 ++-- radio/src/gui/128x64/radio_hardware.cpp | 7 +++-- radio/src/gui/gui_common_arm.cpp | 14 +++++++-- radio/src/opentx.cpp | 4 --- radio/src/opentx.h | 14 ++++----- .../common/arm/stm32/bluetooth_driver.cpp | 30 +++++++------------ .../targets/common/arm/stm32/usb_driver.cpp | 2 +- radio/src/targets/taranis/board.cpp | 8 ++--- radio/src/targets/taranis/hal.h | 6 ++-- 11 files changed, 49 insertions(+), 52 deletions(-) diff --git a/radio/src/bluetooth.h b/radio/src/bluetooth.h index f0201e431..7eedc9a68 100644 --- a/radio/src/bluetooth.h +++ b/radio/src/bluetooth.h @@ -45,10 +45,10 @@ enum BluetoothStates { #define LEN_BLUETOOTH_ADDR 16 #if (defined(PCBX7) || defined(PCBXLITE)) && !defined(SIMU) -extern uint8_t btChipPresent; -#define IS_BLUETOOTH_CHIP_PRESENT() (btChipPresent) + extern volatile uint8_t btChipPresent; + #define IS_BLUETOOTH_CHIP_PRESENT() (btChipPresent) #else -#define IS_BLUETOOTH_CHIP_PRESENT() (true) + #define IS_BLUETOOTH_CHIP_PRESENT() (true) #endif extern volatile uint8_t bluetoothState; diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 0195a8394..5eb277c9a 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -205,9 +205,7 @@ enum BeeperMode { }; #endif -#if defined(PCBXLITES) - #define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE -#elif defined(BLUETOOTH) +#if defined(BLUETOOTH) #define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_BLUETOOTH #elif defined(PCBX7) || defined(PCBXLITE) #define TRAINER_MODE_MAX() TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 90fd60553..94afe04d2 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -122,9 +122,9 @@ enum MenuModelSetupItems { #if defined(PCBX7) ITEM_MODEL_TRAINER_LABEL, ITEM_MODEL_TRAINER_MODE, -#if defined(BLUETOOTH) - ITEM_MODEL_TRAINER_BLUETOOTH, -#endif + #if defined(BLUETOOTH) + ITEM_MODEL_TRAINER_BLUETOOTH, + #endif ITEM_MODEL_TRAINER_CHANNELS, ITEM_MODEL_TRAINER_PARAMS, #elif defined(PCBXLITE) diff --git a/radio/src/gui/128x64/radio_hardware.cpp b/radio/src/gui/128x64/radio_hardware.cpp index 3785ac758..4b0ad5da7 100644 --- a/radio/src/gui/128x64/radio_hardware.cpp +++ b/radio/src/gui/128x64/radio_hardware.cpp @@ -136,12 +136,13 @@ enum MenuRadioHardwareItems { #endif #if defined(PCBTARANIS) -#define BLUETOOTH_ROWS uint8_t(IS_BLUETOOTH_CHIP_PRESENT() ? 0 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_TELEMETRY ? -1 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0), + #define BLUETOOTH_ROWS uint8_t(IS_BLUETOOTH_CHIP_PRESENT() ? 0 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_TELEMETRY ? -1 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0), #elif defined(BLUETOOTH) -#define BLUETOOTH_ROWS 0, uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0), + #define BLUETOOTH_ROWS 0, uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0), #else -#define BLUETOOTH_ROWS + #define BLUETOOTH_ROWS #endif + #if defined(PCBXLITES) #define SWITCH_TYPE_MAX(sw) (sw >= MIXSRC_SE-MIXSRC_FIRST_SWITCH ? SWITCH_2POS : SWITCH_3POS) #elif defined(PCBXLITE) diff --git a/radio/src/gui/gui_common_arm.cpp b/radio/src/gui/gui_common_arm.cpp index f08aa02c5..d34fb59c8 100644 --- a/radio/src/gui/gui_common_arm.cpp +++ b/radio/src/gui/gui_common_arm.cpp @@ -655,13 +655,23 @@ bool isTrainerModeAvailable(int mode) else return true; } +#elif defined(PCBXLITES) +bool isTrainerModeAvailable(int mode) +{ + if (mode == TRAINER_MODE_MASTER_TRAINER_JACK || mode == TRAINER_MODE_SLAVE) + return true; + else if (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER && (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH)) + return true; + else + return false; +} #elif defined(PCBXLITE) bool isTrainerModeAvailable(int mode) { if (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER && (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH)) - return true; + return true; else - return false; + return false; } #endif diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 477c0650e..9850f7f39 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1933,10 +1933,6 @@ int main() boardInit(); -#if defined(PCBX7) - bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE); //BT is turn on for a brief period to differentiate X7 and X7S -#endif - #if defined(PCBHORUS) loadFonts(); #endif diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 20d8f6106..349fa1d6a 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -190,13 +190,13 @@ #define IS_FAI_FORBIDDEN(idx) (IS_FAI_ENABLED() && isFaiForbidden(idx)) #if defined(BLUETOOTH) -#if defined(X9E) && !defined(USEHORUSBT) - #define IS_BLUETOOTH_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH) - #define IS_SLAVE_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE) -#else - #define IS_BLUETOOTH_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH || g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH) - #define IS_SLAVE_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE || g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH) -#endif + #if defined(X9E) && !defined(USEHORUSBT) + #define IS_BLUETOOTH_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH) + #define IS_SLAVE_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE) + #else + #define IS_BLUETOOTH_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH || g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH) + #define IS_SLAVE_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE || g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH) + #endif #else #define IS_BLUETOOTH_TRAINER() false #define IS_SLAVE_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE) diff --git a/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp b/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp index 985b7b6f0..42973e7d4 100644 --- a/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp +++ b/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp @@ -24,7 +24,7 @@ Fifo btTxFifo; Fifo btRxFifo; #if defined(PCBX7) || defined(PCBXLITE) -uint8_t btChipPresent = 0; +volatile uint8_t btChipPresent = 0; #endif enum BluetoothWriteState @@ -40,15 +40,11 @@ volatile uint8_t bluetoothWriteState = BLUETOOTH_WRITE_IDLE; void bluetoothInit(uint32_t baudrate) { GPIO_InitTypeDef GPIO_InitStructure; - USART_InitTypeDef USART_InitStructure; - - USART_DeInit(BT_USART); - GPIO_InitStructure.GPIO_Pin = BT_EN_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(BT_EN_GPIO, &GPIO_InitStructure); #if defined(BT_BRTS_GPIO_PIN) @@ -63,32 +59,28 @@ void bluetoothInit(uint32_t baudrate) GPIO_Init(BT_BCTS_GPIO, &GPIO_InitStructure); #endif - GPIO_InitStructure.GPIO_Pin = BT_TX_GPIO_PIN|BT_RX_GPIO_PIN; + GPIO_PinAFConfig(BT_GPIO_TXRX, BT_TX_GPIO_PinSource, BT_GPIO_AF); + GPIO_PinAFConfig(BT_GPIO_TXRX, BT_RX_GPIO_PinSource, BT_GPIO_AF); + + GPIO_InitStructure.GPIO_Pin = BT_TX_GPIO_PIN | BT_RX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(BT_GPIO_TXRX, &GPIO_InitStructure); - GPIO_PinAFConfig(BT_GPIO_TXRX, BT_TX_GPIO_PinSource, BT_GPIO_AF); - GPIO_PinAFConfig(BT_GPIO_TXRX, BT_RX_GPIO_PinSource, BT_GPIO_AF); - USART_DeInit(BT_USART); + USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = baudrate; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; - USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(BT_USART, &USART_InitStructure); - USART_Cmd(BT_USART, ENABLE); - USART_ITConfig(BT_USART, USART_IT_RXNE, ENABLE); - NVIC_InitTypeDef NVIC_InitStructure; - NVIC_InitStructure.NVIC_IRQChannel = BT_USART_IRQn; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 8; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_Init(&NVIC_InitStructure); + USART_ITConfig(BT_USART, USART_IT_RXNE, ENABLE); + NVIC_SetPriority(BT_USART_IRQn, 6); + NVIC_EnableIRQ(BT_USART_IRQn); btRxFifo.clear(); btTxFifo.clear(); diff --git a/radio/src/targets/common/arm/stm32/usb_driver.cpp b/radio/src/targets/common/arm/stm32/usb_driver.cpp index 7b4aaf530..e47774623 100644 --- a/radio/src/targets/common/arm/stm32/usb_driver.cpp +++ b/radio/src/targets/common/arm/stm32/usb_driver.cpp @@ -44,7 +44,7 @@ int getSelectedUsbMode() void setSelectedUsbMode(int mode) { - selectedUsbMode = usbMode (mode); + selectedUsbMode = usbMode(mode); } int usbPlugged() diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index 7b029daf8..26c963ec9 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -165,6 +165,10 @@ void boardInit() EXTMODULE_RCC_APB2Periph | HEARTBEAT_RCC_APB2Periph | BT_RCC_APB2Periph, ENABLE); +#if defined(BLUETOOTH) + bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE); +#endif + #if !defined(PCBX9E) // some X9E boards need that the pwrInit() is moved a little bit later pwrInit(); @@ -204,10 +208,6 @@ void boardInit() hapticInit(); #endif -#if defined(BLUETOOTH) - bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE); -#endif - #if defined(DEBUG) DBGMCU_APB1PeriphConfig(DBGMCU_IWDG_STOP|DBGMCU_TIM1_STOP|DBGMCU_TIM2_STOP|DBGMCU_TIM3_STOP|DBGMCU_TIM6_STOP|DBGMCU_TIM8_STOP|DBGMCU_TIM10_STOP|DBGMCU_TIM13_STOP|DBGMCU_TIM14_STOP, ENABLE); #endif diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index d203c168f..58596e6f2 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -1178,7 +1178,7 @@ #define BT_RX_GPIO_PinSource GPIO_PinSource9 #define BT_USART_IRQHandler USART6_IRQHandler #elif defined(PCBX7) || defined(PCBXLITE) - #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_DMA1) + #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE) // RCC_AHB1Periph_DMA1 #define BT_RCC_APB1Periph RCC_APB1Periph_USART3 #define BT_RCC_APB2Periph 0 #define BT_EN_GPIO GPIOE @@ -1196,8 +1196,8 @@ #define BT_USART USART3 #define BT_USART_IRQHandler USART3_IRQHandler #define BT_USART_IRQn USART3_IRQn - #define BT_DMA_Stream_RX DMA1_Stream1 - #define BT_DMA_Channel_RX DMA_Channel_4 + // #define BT_DMA_Stream_RX DMA1_Stream1 + // #define BT_DMA_Channel_RX DMA_Channel_4 #else #define BT_RCC_AHB1Periph 0 #define BT_RCC_APB1Periph 0