diff --git a/radio/src/cli.cpp b/radio/src/cli.cpp index 2824c5ed3..b7c00eb4e 100644 --- a/radio/src/cli.cpp +++ b/radio/src/cli.cpp @@ -1059,8 +1059,6 @@ static const etx_serial_init spIntmoduleSerialInitParams = { .stop_bits = ETX_StopBits_One, .word_length = ETX_WordLength_8, .rx_enable = true, - .on_receive = intmoduleFifoReceive, - .on_error = intmoduleFifoError, }; static void spInternalModuleSetBaudRate(uint32_t baud) diff --git a/radio/src/hal/serial_driver.h b/radio/src/hal/serial_driver.h index 2a5658aec..3ebc84b50 100644 --- a/radio/src/hal/serial_driver.h +++ b/radio/src/hal/serial_driver.h @@ -47,8 +47,6 @@ typedef struct { uint8_t word_length; // = ETX_WordLength_8; uint8_t rx_enable; // = false; - void (*on_receive)(uint8_t data); // = nullptr; - void (*on_error)(); // = nullptr; } etx_serial_init; struct etx_serial_callbacks_t { diff --git a/radio/src/io/frsky_firmware_update.cpp b/radio/src/io/frsky_firmware_update.cpp index 1ad1e9cd2..3aa2e4274 100644 --- a/radio/src/io/frsky_firmware_update.cpp +++ b/radio/src/io/frsky_firmware_update.cpp @@ -316,8 +316,6 @@ static const etx_serial_init serialInitParams = { .stop_bits = ETX_StopBits_One, .word_length = ETX_WordLength_8, .rx_enable = true, - .on_receive = intmoduleFifoReceive, - .on_error = intmoduleFifoError, }; #endif diff --git a/radio/src/io/frsky_pxx2.h b/radio/src/io/frsky_pxx2.h index de13ff6ad..e48d99a9f 100644 --- a/radio/src/io/frsky_pxx2.h +++ b/radio/src/io/frsky_pxx2.h @@ -22,8 +22,10 @@ #ifndef _IO_PXX2_H_ #define _IO_PXX2_H_ -#include "../fifo.h" -#include "../pulses/pxx.h" +#include "fifo.h" +#include "pulses/pxx.h" + +#include "board.h" class ModuleFifo : public Fifo { public: diff --git a/radio/src/io/multi_firmware_update.cpp b/radio/src/io/multi_firmware_update.cpp index 5cff0fdd2..3366144fa 100644 --- a/radio/src/io/multi_firmware_update.cpp +++ b/radio/src/io/multi_firmware_update.cpp @@ -82,8 +82,6 @@ static const etx_serial_init serialInitParams = { .stop_bits = ETX_StopBits_One, .word_length = ETX_WordLength_8, .rx_enable = true, - .on_receive = intmoduleFifoReceive, - .on_error = intmoduleFifoError, }; class MultiInternalUpdateDriver: public MultiFirmwareUpdateDriver diff --git a/radio/src/pulses/crossfire.cpp b/radio/src/pulses/crossfire.cpp index ff5dbda2e..a38cfad80 100644 --- a/radio/src/pulses/crossfire.cpp +++ b/radio/src/pulses/crossfire.cpp @@ -111,31 +111,12 @@ static void crossfireSetupMixerScheduler(uint8_t module) } #if defined(INTERNAL_MODULE_CRSF) -static void intmoduleCRSF_rx(uint8_t data) -{ - intmoduleFifo.push(data); - -#if !defined(SIMU) - // wakeup mixer when rx buffer is quarter full (16 bytes) - if (intmoduleFifo.size() >= 16) { - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - xTaskNotifyFromISR(mixerTaskId.rtos_handle, 0, eNoAction, - &xHigherPriorityTaskWoken); - - // might effect a context switch on ISR exit - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); - } -#endif -} - static const etx_serial_init intmoduleCrossfireInitParams = { .baudrate = 0, .parity = ETX_Parity_None, .stop_bits = ETX_StopBits_One, .word_length = ETX_WordLength_8, .rx_enable = true, - .on_receive = intmoduleCRSF_rx, - .on_error = nullptr, }; static void* crossfireInitInternal(uint8_t module) @@ -146,9 +127,6 @@ static void* crossfireInitInternal(uint8_t module) etx_serial_init params(intmoduleCrossfireInitParams); params.baudrate = INT_CROSSFIRE_BAUDRATE; - // wakeup mixer when rx buffer is quarter full (16 bytes) - params.on_receive = intmoduleCRSF_rx; - intmoduleFifo.clear(); IntmoduleSerialDriver.init(¶ms); INTERNAL_MODULE_ON(); diff --git a/radio/src/pulses/multi.cpp b/radio/src/pulses/multi.cpp index fb950ccbb..38e3f0a13 100644 --- a/radio/src/pulses/multi.cpp +++ b/radio/src/pulses/multi.cpp @@ -60,8 +60,6 @@ etx_serial_init multiSerialInitParams = { .stop_bits = ETX_StopBits_Two, .word_length = ETX_WordLength_9, .rx_enable = true, - .on_receive = intmoduleFifoReceive, - .on_error = intmoduleFifoError, }; #endif diff --git a/radio/src/pulses/pxx1.cpp b/radio/src/pulses/pxx1.cpp index 833cb53b2..e170a8010 100644 --- a/radio/src/pulses/pxx1.cpp +++ b/radio/src/pulses/pxx1.cpp @@ -231,8 +231,6 @@ static const etx_serial_init pxx1SerialInit = { .stop_bits = ETX_StopBits_One, .word_length = ETX_WordLength_8, .rx_enable = false, - .on_receive = intmoduleFifoReceive, - .on_error = intmoduleFifoError, }; static void* pxx1InitInternal(uint8_t module) diff --git a/radio/src/pulses/pxx2.cpp b/radio/src/pulses/pxx2.cpp index 6fe768266..a2b89778a 100644 --- a/radio/src/pulses/pxx2.cpp +++ b/radio/src/pulses/pxx2.cpp @@ -36,8 +36,6 @@ const etx_serial_init pxx2SerialInitParams = { .stop_bits = ETX_StopBits_One, .word_length = ETX_WordLength_8, .rx_enable = true, - .on_receive = intmoduleFifoReceive, - .on_error = intmoduleFifoError, }; #endif @@ -717,8 +715,6 @@ static const etx_serial_init pxx2ExtSerialInitParams = { .stop_bits = ETX_StopBits_One, .word_length = ETX_WordLength_8, .rx_enable = true, - .on_receive = extmoduleFifoReceive, - .on_error = extmoduleFifoError, }; static void* pxx2InitLowSpeed(uint8_t module) diff --git a/radio/src/serial.cpp b/radio/src/serial.cpp index 45ba48871..6006ec144 100644 --- a/radio/src/serial.cpp +++ b/radio/src/serial.cpp @@ -290,8 +290,6 @@ void serialInit(uint8_t port_nr, int mode) .stop_bits = ETX_StopBits_One, .word_length = ETX_WordLength_8, .rx_enable = false, - .on_receive = nullptr, - .on_error = nullptr, }; bool power_required = false; 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 7e19ef328..bc5c78ef5 100644 --- a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp @@ -52,7 +52,7 @@ static void* aux_serial_init(const SerialState* st, const etx_serial_init* param { stm32_usart_init(st->usart, params); - if (params->rx_enable && st->usart->rxDMA && !params->on_receive) { + if (params->rx_enable && st->usart->rxDMA) { st->rxFifo->clear(); stm32_usart_init_rx_dma(st->usart, st->rxFifo->buffer(), st->rxFifo->size()); } diff --git a/radio/src/targets/common/arm/stm32/extmodule_serial_driver.cpp b/radio/src/targets/common/arm/stm32/extmodule_serial_driver.cpp index 3854367ce..dfc2947f1 100644 --- a/radio/src/targets/common/arm/stm32/extmodule_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/extmodule_serial_driver.cpp @@ -38,19 +38,12 @@ void extmoduleFifoReceive(uint8_t data) extmoduleFifo.push(data); } -void extmoduleFifoError() -{ - extmoduleFifo.errors++; -} - static const etx_serial_init extmoduleSerialParams = { .baudrate = 0, .parity = ETX_Parity_None, .stop_bits = ETX_StopBits_One, .word_length = ETX_WordLength_8, .rx_enable = true, - .on_receive = extmoduleFifoReceive, - .on_error = extmoduleFifoError, }; static const LL_GPIO_InitTypeDef extmoduleUSART_PinDef = { @@ -80,8 +73,8 @@ static void* extmoduleSerialStart(const etx_serial_init* params) { if (!params) return nullptr; - extmodule_driver.on_receive = params->on_receive; - extmodule_driver.on_error = params->on_error; + extmodule_driver.on_receive = extmoduleFifoReceive; + extmodule_driver.on_error = nullptr; // UART config stm32_usart_init(&extmoduleUSART, params); diff --git a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp index 3f38ce167..30b381b67 100755 --- a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp @@ -23,9 +23,9 @@ #include "intmodule_serial_driver.h" #include "stm32_usart_driver.h" #include "board.h" +#include "fifo.h" -#include "io/frsky_pxx2.h" -ModuleFifo intmoduleFifo; +Fifo intmoduleFifo; #if !defined(INTMODULE_DMA_STREAM) static uint8_t * intmoduleTxBufferData; @@ -54,16 +54,11 @@ static etx_serial_callbacks_t intmodule_driver = { }; // TODO: move this somewhere else -void intmoduleFifoReceive(uint8_t data) +static void intmoduleFifoReceive(uint8_t data) { intmoduleFifo.push(data); } -void intmoduleFifoError() -{ - intmoduleFifo.errors++; -} - static const LL_GPIO_InitTypeDef intmoduleUSART_PinDef = { .Pin = INTMODULE_TX_GPIO_PIN | INTMODULE_RX_GPIO_PIN, .Mode = LL_GPIO_MODE_ALTERNATE, @@ -110,8 +105,8 @@ void* intmoduleSerialStart(const etx_serial_init* params) // - the UART seems to block when initialised with baudrate = 0 // init callbacks - intmodule_driver.on_receive = params->on_receive; - intmodule_driver.on_error = params->on_error; + intmodule_driver.on_receive = intmoduleFifoReceive; + intmodule_driver.on_error = nullptr; stm32_usart_init(&intmoduleUSART, params); return nullptr; diff --git a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.h b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.h index 4ae11f99a..4ee4a63f9 100644 --- a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.h +++ b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.h @@ -26,8 +26,4 @@ #define INTMODULE_USART_IRQ_PRIORITY 6 -// Callbacks using intmoduleFifo -void intmoduleFifoReceive(uint8_t data); -void intmoduleFifoError(); - extern const etx_serial_driver_t IntmoduleSerialDriver; diff --git a/radio/src/targets/common/arm/stm32/timers_driver.cpp b/radio/src/targets/common/arm/stm32/timers_driver.cpp index d058f51ba..1fe4644c3 100644 --- a/radio/src/targets/common/arm/stm32/timers_driver.cpp +++ b/radio/src/targets/common/arm/stm32/timers_driver.cpp @@ -67,8 +67,7 @@ static void interrupt1ms() #endif // 5ms loop - if (pre_scale == 5 || pre_scale == 10) - { + if (pre_scale == 5 || pre_scale == 10) { #if defined(HAPTIC) DEBUG_TIMER_START(debugTimerHaptic); HAPTIC_HEARTBEAT(); @@ -77,8 +76,7 @@ static void interrupt1ms() } // 10ms loop - if (pre_scale == 10) - { + if (pre_scale == 10) { pre_scale = 0; DEBUG_TIMER_START(debugTimerPer10ms); DEBUG_TIMER_SAMPLE(debugTimerPer10msPeriod); diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 269134727..e5377eb18 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -615,6 +615,7 @@ int32_t getVolume(); #define VOLUME_LEVEL_DEF 12 // Telemetry driver +#define INTMODULE_FIFO_SIZE 512 #define TELEMETRY_FIFO_SIZE 512 void telemetryPortInit(uint32_t baudrate, uint8_t mode); void telemetryPortSetDirectionInput(); diff --git a/radio/src/telemetry/frsky_pxx2.cpp b/radio/src/telemetry/frsky_pxx2.cpp index ff52b081d..9c0fb04a7 100644 --- a/radio/src/telemetry/frsky_pxx2.cpp +++ b/radio/src/telemetry/frsky_pxx2.cpp @@ -29,6 +29,8 @@ #include "intmodule_serial_driver.h" #endif +static_assert(PXX2_FRAME_MAXLENGTH <= INTMODULE_FIFO_SIZE); + void processGetHardwareInfoFrame(uint8_t module, const uint8_t * frame) { if (moduleState[module].mode != MODULE_MODE_GET_HARDWARE_INFO) { diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 0c48b8283..e15ffe331 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -275,6 +275,9 @@ void telemetryWakeup() { uint8_t requiredTelemetryProtocol = modelTelemetryProtocol(); + // TODO: needs to be moved to protocol/module init + // as-is, it implies only ONE telemetry protocol + // enabled at the same time if (telemetryProtocol != requiredTelemetryProtocol) { telemetryInit(requiredTelemetryProtocol); }