1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-13 03:19:53 +03:00

Allow setting serial baurate for LUA (#8228)

This commit is contained in:
3djc 2021-01-19 14:57:45 +01:00 committed by GitHub
parent 42a82d5b71
commit c38e513c7e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 67 additions and 15 deletions

View file

@ -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")

View file

@ -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 */

View file

@ -30,7 +30,7 @@ uint8_t auxSerialMode = UART_MODE_COUNT; // Prevent debug output before port is
Fifo<uint8_t, 512> 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<uint8_t, 512> 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;

View file

@ -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)

View file

@ -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)
{
}

View file

@ -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)