From 5d8ed05f299bc11751924f8f66b7c4fccee41349 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 25 Mar 2019 09:31:09 +0100 Subject: [PATCH] Configurable baudrate on external module for tests --- radio/src/gui/128x64/model_setup.cpp | 11 ++++++++++ .../src/targets/taranis/extmodule_driver.cpp | 22 ++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 43c3d7ae2..66c81f128 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -122,6 +122,7 @@ enum MenuModelSetupItems { ITEM_MODEL_EXTERNAL_MODULE_STATUS, ITEM_MODEL_EXTERNAL_MODULE_SYNCSTATUS, #endif + ITEM_MODEL_EXTERNAL_MODULE_BAUDRATE, // TODO remove this when we have adaptative speed ITEM_MODEL_EXTERNAL_MODULE_CHANNELS, ITEM_MODEL_EXTERNAL_MODULE_NPXX2_BIND, ITEM_MODEL_EXTERNAL_MODULE_PXX2_MODEL_NUM, @@ -482,6 +483,7 @@ void menuModelSetup(event_t event) EXTERNAL_MODULE_MODE_ROWS, MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE) MULTIMODULE_STATUS_ROWS + IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // TODO remove this when we have adaptative speed EXTERNAL_MODULE_CHANNELS_ROWS, IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, EXTERNAL_MODULE_BIND_ROWS()), // line reused for PPM: PPM settings IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // RxNum @@ -1164,6 +1166,15 @@ void menuModelSetup(event_t event) break; #endif + case ITEM_MODEL_EXTERNAL_MODULE_BAUDRATE: + extern uint32_t externalModuleBaudrate; + lcdDrawTextAlignedLeft(y, INDENT "Baudrate"); + lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, externalModuleBaudrate, attr | LEFT); + if (attr) { + externalModuleBaudrate = checkIncDec(event, externalModuleBaudrate / 200, 576, 2100) * 200; + } + break; + #if defined(PCBTARANIS) case ITEM_MODEL_INTERNAL_MODULE_CHANNELS: #endif diff --git a/radio/src/targets/taranis/extmodule_driver.cpp b/radio/src/targets/taranis/extmodule_driver.cpp index 8af3e842f..6b8567438 100644 --- a/radio/src/targets/taranis/extmodule_driver.cpp +++ b/radio/src/targets/taranis/extmodule_driver.cpp @@ -154,8 +154,17 @@ void extmoduleInvertedSerialStart(uint32_t baudrate) NVIC_EnableIRQ(EXTMODULE_USART_IRQn); } +// TODO remove this when we have adaptative speed +uint32_t externalModuleBaudrate = 230400; +uint32_t currentExternalModuleBaudrate = 230400; + void extmoduleSendBuffer(const uint8_t * data, uint8_t size) { + // TODO remove this when we have adaptative speed + if (externalModuleBaudrate != currentExternalModuleBaudrate) { + extmodulePxx2Start(); + } + DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(EXTMODULE_USART_DMA_STREAM); DMA_InitStructure.DMA_Channel = EXTMODULE_USART_DMA_CHANNEL; @@ -178,6 +187,10 @@ void extmoduleSendBuffer(const uint8_t * data, uint8_t size) USART_DMACmd(EXTMODULE_USART, USART_DMAReq_Tx, ENABLE); } +// TODO remove this when we have adaptative speed +uint8_t counter = 0; +#include + #define USART_FLAG_ERRORS (USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE | USART_FLAG_PE) extern "C" void EXTMODULE_USART_IRQHandler(void) { @@ -187,6 +200,9 @@ extern "C" void EXTMODULE_USART_IRQHandler(void) uint8_t data = EXTMODULE_USART->DR; if (status & USART_FLAG_ERRORS) { extmoduleFifo.errors++; + if (!counter++) { + TRACE_NOCRLF("%02X ", (uint8_t)status); + } } else { extmoduleFifo.push(data); @@ -197,7 +213,11 @@ extern "C" void EXTMODULE_USART_IRQHandler(void) void extmodulePxx2Start() { - extmoduleInvertedSerialStart(EXTMODULE_USART_PXX2_BAUDRATE); + // TODO remove this when we have adaptative speed + currentExternalModuleBaudrate = externalModuleBaudrate; + extmoduleInvertedSerialStart(externalModuleBaudrate); + + // extmoduleInvertedSerialStart(EXTMODULE_USART_PXX2_BAUDRATE); } #else void extmodulePxx2Start()