From 5f6e00d904529a99c5234ddb2ce35a88aaad15f9 Mon Sep 17 00:00:00 2001 From: Mark Haslinghuis Date: Tue, 11 Mar 2025 16:30:13 +0100 Subject: [PATCH] [4.5.2] Fix SA for holybro on AT32F4 (#14246) * Fix SA on softserial for AT32 * Add another macro * fix typo --- src/main/drivers/at32/serial_uart_at32f43x.c | 9 +++++++++ src/main/io/vtx_smartaudio.c | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/drivers/at32/serial_uart_at32f43x.c b/src/main/drivers/at32/serial_uart_at32f43x.c index eb06a663d5..bd80e0d259 100644 --- a/src/main/drivers/at32/serial_uart_at32f43x.c +++ b/src/main/drivers/at32/serial_uart_at32f43x.c @@ -387,12 +387,21 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode, if ((options & SERIAL_BIDIR) && txIO) { //mode,speed,otype,pupd +#ifndef USE_NONCOMPLIANT_SMARTAUDIO ioConfig_t ioCfg = IO_CONFIG( GPIO_MODE_MUX, GPIO_DRIVE_STRENGTH_STRONGER, ((options & SERIAL_INVERTED) || (options & SERIAL_BIDIR_PP) || (options & SERIAL_BIDIR_PP_PD)) ? GPIO_OUTPUT_PUSH_PULL : GPIO_OUTPUT_OPEN_DRAIN, ((options & SERIAL_INVERTED) || (options & SERIAL_BIDIR_PP_PD)) ? GPIO_PULL_DOWN : GPIO_PULL_UP ); +#else + ioConfig_t ioCfg = IO_CONFIG( + GPIO_MODE_MUX, + GPIO_DRIVE_STRENGTH_STRONGER, + ((options & SERIAL_INVERTED) || (options & SERIAL_BIDIR_PP) || (options & SERIAL_BIDIR_PP_PD)) ? GPIO_OUTPUT_PUSH_PULL : GPIO_OUTPUT_OPEN_DRAIN, + (options & SERIAL_INVERTED) ? GPIO_PULL_DOWN : GPIO_PULL_UP + ); +#endif IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device)); IOConfigGPIOAF(txIO, ioCfg, uartdev->tx.af); } else { diff --git a/src/main/io/vtx_smartaudio.c b/src/main/io/vtx_smartaudio.c index b3c7ff9191..7cab8b8202 100644 --- a/src/main/io/vtx_smartaudio.c +++ b/src/main/io/vtx_smartaudio.c @@ -497,7 +497,7 @@ static void saReceiveFrame(uint8_t c) static void saSendFrame(uint8_t *buf, int len) { if (!IS_RC_MODE_ACTIVE(BOXVTXCONTROLDISABLE)) { -#ifndef AT32F4 +#ifdef USE_NONCOMPLIANT_SMARTAUDIO switch (smartAudioSerialPort->identifier) { case SERIAL_PORT_SOFTSERIAL1: case SERIAL_PORT_SOFTSERIAL2: @@ -509,14 +509,14 @@ static void saSendFrame(uint8_t *buf, int len) serialWrite(smartAudioSerialPort, 0x00); // Generate 1st start byte break; } -#endif //AT32F4 +#endif // USE_NONCOMPLIANT_SMARTAUDIO for (int i = 0 ; i < len ; i++) { serialWrite(smartAudioSerialPort, buf[i]); } - #ifdef USE_AKK_SMARTAUDIO +#ifdef USE_AKK_SMARTAUDIO serialWrite(smartAudioSerialPort, 0x00); // AKK/RDQ SmartAudio devices can expect an extra byte due to manufacturing errors. - #endif // USE_AKK_SMARTAUDIO +#endif // USE_AKK_SMARTAUDIO saStat.pktsent++; } else {