diff --git a/radio/src/cli.cpp b/radio/src/cli.cpp index 7450c2936..4b73ccf64 100644 --- a/radio/src/cli.cpp +++ b/radio/src/cli.cpp @@ -172,15 +172,6 @@ static uint32_t cliGetBaudRate() return 0; } -static void cliSetBaudRateCb(void (*cb)(uint32_t)) -{ - auto drv = cliSerialDriver; - auto ctx = cliSerialDriverCtx; - - if (drv && drv->setBaudrateCb) { - return drv->setBaudrateCb(ctx, cb); - } -} char cliLastLine[CLI_COMMAND_MAX_LEN+1]; @@ -1063,17 +1054,9 @@ static const etx_serial_init spIntmoduleSerialInitParams = { .rx_enable = true, }; -static void spInternalModuleSetBaudRate(uint32_t baud) -{ - etx_serial_init params(spIntmoduleSerialInitParams); - params.baudrate = baud; - - // re-configure serial port - spInternalModuleCTX = IntmoduleSerialDriver.init(¶ms); -} - // TODO: use proper method instead extern bool cdcConnected; +extern uint32_t usbSerialBaudRate(void*); int cliSerialPassthrough(const char **argv) { @@ -1138,12 +1121,21 @@ int cliSerialPassthrough(const char **argv) auto backupCB = cliReceiveCallBack; cliReceiveCallBack = spInternalModuleTx; - // setup CDC baudrate callback - cliSetBaudRateCb(spInternalModuleSetBaudRate); // loop until cable disconnected while (cdcConnected) { + uint32_t cli_br = cliGetBaudRate(); + if (cli_br && (cli_br != (uint32_t)baudrate)) { + baudrate = cli_br; + + etx_serial_init params(spIntmoduleSerialInitParams); + params.baudrate = baudrate; + + // re-configure serial port + spInternalModuleCTX = IntmoduleSerialDriver.init(¶ms); + } + uint8_t data; if (IntmoduleSerialDriver.getByte(uart_ctx, &data) > 0) { @@ -1161,7 +1153,6 @@ int cliSerialPassthrough(const char **argv) } // restore callsbacks - cliSetBaudRateCb(nullptr); cliReceiveCallBack = backupCB; spInternalModuleCTX = nullptr; diff --git a/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp b/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp index e31819c54..ae5829db9 100644 --- a/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp +++ b/radio/src/targets/common/arm/stm32/stm32_usart_driver.cpp @@ -34,6 +34,8 @@ void stm32_usart_init_rx_dma(const stm32_usart_t* usart, void* buffer, uint32_t NVIC_DisableIRQ(usart->IRQn); } + LL_DMA_DeInit(usart->rxDMA, usart->rxDMA_Stream); + LL_DMA_InitTypeDef dmaInit; LL_DMA_StructInit(&dmaInit); dmaInit.Channel = usart->rxDMA_Channel;