diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index de2fc6316..905db3994 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -293,7 +293,9 @@ enum BeeperMode { enum TrainerMode { TRAINER_MODE_MASTER_TRAINER_JACK, TRAINER_MODE_SLAVE, +#if defined(PCBTARANIS) TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE, +#endif TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE, TRAINER_MODE_MASTER_BATTERY_COMPARTMENT, }; diff --git a/radio/src/gui/gui_helpers.cpp b/radio/src/gui/gui_helpers.cpp index 3c4c78892..b6b6ee7fb 100644 --- a/radio/src/gui/gui_helpers.cpp +++ b/radio/src/gui/gui_helpers.cpp @@ -487,7 +487,15 @@ bool isRfProtocolAvailable(int protocol) return true; } -#if defined(PCBHORUS) || defined(PCBTARANIS) +#if defined(PCBHORUS) +bool isTrainerModeAvailable(int mode) +{ + if (IS_EXTERNAL_MODULE_PRESENT() && mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) + return false; + else + return true; +} +#elif defined(PCBTARANIS) bool isTrainerModeAvailable(int mode) { if (IS_EXTERNAL_MODULE_PRESENT() && (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)) diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 0c6457f56..66b1e8443 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -55,9 +55,12 @@ #define SET_DEFAULT_PPM_FRAME_LENGTH(idx) g_model.moduleData[idx].ppm.frameLength = 4 * max((int8_t)0, g_model.moduleData[idx].channelsCount) -#if defined(PCBTARANIS) || defined(PCBHORUS) - #define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerMode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) - #define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.serial2Mode==UART_MODE_SBUS_TRAINER/* || g_eeGeneral.serial2Mode==UART_MODE_CPPM_TRAINER*/) +#if defined(PCBHORUS) + #define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) + #define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.serial2Mode==UART_MODE_SBUS_TRAINER) +#elif defined(PCBTARANIS) + #define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerMode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) + #define HAS_WIRELESS_TRAINER_HARDWARE() (g_eeGeneral.serial2Mode==UART_MODE_SBUS_TRAINER) #endif #if defined(VOICE) diff --git a/radio/src/targets/horus/board_horus.cpp b/radio/src/targets/horus/board_horus.cpp index b1fd8f972..89fe39533 100644 --- a/radio/src/targets/horus/board_horus.cpp +++ b/radio/src/targets/horus/board_horus.cpp @@ -120,6 +120,7 @@ void boardInit() SERIAL_RCC_AHB1Periph | TELEMETRY_RCC_AHB1Periph | TRAINER_RCC_AHB1Periph | + HEARTBEAT_RCC_AHB1Periph | AUDIO_RCC_AHB1Periph | HAPTIC_RCC_AHB1Periph | INTMODULE_RCC_AHB1Periph | @@ -237,9 +238,6 @@ void checkTrainerSettings() case TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE: stop_cppm_on_heartbeat_capture() ; break; - case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE: - stop_sbus_on_heartbeat_capture() ; - break; case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: serial2Stop(); } @@ -252,9 +250,6 @@ void checkTrainerSettings() case TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE: init_cppm_on_heartbeat_capture() ; break; - case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE: - init_sbus_on_heartbeat_capture() ; - break; case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: if (g_eeGeneral.serial2Mode == UART_MODE_SBUS_TRAINER) { serial2SbusInit(); diff --git a/radio/src/targets/horus/board_horus.h b/radio/src/targets/horus/board_horus.h index c1a93a757..d9a16812e 100644 --- a/radio/src/targets/horus/board_horus.h +++ b/radio/src/targets/horus/board_horus.h @@ -89,6 +89,7 @@ extern "C" { #define PIN_PORTA 0x0000 #define PIN_PORTB 0x0100 #define PIN_PORTC 0x0200 +#define PIN_PORTD 0x0300 #define PIN_PORTF 0x0500 #define PIN_PER_1 0x0010 #define PIN_PER_2 0x0020 @@ -182,8 +183,6 @@ void init_trainer_capture(void); void stop_trainer_capture(void); void init_cppm_on_heartbeat_capture(void); void stop_cppm_on_heartbeat_capture(void); -void init_sbus_on_heartbeat_capture(void); -void stop_sbus_on_heartbeat_capture(void); void set_trainer_ppm_parameters(uint32_t idleTime, uint32_t delay, uint32_t positive); // Keys driver diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 3b1886bfc..f6209f3c9 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -174,16 +174,6 @@ #define TELEMETRY_DMA_TX_IRQHandler DMA1_Stream6_IRQHandler #define TELEMETRY_DMA_TX_FLAG_TC DMA_IT_TCIF6 -// Heartbeat -#define HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD -// #define HEARTBEAT_RCC_APB2Periph RCC_APB2Periph_USART3 -#define HEARTBEAT_GPIO_PIN GPIO_Pin_12 // PD.12 -// #define HEARTBEAT_GPIO_PinSource GPIO_PinSource12 -// #define HEARTBEAT_GPIO_AF GPIO_AF_USART3 -// #define HEARTBEAT_USART USART3 -// #define HEARTBEAT_USART_IRQHandler USART3_IRQHandler -// #define HEARTBEAT_USART_IRQn USART3_IRQn - // USB #define USB_RCC_AHB1Periph_GPIO RCC_AHB1Periph_GPIOA #define USB_GPIO GPIOA @@ -316,9 +306,17 @@ #define TRAINER_GPIO_PIN_DETECT GPIO_Pin_4 // PB.04 #define TRAINER_TIMER TIM3 #define TRAINER_TIMER_IRQn TIM3_IRQn +#define TRAINER_TIMER_IRQHandler TIM3_IRQHandler #define TRAINER_GPIO_PinSource_IN GPIO_PinSource6 #define TRAINER_GPIO_AF GPIO_AF_TIM3 +// Heartbeat +#define HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD +#define HEARTBEAT_GPIO_PIN GPIO_Pin_12 // PD.12 +#define HEARTBEAT_TIMER TIM4 +#define HEARTBEAT_TIMER_IRQn TIM4_IRQn +#define HEARTBEAT_TIMER_IRQHandler TIM4_IRQHandler + // 5ms Interrupt #define INTERRUPT_5MS_APB1Periph RCC_APB1Periph_TIM14 #define INTERRUPT_5MS_TIMER TIM14 diff --git a/radio/src/targets/horus/trainer_driver.cpp b/radio/src/targets/horus/trainer_driver.cpp index 96ccb28a0..ac0463ec6 100644 --- a/radio/src/targets/horus/trainer_driver.cpp +++ b/radio/src/targets/horus/trainer_driver.cpp @@ -20,8 +20,6 @@ #include "opentx.h" -extern Fifo sbusFifo; - #define setupTrainerPulses() setupPulsesPPM(TRAINER_MODULE) void init_trainer_ppm() @@ -52,7 +50,6 @@ void init_trainer_ppm() NVIC_SetPriority(TRAINER_TIMER_IRQn, 7); } -// TODO - testing void stop_trainer_ppm() { configure_pins(TRAINER_GPIO_PIN_OUT, PIN_INPUT | PIN_PORTC); // Pin as input @@ -68,7 +65,6 @@ void set_trainer_ppm_parameters(uint32_t idleTime, uint32_t delay, uint32_t posi TRAINER_TIMER->CCER = TIM_CCER_CC2E | (positive ? TIM_CCER_CC2P : 0); } -// Trainer capture, PC8, Timer 3 channel 3 void init_trainer_capture() { GPIO_InitTypeDef GPIO_InitStructure; @@ -101,9 +97,10 @@ void stop_trainer_capture() } #if !defined(SIMU) -extern "C" void TIM3_IRQHandler() +extern "C" void TRAINER_TIMER_IRQHandler() { - DEBUG_INTERRUPT(INT_TIM3); + DEBUG_INTERRUPT(INT_TRAINER); + uint16_t capture = 0; bool doCapture = false; @@ -116,14 +113,6 @@ extern "C" void TIM3_IRQHandler() } } - if ((TRAINER_TIMER->DIER & TIM_DIER_CC2IE ) && ( TRAINER_TIMER->SR & TIM_SR_CC2IF)) { - // capture mode on heartbeat pin (external module) - capture = TRAINER_TIMER->CCR2; - if (currentTrainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) { - doCapture = true; - } - } - if (doCapture) { captureTrainerPulses(capture); } @@ -146,109 +135,57 @@ extern "C" void TIM3_IRQHandler() if ((TRAINER_TIMER->DIER & TIM_DIER_UIE) && (TRAINER_TIMER->SR & TIM_SR_UIF)) { TRAINER_TIMER->SR &= ~TIM_SR_UIF; // Clear flag TRAINER_TIMER->ARR = *trainerPulsesData.ppm.ptr++; - if ( *trainerPulsesData.ppm.ptr == 0 ) { + if (*trainerPulsesData.ppm.ptr == 0) { TRAINER_TIMER->SR &= ~TIM_SR_CC1IF; // Clear this flag TRAINER_TIMER->DIER |= TIM_DIER_CC1IE; // Enable this interrupt } } } + +extern "C" void HEARTBEAT_TIMER_IRQHandler() +{ + uint16_t capture = 0; + bool doCapture = false; + + if ((HEARTBEAT_TIMER->DIER & TIM_DIER_CC2IE ) && (HEARTBEAT_TIMER->SR & TIM_SR_CC2IF)) { + // capture mode on heartbeat pin (external module) + capture = HEARTBEAT_TIMER->CCR2; + if (currentTrainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) { + doCapture = true; + } + } + + if (doCapture) { + captureTrainerPulses(capture); + } +} #endif void init_cppm_on_heartbeat_capture(void) { EXTERNAL_MODULE_ON(); - configure_pins(HEARTBEAT_GPIO_PIN, PIN_PERIPHERAL | PIN_PORTC | PIN_PER_2); + configure_pins(HEARTBEAT_GPIO_PIN, PIN_PERIPHERAL | PIN_PORTD | PIN_PER_2); - TRAINER_TIMER->ARR = 0xFFFF; - TRAINER_TIMER->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 2000000 - 1; // 0.5uS - TRAINER_TIMER->CR2 = 0; - TRAINER_TIMER->CCMR1 = TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_CC2S_0; - TRAINER_TIMER->CCER = TIM_CCER_CC2E; - TRAINER_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag - TRAINER_TIMER->DIER |= TIM_DIER_CC2IE; - TRAINER_TIMER->CR1 = TIM_CR1_CEN; - NVIC_SetPriority(TRAINER_TIMER_IRQn, 7); - NVIC_EnableIRQ(TRAINER_TIMER_IRQn); + HEARTBEAT_TIMER->ARR = 0xFFFF; + HEARTBEAT_TIMER->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 2000000 - 1; // 0.5uS + HEARTBEAT_TIMER->CR2 = 0; + HEARTBEAT_TIMER->CCMR1 = TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_CC2S_0; + HEARTBEAT_TIMER->CCER = TIM_CCER_CC2E; + HEARTBEAT_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag + HEARTBEAT_TIMER->DIER |= TIM_DIER_CC2IE; + HEARTBEAT_TIMER->CR1 = TIM_CR1_CEN; + NVIC_SetPriority(HEARTBEAT_TIMER_IRQn, 7); + NVIC_EnableIRQ(HEARTBEAT_TIMER_IRQn); } void stop_cppm_on_heartbeat_capture(void) { - TRAINER_TIMER->DIER = 0; - TRAINER_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter - NVIC_DisableIRQ(TRAINER_TIMER_IRQn); // Stop Interrupt + HEARTBEAT_TIMER->DIER = 0; + HEARTBEAT_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter + NVIC_DisableIRQ(HEARTBEAT_TIMER_IRQn); // Stop Interrupt if (!IS_EXTERNAL_MODULE_PRESENT()) { EXTERNAL_MODULE_OFF(); } } - -void init_sbus_on_heartbeat_capture() -{ - EXTERNAL_MODULE_ON(); - - #if 0 - USART_InitTypeDef USART_InitStructure; - GPIO_InitTypeDef GPIO_InitStructure; - - GPIO_PinAFConfig(GPIOC, HEARTBEAT_GPIO_PinSource, HEARTBEAT_GPIO_AF); - - GPIO_InitStructure.GPIO_Pin = HEARTBEAT_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_Init(GPIOC, &GPIO_InitStructure); - - USART_InitStructure.USART_BaudRate = 100000; - USART_InitStructure.USART_WordLength = USART_WordLength_9b; - USART_InitStructure.USART_StopBits = USART_StopBits_1; - USART_InitStructure.USART_Parity = USART_Parity_Even; - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; - USART_InitStructure.USART_Mode = USART_Mode_Rx; - - USART_Init(HEARTBEAT_USART, &USART_InitStructure); - USART_Cmd(HEARTBEAT_USART, ENABLE); - USART_ITConfig(HEARTBEAT_USART, USART_IT_RXNE, ENABLE); - - NVIC_SetPriority(HEARTBEAT_USART_IRQn, 6); - NVIC_EnableIRQ(HEARTBEAT_USART_IRQn); - #endif -} - -void stop_sbus_on_heartbeat_capture(void) -{ - #if 0 - configure_pins(HEARTBEAT_GPIO_PIN, PIN_INPUT | PIN_PORTC); - NVIC_DisableIRQ(HEARTBEAT_USART_IRQn); - #endif - if (!IS_EXTERNAL_MODULE_PRESENT()) { - EXTERNAL_MODULE_OFF(); - } -} - -#if 0 // !defined(SIMU) && !defined(REV9E) -extern "C" void HEARTBEAT_USART_IRQHandler() -{ - uint32_t status; - uint8_t data; - - status = HEARTBEAT_USART->SR; - - while (status & (USART_FLAG_RXNE | USART_FLAG_ERRORS)) { - data = HEARTBEAT_USART->DR; - - if (!(status & USART_FLAG_ERRORS)) { - if (currentTrainerMode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE) - sbusFifo.push(data); - } - - status = HEARTBEAT_USART->SR; - } -} -#endif - -int sbusGetByte(uint8_t * byte) -{ - return false; -} diff --git a/radio/src/targets/taranis/trainer_driver.cpp b/radio/src/targets/taranis/trainer_driver.cpp index 125c7156d..f4e2cdce2 100644 --- a/radio/src/targets/taranis/trainer_driver.cpp +++ b/radio/src/targets/taranis/trainer_driver.cpp @@ -37,8 +37,8 @@ void init_trainer_ppm() setupTrainerPulses(); TRAINER_TIMER->ARR = *trainerPulsesData.ppm.ptr++; - TRAINER_TIMER->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 2000000 - 1; // 0.5uS - TRAINER_TIMER->CCMR2 = TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4PE; // PWM mode 1 + TRAINER_TIMER->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 2000000 - 1; // 0.5uS + TRAINER_TIMER->CCMR2 = TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4PE; // PWM mode 1 TRAINER_TIMER->BDTR = TIM_BDTR_MOE; TRAINER_TIMER->EGR = 1; @@ -52,12 +52,11 @@ void init_trainer_ppm() NVIC_SetPriority(TRAINER_TIMER_IRQn, 7); } -// TODO - testing void stop_trainer_ppm() { - configure_pins( TRAINER_GPIO_PIN_OUT, PIN_INPUT | PIN_PORTC ); // Pin as input - TRAINER_TIMER->DIER = 0; // Stop Interrupt - TRAINER_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter + configure_pins(TRAINER_GPIO_PIN_OUT, PIN_INPUT | PIN_PORTC); // Pin as input + TRAINER_TIMER->DIER = 0; // Stop Interrupt + TRAINER_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter NVIC_DisableIRQ(TRAINER_TIMER_IRQn); // Stop Interrupt } @@ -68,7 +67,6 @@ void set_trainer_ppm_parameters(uint32_t idleTime, uint32_t delay, uint32_t posi TRAINER_TIMER->CCER = TIM_CCER_CC4E | (positive ? TIM_CCER_CC4P : 0); } -// Trainer capture, PC8, Timer 3 channel 3 void init_trainer_capture() { GPIO_InitTypeDef GPIO_InitStructure; @@ -82,11 +80,11 @@ void init_trainer_capture() GPIO_PinAFConfig(TRAINER_GPIO, TRAINER_GPIO_PinSource_IN, TRAINER_GPIO_AF); TRAINER_TIMER->ARR = 0xFFFF; - TRAINER_TIMER->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 2000000 - 1; // 0.5uS + TRAINER_TIMER->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 2000000 - 1; // 0.5uS TRAINER_TIMER->CR2 = 0; TRAINER_TIMER->CCMR2 = TIM_CCMR2_IC3F_0 | TIM_CCMR2_IC3F_1 | TIM_CCMR2_CC3S_0; TRAINER_TIMER->CCER = TIM_CCER_CC3E; - TRAINER_TIMER->SR &= ~TIM_SR_CC3IF & ~TIM_SR_CC2IF & ~TIM_SR_UIF; // Clear flags + TRAINER_TIMER->SR &= ~TIM_SR_CC3IF & ~TIM_SR_CC2IF & ~TIM_SR_UIF; // Clear flags TRAINER_TIMER->DIER |= TIM_DIER_CC3IE; TRAINER_TIMER->CR1 = TIM_CR1_CEN; NVIC_EnableIRQ(TRAINER_TIMER_IRQn); @@ -95,9 +93,9 @@ void init_trainer_capture() void stop_trainer_capture() { - TRAINER_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter - TRAINER_TIMER->DIER = 0; // Stop Interrupt - NVIC_DisableIRQ(TRAINER_TIMER_IRQn); // Stop Interrupt + TRAINER_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter + TRAINER_TIMER->DIER = 0; // Stop Interrupt + NVIC_DisableIRQ(TRAINER_TIMER_IRQn); // Stop Interrupt } #if !defined(SIMU) @@ -108,7 +106,7 @@ extern "C" void TIM3_IRQHandler() bool doCapture = false; // What mode? in or out? - if ( (TRAINER_TIMER->DIER & TIM_DIER_CC3IE ) && ( TRAINER_TIMER->SR & TIM_SR_CC3IF ) ) { + if ((TRAINER_TIMER->DIER & TIM_DIER_CC3IE) && (TRAINER_TIMER->SR & TIM_SR_CC3IF)) { // capture mode on trainer jack capture = TRAINER_TIMER->CCR3; if (TRAINER_CONNECTED() && currentTrainerMode == TRAINER_MODE_MASTER_TRAINER_JACK) { @@ -116,7 +114,7 @@ extern "C" void TIM3_IRQHandler() } } - if ( ( TRAINER_TIMER->DIER & TIM_DIER_CC2IE ) && ( TRAINER_TIMER->SR & TIM_SR_CC2IF ) ) { + if ((TRAINER_TIMER->DIER & TIM_DIER_CC2IE) && (TRAINER_TIMER->SR & TIM_SR_CC2IF)) { // capture mode on heartbeat pin (external module) capture = TRAINER_TIMER->CCR2; if (currentTrainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) { @@ -129,26 +127,26 @@ extern "C" void TIM3_IRQHandler() } // PPM out compare interrupt - if ( ( TRAINER_TIMER->DIER & TIM_DIER_CC1IE ) && ( TRAINER_TIMER->SR & TIM_SR_CC1IF ) ) { + if ((TRAINER_TIMER->DIER & TIM_DIER_CC1IE) && (TRAINER_TIMER->SR & TIM_SR_CC1IF)) { // compare interrupt - TRAINER_TIMER->DIER &= ~TIM_DIER_CC1IE; // stop this interrupt - TRAINER_TIMER->SR &= ~TIM_SR_CC1IF; // Clear flag + TRAINER_TIMER->DIER &= ~TIM_DIER_CC1IE; // stop this interrupt + TRAINER_TIMER->SR &= ~TIM_SR_CC1IF; // Clear flag setupTrainerPulses(); trainerPulsesData.ppm.ptr = trainerPulsesData.ppm.pulses; TRAINER_TIMER->DIER |= TIM_DIER_UDE; - TRAINER_TIMER->SR &= ~TIM_SR_UIF; // Clear this flag - TRAINER_TIMER->DIER |= TIM_DIER_UIE; // Enable this interrupt + TRAINER_TIMER->SR &= ~TIM_SR_UIF; // Clear this flag + TRAINER_TIMER->DIER |= TIM_DIER_UIE; // Enable this interrupt } // PPM out update interrupt - if ( (TRAINER_TIMER->DIER & TIM_DIER_UIE) && ( TRAINER_TIMER->SR & TIM_SR_UIF ) ) { - TRAINER_TIMER->SR &= ~TIM_SR_UIF; // Clear flag + if ((TRAINER_TIMER->DIER & TIM_DIER_UIE) && (TRAINER_TIMER->SR & TIM_SR_UIF)) { + TRAINER_TIMER->SR &= ~TIM_SR_UIF; // Clear flag TRAINER_TIMER->ARR = *trainerPulsesData.ppm.ptr++; - if ( *trainerPulsesData.ppm.ptr == 0 ) { - TRAINER_TIMER->SR &= ~TIM_SR_CC1IF; // Clear this flag - TRAINER_TIMER->DIER |= TIM_DIER_CC1IE; // Enable this interrupt + if (*trainerPulsesData.ppm.ptr == 0) { + TRAINER_TIMER->SR &= ~TIM_SR_CC1IF; // Clear this flag + TRAINER_TIMER->DIER |= TIM_DIER_CC1IE; // Enable this interrupt } } } diff --git a/radio/src/translations.h b/radio/src/translations.h index d8b26aa48..89fe60776 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -71,6 +71,18 @@ #define BUTTON(x) "[" x "]" #endif +#define TR_VTRAINER_MASTER_JACK "Master/Jack\0 " +#define TR_VTRAINER_SLAVE_JACK "Slave/Jack\0 " +#define TR_VTRAINER_MASTER_SBUS_MODULE "Master/SBUS Module" +#define TR_VTRAINER_MASTER_CPPM_MODULE "Master/CPPM Module" +#define TR_VTRAINER_MASTER_BATTERY "Master/Battery\0" + +#if defined(PCBTARANIS) +#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY +#elif defined(PCBHORUS) +#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY +#endif + // The non-0-terminated-strings extern const pm_char STR_OPEN9X[]; diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 8d75da291..a63cea973 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -585,8 +585,12 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ON\0""THs""TH%""THt" -#define LEN_VTRAINERMODES "\022" -#define TR_VTRAINERMODES "Master/Jack\0 ""Slave/Jack\0 ""Master/SBUS Module""Master/CPPM Module""Master/Battery\0" +#define LEN_VTRAINERMODES "\022" +#define TR_VTRAINER_MASTER_JACK "Master/Jack\0 " +#define TR_VTRAINER_SLAVE_JACK "Slave/Jack\0 " +#define TR_VTRAINER_MASTER_SBUS_MODULE "Master/SBUS Module" +#define TR_VTRAINER_MASTER_CPPM_MODULE "Master/CPPM Module" +#define TR_VTRAINER_MASTER_BATTERY "Master/Battery\0" #define LEN_VFAILSAFE "\011" #define TR_VFAILSAFE "Not set\0 ""Hold\0 ""Custom\0 ""No pulses""Receiver\0"