Unverified Commit c671b68d authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #6117 from nanthony21/fixJoystickCalibrationStates

Joystick axes can now be monitored even when joystick control is disabled
parents 8c7e5780 27f61a75
...@@ -49,7 +49,7 @@ Joystick::Joystick(const QString& name, int axisCount, int buttonCount, int hatC ...@@ -49,7 +49,7 @@ Joystick::Joystick(const QString& name, int axisCount, int buttonCount, int hatC
, _hatCount(hatCount) , _hatCount(hatCount)
, _hatButtonCount(4*hatCount) , _hatButtonCount(4*hatCount)
, _totalButtonCount(_buttonCount+_hatButtonCount) , _totalButtonCount(_buttonCount+_hatButtonCount)
, _calibrationMode(CalibrationModeOff) , _calibrationMode(false)
, _rgAxisValues(NULL) , _rgAxisValues(NULL)
, _rgCalibration(NULL) , _rgCalibration(NULL)
, _rgButtonValues(NULL) , _rgButtonValues(NULL)
...@@ -431,7 +431,7 @@ void Joystick::run(void) ...@@ -431,7 +431,7 @@ void Joystick::run(void)
} }
} }
if (_calibrationMode != CalibrationModeCalibrating && _calibrated) { if (_outputEnabled && _calibrated) {
int axis = _rgFunctionAxis[rollFunction]; int axis = _rgFunctionAxis[rollFunction];
float roll = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis], _deadband); float roll = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis], _deadband);
...@@ -757,36 +757,28 @@ void Joystick::setDeadband(bool deadband) ...@@ -757,36 +757,28 @@ void Joystick::setDeadband(bool deadband)
_saveSettings(); _saveSettings();
} }
void Joystick::startCalibrationMode(CalibrationMode_t mode) void Joystick::setCalibrationMode(bool calibrating)
{ {
if (mode == CalibrationModeOff) { _calibrationMode = calibrating;
qWarning() << "Incorrect mode CalibrationModeOff";
return;
}
_calibrationMode = mode; if (calibrating && !isRunning()) {
if (!isRunning()) {
_pollingStartedForCalibration = true; _pollingStartedForCalibration = true;
startPolling(_multiVehicleManager->activeVehicle()); startPolling(_multiVehicleManager->activeVehicle());
} }
} else if (_pollingStartedForCalibration) {
stopPolling();
void Joystick::stopCalibrationMode(CalibrationMode_t mode)
{
if (mode == CalibrationModeOff) {
qWarning() << "Incorrect mode: CalibrationModeOff";
return;
} }
if (calibrating){
if (mode == CalibrationModeCalibrating) { setOutputEnabled(false); //Disable the joystick output before calibrating
_calibrationMode = CalibrationModeMonitor;
} else {
_calibrationMode = CalibrationModeOff;
if (_pollingStartedForCalibration) {
stopPolling();
}
} }
else if (!calibrating && _calibrated){
setOutputEnabled(true); //Enable joystick output after calibration
}
}
void Joystick::setOutputEnabled(bool enabled){
_outputEnabled = enabled;
emit outputEnabledChanged(_outputEnabled);
} }
void Joystick::_buttonAction(const QString& action) void Joystick::_buttonAction(const QString& action)
......
...@@ -61,6 +61,7 @@ public: ...@@ -61,6 +61,7 @@ public:
Q_PROPERTY(QString name READ name CONSTANT) Q_PROPERTY(QString name READ name CONSTANT)
Q_PROPERTY(bool calibrated MEMBER _calibrated NOTIFY calibratedChanged) Q_PROPERTY(bool calibrated MEMBER _calibrated NOTIFY calibratedChanged)
Q_PROPERTY(bool outputEnabled MEMBER _outputEnabled WRITE setOutputEnabled NOTIFY outputEnabledChanged)
Q_PROPERTY(int totalButtonCount READ totalButtonCount CONSTANT) Q_PROPERTY(int totalButtonCount READ totalButtonCount CONSTANT)
Q_PROPERTY(int axisCount READ axisCount CONSTANT) Q_PROPERTY(int axisCount READ axisCount CONSTANT)
...@@ -122,20 +123,13 @@ public: ...@@ -122,20 +123,13 @@ public:
void setTXMode(int mode); void setTXMode(int mode);
int getTXMode(void) { return _transmitterMode; } int getTXMode(void) { return _transmitterMode; }
typedef enum {
CalibrationModeOff, // Not calibrating
CalibrationModeMonitor, // Monitors are active, continue to send to vehicle if already polling
CalibrationModeCalibrating, // Calibrating, stop sending joystick to vehicle
} CalibrationMode_t;
/// Set the current calibration mode /// Set the current calibration mode
void startCalibrationMode(CalibrationMode_t mode); void setCalibrationMode(bool calibrating);
void setOutputEnabled(bool enabled);
/// Clear the current calibration mode
void stopCalibrationMode(CalibrationMode_t mode);
signals: signals:
void calibratedChanged(bool calibrated); void calibratedChanged(bool calibrated);
void outputEnabledChanged(bool enabled);
// The raw signals are only meant for use by calibration // The raw signals are only meant for use by calibration
void rawAxisValueChanged(int index, int value); void rawAxisValueChanged(int index, int value);
...@@ -201,7 +195,8 @@ protected: ...@@ -201,7 +195,8 @@ protected:
int _totalButtonCount; int _totalButtonCount;
static int _transmitterMode; static int _transmitterMode;
CalibrationMode_t _calibrationMode; bool _calibrationMode;
bool _outputEnabled;
int* _rgAxisValues; int* _rgAxisValues;
Calibration_t* _rgCalibration; Calibration_t* _rgCalibration;
......
...@@ -366,9 +366,15 @@ SetupPage { ...@@ -366,9 +366,15 @@ SetupPage {
id: enabledCheckBox id: enabledCheckBox
enabled: _activeJoystick ? _activeJoystick.calibrated : false enabled: _activeJoystick ? _activeJoystick.calibrated : false
text: _activeJoystick ? _activeJoystick.calibrated ? qsTr("Enable joystick input") : qsTr("Enable not allowed (Calibrate First)") : "" text: _activeJoystick ? _activeJoystick.calibrated ? qsTr("Enable joystick input") : qsTr("Enable not allowed (Calibrate First)") : ""
checked: _activeVehicle.joystickEnabled
onClicked: _activeVehicle.joystickEnabled = checked onClicked: _activeJoystick.outputEnabled = checked
Connections {
target: _activeJoystick
onOutputEnabledChanged: {
enabledCheckBox.checked=enabled
}
}
Connections { Connections {
target: joystickManager target: joystickManager
......
...@@ -82,7 +82,7 @@ void JoystickConfigController::setDeadbandValue(int axis, int value) ...@@ -82,7 +82,7 @@ void JoystickConfigController::setDeadbandValue(int axis, int value)
JoystickConfigController::~JoystickConfigController() JoystickConfigController::~JoystickConfigController()
{ {
if(_activeJoystick) { if(_activeJoystick) {
_activeJoystick->stopCalibrationMode(Joystick::CalibrationModeMonitor); _activeJoystick->setCalibrationMode(false);
} }
} }
...@@ -582,7 +582,7 @@ void JoystickConfigController::_writeCalibration(void) ...@@ -582,7 +582,7 @@ void JoystickConfigController::_writeCalibration(void)
/// @brief Starts the calibration process /// @brief Starts the calibration process
void JoystickConfigController::_startCalibration(void) void JoystickConfigController::_startCalibration(void)
{ {
_activeJoystick->startCalibrationMode(Joystick::CalibrationModeCalibrating); _activeJoystick->setCalibrationMode(true);
_resetInternalCalibrationValues(); _resetInternalCalibrationValues();
_nextButton->setProperty("text", "Next"); _nextButton->setProperty("text", "Next");
...@@ -598,7 +598,7 @@ void JoystickConfigController::_stopCalibration(void) ...@@ -598,7 +598,7 @@ void JoystickConfigController::_stopCalibration(void)
{ {
_currentStep = -1; _currentStep = -1;
_activeJoystick->stopCalibrationMode(Joystick::CalibrationModeCalibrating); _activeJoystick->setCalibrationMode(false);
_setInternalCalibrationValuesFromSettings(); _setInternalCalibrationValuesFromSettings();
_statusText->setProperty("text", ""); _statusText->setProperty("text", "");
...@@ -763,7 +763,6 @@ void JoystickConfigController::_signalAllAttitudeValueChanges(void) ...@@ -763,7 +763,6 @@ void JoystickConfigController::_signalAllAttitudeValueChanges(void)
void JoystickConfigController::_activeJoystickChanged(Joystick* joystick) void JoystickConfigController::_activeJoystickChanged(Joystick* joystick)
{ {
bool joystickTransition = false; bool joystickTransition = false;
if (_activeJoystick) { if (_activeJoystick) {
joystickTransition = true; joystickTransition = true;
disconnect(_activeJoystick, &Joystick::rawAxisValueChanged, this, &JoystickConfigController::_axisValueChanged); disconnect(_activeJoystick, &Joystick::rawAxisValueChanged, this, &JoystickConfigController::_axisValueChanged);
...@@ -781,7 +780,7 @@ void JoystickConfigController::_activeJoystickChanged(Joystick* joystick) ...@@ -781,7 +780,7 @@ void JoystickConfigController::_activeJoystickChanged(Joystick* joystick)
if (joystickTransition) { if (joystickTransition) {
_stopCalibration(); _stopCalibration();
} }
_activeJoystick->startCalibrationMode(Joystick::CalibrationModeMonitor); _activeJoystick->setCalibrationMode(false);
_axisCount = _activeJoystick->axisCount(); _axisCount = _activeJoystick->axisCount();
_rgAxisInfo = new struct AxisInfo[_axisCount]; _rgAxisInfo = new struct AxisInfo[_axisCount];
_axisValueSave = new int[_axisCount]; _axisValueSave = new int[_axisCount];
......
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