Commit bffe803c authored by Jacob Walser's avatar Jacob Walser

Add firmware-specific joystick TX mode settings

parent 0b2af266
...@@ -69,6 +69,8 @@ public: ...@@ -69,6 +69,8 @@ public:
// Overrides from FirmwarePlugin // Overrides from FirmwarePlugin
int manualControlReservedButtonCount(void); int manualControlReservedButtonCount(void);
int defaultJoystickTXMode(void) final { return 3; }
bool supportsThrottleModeCenterZero(void); bool supportsThrottleModeCenterZero(void);
bool supportsManualControl(void); bool supportsManualControl(void);
......
...@@ -106,6 +106,11 @@ int FirmwarePlugin::manualControlReservedButtonCount(void) ...@@ -106,6 +106,11 @@ int FirmwarePlugin::manualControlReservedButtonCount(void)
return -1; return -1;
} }
int FirmwarePlugin::defaultJoystickTXMode(void)
{
return 2;
}
bool FirmwarePlugin::supportsThrottleModeCenterZero(void) bool FirmwarePlugin::supportsThrottleModeCenterZero(void)
{ {
// By default, this is supported // By default, this is supported
......
...@@ -142,6 +142,10 @@ public: ...@@ -142,6 +142,10 @@ public:
/// @return -1: reserver all buttons, >0 number of buttons to reserve /// @return -1: reserver all buttons, >0 number of buttons to reserve
virtual int manualControlReservedButtonCount(void); virtual int manualControlReservedButtonCount(void);
/// Default tx mode to apply to joystick axes
/// TX modes are as outlined here: http://www.rc-airplane-world.com/rc-transmitter-modes.html
virtual int defaultJoystickTXMode(void);
/// Returns true if the vehicle and firmware supports the use of a throttle joystick that /// Returns true if the vehicle and firmware supports the use of a throttle joystick that
/// is zero when centered. Typically not supported on vehicles that have bidirectional /// is zero when centered. Typically not supported on vehicles that have bidirectional
/// throttle. /// throttle.
......
...@@ -18,14 +18,19 @@ ...@@ -18,14 +18,19 @@
QGC_LOGGING_CATEGORY(JoystickLog, "JoystickLog") QGC_LOGGING_CATEGORY(JoystickLog, "JoystickLog")
QGC_LOGGING_CATEGORY(JoystickValuesLog, "JoystickValuesLog") QGC_LOGGING_CATEGORY(JoystickValuesLog, "JoystickValuesLog")
const char* Joystick::_settingsGroup = "Joysticks"; const char* Joystick::_settingsGroup = "Joysticks";
const char* Joystick::_calibratedSettingsKey = "Calibrated1"; // Increment number to force recalibration const char* Joystick::_calibratedSettingsKey = "Calibrated1"; // Increment number to force recalibration
const char* Joystick::_buttonActionSettingsKey = "ButtonActionName%1"; const char* Joystick::_buttonActionSettingsKey = "ButtonActionName%1";
const char* Joystick::_throttleModeSettingsKey = "ThrottleMode"; const char* Joystick::_throttleModeSettingsKey = "ThrottleMode";
const char* Joystick::_exponentialSettingsKey = "Exponential"; const char* Joystick::_exponentialSettingsKey = "Exponential";
const char* Joystick::_accumulatorSettingsKey = "Accumulator"; const char* Joystick::_accumulatorSettingsKey = "Accumulator";
const char* Joystick::_deadbandSettingsKey = "Deadband"; const char* Joystick::_deadbandSettingsKey = "Deadband";
const char* Joystick::_txModeSettingsKey = "TXMode"; const char* Joystick::_txModeSettingsKey = NULL;
const char* Joystick::_fixedWingTXModeSettingsKey = "TXMode_FixedWing";
const char* Joystick::_multiRotorTXModeSettingsKey = "TXMode_MultiRotor";
const char* Joystick::_roverTXModeSettingsKey = "TXMode_Rover";
const char* Joystick::_vtolTXModeSettingsKey = "TXMode_VTOL";
const char* Joystick::_submarineTXModeSettingsKey = "TXMode_Submarine";
const char* Joystick::_rgFunctionSettingsKey[Joystick::maxFunction] = { const char* Joystick::_rgFunctionSettingsKey[Joystick::maxFunction] = {
"RollAxis", "RollAxis",
...@@ -70,6 +75,8 @@ Joystick::Joystick(const QString& name, int axisCount, int buttonCount, int hatC ...@@ -70,6 +75,8 @@ Joystick::Joystick(const QString& name, int axisCount, int buttonCount, int hatC
} }
_loadSettings(); _loadSettings();
connect(_multiVehicleManager, &MultiVehicleManager::activeVehicleChanged, this, &Joystick::_activeVehicleChanged);
} }
Joystick::~Joystick() Joystick::~Joystick()
...@@ -96,9 +103,11 @@ void Joystick::_setDefaultCalibration(void) { ...@@ -96,9 +103,11 @@ void Joystick::_setDefaultCalibration(void) {
_rgCalibration[1].reversed = true; _rgCalibration[1].reversed = true;
_rgCalibration[3].reversed = true; _rgCalibration[3].reversed = true;
for(int function = 0; function < maxFunction; function++) { // Default TX Mode 2 axis assignments for gamecontrollers
_rgFunctionAxis[function] = function; _rgFunctionAxis[rollFunction] = 2;
} _rgFunctionAxis[pitchFunction] = 3;
_rgFunctionAxis[yawFunction] = 0;
_rgFunctionAxis[throttleFunction] = 1;
_exponential = false; _exponential = false;
_accumulator = false; _accumulator = false;
...@@ -109,13 +118,41 @@ void Joystick::_setDefaultCalibration(void) { ...@@ -109,13 +118,41 @@ void Joystick::_setDefaultCalibration(void) {
_saveSettings(); _saveSettings();
} }
void Joystick::_activeVehicleChanged(Vehicle *activeVehicle)
{
if(activeVehicle) {
if(activeVehicle->fixedWing()) {
_txModeSettingsKey = _fixedWingTXModeSettingsKey;
} else if(activeVehicle->multiRotor()) {
_txModeSettingsKey = _multiRotorTXModeSettingsKey;
} else if(activeVehicle->rover()) {
_txModeSettingsKey = _roverTXModeSettingsKey;
} else if(activeVehicle->vtol()) {
_txModeSettingsKey = _vtolTXModeSettingsKey;
} else if(activeVehicle->sub()) {
_txModeSettingsKey = _submarineTXModeSettingsKey;
} else {
_txModeSettingsKey = NULL;
qWarning() << "No valid joystick TXmode settings key for selected vehicle";
return;
}
QSettings settings;
settings.beginGroup(_settingsGroup);
int mode = settings.value(_txModeSettingsKey, activeVehicle->firmwarePlugin()->defaultJoystickTXMode()).toInt();
setTXMode(mode);
}
}
void Joystick::_loadSettings(void) void Joystick::_loadSettings(void)
{ {
QSettings settings; QSettings settings;
settings.beginGroup(_settingsGroup); settings.beginGroup(_settingsGroup);
_transmitterMode = settings.value(_txModeSettingsKey, 2).toInt(); if(_txModeSettingsKey)
_transmitterMode = settings.value(_txModeSettingsKey, 2).toInt();
settings.beginGroup(_name); settings.beginGroup(_name);
...@@ -195,7 +232,8 @@ void Joystick::_saveSettings(void) ...@@ -195,7 +232,8 @@ void Joystick::_saveSettings(void)
// Transmitter mode is static // Transmitter mode is static
// Save the mode we are using // Save the mode we are using
settings.setValue(_txModeSettingsKey, _transmitterMode); if(_txModeSettingsKey)
settings.setValue(_txModeSettingsKey, _transmitterMode);
settings.beginGroup(_name); settings.beginGroup(_name);
......
...@@ -221,6 +221,14 @@ private: ...@@ -221,6 +221,14 @@ private:
static const char* _accumulatorSettingsKey; static const char* _accumulatorSettingsKey;
static const char* _deadbandSettingsKey; static const char* _deadbandSettingsKey;
static const char* _txModeSettingsKey; static const char* _txModeSettingsKey;
static const char* _fixedWingTXModeSettingsKey;
static const char* _multiRotorTXModeSettingsKey;
static const char* _roverTXModeSettingsKey;
static const char* _vtolTXModeSettingsKey;
static const char* _submarineTXModeSettingsKey;
private slots:
void _activeVehicleChanged(Vehicle* activeVehicle);
}; };
#endif #endif
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