diff --git a/src/Joystick/Joystick.cc b/src/Joystick/Joystick.cc index 295b0287c9d0424fc70867ab84ac493b1c904e3a..17ce67b478e49a66e087359aeef9597b0df59c3f 100644 --- a/src/Joystick/Joystick.cc +++ b/src/Joystick/Joystick.cc @@ -199,14 +199,12 @@ void Joystick::_saveSettings(void) } /// Adjust the raw axis value to the -1:1 range given calibration information -float Joystick::_adjustRange(int value, Calibration_t calibration) +float Joystick::_adjustRange(int value, Calibration_t calibration, bool withDeadbands) { float valueNormalized; float axisLength; float axisBasis; - - if (value > calibration.center) { axisBasis = 1.0f; valueNormalized = value - calibration.center; @@ -217,7 +215,7 @@ float Joystick::_adjustRange(int value, Calibration_t calibration) axisLength = calibration.center - calibration.min; } - if (_deadband) { + if (withDeadbands) { if (valueNormalized>calibration.deadband) valueNormalized-=calibration.deadband; else if (valueNormalized<-calibration.deadband) valueNormalized+=calibration.deadband; else valueNormalized = 0.f; @@ -290,16 +288,16 @@ void Joystick::run(void) if (_calibrationMode != CalibrationModeCalibrating) { int axis = _rgFunctionAxis[rollFunction]; - float roll = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis]); + float roll = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis], _deadband); axis = _rgFunctionAxis[pitchFunction]; - float pitch = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis]); + float pitch = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis], _deadband); axis = _rgFunctionAxis[yawFunction]; - float yaw = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis]); + float yaw = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis],_deadband); axis = _rgFunctionAxis[throttleFunction]; - float throttle = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis]); + float throttle = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis], _throttleMode==ThrottleModeDownZero?false:_deadband); if ( _accumulator ) { static float throttle_accu = 0.f; @@ -546,6 +544,11 @@ void Joystick::setThrottleMode(int mode) } _throttleMode = (ThrottleMode_t)mode; + + if (_throttleMode == ThrottleModeDownZero) { + setAccumulator(false); + } + _saveSettings(); emit throttleModeChanged(_throttleMode); } diff --git a/src/Joystick/Joystick.h b/src/Joystick/Joystick.h index 10f97828bc3ff22c7aac1f0703728c949d4edfdc..c9915eae20d1c7d6d29600948e7e4493cbc7bbc7 100644 --- a/src/Joystick/Joystick.h +++ b/src/Joystick/Joystick.h @@ -143,7 +143,7 @@ signals: protected: void _saveSettings(void); void _loadSettings(void); - float _adjustRange(int value, Calibration_t calibration); + float _adjustRange(int value, Calibration_t calibration, bool withDeadbands); void _buttonAction(const QString& action); bool _validAxis(int axis); bool _validButton(int button); diff --git a/src/VehicleSetup/JoystickConfig.qml b/src/VehicleSetup/JoystickConfig.qml index 2a62c11341810a1e236d5797a2038b673d4c333a..503c6be53598527acd296f3b319db50ffa7afe3c 100644 --- a/src/VehicleSetup/JoystickConfig.qml +++ b/src/VehicleSetup/JoystickConfig.qml @@ -422,21 +422,6 @@ SetupPage { } } - Row { - x: 20 - width: parent.width - spacing: ScreenTools.defaultFontPixelWidth - visible: _activeJoystick.throttleMode == 0 - - QGCCheckBox { - id: deadband - checked: controller.deadbandToggle - text: qsTr("Deadbands") - - onClicked: controller.deadbandToggle = checked - } - } - QGCRadioButton { exclusiveGroup: throttleModeExclusiveGroup text: qsTr("Full down stick is zero throttle") @@ -490,6 +475,20 @@ SetupPage { onActivated: _activeVehicle.joystickMode = index } } + + Row { + width: parent.width + spacing: ScreenTools.defaultFontPixelWidth + visible: advancedSettings.checked + + QGCCheckBox { + id: deadband + checked: controller.deadbandToggle + text: qsTr("Deadbands") + + onClicked: controller.deadbandToggle = checked + } + } } } // Column - left column