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
, _hatCount(hatCount)
, _hatButtonCount(4*hatCount)
, _totalButtonCount(_buttonCount+_hatButtonCount)
, _calibrationMode(CalibrationModeOff)
, _calibrationMode(false)
, _rgAxisValues(NULL)
, _rgCalibration(NULL)
, _rgButtonValues(NULL)
......@@ -431,7 +431,7 @@ void Joystick::run(void)
}
}
if (_calibrationMode != CalibrationModeCalibrating && _calibrated) {
if (_outputEnabled && _calibrated) {
int axis = _rgFunctionAxis[rollFunction];
float roll = _adjustRange(_rgAxisValues[axis], _rgCalibration[axis], _deadband);
......@@ -757,36 +757,28 @@ void Joystick::setDeadband(bool deadband)
_saveSettings();
}
void Joystick::startCalibrationMode(CalibrationMode_t mode)
void Joystick::setCalibrationMode(bool calibrating)
{
if (mode == CalibrationModeOff) {
qWarning() << "Incorrect mode CalibrationModeOff";
return;
}
_calibrationMode = calibrating;
_calibrationMode = mode;
if (!isRunning()) {
if (calibrating && !isRunning()) {
_pollingStartedForCalibration = true;
startPolling(_multiVehicleManager->activeVehicle());
}
}
void Joystick::stopCalibrationMode(CalibrationMode_t mode)
{
if (mode == CalibrationModeOff) {
qWarning() << "Incorrect mode: CalibrationModeOff";
return;
else if (_pollingStartedForCalibration) {
stopPolling();
}
if (mode == CalibrationModeCalibrating) {
_calibrationMode = CalibrationModeMonitor;
} else {
_calibrationMode = CalibrationModeOff;
if (_pollingStartedForCalibration) {
stopPolling();
}
if (calibrating){
setOutputEnabled(false); //Disable the joystick output before calibrating
}
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)
......
......@@ -61,6 +61,7 @@ public:
Q_PROPERTY(QString name READ name CONSTANT)
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 axisCount READ axisCount CONSTANT)
......@@ -122,20 +123,13 @@ public:
void setTXMode(int mode);
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
void startCalibrationMode(CalibrationMode_t mode);
/// Clear the current calibration mode
void stopCalibrationMode(CalibrationMode_t mode);
void setCalibrationMode(bool calibrating);
void setOutputEnabled(bool enabled);
signals:
void calibratedChanged(bool calibrated);
void outputEnabledChanged(bool enabled);
// The raw signals are only meant for use by calibration
void rawAxisValueChanged(int index, int value);
......@@ -201,7 +195,8 @@ protected:
int _totalButtonCount;
static int _transmitterMode;
CalibrationMode_t _calibrationMode;
bool _calibrationMode;
bool _outputEnabled;
int* _rgAxisValues;
Calibration_t* _rgCalibration;
......
......@@ -366,9 +366,15 @@ SetupPage {
id: enabledCheckBox
enabled: _activeJoystick ? _activeJoystick.calibrated : false
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 {
target: joystickManager
......
......@@ -82,7 +82,7 @@ void JoystickConfigController::setDeadbandValue(int axis, int value)
JoystickConfigController::~JoystickConfigController()
{
if(_activeJoystick) {
_activeJoystick->stopCalibrationMode(Joystick::CalibrationModeMonitor);
_activeJoystick->setCalibrationMode(false);
}
}
......@@ -582,7 +582,7 @@ void JoystickConfigController::_writeCalibration(void)
/// @brief Starts the calibration process
void JoystickConfigController::_startCalibration(void)
{
_activeJoystick->startCalibrationMode(Joystick::CalibrationModeCalibrating);
_activeJoystick->setCalibrationMode(true);
_resetInternalCalibrationValues();
_nextButton->setProperty("text", "Next");
......@@ -598,7 +598,7 @@ void JoystickConfigController::_stopCalibration(void)
{
_currentStep = -1;
_activeJoystick->stopCalibrationMode(Joystick::CalibrationModeCalibrating);
_activeJoystick->setCalibrationMode(false);
_setInternalCalibrationValuesFromSettings();
_statusText->setProperty("text", "");
......@@ -763,7 +763,6 @@ void JoystickConfigController::_signalAllAttitudeValueChanges(void)
void JoystickConfigController::_activeJoystickChanged(Joystick* joystick)
{
bool joystickTransition = false;
if (_activeJoystick) {
joystickTransition = true;
disconnect(_activeJoystick, &Joystick::rawAxisValueChanged, this, &JoystickConfigController::_axisValueChanged);
......@@ -781,7 +780,7 @@ void JoystickConfigController::_activeJoystickChanged(Joystick* joystick)
if (joystickTransition) {
_stopCalibration();
}
_activeJoystick->startCalibrationMode(Joystick::CalibrationModeMonitor);
_activeJoystick->setCalibrationMode(false);
_axisCount = _activeJoystick->axisCount();
_rgAxisInfo = new struct AxisInfo[_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