diff --git a/src/main/config/config.c b/src/main/config/config.c index ffe3afa76..caf1f16e5 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -426,6 +426,7 @@ void activateConfig(void) generatePitchCurve(¤tProfile->controlRateConfig); generateThrottleCurve(¤tProfile->controlRateConfig, &masterConfig.escAndServoConfig); + useRcControlsConfig(currentProfile->modeActivationConditions); useGyroConfig(&masterConfig.gyroConfig); #ifdef TELEMETRY diff --git a/src/main/io/rc_controls.c b/src/main/io/rc_controls.c index 6e431ff81..2b026402a 100644 --- a/src/main/io/rc_controls.c +++ b/src/main/io/rc_controls.c @@ -41,6 +41,8 @@ #include "rx/rx.h" #include "io/rc_controls.h" +static bool isUsingSticksToArm = true; + int16_t rcCommand[4]; // interval [1000;2000] for THROTTLE and [-500;+500] for ROLL/PITCH/YAW uint32_t rcModeActivationMask; // one bit per mode defined in boxId_e @@ -62,7 +64,7 @@ throttleStatus_e calculateThrottleStatus(rxConfig_t *rxConfig, uint16_t deadband -void processRcStickPositions(rxConfig_t *rxConfig, throttleStatus_e throttleStatus, modeActivationCondition_t *modeActivationConditions, bool retarded_arm, bool disarm_kill_switch) +void processRcStickPositions(rxConfig_t *rxConfig, throttleStatus_e throttleStatus, bool retarded_arm, bool disarm_kill_switch) { static uint8_t rcDelayCommand; // this indicates the number of time (multiple of RC measurement at 50Hz) the sticks must be maintained to run or switch off motors static uint8_t rcSticks; // this hold sticks position for command combos @@ -85,8 +87,6 @@ void processRcStickPositions(rxConfig_t *rxConfig, throttleStatus_e throttleStat rcDelayCommand = 0; rcSticks = stTmp; - bool isUsingSticksToArm = true; // FIXME calculate from modeActivationConditions // FIXME this calculation only needs to be done after loading a profile - // perform actions if (!isUsingSticksToArm) { @@ -227,8 +227,9 @@ void processRcStickPositions(rxConfig_t *rxConfig, throttleStatus_e throttleStat #define MAX_AUX_CHANNEL_COUNT (MAX_SUPPORTED_RC_CHANNEL_COUNT - NON_AUX_CHANNEL_COUNT) -#include -void updateRcOptions(modeActivationCondition_t *modeActivationConditions) +#define IS_MODE_RANGE_USABLE(modeActivationCondition) (modeActivationCondition->rangeStartStep < modeActivationCondition->rangeEndStep) + +void updateActivatedModes(modeActivationCondition_t *modeActivationConditions) { rcModeActivationMask = 0; // FIXME implement, use rcData & modeActivationConditions @@ -237,8 +238,7 @@ void updateRcOptions(modeActivationCondition_t *modeActivationConditions) for (index = 0; index < MAX_MODE_ACTIVATION_CONDITION_COUNT; index++) { modeActivationCondition_t *modeActivationCondition = &modeActivationConditions[index]; - if (modeActivationCondition->rangeStartStep == modeActivationCondition->rangeEndStep) { - printf("skipping %d\n", index); + if (!IS_MODE_RANGE_USABLE(modeActivationCondition)) { continue; } @@ -249,3 +249,16 @@ void updateRcOptions(modeActivationCondition_t *modeActivationConditions) } } } + +void useRcControlsConfig(modeActivationCondition_t *modeActivationConditions) +{ + uint8_t index; + + for (index = 0; index < MAX_MODE_ACTIVATION_CONDITION_COUNT; index++) { + modeActivationCondition_t *modeActivationCondition = &modeActivationConditions[index]; + if (modeActivationCondition->modeId == BOXARM && IS_MODE_RANGE_USABLE(modeActivationCondition)) { + isUsingSticksToArm = false; + break; + } + } +} diff --git a/src/main/io/rc_controls.h b/src/main/io/rc_controls.h index 458b1d573..a8727197e 100644 --- a/src/main/io/rc_controls.h +++ b/src/main/io/rc_controls.h @@ -127,8 +127,8 @@ extern int16_t rcCommand[4]; bool areSticksInApModePosition(uint16_t ap_mode); throttleStatus_e calculateThrottleStatus(rxConfig_t *rxConfig, uint16_t deadband3d_throttle); -void processRcStickPositions(rxConfig_t *rxConfig, throttleStatus_e throttleStatus, modeActivationCondition_t *modeActivationConditions, bool retarded_arm, bool disarm_kill_switch); +void processRcStickPositions(rxConfig_t *rxConfig, throttleStatus_e throttleStatus, bool retarded_arm, bool disarm_kill_switch); -void updateRcOptions(modeActivationCondition_t *modeActivationConditions); - +void updateActivatedModes(modeActivationCondition_t *modeActivationConditions); +void useRcControlsConfig(modeActivationCondition_t *modeActivationConditions); diff --git a/src/main/mw.c b/src/main/mw.c index c28d47139..a415cf37e 100755 --- a/src/main/mw.c +++ b/src/main/mw.c @@ -488,13 +488,13 @@ void processRx(void) resetErrorGyro(); } - processRcStickPositions(&masterConfig.rxConfig, throttleStatus, currentProfile->modeActivationConditions, masterConfig.retarded_arm, masterConfig.disarm_kill_switch); + processRcStickPositions(&masterConfig.rxConfig, throttleStatus, masterConfig.retarded_arm, masterConfig.disarm_kill_switch); if (feature(FEATURE_INFLIGHT_ACC_CAL)) { updateInflightCalibrationState(); } - updateRcOptions(currentProfile->modeActivationConditions); + updateActivatedModes(currentProfile->modeActivationConditions); bool canUseHorizonMode = true; diff --git a/src/test/unit/rc_controls_unittest.cc b/src/test/unit/rc_controls_unittest.cc index 74012b433..f81b9a114 100644 --- a/src/test/unit/rc_controls_unittest.cc +++ b/src/test/unit/rc_controls_unittest.cc @@ -37,7 +37,7 @@ int constrain(int amt, int low, int high) return amt; } -TEST(RcControlsTest, updateRcOptionsWithAllInputsAtMidde) +TEST(RcControlsTest, updateActivatedModesWithAllInputsAtMidde) { // given modeActivationCondition_t modeActivationConditions[MAX_MODE_ACTIVATION_CONDITION_COUNT]; @@ -57,7 +57,7 @@ TEST(RcControlsTest, updateRcOptionsWithAllInputsAtMidde) } // when - updateRcOptions(modeActivationConditions); + updateActivatedModes(modeActivationConditions); // then for (index = 0; index < CHECKBOX_ITEM_COUNT; index++) { @@ -66,7 +66,7 @@ TEST(RcControlsTest, updateRcOptionsWithAllInputsAtMidde) } } -TEST(RcControlsTest, updateRcOptionsUsingValidAuxConfigurationAndRXValues) +TEST(RcControlsTest, updateActivatedModesUsingValidAuxConfigurationAndRXValues) { // given modeActivationCondition_t modeActivationConditions[MAX_MODE_ACTIVATION_CONDITION_COUNT]; @@ -148,7 +148,7 @@ TEST(RcControlsTest, updateRcOptionsUsingValidAuxConfigurationAndRXValues) expectedMask |= (0 << 6); // when - updateRcOptions(modeActivationConditions); + updateActivatedModes(modeActivationConditions); // then for (index = 0; index < CHECKBOX_ITEM_COUNT; index++) {