Commit 0b2af266 authored by Jacob Walser's avatar Jacob Walser

Setup gamecontrollers with default calibration

parent f8a07f3c
...@@ -79,6 +79,36 @@ Joystick::~Joystick() ...@@ -79,6 +79,36 @@ Joystick::~Joystick()
delete _rgButtonValues; delete _rgButtonValues;
} }
void Joystick::_setDefaultCalibration(void) {
QSettings settings;
settings.beginGroup(_settingsGroup);
settings.beginGroup(_name);
_calibrated = settings.value(_calibratedSettingsKey, false).toBool();
// Only set default calibrations if we do not have a calibration for this gamecontroller
if(_calibrated) return;
for(int axis = 0; axis < _axisCount; axis++) {
Joystick::Calibration_t calibration;
_rgCalibration[axis] = calibration;
}
_rgCalibration[1].reversed = true;
_rgCalibration[3].reversed = true;
for(int function = 0; function < maxFunction; function++) {
_rgFunctionAxis[function] = function;
}
_exponential = false;
_accumulator = false;
_deadband = false;
_throttleMode = ThrottleModeCenterZero;
_calibrated = true;
_saveSettings();
}
void Joystick::_loadSettings(void) void Joystick::_loadSettings(void)
{ {
QSettings settings; QSettings settings;
...@@ -102,7 +132,7 @@ void Joystick::_loadSettings(void) ...@@ -102,7 +132,7 @@ void Joystick::_loadSettings(void)
_throttleMode = (ThrottleMode_t)settings.value(_throttleModeSettingsKey, ThrottleModeCenterZero).toInt(&convertOk); _throttleMode = (ThrottleMode_t)settings.value(_throttleModeSettingsKey, ThrottleModeCenterZero).toInt(&convertOk);
badSettings |= !convertOk; badSettings |= !convertOk;
qCDebug(JoystickLog) << "_loadSettings calibrated:throttlemode:exponential:deadband:badsettings" << _calibrated << _throttleMode << _exponential << _deadband << badSettings; qCDebug(JoystickLog) << "_loadSettings calibrated:txmode:throttlemode:exponential:deadband:badsettings" << _calibrated << _transmitterMode << _throttleMode << _exponential << _deadband << badSettings;
QString minTpl ("Axis%1Min"); QString minTpl ("Axis%1Min");
QString maxTpl ("Axis%1Max"); QString maxTpl ("Axis%1Max");
......
...@@ -30,12 +30,18 @@ public: ...@@ -30,12 +30,18 @@ public:
~Joystick(); ~Joystick();
typedef struct { typedef struct Calibration_t {
int min; int min;
int max; int max;
int center; int center;
int deadband; int deadband;
bool reversed; bool reversed;
Calibration_t()
: min(-32767)
, max(32767)
, center(0)
, deadband(0)
, reversed(false) {}
} Calibration_t; } Calibration_t;
typedef enum { typedef enum {
...@@ -68,7 +74,8 @@ public: ...@@ -68,7 +74,8 @@ public:
Q_PROPERTY(int throttleMode READ throttleMode WRITE setThrottleMode NOTIFY throttleModeChanged) Q_PROPERTY(int throttleMode READ throttleMode WRITE setThrottleMode NOTIFY throttleModeChanged)
Q_PROPERTY(bool exponential READ exponential WRITE setExponential NOTIFY exponentialChanged) Q_PROPERTY(bool exponential READ exponential WRITE setExponential NOTIFY exponentialChanged)
Q_PROPERTY(bool accumulator READ accumulator WRITE setAccumulator NOTIFY accumulatorChanged) Q_PROPERTY(bool accumulator READ accumulator WRITE setAccumulator NOTIFY accumulatorChanged)
Q_PROPERTY(bool requiresCalibration READ requiresCalibration CONSTANT)
// Property accessors // Property accessors
int axisCount(void) { return _axisCount; } int axisCount(void) { return _axisCount; }
...@@ -89,6 +96,8 @@ public: ...@@ -89,6 +96,8 @@ public:
QString name(void) { return _name; } QString name(void) { return _name; }
virtual bool requiresCalibration(void) { return true; }
int throttleMode(void); int throttleMode(void);
void setThrottleMode(int mode); void setThrottleMode(int mode);
...@@ -144,12 +153,13 @@ signals: ...@@ -144,12 +153,13 @@ signals:
void buttonActionTriggered(int action); void buttonActionTriggered(int action);
protected: protected:
void _saveSettings(void); void _setDefaultCalibration(void);
void _loadSettings(void); void _saveSettings(void);
float _adjustRange(int value, Calibration_t calibration, bool withDeadbands); void _loadSettings(void);
void _buttonAction(const QString& action); float _adjustRange(int value, Calibration_t calibration, bool withDeadbands);
bool _validAxis(int axis); void _buttonAction(const QString& action);
bool _validButton(int button); bool _validAxis(int axis);
bool _validButton(int button);
private: private:
virtual bool _open() = 0; virtual bool _open() = 0;
......
...@@ -10,6 +10,7 @@ JoystickSDL::JoystickSDL(const QString& name, int axisCount, int buttonCount, in ...@@ -10,6 +10,7 @@ JoystickSDL::JoystickSDL(const QString& name, int axisCount, int buttonCount, in
, _isGameController(isGameController) , _isGameController(isGameController)
, _index(index) , _index(index)
{ {
if(_isGameController) _setDefaultCalibration();
} }
QMap<QString, Joystick*> JoystickSDL::discover(MultiVehicleManager* _multiVehicleManager) { QMap<QString, Joystick*> JoystickSDL::discover(MultiVehicleManager* _multiVehicleManager) {
......
...@@ -12,7 +12,10 @@ class JoystickSDL : public Joystick ...@@ -12,7 +12,10 @@ class JoystickSDL : public Joystick
public: public:
JoystickSDL(const QString& name, int axisCount, int buttonCount, int hatCount, int index, bool isGameController, MultiVehicleManager* multiVehicleManager); JoystickSDL(const QString& name, int axisCount, int buttonCount, int hatCount, int index, bool isGameController, MultiVehicleManager* multiVehicleManager);
static QMap<QString, Joystick*> discover(MultiVehicleManager* _multiVehicleManager); static QMap<QString, Joystick*> discover(MultiVehicleManager* _multiVehicleManager);
// This can be uncommented to hide the calibration buttons for gamecontrollers in the future
// bool requiresCalibration(void) final { return !_isGameController; }
private: private:
static void _loadGameControllerMappings(); static void _loadGameControllerMappings();
......
...@@ -302,6 +302,7 @@ SetupPage { ...@@ -302,6 +302,7 @@ SetupPage {
// Command Buttons // Command Buttons
Row { Row {
spacing: 10 spacing: 10
visible: _activeJoystick.requiresCalibration
QGCButton { QGCButton {
id: skipButton id: skipButton
......
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