Unverified Commit 7df400bc authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #8935 from DonLakeFlyer/JoystickMagic

Cleanup duplicated magic numbers in joystick code
parents 9b919900 dd7e7fa0
......@@ -77,6 +77,13 @@ const char* Joystick::_rgFunctionSettingsKey[Joystick::maxFunction] = {
int Joystick::_transmitterMode = 2;
const float Joystick::_defaultAxisFrequencyHz = 25.0f;
const float Joystick::_defaultButtonFrequencyHz = 5.0f;
const float Joystick::_minAxisFrequencyHz = 0.25f;
const float Joystick::_maxAxisFrequencyHz = 200.0f;
const float Joystick::_minButtonFrequencyHz = 0.25f;
const float Joystick::_maxButtonFrequencyHz = 50.0f;
AssignedButtonAction::AssignedButtonAction(QObject* parent, const QString name)
: QObject(parent)
, action(name)
......@@ -156,14 +163,14 @@ void Joystick::_setDefaultCalibration(void) {
_rgFunctionAxis[gimbalPitchFunction]= 4;
_rgFunctionAxis[gimbalYawFunction] = 5;
_exponential = 0;
_accumulator = false;
_deadband = false;
_axisFrequency = 25.0f;
_buttonFrequency= 5.0f;
_throttleMode = ThrottleModeDownZero;
_calibrated = true;
_circleCorrection = false;
_exponential = 0;
_accumulator = false;
_deadband = false;
_axisFrequencyHz = _defaultAxisFrequencyHz;
_buttonFrequencyHz = _defaultButtonFrequencyHz;
_throttleMode = ThrottleModeDownZero;
_calibrated = true;
_circleCorrection = false;
_saveSettings();
}
......@@ -218,14 +225,14 @@ void Joystick::_loadSettings()
qCDebug(JoystickLog) << "_loadSettings " << _name;
_calibrated = settings.value(_calibratedSettingsKey, false).toBool();
_exponential = settings.value(_exponentialSettingsKey, 0).toFloat();
_accumulator = settings.value(_accumulatorSettingsKey, false).toBool();
_deadband = settings.value(_deadbandSettingsKey, false).toBool();
_axisFrequency = settings.value(_axisFrequencySettingsKey, 25.0f).toFloat();
_buttonFrequency= settings.value(_buttonFrequencySettingsKey, 5.0f).toFloat();
_circleCorrection = settings.value(_circleCorrectionSettingsKey, false).toBool();
_gimbalEnabled = settings.value(_gimbalSettingsKey, false).toBool();
_calibrated = settings.value(_calibratedSettingsKey, false).toBool();
_exponential = settings.value(_exponentialSettingsKey, 0).toFloat();
_accumulator = settings.value(_accumulatorSettingsKey, false).toBool();
_deadband = settings.value(_deadbandSettingsKey, false).toBool();
_axisFrequencyHz = settings.value(_axisFrequencySettingsKey, _defaultAxisFrequencyHz).toFloat();
_buttonFrequencyHz = settings.value(_buttonFrequencySettingsKey, _defaultButtonFrequencyHz).toFloat();
_circleCorrection = settings.value(_circleCorrectionSettingsKey, false).toBool();
_gimbalEnabled = settings.value(_gimbalSettingsKey, false).toBool();
_throttleMode = static_cast<ThrottleMode_t>(settings.value(_throttleModeSettingsKey, ThrottleModeDownZero).toInt(&convertOk));
badSettings |= !convertOk;
......@@ -326,8 +333,8 @@ void Joystick::_saveSettings()
settings.setValue(_exponentialSettingsKey, _exponential);
settings.setValue(_accumulatorSettingsKey, _accumulator);
settings.setValue(_deadbandSettingsKey, _deadband);
settings.setValue(_axisFrequencySettingsKey, _axisFrequency);
settings.setValue(_buttonFrequencySettingsKey, _buttonFrequency);
settings.setValue(_axisFrequencySettingsKey, _axisFrequencyHz);
settings.setValue(_buttonFrequencySettingsKey, _buttonFrequencyHz);
settings.setValue(_throttleModeSettingsKey, _throttleMode);
settings.setValue(_gimbalSettingsKey, _gimbalEnabled);
settings.setValue(_circleCorrectionSettingsKey, _circleCorrection);
......@@ -470,7 +477,7 @@ void Joystick::run()
_update();
_handleButtons();
_handleAxis();
QGC::SLEEP::msleep(20);
QGC::SLEEP::msleep(qMin(static_cast<int>(1000.0f / _maxAxisFrequencyHz), static_cast<int>(1000.0f / _maxButtonFrequencyHz)) / 2);
}
_close();
}
......@@ -544,7 +551,7 @@ void Joystick::_handleButtons()
}
} else {
//-- Process repeat buttons
int buttonDelay = static_cast<int>(1000.0f / _buttonFrequency);
int buttonDelay = static_cast<int>(1000.0f / _buttonFrequencyHz);
if(_buttonActionArray[buttonIndex]->buttonTime.elapsed() > buttonDelay) {
_buttonActionArray[buttonIndex]->buttonTime.start();
qCDebug(JoystickLog) << "Repeat button triggered" << buttonIndex << buttonAction;
......@@ -574,7 +581,7 @@ void Joystick::_handleButtons()
void Joystick::_handleAxis()
{
//-- Get frequency
int axisDelay = static_cast<int>(1000.0f / _axisFrequency);
int axisDelay = static_cast<int>(1000.0f / _axisFrequencyHz);
//-- Check elapsed time since last run
if(_axisTime.elapsed() > axisDelay) {
_axisTime.start();
......@@ -938,21 +945,21 @@ void Joystick::setGimbalEnabled(bool set)
void Joystick::setAxisFrequency(float val)
{
//-- Arbitrary limits
if(val < 0.25f) val = 0.25f;
if(val > 50.0f) val = 50.0f;
_axisFrequency = val;
val = qMin(_minAxisFrequencyHz, val);
val = qMax(_maxAxisFrequencyHz, val);
_axisFrequencyHz = val;
_saveSettings();
emit axisFrequencyChanged();
emit axisFrequencyHzChanged();
}
void Joystick::setButtonFrequency(float val)
{
//-- Arbitrary limits
if(val < 0.25f) val = 0.25f;
if(val > 50.0f) val = 50.0f;
_buttonFrequency = val;
val = qMin(_minButtonFrequencyHz, val);
val = qMax(_maxButtonFrequencyHz, val);
_buttonFrequencyHz = val;
_saveSettings();
emit buttonFrequencyChanged();
emit buttonFrequencyHzChanged();
}
void Joystick::setCalibrationMode(bool calibrating)
......
......@@ -101,8 +101,12 @@ public:
Q_PROPERTY(bool gimbalEnabled READ gimbalEnabled WRITE setGimbalEnabled NOTIFY gimbalEnabledChanged)
Q_PROPERTY(int throttleMode READ throttleMode WRITE setThrottleMode NOTIFY throttleModeChanged)
Q_PROPERTY(float axisFrequency READ axisFrequency WRITE setAxisFrequency NOTIFY axisFrequencyChanged)
Q_PROPERTY(float buttonFrequency READ buttonFrequency WRITE setButtonFrequency NOTIFY buttonFrequencyChanged)
Q_PROPERTY(float axisFrequencyHz READ axisFrequencyHz WRITE setAxisFrequency NOTIFY axisFrequencyHzChanged)
Q_PROPERTY(float minAxisFrequencyHz MEMBER _minAxisFrequencyHz CONSTANT)
Q_PROPERTY(float maxAxisFrequencyHz MEMBER _minAxisFrequencyHz CONSTANT)
Q_PROPERTY(float buttonFrequencyHz READ buttonFrequencyHz WRITE setButtonFrequency NOTIFY buttonFrequencyHzChanged)
Q_PROPERTY(float minButtonFrequencyHz MEMBER _minButtonFrequencyHz CONSTANT)
Q_PROPERTY(float maxButtonFrequencyHz MEMBER _maxButtonFrequencyHz CONSTANT)
Q_PROPERTY(bool negativeThrust READ negativeThrust WRITE setNegativeThrust NOTIFY negativeThrustChanged)
Q_PROPERTY(float exponential READ exponential WRITE setExponential NOTIFY exponentialChanged)
Q_PROPERTY(bool accumulator READ accumulator WRITE setAccumulator NOTIFY accumulatorChanged)
......@@ -171,12 +175,12 @@ public:
void setCalibrationMode (bool calibrating);
/// Get joystick message rate (in Hz)
float axisFrequency () { return _axisFrequency; }
float axisFrequencyHz () { return _axisFrequencyHz; }
/// Set joystick message rate (in Hz)
void setAxisFrequency (float val);
/// Get joystick button repeat rate (in Hz)
float buttonFrequency () { return _buttonFrequency; }
float buttonFrequencyHz () { return _buttonFrequencyHz; }
/// Set joystick button repeat rate (in Hz)
void setButtonFrequency(float val);
......@@ -197,8 +201,8 @@ signals:
void manualControlGimbal (float gimbalPitch, float gimbalYaw);
void gimbalEnabledChanged ();
void axisFrequencyChanged ();
void buttonFrequencyChanged ();
void axisFrequencyHzChanged ();
void buttonFrequencyHzChanged ();
void startContinuousZoom (int direction);
void stopContinuousZoom ();
void stepZoom (int direction);
......@@ -260,6 +264,9 @@ protected:
BUTTON_REPEAT
};
static const float _defaultAxisFrequencyHz;
static const float _defaultButtonFrequencyHz;
uint8_t*_rgButtonValues = nullptr;
bool _exitThread = false; ///< true: signal thread to exit
......@@ -272,8 +279,8 @@ protected:
bool _accumulator = false;
bool _deadband = false;
bool _circleCorrection = true;
float _axisFrequency = 25.0f;
float _buttonFrequency = 5.0f;
float _axisFrequencyHz = _defaultAxisFrequencyHz;
float _buttonFrequencyHz = _defaultButtonFrequencyHz;
Vehicle* _activeVehicle = nullptr;
bool _gimbalEnabled = false;
......@@ -296,6 +303,10 @@ protected:
QStringList _availableActionTitles;
MultiVehicleManager* _multiVehicleManager = nullptr;
static const float _minAxisFrequencyHz;
static const float _maxAxisFrequencyHz;
static const float _minButtonFrequencyHz;
static const float _maxButtonFrequencyHz;
private:
static const char* _rgFunctionSettingsKey[maxFunction];
......
......@@ -135,13 +135,13 @@ Item {
visible: advancedSettings.checked
}
QGCTextField {
text: _activeJoystick.axisFrequency
text: _activeJoystick.axisFrequencyHz
enabled: advancedSettings.checked
validator: DoubleValidator { bottom: 0.25; top: 50.0; }
validator: DoubleValidator { bottom: _activeJoystick.minAxisFrequencyHz; top: _activeJoystick.maxAxisFrequencyHz; }
inputMethodHints: Qt.ImhFormattedNumbersOnly
Layout.alignment: Qt.AlignVCenter
onEditingFinished: {
_activeJoystick.axisFrequency = parseFloat(text)
_activeJoystick.axisFrequencyHz = parseFloat(text)
}
visible: advancedSettings.checked
}
......@@ -153,13 +153,13 @@ Item {
visible: advancedSettings.checked
}
QGCTextField {
text: _activeJoystick.buttonFrequency
text: _activeJoystick.buttonFrequencyHz
enabled: advancedSettings.checked
validator: DoubleValidator { bottom: 0.25; top: 50.0; }
validator: DoubleValidator { bottom: _activeJoystick.minButtonFrequencyHz; top: _activeJoystick.maxButtonFrequencyHz; }
inputMethodHints: Qt.ImhFormattedNumbersOnly
Layout.alignment: Qt.AlignVCenter
onEditingFinished: {
_activeJoystick.buttonFrequency = parseFloat(text)
_activeJoystick.buttonFrequencyHz = parseFloat(text)
}
visible: advancedSettings.checked
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment