diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 6c677d36fbd..bdb7819275f 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1070,7 +1070,20 @@ void getADC() if (x < 4) v = get_flysky_hall_adc_value(x) >> (1 - ANALOG_SCALE); else - v = getAnalogValue(x) >> (1 - ANALOG_SCALE); + #if defined(RADIO_TX16S) + switch (x) + { + case EXT3: + case EXT4: + v = getAnalogValue(x-7) >> (1 - ANALOG_SCALE); + break; + default: + v = getAnalogValue(x) >> (1 - ANALOG_SCALE); + break; + } + #else + v = getAnalogValue(x) >> (1 - ANALOG_SCALE); + #endif #else v = getAnalogValue(x) >> (1 - ANALOG_SCALE); #endif diff --git a/radio/src/targets/common/arm/stm32/stm32_hal_adc.cpp b/radio/src/targets/common/arm/stm32/stm32_hal_adc.cpp index 94ecabb2a98..4659a528e62 100644 --- a/radio/src/targets/common/arm/stm32/stm32_hal_adc.cpp +++ b/radio/src/targets/common/arm/stm32/stm32_hal_adc.cpp @@ -85,6 +85,10 @@ stm32_hal_adc_channel ADC_MAIN_channels[] = { { ADC_CHANNEL_POT3, ADC_SAMPTIME }, { ADC_CHANNEL_EXT1, ADC_SAMPTIME }, { ADC_CHANNEL_EXT2, ADC_SAMPTIME }, +#if (defined(RADIO_TX16S) && defined(FLYSKY_HALL_STICKS)) + { ADC_CHANNEL_EXT3, ADC_SAMPTIME }, + { ADC_CHANNEL_EXT4, ADC_SAMPTIME }, +#endif { ADC_CHANNEL_SLIDER1, ADC_SAMPTIME }, { ADC_CHANNEL_SLIDER2, ADC_SAMPTIME }, { ADC_CHANNEL_BATT, ADC_SAMPTIME } diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index eba9b5f26fd..1338d466245 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -55,8 +55,13 @@ if (PCB STREQUAL X10) set(TARGET_SRC ${TARGET_SRC} ../common/arm/stm32/audio_dac_driver.cpp - ../common/arm/stm32/sticks_pwm_driver.cpp ) + if (NOT PCBREV STREQUAL TX16S) + set(TARGET_SRC + ${TARGET_SRC} + ../common/arm/stm32/sticks_pwm_driver.cpp + ) + endif() set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} ../common/arm/stm32/stm32_hal_adc.cpp diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 641d60acf63..ee74a331a39 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -335,7 +335,11 @@ void watchdogInit(unsigned int duration); // ADC driver #if defined(PCBX10) -#define NUM_POTS 5 + #if defined(RADIO_TX16S) && defined(FLYSKY_HALL_STICKS) + #define NUM_POTS 7 + #else + #define NUM_POTS 5 + #endif #else #define NUM_POTS 3 #endif @@ -345,7 +349,11 @@ void watchdogInit(unsigned int duration); #if defined(PCBX10) #define NUM_SLIDERS 2 - #define NUM_PWMSTICKS 4 + #if defined(RADIO_TX16S) + #define NUM_PWMSTICKS 0 + #else + #define NUM_PWMSTICKS 4 + #endif #else #define NUM_SLIDERS 4 #define NUM_PWMSTICKS 0 @@ -365,6 +373,10 @@ enum Analogs { #if defined(PCBX10) EXT1, EXT2, +#endif +#if defined(RADIO_TX16S) && defined(FLYSKY_HALL_STICKS) + EXT3, + EXT4, #endif POT_LAST = POT_FIRST + NUM_POTS - 1, SLIDER_FIRST, @@ -406,8 +418,12 @@ enum Analogs { #define HARDWARE_POT3 #if !defined(PCBX12S) // ext are used by mouse on X12S -#define HARDWARE_EXT1 -#define HARDWARE_EXT2 + #define HARDWARE_EXT1 + #define HARDWARE_EXT2 + #if (defined(RADIO_TX16S) && defined(FLYSKY_HALL_STICKS)) + #define HARDWARE_EXT3 + #define HARDWARE_EXT4 + #endif #endif enum CalibratedAnalogs { @@ -428,6 +444,10 @@ enum CalibratedAnalogs { #else CALIBRATED_POT_EXT1, CALIBRATED_POT_EXT2, + #if (defined(RADIO_TX16S) && defined(FLYSKY_HALL_STICKS)) + CALIBRATED_POT_EXT3, + CALIBRATED_POT_EXT4, + #endif CALIBRATED_SLIDER_REAR_LEFT, CALIBRATED_SLIDER_REAR_RIGHT, #endif diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 86a458deabc..dc89a1bca0b 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -282,10 +282,15 @@ #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_DMA2) #define ADC_RCC_APB1Periph (RCC_APB1Periph_TIM5) #define ADC_RCC_APB2Periph (RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC3) - #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_0 // PA.00 - #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_1 // PA.01 - #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_2 // PA.02 - #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_3 // PA.03 + #if !(defined(RADIO_TX16S) && defined(FLYSKY_HALL_STICKS)) + #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_0 // PA.00 + #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_1 // PA.01 + #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_2 // PA.02 + #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_3 // PA.03 + #else + #define ADC_GPIO_PIN_EXT3 GPIO_Pin_2 // PA.02 + #define ADC_GPIO_PIN_EXT4 GPIO_Pin_3 // PA.03 + #endif #define ADC_GPIO_PIN_POT1 GPIO_Pin_0 // PC.00 #define ADC_GPIO_PIN_POT2 GPIO_Pin_1 // PC.01 #define ADC_GPIO_PIN_POT3 GPIO_Pin_2 // PC.02 @@ -294,14 +299,20 @@ #define ADC_GPIO_PIN_BATT GPIO_Pin_7 // PF.07 #define ADC_GPIO_PIN_EXT1 GPIO_Pin_8 // PF.08 #define ADC_GPIO_PIN_EXT2 GPIO_Pin_9 // PF.09 - #define PWM_TIMER TIM5 - #define PWM_GPIO GPIOA - #define PWM_GPIO_AF GPIO_AF_TIM5 - #define PWM_IRQHandler TIM5_IRQHandler - #define PWM_IRQn TIM5_IRQn - #define PWM_GPIOA_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3) - #if !defined(FLYSKY_HALL_STICKS) - #define ADC_GPIOA_PINS (STICKS_PWM_ENABLED() ? 0 : (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3)) + #if !defined(RADIO_TX16S) + #define PWM_TIMER TIM5 + #define PWM_GPIO GPIOA + #define PWM_GPIO_AF GPIO_AF_TIM5 + #define PWM_IRQHandler TIM5_IRQHandler + #define PWM_IRQn TIM5_IRQn + #define PWM_GPIOA_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3) + #endif + #if defined(FLYSKY_HALL_STICKS) + #if defined (RADIO_TX16S) + #define ADC_GPIOA_PINS (GPIO_Pin_2 | GPIO_Pin_3) + #endif + #else + #define ADC_GPIOA_PINS (STICKS_PWM_ENABLED() ? 0 : (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3)) #endif #define ADC_GPIOC_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3) #define ADC_GPIOF_PINS (GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9) @@ -317,6 +328,10 @@ #define ADC_CHANNEL_BATT ADC_Channel_5 // ADC3_IN5 #define ADC_CHANNEL_EXT1 ADC_Channel_6 // ADC3_IN6 #define ADC_CHANNEL_EXT2 ADC_Channel_7 // ADC3_IN7 +#if (defined(RADIO_TX16S) && defined(FLYSKY_HALL_STICKS)) + #define ADC_CHANNEL_EXT3 ADC_Channel_2 // ADC3_IN2 + #define ADC_CHANNEL_EXT4 ADC_Channel_3 // ADC3_IN3 +#endif #define ADC_MAIN ADC3 #define ADC_EXT ADC1 #define ADC_SAMPTIME 3 diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index cb85b782556..ce5c6df665a 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -33,7 +33,11 @@ #define TR_POTS_VSRCRAW STR_CHAR_POT"S1\0" STR_CHAR_POT"6P\0" STR_CHAR_POT"S2\0" STR_CHAR_TRIM "L1\0" STR_CHAR_TRIM "L2\0" STR_CHAR_SLIDER"LS\0" STR_CHAR_SLIDER"RS\0" STR_CHAR_POT"JSx" STR_CHAR_POT"JSy" #define TR_SW_VSRCRAW STR_CHAR_SWITCH"SA\0" STR_CHAR_SWITCH"SB\0" STR_CHAR_SWITCH"SC\0" STR_CHAR_SWITCH"SD\0" STR_CHAR_SWITCH"SE\0" STR_CHAR_SWITCH"SF\0" STR_CHAR_SWITCH"SG\0" STR_CHAR_SWITCH"SH\0" STR_CHAR_SWITCH"SI\0" STR_CHAR_SWITCH"SJ\0" #elif defined(PCBX10) - #define TR_POTS_VSRCRAW STR_CHAR_POT"S1\0" STR_CHAR_POT"6P\0" STR_CHAR_POT"S2\0" STR_CHAR_POT"EX1" STR_CHAR_POT"EX2" STR_CHAR_SLIDER"LS\0" STR_CHAR_SLIDER"RS\0" STR_CHAR_POT"JSx" STR_CHAR_POT"JSy" + #if defined (RADIO_TX16S) && defined(FLYSKY_HALL_STICKS) + #define TR_POTS_VSRCRAW STR_CHAR_POT"S1\0" STR_CHAR_POT"6P\0" STR_CHAR_POT"S2\0" STR_CHAR_POT"EX1" STR_CHAR_POT"EX2" STR_CHAR_POT"EX3" STR_CHAR_POT"EX4" STR_CHAR_SLIDER"LS\0" STR_CHAR_SLIDER"RS\0" STR_CHAR_POT"JSx" STR_CHAR_POT"JSy" + #else + #define TR_POTS_VSRCRAW STR_CHAR_POT"S1\0" STR_CHAR_POT"6P\0" STR_CHAR_POT"S2\0" STR_CHAR_POT"EX1" STR_CHAR_POT"EX2" STR_CHAR_SLIDER"LS\0" STR_CHAR_SLIDER"RS\0" STR_CHAR_POT"JSx" STR_CHAR_POT"JSy" + #endif #define TR_SW_VSRCRAW STR_CHAR_SWITCH"SA\0" STR_CHAR_SWITCH"SB\0" STR_CHAR_SWITCH"SC\0" STR_CHAR_SWITCH"SD\0" STR_CHAR_SWITCH"SE\0" STR_CHAR_SWITCH"SF\0" STR_CHAR_SWITCH"SG\0" STR_CHAR_SWITCH"SH\0" STR_CHAR_SWITCH"SI\0" STR_CHAR_SWITCH"SJ\0" #elif defined(PCBX9E) #define TR_POTS_VSRCRAW STR_CHAR_POT"F1\0" STR_CHAR_POT"F2\0" STR_CHAR_POT"F3\0" STR_CHAR_POT"F4\0" STR_CHAR_SLIDER"S1\0" STR_CHAR_SLIDER"S2\0" STR_CHAR_SLIDER"LS\0" STR_CHAR_SLIDER"RS\0"