From b20e4a6be40f85898d8cb309dc91142136089fd0 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 17 Jun 2019 12:02:42 +0200 Subject: [PATCH] Pulses refactoring (another one!) (#6510) Pulses refactoring (another one!) --- radio/src/io/frsky_firmware_update.cpp | 35 ++- radio/src/pulses/pulses.cpp | 229 ++++++++---------- radio/src/pulses/pulses.h | 29 ++- radio/src/targets/common/arm/CMakeLists.txt | 1 - .../arm/stm32/intmodule_serial_driver.cpp | 2 +- radio/src/targets/horus/board.h | 16 -- radio/src/targets/horus/extmodule_driver.cpp | 9 +- radio/src/targets/horus/pulses_driver.cpp | 93 ------- radio/src/targets/simu/simpgmspace.cpp | 1 + radio/src/targets/simu/simpgmspace.h | 6 + radio/src/targets/sky9x/board.h | 8 - radio/src/targets/sky9x/pulses_driver.cpp | 81 ++----- radio/src/targets/taranis/CMakeLists.txt | 2 +- radio/src/targets/taranis/board.h | 19 -- .../src/targets/taranis/extmodule_driver.cpp | 16 +- .../taranis/intmodule_pulses_driver.cpp | 9 +- radio/src/targets/taranis/pulses_driver.cpp | 106 -------- radio/src/tasks.cpp | 15 +- 18 files changed, 183 insertions(+), 494 deletions(-) delete mode 100644 radio/src/targets/horus/pulses_driver.cpp delete mode 100644 radio/src/targets/taranis/pulses_driver.cpp diff --git a/radio/src/io/frsky_firmware_update.cpp b/radio/src/io/frsky_firmware_update.cpp index ee3276864..fd3f7fe3c 100644 --- a/radio/src/io/frsky_firmware_update.cpp +++ b/radio/src/io/frsky_firmware_update.cpp @@ -359,15 +359,18 @@ void FrskyDeviceFirmwareUpdate::flashFirmware(const char * filename) { pausePulses(); +#if defined(HARDWARE_INTERNAL_MODULE) uint8_t intPwr = IS_INTERNAL_MODULE_ON(); + INTERNAL_MODULE_OFF(); +#endif + uint8_t extPwr = IS_EXTERNAL_MODULE_ON(); + EXTERNAL_MODULE_OFF(); + + SPORT_UPDATE_POWER_OFF(); drawProgressScreen(getBasename(filename), STR_DEVICE_RESET, 0, 0); - INTERNAL_MODULE_OFF(); - EXTERNAL_MODULE_OFF(); - SPORT_UPDATE_POWER_OFF(); - /* wait 2s off */ watchdogSuspend(2000); RTOS_WAIT_MS(2000); @@ -399,13 +402,16 @@ void FrskyDeviceFirmwareUpdate::flashFirmware(const char * filename) RTOS_WAIT_MS(2000); telemetryClearFifo(); +#if defined(HARDWARE_INTERNAL_MODULE) if (intPwr) { INTERNAL_MODULE_ON(); - setupPulses(INTERNAL_MODULE); + setupPulsesInternalModule(); } +#endif + if (extPwr) { EXTERNAL_MODULE_ON(); - setupPulses(EXTERNAL_MODULE); + setupPulsesExternalModule(); } state = SPORT_IDLE; @@ -620,11 +626,14 @@ void FrskyChipFirmwareUpdate::flashFirmware(const char * filename) pausePulses(); +#if defined(HARDWARE_INTERNAL_MODULE) uint8_t intPwr = IS_INTERNAL_MODULE_ON(); - uint8_t extPwr = IS_EXTERNAL_MODULE_ON(); - INTERNAL_MODULE_OFF(); +#endif + + uint8_t extPwr = IS_EXTERNAL_MODULE_ON(); EXTERNAL_MODULE_OFF(); + SPORT_UPDATE_POWER_OFF(); /* wait 2s off */ @@ -646,7 +655,10 @@ void FrskyChipFirmwareUpdate::flashFirmware(const char * filename) POPUP_INFORMATION(STR_FIRMWARE_UPDATE_SUCCESS); } +#if defined(HARDWARE_INTERNAL_MODULE) INTERNAL_MODULE_OFF(); +#endif + EXTERNAL_MODULE_OFF(); SPORT_UPDATE_POWER_OFF(); @@ -654,13 +666,16 @@ void FrskyChipFirmwareUpdate::flashFirmware(const char * filename) watchdogSuspend(2000); RTOS_WAIT_MS(2000); +#if defined(HARDWARE_INTERNAL_MODULE) if (intPwr) { INTERNAL_MODULE_ON(); - setupPulses(INTERNAL_MODULE); + setupPulsesInternalModule(); } +#endif + if (extPwr) { EXTERNAL_MODULE_ON(); - setupPulses(EXTERNAL_MODULE); + setupPulsesExternalModule(); } resumePulses(); diff --git a/radio/src/pulses/pulses.cpp b/radio/src/pulses/pulses.cpp index 23aaa1072..d5f2589fc 100755 --- a/radio/src/pulses/pulses.cpp +++ b/radio/src/pulses/pulses.cpp @@ -133,76 +133,21 @@ uint8_t getRequiredProtocol(uint8_t module) return protocol; } -void disablePulses(uint8_t module, uint8_t protocol) -{ - // stop existing protocol hardware - - switch (protocol) { -#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: - case PROTOCOL_CHANNELS_DSM2_DSMX: - disable_serial(module); - break; -#endif - -#if defined(CROSSFIRE) - case PROTOCOL_CHANNELS_CROSSFIRE: - // TODO disable_module_timer(module); - break; -#endif - -#if defined(PXX2) - case PROTOCOL_CHANNELS_PXX2: - disable_pxx2(module); - break; -#endif - -#if defined(MULTIMODULE) - case PROTOCOL_CHANNELS_MULTIMODULE: -#endif - -#if defined(SBUS) - case PROTOCOL_CHANNELS_SBUS: - disable_serial(module); - break; -#endif - -#if defined(PPM) - case PROTOCOL_CHANNELS_PPM: - disable_ppm(module); - break; -#endif - } -} - -void enablePulses(uint8_t module, uint8_t protocol) +void enablePulsesExternalModule(uint8_t protocol) { // start new protocol hardware here switch (protocol) { #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); + extmodulePxx1PulsesStart(); break; #endif + +#if defined(PXX1) && defined(EXTMODULE_USART) + case PROTOCOL_CHANNELS_PXX1_SERIAL: + extmodulePxx1SerialStart(); + break; #endif #if defined(DSM2) @@ -215,13 +160,13 @@ void enablePulses(uint8_t module, uint8_t protocol) #if defined(CROSSFIRE) case PROTOCOL_CHANNELS_CROSSFIRE: - // TODO init_module_timer(module, CROSSFIRE_PERIOD, true); + EXTERNAL_MODULE_ON(); break; #endif #if defined(PXX2) case PROTOCOL_CHANNELS_PXX2: - init_pxx2(module); + extmoduleInvertedSerialStart(PXX2_EXTERNAL_MODULE_BAUDRATE); break; #endif @@ -239,54 +184,7 @@ void enablePulses(uint8_t module, uint8_t protocol) #if defined(PPM) case PROTOCOL_CHANNELS_PPM: - init_ppm(module); - break; -#endif - - default: - // TODO some reworking needed here ... -#if defined(PXX2) - disable_pxx2(module); -#endif - break; - } -} - -void setupPulsesInternalModule(uint8_t protocol) -{ - switch (protocol) { -#if defined(HARDWARE_INTERNAL_MODULE) && 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 - -#if defined(PXX2) - case PROTOCOL_CHANNELS_PXX2: - intmodulePulsesData.pxx2.setupFrame(INTERNAL_MODULE); - if (moduleState[INTERNAL_MODULE].mode == MODULE_MODE_SPECTRUM_ANALYSER || moduleState[INTERNAL_MODULE].mode == MODULE_MODE_POWER_METER) { - scheduleNextMixerCalculation(INTERNAL_MODULE, PXX2_TOOLS_PERIOD); - } -#if !defined(INTMODULE_HEARTBEAT) - else { - scheduleNextMixerCalculation(INTERNAL_MODULE, PXX2_PERIOD); - } -#endif - break; -#endif - -#if defined(PCBTARANIS) && defined(INTERNAL_MODULE_PPM) - case PROTOCOL_CHANNELS_PPM: - setupPulsesPPM(&extmodulePulsesData.ppm, g_model.moduleData[INTERNAL_MODULE].channelsStart, g_model.moduleData[INTERNAL_MODULE].channelsCount, g_model.moduleData[INTERNAL_MODULE].ppm.frameLength); - scheduleNextMixerCalculation(INTERNAL_MODULE, PPM_PERIOD(INTERNAL_MODULE)); + extmodulePpmStart(); break; #endif @@ -361,35 +259,112 @@ void setupPulsesExternalModule(uint8_t protocol) } } -void setupPulses(uint8_t module, uint8_t protocol) -{ - switch (module) { #if defined(HARDWARE_INTERNAL_MODULE) - case INTERNAL_MODULE: - setupPulsesInternalModule(protocol); + +void enablePulsesInternalModule(uint8_t protocol) +{ + // start new protocol hardware here + + switch (protocol) { +#if defined(PXX1) && !defined(INTMODULE_USART) + case PROTOCOL_CHANNELS_PXX1_PULSES: + intmodulePxx1PulsesStart(); break; #endif - case EXTERNAL_MODULE: - setupPulsesExternalModule(protocol); +#if defined(PXX1) && defined(INTMODULE_USART) + case PROTOCOL_CHANNELS_PXX1_SERIAL: + intmodulePxx1SerialStart(); + break; +#endif + +#if defined(PXX2) + case PROTOCOL_CHANNELS_PXX2: + intmoduleSerialStart(INTMODULE_PXX_BAUDRATE, true); + break; +#endif + + default: break; } } -bool setupPulses(uint8_t module) +void setupPulsesInternalModule(uint8_t protocol) { - uint8_t protocol = getRequiredProtocol(module); + switch (protocol) { +#if defined(HARDWARE_INTERNAL_MODULE) && defined(PXX1) && !defined(INTMODULE_USART) + case PROTOCOL_CHANNELS_PXX1_PULSES: + intmodulePulsesData.pxx.setupFrame(INTERNAL_MODULE); + scheduleNextMixerCalculation(INTERNAL_MODULE, INTMODULE_PXX_PERIOD); + break; +#endif - heartbeat |= (HEART_TIMER_PULSES << module); +#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 - if (moduleState[module].protocol != protocol) { - disablePulses(module, moduleState[module].protocol); - moduleState[module].protocol = protocol; - enablePulses(module, protocol); +#if defined(PXX2) + case PROTOCOL_CHANNELS_PXX2: + intmodulePulsesData.pxx2.setupFrame(INTERNAL_MODULE); + if (moduleState[INTERNAL_MODULE].mode == MODULE_MODE_SPECTRUM_ANALYSER || moduleState[INTERNAL_MODULE].mode == MODULE_MODE_POWER_METER) { + scheduleNextMixerCalculation(INTERNAL_MODULE, PXX2_TOOLS_PERIOD); + } +#if !defined(INTMODULE_HEARTBEAT) + else { + scheduleNextMixerCalculation(INTERNAL_MODULE, PXX2_PERIOD); + } +#endif + break; +#endif + +#if defined(PCBTARANIS) && defined(INTERNAL_MODULE_PPM) + case PROTOCOL_CHANNELS_PPM: + setupPulsesPPM(&extmodulePulsesData.ppm, g_model.moduleData[INTERNAL_MODULE].channelsStart, g_model.moduleData[INTERNAL_MODULE].channelsCount, g_model.moduleData[INTERNAL_MODULE].ppm.frameLength); + scheduleNextMixerCalculation(INTERNAL_MODULE, PPM_PERIOD(INTERNAL_MODULE)); + break; +#endif + + default: + break; + } +} + +bool setupPulsesInternalModule() +{ + uint8_t protocol = getRequiredProtocol(INTERNAL_MODULE); + + heartbeat |= (HEART_TIMER_PULSES << INTERNAL_MODULE); + + if (moduleState[INTERNAL_MODULE].protocol != protocol) { + intmoduleStop(); + moduleState[INTERNAL_MODULE].protocol = protocol; + enablePulsesInternalModule(protocol); return false; } else { - setupPulses(module, protocol); + setupPulsesInternalModule(protocol); + return true; + } +} +#endif + +bool setupPulsesExternalModule() +{ + uint8_t protocol = getRequiredProtocol(EXTERNAL_MODULE); + + heartbeat |= (HEART_TIMER_PULSES << EXTERNAL_MODULE); + + if (moduleState[EXTERNAL_MODULE].protocol != protocol) { + extmoduleStop(); + moduleState[EXTERNAL_MODULE].protocol = protocol; + enablePulsesExternalModule(protocol); + return false; + } + else { + setupPulsesExternalModule(protocol); return true; } } diff --git a/radio/src/pulses/pulses.h b/radio/src/pulses/pulses.h index 35c9a6cf1..a6a65ce36 100644 --- a/radio/src/pulses/pulses.h +++ b/radio/src/pulses/pulses.h @@ -302,7 +302,8 @@ union TrainerPulsesData { extern TrainerPulsesData trainerPulsesData; -bool setupPulses(uint8_t module); +bool setupPulsesInternalModule(); +bool setupPulsesExternalModule(); void setupPulsesDSM2(); void setupPulsesCrossfire(); void setupPulsesMultimodule(); @@ -314,28 +315,26 @@ void sendByteDsm2(uint8_t b); void putDsm2Flush(); void putDsm2SerialBit(uint8_t bit); void sendByteSbus(uint8_t b); - -#if defined(HUBSAN) -void Hubsan_Init(); -#endif +void intmodulePxx1PulsesStart(); +void intmodulePxx1SerialStart(); +void extmodulePxx1PulsesStart(); +void extmodulePxx1SerialStart(); +void extmodulePpmStart(); +void intmoduleStop(); +void extmoduleStop(); inline void startPulses() { s_pulses_paused = false; -#if defined(PCBTARANIS) || defined(PCBHORUS) - setupPulses(INTERNAL_MODULE); - setupPulses(EXTERNAL_MODULE); -#else - setupPulses(EXTERNAL_MODULE); +#if defined(HARDWARE_INTERNAL_MODULE) + setupPulsesInternalModule(); #endif -#if defined(PCBSKY9X) - init_ppm(EXTRA_MODULE); -#endif + setupPulsesExternalModule(); -#if defined(HUBSAN) - Hubsan_Init(); +#if defined(HARDWARE_EXTRA_MODULE) + extramodulePpmStart(); #endif } diff --git a/radio/src/targets/common/arm/CMakeLists.txt b/radio/src/targets/common/arm/CMakeLists.txt index da45e0309..90d196f41 100644 --- a/radio/src/targets/common/arm/CMakeLists.txt +++ b/radio/src/targets/common/arm/CMakeLists.txt @@ -197,7 +197,6 @@ set(FIRMWARE_TARGET_SRC set(TARGET_SRC ${TARGET_SRC} - pulses_driver.cpp keys_driver.cpp telemetry_driver.cpp ) 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 8d254a7b4..2ddd7c74d 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() GPIO_ResetBits(INTMODULE_GPIO, INTMODULE_TX_GPIO_PIN | INTMODULE_RX_GPIO_PIN); } -void intmodulePxxStart() +void intmodulePxx1SerialStart() { intmoduleSerialStart(INTMODULE_PXX_BAUDRATE, false); } diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index a3acfc140..4afdd36ea 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -208,31 +208,15 @@ void SDRAM_Init(void); #define IS_PXX1_INTERNAL_ENABLED() (true) #endif -void init_ppm(uint8_t module); -void disable_ppm(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_pxx2(uint8_t module); -void disable_pxx2(uint8_t module); -void disable_serial(uint8_t module); - void init_intmodule_heartbeat(); void check_intmodule_heartbeat(); -void intmoduleStop(); void intmoduleSerialStart(uint32_t baudrate, uint8_t rxEnable); -void intmodulePxxStart(); void intmoduleSendBuffer(const uint8_t * data, uint8_t size); void intmoduleSendNextFrame(); void extmoduleSerialStart(uint32_t baudrate, uint32_t period_half_us, bool inverted); void extmoduleSendNextFrame(); -void extmoduleStop(); -void extmodulePpmStart(); -void extmodulePxxStart(); -void extmodulePxx2Start(); // Trainer driver void init_trainer_ppm(void); diff --git a/radio/src/targets/horus/extmodule_driver.cpp b/radio/src/targets/horus/extmodule_driver.cpp index 32490c7c1..89e403cbd 100644 --- a/radio/src/targets/horus/extmodule_driver.cpp +++ b/radio/src/targets/horus/extmodule_driver.cpp @@ -83,7 +83,7 @@ void extmodulePpmStart() NVIC_SetPriority(EXTMODULE_TIMER_IRQn, 7); } -void extmodulePxxStart() +void extmodulePxx1PulsesStart() { EXTERNAL_MODULE_ON(); @@ -127,11 +127,6 @@ void extmodulePxxStart() NVIC_SetPriority(EXTMODULE_TIMER_IRQn, 7); } -void extmodulePxx2Start() -{ - // TODO just enable the S.PORT line (or let telemetry init do it) -} - #if defined(DSM2) void extmoduleSerialStart(uint32_t /*baudrate*/, uint32_t period_half_us, bool inverted) { @@ -284,6 +279,6 @@ extern "C" void EXTMODULE_TIMER_IRQHandler() { EXTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; - if (setupPulses(EXTERNAL_MODULE)) + if (setupPulsesExternalModule()) extmoduleSendNextFrame(); } diff --git a/radio/src/targets/horus/pulses_driver.cpp b/radio/src/targets/horus/pulses_driver.cpp deleted file mode 100644 index 6a14b4046..000000000 --- a/radio/src/targets/horus/pulses_driver.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) OpenTX - * - * Based on code named - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "opentx.h" - -void init_ppm(uint8_t module) -{ - if (module == EXTERNAL_MODULE) { - extmodulePpmStart(); - } -} - -void disable_ppm(uint8_t module) -{ - if (module == EXTERNAL_MODULE) { - extmoduleStop(); - } -} - -void init_pxx2(uint8_t module) -{ - if (module == INTERNAL_MODULE) - intmoduleSerialStart(INTMODULE_PXX_BAUDRATE, true); - else - extmodulePxx2Start(); -} - -void disable_pxx2(uint8_t module) -{ - if (module == INTERNAL_MODULE) - intmoduleStop(); - else - extmoduleStop(); -} - -void init_pxx1_pulses(uint8_t module) -{ - if (module == INTERNAL_MODULE) - intmodulePxxStart(); - else - extmodulePxxStart(); -} - -void init_pxx1_serial(uint8_t module) -{ - if (module == INTERNAL_MODULE) - intmodulePxxStart(); - else - extmodulePxxStart(); -} - -void disable_pxx1_pulses(uint8_t module) -{ - if (module == INTERNAL_MODULE) - intmoduleStop(); - else - extmoduleStop(); -} - -void disable_pxx1_serial(uint8_t module) -{ - if (module == INTERNAL_MODULE) - intmoduleStop(); - else - extmoduleStop(); -} - -#if defined(DSM2) -void disable_serial(uint8_t module) -{ - if (module == EXTERNAL_MODULE) { - extmoduleStop(); - } -} -#endif - diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 5d3fc51c0..e1436ab05 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -60,6 +60,7 @@ Pio Pioa, Piob, Pioc; Pmc pmc; Ssc ssc; Pwm pwm; +Tc tc1; Twi Twio; Usart Usart0; Dacc dacc; diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simpgmspace.h index b40864f24..16f99c089 100644 --- a/radio/src/targets/simu/simpgmspace.h +++ b/radio/src/targets/simu/simpgmspace.h @@ -172,6 +172,12 @@ extern Pmc pmc; extern Ssc ssc; #undef SSC #define SSC (&ssc) +extern Pmc pmc; +#undef PMC +#define PMC (&pmc) +extern Tc tc1; +#undef TC1 +#define TC1 (&tc1) extern Pio Pioa, Piob, Pioc; extern Twi Twio; extern Dacc dacc; diff --git a/radio/src/targets/sky9x/board.h b/radio/src/targets/sky9x/board.h index 37aa4d47d..2683e942b 100644 --- a/radio/src/targets/sky9x/board.h +++ b/radio/src/targets/sky9x/board.h @@ -229,14 +229,6 @@ uint32_t readTrims(void); #define KEYS_PRESSED() readKeys() // Pulses driver -void init_no_pulses(uint32_t port); -void init_ppm(uint32_t port); -void disable_ppm(uint32_t port); -void init_pxx1_pulses(uint32_t port); -void disable_pxx1_pulses(uint32_t port); -void disable_serial(uint32_t port); -void init_module_timer( uint32_t module_index, uint32_t period, uint8_t state); -void disable_module_timer( uint32_t module_index); void extmoduleSerialStart(uint32_t baudrate, uint32_t period_half_us, bool inverted); void extmoduleSendNextFrame(); diff --git a/radio/src/targets/sky9x/pulses_driver.cpp b/radio/src/targets/sky9x/pulses_driver.cpp index b25a4741a..8cc751b21 100644 --- a/radio/src/targets/sky9x/pulses_driver.cpp +++ b/radio/src/targets/sky9x/pulses_driver.cpp @@ -108,6 +108,8 @@ void init_second_ppm(uint32_t period) setExtraModulePolarity(); } +/* +// TODO re-add it later void disable_second_ppm() { Pio * pioptr = PIOC; @@ -115,16 +117,6 @@ void disable_second_ppm() PWM->PWM_IDR1 = PWM_IDR1_CHID1; } -void init_no_pulses(uint32_t port) -{ - if (port == EXTERNAL_MODULE) { - init_main_ppm(3000, 0); - } - else { - // TODO - } -} - void init_module_timer(uint32_t port, uint32_t period, uint8_t state) { if (port == EXTERNAL_MODULE) { @@ -132,32 +124,16 @@ void init_module_timer(uint32_t port, uint32_t period, uint8_t state) init_main_ppm(3000, 0); } } +*/ -void disable_module_timer(uint32_t port) +void extmodulePpmStart() { - if (port == EXTERNAL_MODULE) { - disable_ppm(EXTERNAL_MODULE); - } + init_main_ppm(3000, 1); } -void init_ppm(uint32_t port) +void extramodulePpmStart() { - if (port == EXTERNAL_MODULE) { - init_main_ppm(3000, 1); - } - else { - init_second_ppm(3000); - } -} - -void disable_ppm(uint32_t port) -{ - if (port == EXTERNAL_MODULE) { - disable_main_ppm(); - } - else { - disable_second_ppm(); - } + init_second_ppm(3000); } // Initialise the SSC to allow PXX output. @@ -201,26 +177,16 @@ void disable_ssc() sscptr->SSC_CR = SSC_CR_TXDIS; } -void init_pxx1_pulses(uint32_t port) +void extmodulePxx1PulsesStart() { - if (port == EXTERNAL_MODULE) { - init_main_ppm(2500 * 2, 0); - init_ssc(125); // 8us per bit - } - else { - // TODO - } + init_main_ppm(2500 * 2, 0); + init_ssc(125); // 8us per bit } -void disable_pxx1_pulses(uint32_t port) +void extmoduleStop() { - if (port == EXTERNAL_MODULE) { - disable_ssc(); - disable_ppm(EXTERNAL_MODULE); - } - else { - // TODO - } + disable_ssc(); + disable_main_ppm(); } void extmoduleSerialStart(uint32_t baudrate, uint32_t period_half_us, bool inverted) @@ -236,21 +202,10 @@ void extmoduleSerialStart(uint32_t baudrate, uint32_t period_half_us, bool inver } } -void disable_serial(uint32_t port) -{ - if (port == EXTERNAL_MODULE) { - disable_ssc(); - disable_ppm(EXTERNAL_MODULE); - } - else { - // TODO - } -} - void extmoduleSendNextFrame() { - } + #if !defined(SIMU) extern "C" void PWM_IRQHandler(void) { @@ -272,7 +227,7 @@ extern "C" void PWM_IRQHandler(void) } pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = period; // Period in half uS if (period != 2500 * 2) { - setupPulses(EXTERNAL_MODULE); + setupPulsesExternalModule(); setExternalModulePolarity(); } else { @@ -297,7 +252,7 @@ extern "C" void PWM_IRQHandler(void) } pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = period; // Period in half uS if (period != 2500 * 2) { - setupPulses(EXTERNAL_MODULE); + setupPulsesExternalModule(); } else { // Kick off serial output here @@ -323,7 +278,7 @@ extern "C" void PWM_IRQHandler(void) } pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = period; // Period in half uS if (period != 3500 * 2) { - setupPulses(EXTERNAL_MODULE); + setupPulsesExternalModule(); } else { // Kick off serial output here @@ -338,7 +293,7 @@ extern "C" void PWM_IRQHandler(void) pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = *extmodulePulsesData.ppm.ptr++; if (*extmodulePulsesData.ppm.ptr == 0) { setExternalModulePolarity(); - setupPulses(EXTERNAL_MODULE); + setupPulsesExternalModule(); } break; diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index a180e0658..aabd04a3c 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -178,7 +178,7 @@ if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES OR PCB STREQUAL X9LITE) ${TARGET_SRC} ../common/arm/stm32/intmodule_serial_driver.cpp ) -else() +elseif(NOT (PCB STREQUAL X7 AND PCBREV STREQUAL T12)) set(TARGET_SRC ${TARGET_SRC} intmodule_pulses_driver.cpp diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 360726507..cc0e67118 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -199,29 +199,10 @@ uint32_t isBootloaderStart(const uint8_t * buffer); #define IS_INTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == Bit_SET) #endif -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_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 disable_serial(uint8_t module); -void intmoduleStop(); -void intmodulePxxStart(); void intmoduleSerialStart(uint32_t baudrate, uint8_t rxEnable); -#if defined(INTERNAL_MODULE_PPM) -void intmodulePpmStart(void); -#endif void intmoduleSendBuffer(const uint8_t * data, uint8_t size); void intmoduleSendNextFrame(); -void extmoduleStop(); -void extmodulePpmStart(); -void extmodulePxxPulsesStart(); -void extmodulePxxSerialStart(); -void extmodulePxx2Start(); void extmoduleSerialStart(uint32_t baudrate, uint32_t period_half_us, bool inverted); void extmoduleInvertedSerialStart(uint32_t baudrate); void extmoduleSendBuffer(const uint8_t * data, uint8_t size); diff --git a/radio/src/targets/taranis/extmodule_driver.cpp b/radio/src/targets/taranis/extmodule_driver.cpp index 689f0caca..98aa85a89 100644 --- a/radio/src/targets/taranis/extmodule_driver.cpp +++ b/radio/src/targets/taranis/extmodule_driver.cpp @@ -196,20 +196,10 @@ extern "C" void EXTMODULE_USART_IRQHandler(void) status = EXTMODULE_USART->SR; } } - -void extmodulePxx2Start() -{ - extmoduleInvertedSerialStart(PXX2_EXTERNAL_MODULE_BAUDRATE); -} -#else -void extmodulePxx2Start() -{ - // TODO just enable the S.PORT line (or let telemetry init do it) -} #endif #if defined(PXX1) -void extmodulePxxPulsesStart() +void extmodulePxx1PulsesStart() { EXTERNAL_MODULE_ON(); @@ -246,7 +236,7 @@ void extmodulePxxPulsesStart() #endif #if defined(PXX1) && defined(EXTMODULE_USART) -void extmodulePxxSerialStart() +void extmodulePxx1SerialStart() { extmoduleInvertedSerialStart(EXTMODULE_PXX_SERIAL_BAUDRATE); } @@ -340,7 +330,7 @@ extern "C" void EXTMODULE_TIMER_CC_IRQHandler() { EXTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; - if (setupPulses(EXTERNAL_MODULE)) { + if (setupPulsesExternalModule()) { extmoduleSendNextFrame(); } } diff --git a/radio/src/targets/taranis/intmodule_pulses_driver.cpp b/radio/src/targets/taranis/intmodule_pulses_driver.cpp index 29a85674f..6addfd85f 100644 --- a/radio/src/targets/taranis/intmodule_pulses_driver.cpp +++ b/radio/src/targets/taranis/intmodule_pulses_driver.cpp @@ -83,12 +83,7 @@ void intmoduleSendNextFrame() } } -void intmoduleSerialStart(uint32_t baudrate, uint8_t rxEnable) -{ - // nothing, the pulses will be sent through telemetry port -} - -void intmodulePxxStart() +void intmodulePxx1PulsesStart() { INTERNAL_MODULE_ON(); @@ -172,7 +167,7 @@ extern "C" void INTMODULE_TIMER_CC_IRQHandler() { INTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; - if (setupPulses(INTERNAL_MODULE)) { + if (setupPulsesInternalModule()) { intmoduleSendNextFrame(); } } diff --git a/radio/src/targets/taranis/pulses_driver.cpp b/radio/src/targets/taranis/pulses_driver.cpp deleted file mode 100644 index e2cbf8392..000000000 --- a/radio/src/targets/taranis/pulses_driver.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) OpenTX - * - * Based on code named - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "opentx.h" - -#if defined(PXX1) -void init_pxx1_pulses(uint8_t module) -{ - if (module == INTERNAL_MODULE) - intmodulePxxStart(); - else - extmodulePxxPulsesStart(); -} - -void init_pxx1_serial(uint8_t module) -{ - if (module == INTERNAL_MODULE) - intmodulePxxStart(); -#if defined(EXTMODULE_USART) - else - extmodulePxxSerialStart(); -#endif -} - -void disable_pxx1_pulses(uint8_t module) -{ - if (module == INTERNAL_MODULE) - intmoduleStop(); - else - 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_PXX_BAUDRATE, true); - else - extmodulePxx2Start(); -} - -void disable_pxx2(uint8_t module) -{ - if (module == INTERNAL_MODULE) - intmoduleStop(); - else - extmoduleStop(); -} - -#if defined(DSM2) -void disable_serial(uint8_t module) -{ - if (module == EXTERNAL_MODULE) { - extmoduleStop(); - } -} -#endif - -void init_ppm(uint8_t module) -{ - if (module == EXTERNAL_MODULE) { - extmodulePpmStart(); - } -#if defined(INTERNAL_MODULE_PPM) - else { - intmodulePpmStart(); - } -#endif -} - -void disable_ppm(uint8_t module) -{ - if (module == EXTERNAL_MODULE) { - extmoduleStop(); - } -#if defined(INTERNAL_MODULE_PPM) - else { - intmoduleStop(); - } -#endif -} diff --git a/radio/src/tasks.cpp b/radio/src/tasks.cpp index 12685157c..1063b9574 100644 --- a/radio/src/tasks.cpp +++ b/radio/src/tasks.cpp @@ -87,15 +87,16 @@ bool isModuleSynchronous(uint8_t module) void sendSynchronousPulses() { - for (uint8_t module = 0; module < NUM_MODULES; module++) { - if (isModuleSynchronous(module) && setupPulses(module)) { #if defined(HARDWARE_INTERNAL_MODULE) - if (module == INTERNAL_MODULE) - intmoduleSendNextFrame(); + if (isModuleSynchronous(INTERNAL_MODULE)) { + if (setupPulsesInternalModule()) + intmoduleSendNextFrame(); + } #endif - if (module == EXTERNAL_MODULE) - extmoduleSendNextFrame(); - } + + if (isModuleSynchronous(EXTERNAL_MODULE)) { + if (setupPulsesExternalModule()) + extmoduleSendNextFrame(); } }