From a95df473843069ff28d4a3dbcaf35ba36ceed566 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 14 Dec 2020 19:41:14 +0100 Subject: [PATCH 1/3] Fixes #8159 Still not tested, but it doesn't reboot anymore --- radio/src/targets/common/arm/stm32/aux_serial_driver.cpp | 2 +- radio/src/trainer.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp index d88c32610..5c8f1e97f 100644 --- a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp @@ -128,7 +128,7 @@ void auxSerialInit(unsigned int mode, unsigned int protocol) break; case UART_MODE_SBUS_TRAINER: - auxSerialSetup(SBUS_BAUDRATE, false, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b + auxSerialSetup(SBUS_BAUDRATE, true, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b AUX_SERIAL_POWER_ON(); break; diff --git a/radio/src/trainer.cpp b/radio/src/trainer.cpp index 6c6bc7b79..893d42b67 100644 --- a/radio/src/trainer.cpp +++ b/radio/src/trainer.cpp @@ -140,15 +140,19 @@ void checkTrainerSettings() if (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER) auxSerialSbusInit(); else + init_trainer_capture(); + break; #endif #if defined(AUX2_SERIAL) if (g_eeGeneral.aux2SerialMode == UART_MODE_SBUS_TRAINER) aux2SerialSbusInit(); else -#endif init_trainer_capture(); break; #endif + init_trainer_capture(); + break; +#endif case TRAINER_MODE_MASTER_TRAINER_JACK: init_trainer_capture(); From bab16c912bf643ca40492c9fb4bfcc52b18b1f11 Mon Sep 17 00:00:00 2001 From: 3djc Date: Sun, 20 Dec 2020 13:54:12 +0100 Subject: [PATCH 2/3] Fix DMA SBUS trainer on colorlcd --- .../targets/common/arm/stm32/aux_serial_driver.cpp | 11 +---------- radio/src/targets/horus/board.h | 1 + radio/src/targets/horus/trainer_driver.cpp | 11 +++++++++-- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp index 5c8f1e97f..b2c528dc0 100644 --- a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp @@ -213,10 +213,6 @@ extern "C" void AUX_SERIAL_USART_IRQHandler(void) #if defined(LUA) & !defined(CLI) if (luaRxFifo && auxSerialMode == UART_MODE_LUA) luaRxFifo->push(data); -#endif -#if !defined(BOOT) - if (auxSerialMode == UART_MODE_SBUS_TRAINER) - trainerSbusFifo.push(data); #endif } status = AUX_SERIAL_USART->SR; @@ -328,7 +324,7 @@ void aux2SerialInit(unsigned int mode, unsigned int protocol) break; case UART_MODE_SBUS_TRAINER: - aux2SerialSetup(SBUS_BAUDRATE, false, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b + aux2SerialSetup(SBUS_BAUDRATE, true, USART_WordLength_9b, USART_Parity_Even, USART_StopBits_2); // 2 stop bits requires USART_WordLength_9b AUX2_SERIAL_POWER_ON(); break; @@ -415,11 +411,6 @@ extern "C" void AUX2_SERIAL_USART_IRQHandler(void) if (luaRxFifo && aux2SerialMode == UART_MODE_LUA) { luaRxFifo->push(data); } -#endif -#if !defined(BOOT) - if (aux2SerialMode == UART_MODE_SBUS_TRAINER) { - trainerSbusFifo.push(data); - } #endif } status = AUX2_SERIAL_USART->SR; diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 38daec33c..cffc553dc 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -713,6 +713,7 @@ void bluetoothDisable(); extern DMAFifo<512> telemetryFifo; typedef DMAFifo<32> AuxSerialRxFifo; extern AuxSerialRxFifo auxSerialRxFifo; +extern AuxSerialRxFifo aux2SerialRxFifo; extern volatile uint32_t externalModulePort; #endif diff --git a/radio/src/targets/horus/trainer_driver.cpp b/radio/src/targets/horus/trainer_driver.cpp index a4f0c7b6b..ce649c688 100644 --- a/radio/src/targets/horus/trainer_driver.cpp +++ b/radio/src/targets/horus/trainer_driver.cpp @@ -160,9 +160,16 @@ extern "C" void TRAINER_TIMER_IRQHandler() int sbusGetByte(uint8_t * byte) { switch (currentTrainerMode) { -#if defined(AUX_SERIAL) +#if defined(AUX_SERIAL) || defined(AUX2_SERIAL) case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: - return trainerSbusFifo.pop(*byte); +#if defined(AUX_SERIAL) + if (auxSerialMode == UART_MODE_SBUS_TRAINER) + return auxSerialRxFifo.pop(*byte); +#endif +#if defined(AUX2_SERIAL) + if (aux2SerialMode == UART_MODE_SBUS_TRAINER) + return aux2SerialRxFifo.pop(*byte); +#endif #endif default: return false; From bae86dc85f1af7a1d7698c3b5cb3b50e9d5f3ac5 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 4 Jan 2021 16:44:26 +0100 Subject: [PATCH 3/3] Fix --- radio/src/gui/gui_common.cpp | 2 +- radio/src/trainer.cpp | 23 +++++++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 1d856b6f7..57e416f6e 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -554,7 +554,7 @@ bool isPxx2IsrmChannelsCountAllowed(int channels) bool isTrainerUsingModuleBay() { #if defined(PCBTARANIS) - if (TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE <= g_model.trainerData.mode && g_model.trainerData.mode <= TRAINER_MODE_MASTER_BATTERY_COMPARTMENT) + if (TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE <= g_model.trainerData.mode && g_model.trainerData.mode <= TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) return true; #endif return false; diff --git a/radio/src/trainer.cpp b/radio/src/trainer.cpp index 893d42b67..c4c3c0c4f 100644 --- a/radio/src/trainer.cpp +++ b/radio/src/trainer.cpp @@ -26,8 +26,8 @@ uint8_t currentTrainerMode = 0xff; void checkTrainerSignalWarning() { - enum PpmInValidState_t { - PPM_IN_IS_NOT_USED=0, + enum { + PPM_IN_IS_NOT_USED = 0, PPM_IN_IS_VALID, PPM_IN_INVALID }; @@ -137,21 +137,20 @@ void checkTrainerSettings() #if defined(TRAINER_BATTERY_COMPARTMENT) case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: #if defined(AUX_SERIAL) - if (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER) + if (g_eeGeneral.auxSerialMode == UART_MODE_SBUS_TRAINER) { auxSerialSbusInit(); - else - init_trainer_capture(); - break; + break; + } #endif + #if defined(AUX2_SERIAL) - if (g_eeGeneral.aux2SerialMode == UART_MODE_SBUS_TRAINER) + if (g_eeGeneral.aux2SerialMode == UART_MODE_SBUS_TRAINER) { aux2SerialSbusInit(); - else - init_trainer_capture(); - break; + break; + } #endif - init_trainer_capture(); - break; + + // no break #endif case TRAINER_MODE_MASTER_TRAINER_JACK: