From 318e4dd516c569b75646de3eaaea4e03e2f7717b Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 15 May 2020 21:11:05 +0200 Subject: [PATCH] tx16s aux fixes --- radio/src/lua/api_general.cpp | 2 +- radio/src/lua/lua_api.h | 2 +- .../common/arm/stm32/aux_serial_driver.cpp | 24 ++++++++++++++++++- radio/src/targets/horus/board.cpp | 12 ++++++++++ radio/src/targets/horus/board.h | 10 ++++---- radio/src/targets/horus/hal.h | 4 +++- 6 files changed, 45 insertions(+), 9 deletions(-) diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 2121b36b6..fd06629e4 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -1634,9 +1634,9 @@ Reads characters from the serial port. The string is allowed to contain any char */ static int luaSerialRead(lua_State * L) { +#if defined(LUA) && !defined(CLI) int num = luaL_optunsigned(L, 1, 0); -#if defined(LUA) && !defined(CLI) if (!luaRxFifo) { luaRxFifo = new Fifo(); if (!luaRxFifo) { diff --git a/radio/src/lua/lua_api.h b/radio/src/lua/lua_api.h index a0dc8e919..53ef9df04 100644 --- a/radio/src/lua/lua_api.h +++ b/radio/src/lua/lua_api.h @@ -41,7 +41,7 @@ extern "C" { #endif #endif -#if !defined(CLI) +#if !defined(CLI) || defined(AUX2_SERIAL) #define LUA_FIFO_SIZE 256 extern Fifo * luaRxFifo; #endif 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 bc0e54504..53dcec950 100644 --- a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp @@ -101,6 +101,7 @@ void auxSerialInit(unsigned int mode, unsigned int protocol) #if defined(CROSSFIRE) if (protocol == PROTOCOL_TELEMETRY_CROSSFIRE) { auxSerialSetup(CROSSFIRE_TELEM_MIRROR_BAUDRATE, false); + AUX_SERIAL_POWER_OFF(); break; } #endif @@ -110,17 +111,20 @@ void auxSerialInit(unsigned int mode, unsigned int protocol) #if defined(DEBUG) || defined(CLI) case UART_MODE_DEBUG: auxSerialSetup(DEBUG_BAUDRATE, false); + AUX_SERIAL_POWER_OFF(); break; #endif case UART_MODE_TELEMETRY: if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) { auxSerialSetup(FRSKY_D_BAUDRATE, true); + AUX_SERIAL_POWER_OFF(); } break; case UART_MODE_LUA: auxSerialSetup(DEBUG_BAUDRATE, false); + AUX_SERIAL_POWER_ON(); } } @@ -192,7 +196,7 @@ extern "C" void AUX_SERIAL_USART_IRQHandler(void) } } #endif -#if defined(LUA) && !defined(CLI) +#if defined(LUA) & !defined(CLI) if (luaRxFifo && auxSerialMode == UART_MODE_LUA) { // Receive uint32_t status = AUX_SERIAL_USART->SR; @@ -204,6 +208,19 @@ extern "C" void AUX_SERIAL_USART_IRQHandler(void) status = AUX_SERIAL_USART->SR; } } +#if defined(AUX2_SERIAL) + if (luaRxFifo && aux2SerialMode == UART_MODE_LUA) { + // Receive + uint32_t status = AUX2_SERIAL_USART->SR; + while (status & (USART_FLAG_RXNE | USART_FLAG_ERRORS)) { + uint8_t data = AUX2_SERIAL_USART->DR; + if (!(status & USART_FLAG_ERRORS)) { + luaRxFifo->push(data); + } + status = AUX2_SERIAL_USART->SR; + } + } +#endif #endif } #endif @@ -288,26 +305,31 @@ void aux2SerialInit(unsigned int mode, unsigned int protocol) #if defined(CROSSFIRE) if (protocol == PROTOCOL_TELEMETRY_CROSSFIRE) { aux2SerialSetup(CROSSFIRE_TELEM_MIRROR_BAUDRATE, false); + AUX2_SERIAL_POWER_OFF(); break; } #endif aux2SerialSetup(FRSKY_TELEM_MIRROR_BAUDRATE, false); + AUX2_SERIAL_POWER_OFF(); break; #if defined(DEBUG) || defined(CLI) case UART_MODE_DEBUG: aux2SerialSetup(DEBUG_BAUDRATE, false); + AUX2_SERIAL_POWER_OFF(); break; #endif case UART_MODE_TELEMETRY: if (protocol == PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY) { aux2SerialSetup(FRSKY_D_BAUDRATE, true); + AUX2_SERIAL_POWER_OFF(); } break; case UART_MODE_LUA: aux2SerialSetup(DEBUG_BAUDRATE, false); + AUX2_SERIAL_POWER_ON(); } } diff --git a/radio/src/targets/horus/board.cpp b/radio/src/targets/horus/board.cpp index 704a6f27c..25c0cbbdf 100644 --- a/radio/src/targets/horus/board.cpp +++ b/radio/src/targets/horus/board.cpp @@ -52,6 +52,18 @@ void auxSerialPowerOff() GPIO_ResetBits(AUX_SERIAL_PWR_GPIO, AUX_SERIAL_PWR_GPIO_PIN); } #endif +#if defined(AUX2_SERIAL_PWR_GPIO) +void aux2SerialPowerOn() +{ + GPIO_SetBits(AUX2_SERIAL_PWR_GPIO, AUX2_SERIAL_PWR_GPIO_PIN); +} + +void aux2SerialPowerOff() +{ + GPIO_ResetBits(AUX2_SERIAL_PWR_GPIO, AUX2_SERIAL_PWR_GPIO_PIN); +} +#endif + #if HAS_SPORT_UPDATE_CONNECTOR() void sportUpdateInit() diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 74ebd7368..7de47b95b 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -627,11 +627,11 @@ void auxSerialStop(); void auxSerialPowerOn(); void auxSerialPowerOff(); #if defined(AUX_SERIAL_PWR_GPIO) -#define AUX_SERIAL_POWER_ON() auxSerialPowerOn() -#define AUX_SERIAL__POWER_OFF() auxSerialPowerOff() +#define AUX_SERIAL_POWER_ON() auxSerialPowerOn() +#define AUX_SERIAL_POWER_OFF() auxSerialPowerOff() #else #define AUX_SERIAL_POWER_ON() -#define AUX_SERIAL__POWER_OFF() +#define AUX_SERIAL_POWER_OFF() #endif #endif @@ -647,10 +647,10 @@ void aux2SerialPowerOn(); void aux2SerialPowerOff(); #if defined(AUX2_SERIAL_PWR_GPIO) #define AUX2_SERIAL_POWER_ON() aux2SerialPowerOn() -#define AUX2_SERIAL__POWER_OFF() aux2SerialPowerOff() +#define AUX2_SERIAL_POWER_OFF() aux2SerialPowerOff() #else #define AUX2_SERIAL_POWER_ON() -#define AUX2_SERIAL__POWER_OFF() +#define AUX2_SERIAL_POWER_OFF() #endif #endif diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index f964e0137..b0d2042ae 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -393,7 +393,7 @@ // Serial Port (DEBUG) #if defined(PCBX12S) || defined(RADIO_TX16S) - #define AUX_SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) + #define AUX_SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) #define AUX_SERIAL_RCC_APB1Periph RCC_APB1Periph_USART3 #define AUX_SERIAL_RCC_APB2Periph 0 #define AUX_SERIAL_GPIO GPIOB @@ -407,6 +407,8 @@ #define AUX_SERIAL_USART_IRQn USART3_IRQn #define AUX_SERIAL_DMA_Stream_RX DMA1_Stream1 #define AUX_SERIAL_DMA_Channel_RX DMA_Channel_4 + #define AUX_SERIAL_PWR_GPIO GPIOA + #define AUX_SERIAL_PWR_GPIO_PIN GPIO_Pin_15 // PB.00 #if defined(RADIO_TX16S) #define TRAINER_BATTERY_COMPARTMENT // allows serial port TTL trainer #endif