diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 005fbec56..dae853d12 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -674,7 +674,7 @@ enum MixSources { MIXSRC_GYRO2, LUA_EXPORT("gyry", "Gyro Y") #endif - MIXSRC_MAX, + MIXSRC_MAX, LUA_EXPORT("max", "MAX") MIXSRC_FIRST_HELI, MIXSRC_CYC1 = MIXSRC_FIRST_HELI, LUA_EXPORT("cyc1", "Cyclic 1") diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index b3c3f5ee8..e9d0a7a25 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -1598,13 +1598,38 @@ static int luaMultiBuffer(lua_State * L) } #endif +/*luadoc +@function setSerialBaudrate(baudrate) +@param baudrate Desired baurate + +Set baudrate for serial port(s) affected to LUA + +@status current Introduced in 2.3.12 +*/ +static int luaSetSerialBaudrate(lua_State * L) +{ + unsigned int baudrate = luaL_checkunsigned(L, 1); + +#if defined(AUX_SERIAL) + if (auxSerialMode == UART_MODE_LUA) { + auxSerialSetup(baudrate, true); + } +#endif +#if defined(AUX2_SERIAL) + if (aux2SerialMode == UART_MODE_LUA) { + aux2SerialSetup(baudrate, true); + } +#endif + return 1; +} + /*luadoc @function serialWrite(str) @param str (string) String to be written to the serial port. Writes a string to the serial port. The string is allowed to contain any character, including 0. -@status current Introduced in TODO +@status current Introduced in 2.3.10 */ static int luaSerialWrite(lua_State * L) { @@ -1614,21 +1639,22 @@ static int luaSerialWrite(lua_State * L) if (!str || len < 1) return 0; -#if !defined(SIMU) - #if defined(USB_SERIAL) +#if defined(USB_SERIAL) if (getSelectedUsbMode() == USB_SERIAL_MODE) { size_t wr_len = len; const char* p = str; while(wr_len--) usbSerialPutc(*p++); } - #endif - #if defined(AUX_SERIAL) +#endif + +#if defined(AUX_SERIAL) if (auxSerialMode == UART_MODE_LUA) { size_t wr_len = len; const char* p = str; while(wr_len--) auxSerialPutc(*p++); } - #endif +#endif + #if defined(AUX2_SERIAL) if (aux2SerialMode == UART_MODE_LUA) { size_t wr_len = len; @@ -1636,9 +1662,6 @@ static int luaSerialWrite(lua_State * L) while(wr_len--) aux2SerialPutc(*p++); } #endif -#else - debugPrintf("luaSerialWrite: %.*s",len,str); -#endif return 0; } @@ -1742,6 +1765,7 @@ const luaL_Reg opentxLib[] = { #if defined(MULTIMODULE) { "multiBuffer", luaMultiBuffer }, #endif + { "setSerialBaudrate", luaSetSerialBaudrate }, { "serialWrite", luaSerialWrite }, { "serialRead", luaSerialRead }, { nullptr, nullptr } /* sentinel */ 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 b2c528dc0..a9ec2b155 100644 --- a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp @@ -30,7 +30,7 @@ uint8_t auxSerialMode = UART_MODE_COUNT; // Prevent debug output before port is Fifo auxSerialTxFifo; AuxSerialRxFifo auxSerialRxFifo __DMA (AUX_SERIAL_DMA_Stream_RX); -void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t lenght = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1) +void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t length, uint16_t parity, uint16_t stop) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; @@ -53,7 +53,7 @@ void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t lenght = USART_Wor #endif USART_InitStructure.USART_BaudRate = baudrate; - USART_InitStructure.USART_WordLength = lenght; + USART_InitStructure.USART_WordLength = length; USART_InitStructure.USART_StopBits = stop; USART_InitStructure.USART_Parity = parity; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; @@ -133,7 +133,7 @@ void auxSerialInit(unsigned int mode, unsigned int protocol) break; case UART_MODE_LUA: - auxSerialSetup(DEBUG_BAUDRATE, false); + auxSerialSetup(LUA_DEFAULT_BAUDRATE, true); AUX_SERIAL_POWER_ON(); } } @@ -226,7 +226,7 @@ uint8_t aux2SerialMode = UART_MODE_COUNT; // Prevent debug output before port i Fifo aux2SerialTxFifo; AuxSerialRxFifo aux2SerialRxFifo __DMA (AUX2_SERIAL_DMA_Stream_RX); -void aux2SerialSetup(unsigned int baudrate, bool dma, uint16_t lenght = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1) +void aux2SerialSetup(unsigned int baudrate, bool dma, uint16_t length, uint16_t parity, uint16_t stop) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; @@ -249,7 +249,7 @@ void aux2SerialSetup(unsigned int baudrate, bool dma, uint16_t lenght = USART_Wo #endif USART_InitStructure.USART_BaudRate = baudrate; - USART_InitStructure.USART_WordLength = lenght; + USART_InitStructure.USART_WordLength = length; USART_InitStructure.USART_StopBits = stop; USART_InitStructure.USART_Parity = parity; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index cffc553dc..8550d1517 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -637,11 +637,16 @@ void sportUpdatePowerInit(); // Aux serial port driver #if defined(RADIO_TX16S) #define DEBUG_BAUDRATE 400000 + #define LUA_DEFAULT_BAUDRATE 115200 #else #define DEBUG_BAUDRATE 115200 + #define LUA_DEFAULT_BAUDRATE 115200 #endif #if defined(AUX_SERIAL_GPIO) extern uint8_t auxSerialMode; +#if defined __cplusplus +void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t length = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1); +#endif void auxSerialInit(unsigned int mode, unsigned int protocol); void auxSerialPutc(char c); #define auxSerialTelemetryInit(protocol) auxSerialInit(UART_MODE_TELEMETRY, protocol) @@ -661,6 +666,9 @@ void auxSerialPowerOff(); // Aux2 serial port driver #if defined(AUX2_SERIAL) extern uint8_t aux2SerialMode; +#if defined __cplusplus +void aux2SerialSetup(unsigned int baudrate, bool dma, uint16_t length = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1); +#endif void aux2SerialInit(unsigned int mode, unsigned int protocol); void aux2SerialPutc(char c); #define aux2SerialTelemetryInit(protocol) aux2SerialInit(UART_MODE_TELEMETRY, protocol) diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 8376d786c..8402cf4fd 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -811,9 +811,20 @@ void rtcSetTime(const struct gtm * t) { } +#if defined(USB_SERIAL) +void usbSerialPutc(uint8_t c) +{ +} +#endif + #if defined(AUX_SERIAL) AuxSerialRxFifo auxSerialRxFifo(nullptr); uint8_t auxSerialMode; + +void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t length, uint16_t parity, uint16_t stop) +{ +} + void auxSerialInit(unsigned int mode, unsigned int protocol) { } @@ -834,6 +845,11 @@ void auxSerialStop() #if defined(AUX2_SERIAL) AuxSerialRxFifo aux2SerialRxFifo(nullptr); uint8_t aux2SerialMode; + +void aux2SerialSetup(unsigned int baudrate, bool dma, uint16_t length, uint16_t parity, uint16_t stop) +{ +} + void aux2SerialInit(unsigned int mode, unsigned int protocol) { } diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 6708b6c89..383ac7dff 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -850,8 +850,12 @@ void hapticOff(); // Aux serial port driver #if defined(AUX_SERIAL_GPIO) #define DEBUG_BAUDRATE 115200 +#define LUA_DEFAULT_BAUDRATE 115200 #define AUX_SERIAL extern uint8_t auxSerialMode; +#if defined __cplusplus +void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t length = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1); +#endif void auxSerialInit(unsigned int mode, unsigned int protocol); void auxSerialPutc(char c); #define auxSerialTelemetryInit(protocol) auxSerialInit(UART_MODE_TELEMETRY, protocol)