diff --git a/src/Joystick/Joystick.cc b/src/Joystick/Joystick.cc index 36d85721bcc0daa4a9672e44137b36d34c12686d..0ba928d3ffebdd7d471481f29681303cf34a8262 100644 --- a/src/Joystick/Joystick.cc +++ b/src/Joystick/Joystick.cc @@ -55,7 +55,7 @@ Joystick::Joystick(const QString& name, int axisCount, int buttonCount, int hatC , _rgButtonValues(NULL) , _lastButtonBits(0) , _throttleMode(ThrottleModeCenterZero) - , _exponential(false) + , _exponential(0) , _accumulator(false) , _deadband(false) , _activeVehicle(NULL) @@ -109,7 +109,7 @@ void Joystick::_setDefaultCalibration(void) { _rgFunctionAxis[yawFunction] = 0; _rgFunctionAxis[throttleFunction] = 1; - _exponential = false; + _exponential = 0; _accumulator = false; _deadband = false; _throttleMode = ThrottleModeCenterZero; @@ -162,7 +162,7 @@ void Joystick::_loadSettings(void) qCDebug(JoystickLog) << "_loadSettings " << _name; _calibrated = settings.value(_calibratedSettingsKey, false).toBool(); - _exponential = settings.value(_exponentialSettingsKey, false).toBool(); + _exponential = settings.value(_exponentialSettingsKey, 0).toFloat(); _accumulator = settings.value(_accumulatorSettingsKey, false).toBool(); _deadband = settings.value(_deadbandSettingsKey, false).toBool(); @@ -443,16 +443,14 @@ void Joystick::run(void) yaw = std::max(-1.0f, std::min(tanf(asinf(yaw_limited)), 1.0f)); throttle = std::max(-1.0f, std::min(tanf(asinf(throttle_limited)), 1.0f)); - if ( _exponential ) { + if ( _exponential != 0 ) { // Exponential (0% to -50% range like most RC radios) - // 0 for no exponential - // -0.5 for strong exponential - float expo = -0.35f; + //_exponential is set by a slider in joystickConfig.qml // Calculate new RPY with exponential applied - roll = -expo*powf(roll,3) + (1+expo)*roll; - pitch = -expo*powf(pitch,3) + (1+expo)*pitch; - yaw = -expo*powf(yaw,3) + (1+expo)*yaw; + roll = -_exponential*powf(roll,3) + (1+_exponential)*roll; + pitch = -_exponential*powf(pitch,3) + (1+_exponential)*pitch; + yaw = -_exponential*powf(yaw,3) + (1+_exponential)*yaw; } // Adjust throttle to 0:1 range @@ -682,12 +680,12 @@ void Joystick::setThrottleMode(int mode) emit throttleModeChanged(_throttleMode); } -bool Joystick::exponential(void) +float Joystick::exponential(void) { return _exponential; } -void Joystick::setExponential(bool expo) +void Joystick::setExponential(float expo) { _exponential = expo; diff --git a/src/Joystick/Joystick.h b/src/Joystick/Joystick.h index def702b8370d267254a1e7dd6f9af7a5b18691b1..488429843392811cb3fa96acb593b2ae8a7db22d 100644 --- a/src/Joystick/Joystick.h +++ b/src/Joystick/Joystick.h @@ -72,7 +72,7 @@ public: Q_INVOKABLE QString getButtonAction(int button); Q_PROPERTY(int throttleMode READ throttleMode WRITE setThrottleMode NOTIFY throttleModeChanged) - Q_PROPERTY(bool exponential READ exponential WRITE setExponential NOTIFY exponentialChanged) + Q_PROPERTY(float exponential READ exponential WRITE setExponential NOTIFY exponentialChanged) Q_PROPERTY(bool accumulator READ accumulator WRITE setAccumulator NOTIFY accumulatorChanged) Q_PROPERTY(bool requiresCalibration READ requiresCalibration CONSTANT) @@ -106,8 +106,8 @@ public: int throttleMode(void); void setThrottleMode(int mode); - bool exponential(void); - void setExponential(bool expo); + float exponential(void); + void setExponential(float expo); bool accumulator(void); void setAccumulator(bool accu); @@ -141,7 +141,7 @@ signals: void throttleModeChanged(int mode); - void exponentialChanged(bool exponential); + void exponentialChanged(float exponential); void accumulatorChanged(bool accumulator); @@ -206,7 +206,7 @@ protected: ThrottleMode_t _throttleMode; - bool _exponential; + float _exponential; bool _accumulator; bool _deadband; diff --git a/src/QmlControls/QGCSlider.qml b/src/QmlControls/QGCSlider.qml index 1bbd2f18ec6fd3c2e128ae929604548f5656a069..6d4824b533bdb4fb108709be4af17ca784ab20c9 100644 --- a/src/QmlControls/QGCSlider.qml +++ b/src/QmlControls/QGCSlider.qml @@ -13,6 +13,7 @@ import QtQuick.Controls.Styles 1.4 import QGroundControl.Palette 1.0 import QGroundControl.ScreenTools 1.0 +import QtQuick.Controls.Private 1.0 Slider { property var _qgcPal: QGCPalette { colorGroupEnabled: enabled } diff --git a/src/VehicleSetup/JoystickConfig.qml b/src/VehicleSetup/JoystickConfig.qml index 3ac79d475f9f57bfaa7100917a08b03bf2076f31..467bde2e3819a4ee50a902689b138f2e15ffbdae 100644 --- a/src/VehicleSetup/JoystickConfig.qml +++ b/src/VehicleSetup/JoystickConfig.qml @@ -456,12 +456,25 @@ SetupPage { Column { spacing: ScreenTools.defaultFontPixelHeight / 3 - QGCCheckBox { - id: exponential - checked: _activeJoystick ? _activeJoystick.exponential : false - text: qsTr("Use exponential curve on roll, pitch, yaw") + QGCLabel { + id: expoSliderLabel + text: qsTr("Exponential:") + } - onClicked: _activeJoystick.exponential = checked + Row { + QGCSlider { + id: expoSlider + minimumValue: 0 + maximumValue: 0.75 + + Component.onCompleted: value=-_activeJoystick.exponential + onValueChanged: _activeJoystick.exponential=-value + } + + QGCLabel { + id: expoSliderIndicator + text: expoSlider.value.toFixed(2) + } } }