diff --git a/radio/src/gui/gui_common_arm.cpp b/radio/src/gui/gui_common_arm.cpp index 4dcc5bfd3..f4b6e6338 100644 --- a/radio/src/gui/gui_common_arm.cpp +++ b/radio/src/gui/gui_common_arm.cpp @@ -546,12 +546,12 @@ bool isInternalModuleAvailable(int module) bool isExternalModuleAvailable(int module) { #if !defined(PXX1) - if (module == MODULE_TYPE_XJT || module == MODULE_TYPE_R9M) { + if (module == MODULE_TYPE_XJT || module == MODULE_TYPE_R9M || module == MODULE_TYPE_R9M_LITE) { return false; } #endif #if !defined(PXX2) - if (module == MODULE_TYPE_XJT2 || module == MODULE_TYPE_R9M2) { + if (module == MODULE_TYPE_XJT2 || module == MODULE_TYPE_R9M2 || module == MODULE_TYPE_R9M_LITE2 || module == MODULE_TYPE_R9M_LITE_PRO2) { return false; } #endif diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 8092f5c76..34d7e7072 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -408,6 +408,9 @@ enum ModuleTypes { MODULE_TYPE_MULTIMODULE, MODULE_TYPE_R9M, MODULE_TYPE_R9M2, + MODULE_TYPE_R9M_LITE, + MODULE_TYPE_R9M_LITE2, + MODULE_TYPE_R9M_LITE_PRO2, MODULE_TYPE_SBUS, MODULE_TYPE_MAX = MODULE_TYPE_SBUS, MODULE_TYPE_COUNT diff --git a/radio/src/pulses/modules.h b/radio/src/pulses/modules.h index f96b1e96f..8a283b613 100644 --- a/radio/src/pulses/modules.h +++ b/radio/src/pulses/modules.h @@ -59,7 +59,6 @@ inline bool isModuleXJT2(uint8_t idx) return g_model.moduleData[idx].type == MODULE_TYPE_XJT2; } - inline bool isModuleXJTVariant(uint8_t idx) { return g_model.moduleData[idx].type == MODULE_TYPE_XJT || g_model.moduleData[idx].type == MODULE_TYPE_XJT2; @@ -112,12 +111,12 @@ inline bool isModulePPM(uint8_t idx) inline bool isModuleR9M(uint8_t idx) { - return g_model.moduleData[idx].type == MODULE_TYPE_R9M; + return g_model.moduleData[idx].type == MODULE_TYPE_R9M || g_model.moduleData[idx].type == MODULE_TYPE_R9M_LITE; } inline bool isModuleR9M2(uint8_t idx) { - return g_model.moduleData[idx].type == MODULE_TYPE_R9M2; + return g_model.moduleData[idx].type == MODULE_TYPE_R9M2 || g_model.moduleData[idx].type == MODULE_TYPE_R9M_LITE2 || g_model.moduleData[idx].type == MODULE_TYPE_R9M_LITE_PRO2; } #if defined(PCBXLITE) diff --git a/radio/src/pulses/pulses.cpp b/radio/src/pulses/pulses.cpp index a2afa462d..a4cb4b782 100755 --- a/radio/src/pulses/pulses.cpp +++ b/radio/src/pulses/pulses.cpp @@ -50,12 +50,26 @@ uint8_t getRequiredProtocol(uint8_t module) break; case MODULE_TYPE_XJT: +#if defined(INTMODULE_USART) + if (module == INTERNAL_MODULE) { + protocol = PROTOCOL_CHANNELS_PXX1_SERIAL; + break; + } +#endif + // no break + case MODULE_TYPE_R9M: - protocol = PROTOCOL_CHANNELS_PXX1; + protocol = PROTOCOL_CHANNELS_PXX1_PULSES; + break; + + case MODULE_TYPE_R9M_LITE: + protocol = PROTOCOL_CHANNELS_PXX1_SERIAL; break; case MODULE_TYPE_XJT2: case MODULE_TYPE_R9M2: + case MODULE_TYPE_R9M_LITE2: + case MODULE_TYPE_R9M_LITE_PRO2: protocol = PROTOCOL_CHANNELS_PXX2; break; @@ -119,10 +133,18 @@ void disablePulses(uint8_t module, uint8_t protocol) // stop existing protocol hardware switch (protocol) { - case PROTOCOL_CHANNELS_PXX1: - disable_pxx(module); +#if defined(PXX1) + case PROTOCOL_CHANNELS_PXX1_PULSES: + disable_pxx1_pulses(module); break; +#if defined(INTMODULE_USART) || defined(EXTMODULE_USART) + case PROTOCOL_CHANNELS_PXX1_SERIAL: + disable_pxx1_serial(module); + break; +#endif +#endif + #if defined(DSM2) case PROTOCOL_CHANNELS_DSM2_LP45: case PROTOCOL_CHANNELS_DSM2_DSM2: @@ -137,9 +159,11 @@ void disablePulses(uint8_t module, uint8_t protocol) break; #endif +#if defined(PXX2) case PROTOCOL_CHANNELS_PXX2: disable_pxx2(module); break; +#endif #if defined(MULTIMODULE) case PROTOCOL_CHANNELS_MULTIMODULE: @@ -159,10 +183,18 @@ void enablePulses(uint8_t module, uint8_t protocol) // start new protocol hardware here switch (protocol) { - case PROTOCOL_CHANNELS_PXX1: - init_pxx(module); +#if defined(PXX1) + case PROTOCOL_CHANNELS_PXX1_PULSES: + init_pxx1_pulses(module); break; +#if defined(INTMODULE_USART) || defined(EXTMODULE_USART) + case PROTOCOL_CHANNELS_PXX1_SERIAL: + init_pxx1_serial(module); + break; +#endif +#endif + #if defined(DSM2) case PROTOCOL_CHANNELS_DSM2_LP45: case PROTOCOL_CHANNELS_DSM2_DSM2: @@ -177,9 +209,11 @@ void enablePulses(uint8_t module, uint8_t protocol) break; #endif +#if defined(PXX2) case PROTOCOL_CHANNELS_PXX2: init_pxx2(module); break; +#endif #if defined(MULTIMODULE) case PROTOCOL_CHANNELS_MULTIMODULE: @@ -197,28 +231,19 @@ void enablePulses(uint8_t module, uint8_t protocol) } } -#if defined(PXX1) -void setupPulsesPXXInternalModule() -{ -#if defined(INTMODULE_USART) - intmodulePulsesData.pxx_uart.setupFrame(INTERNAL_MODULE); -#else - intmodulePulsesData.pxx.setupFrame(INTERNAL_MODULE); -#endif -} - -void setupPulsesPXXExternalModule() -{ - extmodulePulsesData.pxx.setupFrame(EXTERNAL_MODULE); -} -#endif - void setupPulsesInternalModule(uint8_t protocol) { switch (protocol) { -#if defined(PXX1) - case PROTOCOL_CHANNELS_PXX1: - setupPulsesPXXInternalModule(); +#if defined(PXX1) && !defined(INTMODULE_USART) + case PROTOCOL_CHANNELS_PXX1_PULSES: + intmodulePulsesData.pxx.setupFrame(INTERNAL_MODULE); + scheduleNextMixerCalculation(INTERNAL_MODULE, INTMODULE_PXX_PERIOD); + break; +#endif + +#if defined(PXX1) && defined(INTMODULE_USART) + case PROTOCOL_CHANNELS_PXX1_SERIAL: + intmodulePulsesData.pxx_uart.setupFrame(INTERNAL_MODULE); scheduleNextMixerCalculation(INTERNAL_MODULE, INTMODULE_PXX_PERIOD); break; #endif @@ -246,9 +271,14 @@ void setupPulsesExternalModule(uint8_t protocol) { switch (protocol) { #if defined(PXX1) - case PROTOCOL_CHANNELS_PXX1: - setupPulsesPXXExternalModule(); - scheduleNextMixerCalculation(EXTERNAL_MODULE, EXTMODULE_PXX_PERIOD); + case PROTOCOL_CHANNELS_PXX1_PULSES: + extmodulePulsesData.pxx.setupFrame(EXTERNAL_MODULE); + scheduleNextMixerCalculation(EXTERNAL_MODULE, PXX_PULSES_PERIOD); + break; + + case PROTOCOL_CHANNELS_PXX1_SERIAL: + extmodulePulsesData.pxx_uart.setupFrame(EXTERNAL_MODULE); + scheduleNextMixerCalculation(EXTERNAL_MODULE, EXTMODULE_PXX_SERIAL_PERIOD); break; #endif diff --git a/radio/src/pulses/pulses.h b/radio/src/pulses/pulses.h index 61b46ee64..37eacb033 100644 --- a/radio/src/pulses/pulses.h +++ b/radio/src/pulses/pulses.h @@ -152,6 +152,9 @@ union InternalModulePulsesData { union ExternalModulePulsesData { #if defined(PXX1) + #if defined(EXTMODULE_USART) + UartPxx1Pulses pxx_uart; + #endif #if defined(PPM_PIN_SERIAL) SerialPxx1Pulses pxx; #else @@ -225,7 +228,8 @@ enum ChannelsProtocols { PROTOCOL_CHANNELS_NONE, PROTOCOL_CHANNELS_PPM, #if defined(PXX) || defined(DSM2) - PROTOCOL_CHANNELS_PXX1, + PROTOCOL_CHANNELS_PXX1_PULSES, + PROTOCOL_CHANNELS_PXX1_SERIAL, #endif #if defined(DSM2) PROTOCOL_CHANNELS_DSM2_LP45, diff --git a/radio/src/pulses/pxx.h b/radio/src/pulses/pxx.h index ec9d1dad8..cb6d1ecd5 100644 --- a/radio/src/pulses/pxx.h +++ b/radio/src/pulses/pxx.h @@ -27,21 +27,23 @@ #define PXX_SEND_FAILSAFE (1 << 4) #define PXX_SEND_RANGECHECK (1 << 5) -#define PXX2_ON_SPORT_BAUDRATE 230400 -#define PXX2_PERIOD 4 // 4ms -#define PXX2_FRAME_MAXLENGTH 64 +#define PXX2_ON_SPORT_BAUDRATE 230400 +#define PXX2_PERIOD 4 // 4ms +#define PXX2_FRAME_MAXLENGTH 64 -#define EXTMODULE_PXX_PERIOD 9/*ms*/ +#define PXX_PULSES_PERIOD 9/*ms*/ +#define EXTMODULE_PXX_SERIAL_PERIOD 4/*ms*/ +#define EXTMODULE_PXX_SERIAL_BAUDRATE 420000 #if defined(PXX_FREQUENCY_HIGH) - #define INTMODULE_USART_PXX_BAUDRATE 450000 + #define INTMODULE_PXX_BAUDRATE 450000 #define INTMODULE_PXX_PERIOD 4/*ms*/ #else - #define INTMODULE_USART_PXX_BAUDRATE 115200 + #define INTMODULE_PXX_BAUDRATE 115200 #define INTMODULE_PXX_PERIOD 9/*ms*/ #endif -#define EXTMODULE_USART_PXX2_BAUDRATE 450000 +#define EXTMODULE_USART_PXX2_BAUDRATE 450000 #if defined(PXX_FREQUENCY_HIGH) && (!defined(INTMODULE_USART) || !defined(EXTMODULE_USART)) /* PXX uses 20 bytes (as of Rev 1.1 document) with 8 changes per byte + stop bit ~= 162 max pulses */ @@ -53,9 +55,6 @@ #error "Pulses array needs to be increased (PXX_FREQUENCY=HIGH)" #endif - -#define PXX_PERIOD_HALF_US (PXX_PERIOD * 2000) - // Used by the Sky9x family boards class SerialPxxBitTransport: public DataBuffer { protected: diff --git a/radio/src/pulses/pxx1.cpp b/radio/src/pulses/pxx1.cpp index 86e05a615..e11642b4e 100644 --- a/radio/src/pulses/pxx1.cpp +++ b/radio/src/pulses/pxx1.cpp @@ -216,10 +216,10 @@ void Pxx1Pulses::add8ChannelsFrame(uint8_t module, uint8_t sendUpp template void Pxx1Pulses::setupFrame(uint8_t module) { - PxxTransport::initFrame(module == INTERNAL_MODULE ? INTMODULE_PXX_PERIOD : EXTMODULE_PXX_PERIOD); + PxxTransport::initFrame(PXX_PULSES_PERIOD); #if defined(PXX_FREQUENCY_HIGH) - if (module == INTERNAL_MODULE) { + if (moduleSettings[module].protocol == PROTOCOL_CHANNELS_PXX1_SERIAL) { add8ChannelsFrame(module, 0); if (sentModuleChannels(module) > 8) { add8ChannelsFrame(module, 8); 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 6cfaa327e..4d70e3463 100755 --- a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp @@ -41,7 +41,7 @@ void intmoduleStop() void intmodulePxxStart() { - intmoduleSerialStart(INTMODULE_USART_PXX_BAUDRATE, false); + intmoduleSerialStart(INTMODULE_PXX_BAUDRATE, false); } void intmoduleSerialStart(uint32_t baudrate, uint8_t rxEnable) @@ -138,8 +138,9 @@ void intmoduleSendNextFrame() intmoduleSendBuffer(intmodulePulsesData.pxx2.getData(), intmodulePulsesData.pxx2.getSize()); break; #endif + #if defined(PXX1) - case PROTOCOL_CHANNELS_PXX1: + case PROTOCOL_CHANNELS_PXX1_SERIAL: intmoduleSendBuffer(intmodulePulsesData.pxx_uart.getData(), intmodulePulsesData.pxx_uart.getSize()); break; #endif diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 962f8455d..f09726de6 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -209,8 +209,8 @@ extern HardwareOptions hardwareOptions; void init_ppm(uint8_t module); void disable_ppm(uint8_t module); -void init_pxx(uint8_t module); -void disable_pxx(uint8_t module); +void init_pxx1_pulses(uint8_t module); +void disable_pxx1_pulses(uint8_t module); void init_pxx2(uint8_t module); void disable_pxx2(uint8_t module); void init_serial(uint8_t module, uint32_t baudrate, uint32_t period_half_us); diff --git a/radio/src/targets/horus/extmodule_driver.cpp b/radio/src/targets/horus/extmodule_driver.cpp index 87a8a0ec5..4fb25ab08 100644 --- a/radio/src/targets/horus/extmodule_driver.cpp +++ b/radio/src/targets/horus/extmodule_driver.cpp @@ -232,7 +232,7 @@ void extmoduleSendNextFrame() EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA } #if defined(PXX1) - else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX1) { + else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX1_PULSES) { EXTMODULE_TIMER->CCR2 = extmodulePulsesData.pxx.getLast() - 4000; // 2mS in advance EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA #if defined(PCBX10) || PCBREV >= 13 @@ -245,6 +245,9 @@ void extmoduleSendNextFrame() EXTMODULE_DMA_STREAM->NDTR = extmodulePulsesData.pxx.getSize(); EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA } + else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX1_SERIAL) { + #warning "Take it from 2.2" + } #endif #if defined(PXX2) else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX2) { diff --git a/radio/src/targets/horus/pulses_driver.cpp b/radio/src/targets/horus/pulses_driver.cpp index f70189cec..57fca8889 100644 --- a/radio/src/targets/horus/pulses_driver.cpp +++ b/radio/src/targets/horus/pulses_driver.cpp @@ -48,7 +48,7 @@ void disable_ppm(uint8_t module) void init_pxx2(uint8_t module) { if (module == INTERNAL_MODULE) - intmoduleSerialStart(INTMODULE_USART_PXX_BAUDRATE, true); + intmoduleSerialStart(INTMODULE_PXX_BAUDRATE, true); else extmodulePxx2Start(); } @@ -61,7 +61,7 @@ void disable_pxx2(uint8_t module) extmoduleStop(); } -void init_pxx(uint8_t module) +void init_pxx1_pulses(uint8_t module) { if (module == INTERNAL_MODULE) intmodulePxxStart(); @@ -69,7 +69,7 @@ void init_pxx(uint8_t module) extmodulePxxStart(); } -void disable_pxx(uint8_t module) +void disable_pxx1_pulses(uint8_t module) { if (module == INTERNAL_MODULE) intmoduleStop(); diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 9b44b4a5d..18ee13282 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -177,8 +177,10 @@ void init_ppm(uint8_t module); void disable_ppm(uint8_t module); void init_pxx2(uint8_t module); void disable_pxx2(uint8_t module); -void init_pxx(uint8_t module); -void disable_pxx(uint8_t module); +void init_pxx1_pulses(uint8_t module); +void init_pxx1_serial(uint8_t module); +void disable_pxx1_pulses(uint8_t module); +void disable_pxx1_serial(uint8_t module); void init_serial(uint8_t module, uint32_t baudrate, uint32_t period); void disable_serial(uint8_t module); void intmoduleStop(); @@ -192,7 +194,8 @@ void intmoduleSendNextFrame(); void extmoduleStop(); void extmodulePpmStart(); -void extmodulePxxStart(); +void extmodulePxxPulsesStart(); +void extmodulePxxSerialStart(); void extmodulePxx2Start(); void extmoduleSerialStart(uint32_t baudrate, uint32_t period_half_us); void extmoduleInvertedSerialStart(uint32_t baudrate); diff --git a/radio/src/targets/taranis/extmodule_driver.cpp b/radio/src/targets/taranis/extmodule_driver.cpp index b3f0fd6a2..ef1802368 100644 --- a/radio/src/targets/taranis/extmodule_driver.cpp +++ b/radio/src/targets/taranis/extmodule_driver.cpp @@ -207,7 +207,7 @@ void extmodulePxx2Start() #endif #if defined(PXX1) -void extmodulePxxStart() +void extmodulePxxPulsesStart() { EXTERNAL_MODULE_ON(); @@ -223,7 +223,7 @@ void extmodulePxxStart() EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) - EXTMODULE_TIMER->ARR = EXTMODULE_PXX_PERIOD * 2000; // 0.5uS (2Mhz) + EXTMODULE_TIMER->ARR = PXX_PULSES_PERIOD * 2000; // 0.5uS (2Mhz) EXTMODULE_TIMER->CCER = EXTMODULE_TIMER_OUTPUT_ENABLE | EXTMODULE_TIMER_OUTPUT_POLARITY; // polarity, default low EXTMODULE_TIMER->BDTR = TIM_BDTR_MOE; // Enable outputs EXTMODULE_TIMER->CCR1 = 18; @@ -243,6 +243,13 @@ void extmodulePxxStart() } #endif +#if defined(PXX1) && defined(EXTMODULE_USART) +void extmodulePxxSerialStart() +{ + extmoduleInvertedSerialStart(EXTMODULE_PXX_SERIAL_BAUDRATE); +} +#endif + void extmoduleSendNextFrame() { switch(moduleSettings[EXTERNAL_MODULE].protocol) { @@ -259,7 +266,7 @@ void extmoduleSendNextFrame() break; #if defined(PXX1) - case PROTOCOL_CHANNELS_PXX1: + case PROTOCOL_CHANNELS_PXX1_PULSES: EXTMODULE_TIMER->CCR2 = extmodulePulsesData.pxx.getLast() - 4000; // 2mS in advance EXTMODULE_TIMER_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA EXTMODULE_TIMER_DMA_STREAM->CR |= EXTMODULE_TIMER_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1; @@ -268,6 +275,10 @@ void extmoduleSendNextFrame() EXTMODULE_TIMER_DMA_STREAM->NDTR = extmodulePulsesData.pxx.getSize(); EXTMODULE_TIMER_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA break; + + case PROTOCOL_CHANNELS_PXX1_SERIAL: + extmoduleSendBuffer(extmodulePulsesData.pxx_uart.getData(), extmodulePulsesData.pxx_uart.getSize()); + break; #endif #if defined(PXX2) diff --git a/radio/src/targets/taranis/intmodule_pulses_driver.cpp b/radio/src/targets/taranis/intmodule_pulses_driver.cpp index 49144f288..719c0ff21 100644 --- a/radio/src/targets/taranis/intmodule_pulses_driver.cpp +++ b/radio/src/targets/taranis/intmodule_pulses_driver.cpp @@ -34,34 +34,36 @@ void intmoduleStop() void intmoduleSendNextFrame() { - if (0) { - } + switch (moduleSettings[INTERNAL_MODULE].protocol) { #if defined(PXX1) - else if (moduleSettings[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX1) { - INTMODULE_TIMER->CCR2 = intmodulePulsesData.pxx.getLast() - 4000; // 2mS in advance - INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA - INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1; - INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR); - INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(intmodulePulsesData.pxx.getData()); - INTMODULE_DMA_STREAM->NDTR = intmodulePulsesData.pxx.getSize(); - INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA - } + case PROTOCOL_CHANNELS_PXX1_PULSES: + INTMODULE_TIMER->CCR2 = intmodulePulsesData.pxx.getLast() - 4000; // 2mS in advance + INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA + INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1; + INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR); + INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(intmodulePulsesData.pxx.getData()); + INTMODULE_DMA_STREAM->NDTR = intmodulePulsesData.pxx.getSize(); + INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA + break; #endif + #if defined(TARANIS_INTERNAL_PPM) - else if (moduleSettings[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PPM) { - INTMODULE_TIMER->CCR3 = GET_MODULE_PPM_DELAY(INTERNAL_MODULE) * 2; - INTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_MODULE_PPM_POLARITY(INTERNAL_MODULE) ? 0 : TIM_CCER_CC3P); - INTMODULE_TIMER->CCR2 = *(intmodulePulsesData.ppm.ptr - 1) - 4000; // 2mS in advance - INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA - INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1; - INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR); - INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(intmodulePulsesData.ppm.pulses); - INTMODULE_DMA_STREAM->NDTR = intmodulePulsesData.ppm.ptr - intmodulePulsesData.ppm.pulses; - INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA - } + case PROTOCOL_CHANNELS_PPM: + INTMODULE_TIMER->CCR3 = GET_MODULE_PPM_DELAY(INTERNAL_MODULE) * 2; + INTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_MODULE_PPM_POLARITY(INTERNAL_MODULE) ? 0 : TIM_CCER_CC3P); + INTMODULE_TIMER->CCR2 = *(intmodulePulsesData.ppm.ptr - 1) - 4000; // 2mS in advance + INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA + INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1; + INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR); + INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(intmodulePulsesData.ppm.pulses); + INTMODULE_DMA_STREAM->NDTR = intmodulePulsesData.ppm.ptr - intmodulePulsesData.ppm.pulses; + INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA + break; #endif - else { - INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; + + default: + INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; + break; } } diff --git a/radio/src/targets/taranis/pulses_driver.cpp b/radio/src/targets/taranis/pulses_driver.cpp index ffe444875..b09c1fff0 100644 --- a/radio/src/targets/taranis/pulses_driver.cpp +++ b/radio/src/targets/taranis/pulses_driver.cpp @@ -20,17 +20,24 @@ #include "opentx.h" -void init_pxx(uint8_t module) -{ #if defined(PXX1) +void init_pxx1_pulses(uint8_t module) +{ if (module == INTERNAL_MODULE) intmodulePxxStart(); else - extmodulePxxStart(); -#endif + extmodulePxxPulsesStart(); } -void disable_pxx(uint8_t module) +void init_pxx1_serial(uint8_t module) +{ + if (module == INTERNAL_MODULE) + intmodulePxxStart(); + else + extmodulePxxSerialStart(); +} + +void disable_pxx1_pulses(uint8_t module) { if (module == INTERNAL_MODULE) intmoduleStop(); @@ -38,10 +45,19 @@ void disable_pxx(uint8_t module) extmoduleStop(); } +void disable_pxx1_serial(uint8_t module) +{ + if (module == INTERNAL_MODULE) + intmoduleStop(); + else + extmoduleStop(); +} +#endif + void init_pxx2(uint8_t module) { if (module == INTERNAL_MODULE) - intmoduleSerialStart(INTMODULE_USART_PXX_BAUDRATE, true); + intmoduleSerialStart(INTMODULE_PXX_BAUDRATE, true); else extmodulePxx2Start(); } diff --git a/radio/src/tasks.cpp b/radio/src/tasks.cpp index a058196b7..94a26340f 100644 --- a/radio/src/tasks.cpp +++ b/radio/src/tasks.cpp @@ -78,8 +78,8 @@ bool isModuleSynchronous(uint8_t module) uint8_t protocol = moduleSettings[module].protocol; if (protocol == PROTOCOL_CHANNELS_PXX2 || protocol == PROTOCOL_CHANNELS_CROSSFIRE || protocol == PROTOCOL_CHANNELS_NONE) return true; -#if defined(INTMODULE_USART) - if (protocol == PROTOCOL_CHANNELS_PXX1 && module == INTERNAL_MODULE) +#if defined(INTMODULE_USART) || defined(EXTMODULE_USART) + if (protocol == PROTOCOL_CHANNELS_PXX1_SERIAL) return true; #endif return false; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 958eab79e..23c8094e3 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -99,11 +99,11 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") -#define LEN_JACKMODES "\007" -#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer" +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS "Vyp\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "Vyp\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 FrSky D\0 FrSky D (kabel)Spektrum\0 " diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index fdf952c77..a376f4d0b 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -104,8 +104,8 @@ #define LEN_JACKMODES "\007" #define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS "AUS\0""PPM\0""XJT\0""DSM?""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "AUS\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (Kabel)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 48ffe3406..7c9fa2be4 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -104,8 +104,8 @@ #define LEN_JACKMODES "\007" #define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 5644bbb6d..0282c2745 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -104,8 +104,8 @@ #define LEN_JACKMODES "\007" #define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index a20c3f18d..74c46e54a 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -104,8 +104,8 @@ #define LEN_JACKMODES "\007" #define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 1d440031b..673f13721 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -104,8 +104,8 @@ #define LEN_JACKMODES "\007" #define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index a05af8b65..5d55d27cf 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -104,8 +104,8 @@ #define LEN_JACKMODES "\007" #define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index e9fc37a67..4c61c8c35 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -106,8 +106,8 @@ #define LEN_JACKMODES "\007" #define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS "UIT\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "UIT\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 65dd1aab9..71993cd87 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -104,8 +104,8 @@ #define LEN_JACKMODES "\007" #define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 7831b2ac1..13d7c9995 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -104,8 +104,8 @@ #define LEN_JACKMODES "\007" #define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS )"OFF\0""PPM\0""XJT\0""XJT2""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index f10c9a309..18d248fab 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -101,11 +101,11 @@ #define LEN_USBMODES TR("\006", "\010") #define TR_USBMODES TR("Ask\0 ""Joyst\0""SDCard""Serial", "Ask\0 ""Joystick""Storage\0""Serial\0 ") -#define LEN_JACKMODES "\007" -#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" +#define LEN_JACKMODES "\007" +#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer" -#define LEN_TARANIS_PROTOCOLS "\004" -#define TR_TARANIS_PROTOCOLS "Av\0 ""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0""R9M2""SBUS" +#define LEN_TARANIS_PROTOCOLS "\005" +#define TR_TARANIS_PROTOCOLS "Av\0 ""PPM\0 ""XJT\0 ""XJT2\0""DSM2\0""CRSF\0""MULT\0""R9M\0 ""R9M2\0""R9LT\0""R9LT2""R9LP2""SBUS\0" #define LEN_TELEMETRY_PROTOCOLS "\017" #define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"