QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
Joystick.h
Go to the documentation of this file.
1#pragma once
2
3#include "QGCMAVLink.h"
4
5#include <QtCore/QLoggingCategory>
6#include <QtCore/QObject>
7#include <QtCore/QThread>
8#include <QtCore/QVariantMap>
9#include <QtGui/QVector3D>
10#include <QtQmlIntegration/QtQmlIntegration>
11
13#include "Fact.h"
14#include "JoystickSettings.h"
15
17Q_DECLARE_LOGGING_CATEGORY(JoystickValuesLog)
18
21class Vehicle;
22class JoystickManager;
24
26{
27public:
28 AssignedButtonAction(const QString &name, bool repeat);
29
30 QString actionName;
31 bool repeat = false;
32 QElapsedTimer buttonElapsedTimer;
33};
34
35class AvailableButtonAction : public QObject
36{
37 Q_OBJECT
38 Q_PROPERTY(QString action READ action CONSTANT)
39 Q_PROPERTY(bool canRepeat READ canRepeat CONSTANT)
40
41public:
42 AvailableButtonAction(const QString &actionName, bool canRepeat, QObject *parent = nullptr);
43
44 const QString &action() const { return _actionName; }
45 bool canRepeat() const { return _repeat; }
46
47private:
48 const QString _actionName;
49 const bool _repeat = false;
50};
51
52// There is only one Joystick instance active in the system at a time.
53// You get access to it through JoystickManager.
54// It is associated with a specific Vehicle instance.
55class Joystick : public QThread
56{
57 Q_OBJECT
58 QML_ELEMENT
59 QML_UNCREATABLE("")
60 Q_MOC_INCLUDE("QmlObjectListModel.h")
61 Q_MOC_INCLUDE("Vehicle.h")
62
63 friend class JoystickManager;
65#ifdef QGC_UNITTEST_BUILD
66 friend class JoystickTest;
67#endif
68
69public:
70 Q_PROPERTY(QString name READ name CONSTANT)
72 Q_PROPERTY(int axisCount READ axisCount CONSTANT)
73 Q_PROPERTY(int buttonCount READ buttonCount CONSTANT)
75 Q_PROPERTY(bool hasRumble READ hasRumble CONSTANT)
76 Q_PROPERTY(bool hasRumbleTriggers READ hasRumbleTriggers CONSTANT)
77 Q_PROPERTY(bool hasLED READ hasLED CONSTANT)
78 Q_PROPERTY(QString guid READ guid CONSTANT)
79 Q_PROPERTY(quint16 vendorId READ vendorId CONSTANT)
80 Q_PROPERTY(quint16 productId READ productId CONSTANT)
81 Q_PROPERTY(QString serial READ serial CONSTANT)
82 Q_PROPERTY(QString deviceType READ deviceType CONSTANT)
83 Q_PROPERTY(int playerIndex READ playerIndex WRITE setPlayerIndex NOTIFY playerIndexChanged)
84 Q_PROPERTY(int batteryPercent READ batteryPercent NOTIFY batteryStateChanged)
85 Q_PROPERTY(QString powerState READ powerState NOTIFY batteryStateChanged)
86 Q_PROPERTY(bool isGamepad READ isGamepad CONSTANT)
87 Q_PROPERTY(QString gamepadType READ gamepadType CONSTANT)
88 Q_PROPERTY(QString path READ path CONSTANT)
89 Q_PROPERTY(bool isVirtual READ isVirtual CONSTANT)
90 Q_PROPERTY(quint16 firmwareVersion READ firmwareVersion CONSTANT)
91 Q_PROPERTY(QString connectionType READ connectionType CONSTANT)
92 Q_PROPERTY(int ballCount READ ballCount CONSTANT)
94 Q_PROPERTY(QString disabledActionName READ disabledActionName CONSTANT)
96 Q_PROPERTY(QStringList buttonActions READ buttonActions NOTIFY buttonActionsChanged)
97 Q_PROPERTY(QString buttonActionNone READ buttonActionNone CONSTANT)
98 Q_PROPERTY(QString linkedGroupId READ linkedGroupId WRITE setLinkedGroupId NOTIFY linkedGroupChanged)
99 Q_PROPERTY(QString linkedGroupRole READ linkedGroupRole WRITE setLinkedGroupRole NOTIFY linkedGroupChanged)
100
101 Joystick(const QString &name, int axisCount, int buttonCount, int hatCount, QObject *parent = nullptr);
102 virtual ~Joystick();
103
104 static constexpr int AxisMin = -32768;
105 static constexpr int AxisMax = 32767;
106
113
117 int center = 0;
118 int deadband = 0;
119 bool reversed = false;
120
121 void reset() {
122 min = AxisMin;
123 max = AxisMax;
124 center = 0;
125 deadband = 0;
126 reversed = false;
127 }
128 };
129
145 static QString axisFunctionToString(AxisFunction_t function);
146
159 Q_ENUM(HatDirection)
160
161
179 Q_ENUM(GamepadButton)
180
181
190 Q_ENUM(GamepadAxis)
191
192 Q_INVOKABLE void setButtonRepeat(int button, bool repeat);
193 Q_INVOKABLE bool getButtonRepeat(int button);
194 Q_INVOKABLE void setButtonAction(int button, const QString &action);
195 Q_INVOKABLE QString getButtonAction(int button) const;
196
197 JoystickSettings* settings() { return &_joystickSettings; }
198 QString name() const { return _name; }
199 int buttonCount() const { return _totalButtonCount; }
200 int axisCount() const { return _axisCount; }
201 virtual bool requiresCalibration() const { return true; }
202 virtual bool hasRumble() const { return false; }
203 virtual bool hasRumbleTriggers() const { return false; }
204 virtual bool hasLED() const { return false; }
205 virtual QString guid() const { return QString(); }
206 virtual quint16 vendorId() const { return 0; }
207 virtual quint16 productId() const { return 0; }
208 virtual QString serial() const { return QString(); }
209 virtual QString deviceType() const { return QString(); }
210 virtual int playerIndex() const { return -1; }
211 virtual void setPlayerIndex(int index) { Q_UNUSED(index); }
212 virtual int batteryPercent() const { return -1; }
213 virtual QString powerState() const { return QString(); }
214 virtual bool isGamepad() const { return false; }
215 virtual QString gamepadType() const { return QString(); }
216 virtual QString path() const { return QString(); }
217 virtual bool isVirtual() const { return false; }
218 virtual quint16 firmwareVersion() const { return 0; }
219 virtual QString connectionType() const { return QString(); }
220 virtual int ballCount() const { return 0; }
221
222 Q_INVOKABLE virtual void rumble(quint16 lowFreq, quint16 highFreq, quint32 durationMs) { Q_UNUSED(lowFreq); Q_UNUSED(highFreq); Q_UNUSED(durationMs); }
223 Q_INVOKABLE virtual void rumbleTriggers(quint16 left, quint16 right, quint32 durationMs) { Q_UNUSED(left); Q_UNUSED(right); Q_UNUSED(durationMs); }
224 Q_INVOKABLE virtual void setLED(quint8 red, quint8 green, quint8 blue) { Q_UNUSED(red); Q_UNUSED(green); Q_UNUSED(blue); }
225 Q_INVOKABLE virtual QString axisLabel(int axis) const { Q_UNUSED(axis); return QString(); }
226 Q_INVOKABLE virtual QString buttonLabel(int button) const { Q_UNUSED(button); return QString(); }
227 Q_INVOKABLE virtual QString getMapping() const { return QString(); }
228 Q_INVOKABLE virtual bool addMapping(const QString &mapping) { Q_UNUSED(mapping); return false; }
229
230 // Sensor support (gyroscope/accelerometer)
231 Q_INVOKABLE virtual bool hasGyroscope() const { return false; }
232 Q_INVOKABLE virtual bool hasAccelerometer() const { return false; }
233 Q_INVOKABLE virtual bool setGyroscopeEnabled(bool enabled) { Q_UNUSED(enabled); return false; }
234 Q_INVOKABLE virtual bool setAccelerometerEnabled(bool enabled) { Q_UNUSED(enabled); return false; }
235 Q_INVOKABLE virtual QVector3D gyroscopeData() const { return QVector3D(); }
236 Q_INVOKABLE virtual QVector3D accelerometerData() const { return QVector3D(); }
237 Q_INVOKABLE virtual float gyroscopeDataRate() const { return 0.0f; }
238 Q_INVOKABLE virtual float accelerometerDataRate() const { return 0.0f; }
239
240 // Touchpad support (PS4/PS5 controllers)
241 Q_INVOKABLE virtual int touchpadCount() const { return 0; }
242 Q_INVOKABLE virtual int touchpadFingerCount(int touchpad) const { Q_UNUSED(touchpad); return 0; }
243 Q_INVOKABLE virtual QVariantMap getTouchpadFinger(int touchpad, int finger) const {
244 Q_UNUSED(touchpad); Q_UNUSED(finger); return QVariantMap();
245 }
246
247 // Trackball support
248 Q_INVOKABLE virtual QVariantMap getBall(int ball) const { Q_UNUSED(ball); return QVariantMap(); }
249
250 // PS5 adaptive trigger effects
251 Q_INVOKABLE virtual bool sendEffect(const QByteArray &data) { Q_UNUSED(data); return false; }
252
253 // Binding queries (debug/UI)
254 Q_INVOKABLE virtual QVariantMap getAxisBinding(int axis) const { Q_UNUSED(axis); return QVariantMap(); }
255 Q_INVOKABLE virtual QVariantMap getButtonBinding(int button) const { Q_UNUSED(button); return QVariantMap(); }
256
257 // Capability queries
258 Q_INVOKABLE virtual bool hasButton(int button) const { Q_UNUSED(button); return false; }
259 Q_INVOKABLE virtual bool hasAxis(int axis) const { Q_UNUSED(axis); return false; }
260
261 // Real gamepad type (actual hardware vs mapped type)
262 Q_INVOKABLE virtual QString realGamepadType() const { return QString(); }
263
264 // Type-specific button labels (shows correct names for controller type, e.g., "Cross" vs "A")
265 Q_INVOKABLE virtual QString buttonLabelForType(int button) const { Q_UNUSED(button); return QString(); }
266
267 // Haptic/Force Feedback support
268 Q_INVOKABLE virtual bool hasHaptic() const { return false; }
269 Q_INVOKABLE virtual int hapticEffectsCount() const { return 0; }
270 Q_INVOKABLE virtual bool hapticRumbleSupported() const { return false; }
271 Q_INVOKABLE virtual bool hapticRumbleInit() { return false; }
272 Q_INVOKABLE virtual bool hapticRumblePlay(float strength, quint32 durationMs) { Q_UNUSED(strength); Q_UNUSED(durationMs); return false; }
273 Q_INVOKABLE virtual void hapticRumbleStop() {}
274
275 // Mapping for GUID (static in implementation)
276 Q_INVOKABLE virtual QString getMappingForGUID(const QString &guid) const { Q_UNUSED(guid); return QString(); }
277
278 // Virtual joystick control (for software-based joystick input)
279 Q_INVOKABLE virtual bool setVirtualAxis(int axis, int value) { Q_UNUSED(axis); Q_UNUSED(value); return false; }
280 Q_INVOKABLE virtual bool setVirtualButton(int button, bool down) { Q_UNUSED(button); Q_UNUSED(down); return false; }
281 Q_INVOKABLE virtual bool setVirtualHat(int hat, quint8 value) { Q_UNUSED(hat); Q_UNUSED(value); return false; }
282 Q_INVOKABLE virtual bool setVirtualBall(int ball, int dx, int dy) { Q_UNUSED(ball); Q_UNUSED(dx); Q_UNUSED(dy); return false; }
283 Q_INVOKABLE virtual bool setVirtualTouchpad(int touchpad, int finger, bool down, float x, float y, float pressure) {
284 Q_UNUSED(touchpad); Q_UNUSED(finger); Q_UNUSED(down); Q_UNUSED(x); Q_UNUSED(y); Q_UNUSED(pressure); return false;
285 }
286 Q_INVOKABLE virtual bool sendVirtualSensorData(int sensorType, float x, float y, float z) {
287 Q_UNUSED(sensorType); Q_UNUSED(x); Q_UNUSED(y); Q_UNUSED(z); return false;
288 }
289
290 // Properties/Capability detection
291 Q_INVOKABLE virtual bool hasMonoLED() const { return false; }
292 Q_INVOKABLE virtual bool hasRGBLED() const { return false; }
293 Q_INVOKABLE virtual bool hasPlayerLED() const { return false; }
294
295 // Connection state
296 Q_INVOKABLE virtual QString connectionState() const { return QString(); }
297
298 // Initial axis state (for drift detection) - returns {valid, value}
299 Q_INVOKABLE virtual QVariantMap getAxisInitialState(int axis) const { Q_UNUSED(axis); return QVariantMap(); }
300
301 // Per-device custom mapping
302 Q_INVOKABLE virtual bool setMapping(const QString &mapping) { Q_UNUSED(mapping); return false; }
303
304 QStringList buttonActions() const;
305 QString buttonActionNone() const { return _buttonActionNone; }
306 QString disabledActionName() const { return _buttonActionNone; }
307 const QmlObjectListModel *assignableActions() const { return _availableButtonActions; }
308 QStringList assignableActionTitles() const { return _availableActionTitles; }
309
311 QString linkedGroupId() const { return _linkedGroupId; }
312 void setLinkedGroupId(const QString &groupId);
313 QString linkedGroupRole() const { return _linkedGroupRole; }
314 void setLinkedGroupRole(const QString &role);
315
316 void setAxisCalibration(int axis, const AxisCalibration_t &calibration);
318
319 RemoteControlCalibrationController::StickFunction mapAxisFunctionToRCCStickFunction(AxisFunction_t axisFunction) const;
320 AxisFunction_t mapRCCStickFunctionToAxisFunction(RemoteControlCalibrationController::StickFunction stickFunction) const;
321
322 void setFunctionForChannel(RemoteControlCalibrationController::StickFunction stickFunction, int channel);
323 int getChannelForFunction(RemoteControlCalibrationController::StickFunction stickFunction) const ;
324
325 Q_INVOKABLE void startConfiguration();
326 Q_INVOKABLE void stopConfiguration();
327
328 void stop();
329
330signals:
335 void connectionStateChanged(const QString &newState);
337 void axisValues(float roll, float pitch, float yaw, float throttle);
338 void startContinuousZoom(int direction);
340 void stepZoom(int direction);
341 void stepCamera(int direction);
342 void stepStream(int direction);
347 void gimbalPitchStart(int direction);
348 void gimbalYawStart(int direction);
352 void gimbalYawLock(bool lock);
353 void setArmed(bool arm);
354 void setVtolInFwdFlight(bool set);
355 void setFlightMode(const QString &flightMode);
360 void motorInterlock(bool enable);
361 void unknownAction(const QString &action);
362 void vehicleJoystickData(float roll, float pitch, float yaw, float throttle, uint16_t buttonsLow, uint16_t buttonsHigh, float gimbalPitch, float gimbalYaw);
363 void rawChannelValuesChanged(QVector<int> channelValues);
364 void rawButtonPressedChanged(int index, bool pressed);
365
366 // Sensor event signals (for event-driven updates)
367 void gyroscopeDataUpdated(const QVector3D &data);
368 void accelerometerDataUpdated(const QVector3D &data);
369 void touchpadEvent(int touchpad, int finger, bool down, float x, float y, float pressure);
370
371 // Additional event signals
374
375protected:
376 QString _name;
377 int _axisCount = 0;
379 int _hatCount = 0;
380
381private slots:
382 void _flightModesChanged() { _buildAvailableButtonsActionList(_pollingVehicle); }
383
384private:
385 enum PollingType {
386 NotPolling,
387 PollingForConfiguration,
388 PollingForVehicle,
389 };
390
391 using AxisFunctionMap_t = QMap<AxisFunction_t, int>;
392
393 virtual bool _open() = 0;
394 virtual void _close() = 0;
395 virtual bool _update() = 0;
396
397 virtual bool _getButton(int i) const = 0;
398 virtual int _getAxisValue(int axis) const = 0;
399 virtual bool _getHat(int hat, int i) const = 0;
400
401 void run() override;
402
403 void _startPollingForVehicle(Vehicle &vehicle);
404 void _startPollingForActiveVehicle();
405 void _startPollingForConfiguration();
406 void _stopPollingForConfiguration();
407 void _stopAllPolling();
408 QString _pollingTypeToString(PollingType pollingType) const;
409 PollingType _currentPollingType = NotPolling;
410 PollingType _previousPollingType = NotPolling;
411 Vehicle* _pollingVehicle = nullptr;
412
413 void _resetFunctionToAxisMap();
414 void _resetAxisCalibrationData();
415 void _resetButtonActionData();
416 void _resetButtonEventStates();
417
418 void _foundInvalidAxisSettingsCleanup();
419
420 void _loadButtonSettings();
421 void _loadAxisSettings(bool joystickCalibrated, int transmitterMode);
422 void _saveButtonSettings();
423 void _saveAxisSettings(int transmitterMode);
424 void _loadFromSettingsIntoCalibrationData();
425 void _saveFromCalibrationDataIntoSettings();
426 void _clearAxisSettings();
427 void _clearButtonSettings();
428
430 float _adjustRange(int reversedAxisValue, const AxisCalibration_t &calibration, bool withDeadbands);
431
432 void _executeButtonAction(const QString &action, const ButtonEvent_t buttonEvent);
433 int _findAvailableButtonActionIndex(const QString &action);
434 bool _validAxis(int axis) const;
435 bool _validButton(int button) const;
436 void _handleAxis();
437 void _handleButtons();
438 void _buildAvailableButtonsActionList(Vehicle *vehicle);
439 AxisFunction_t _getAxisFunctionForJoystickAxis(int joystickAxis) const;
440 int _getJoystickAxisForAxisFunction(AxisFunction_t axisFunction) const;
441 void _setJoystickAxisForAxisFunction(AxisFunction_t axisFunction, int axis);
442 void _updateButtonEventState(int buttonIndex, const bool buttonPressed, ButtonEvent_t &buttonEventState);
443 void _updateButtonEventStates(QVector<ButtonEvent_t> &buttonEventStates);
444
446 void _remapFunctionsInFunctionMapToNewTransmittedMode(int fromMode, int toMode);
447
448 int _hatButtonCount = 0;
449 int _totalButtonCount = 0;
450 QVector<AxisCalibration_t> _rgCalibration;
451 QVector<ButtonEvent_t> _buttonEventStates;
452 QVector<AssignedButtonAction*> _assignedButtonActions;
453 MavlinkActionManager *_mavlinkActionManager = nullptr;
454 QmlObjectListModel *_availableButtonActions = nullptr;
455
456 JoystickManager* _joystickManager = nullptr;
457 JoystickSettings _joystickSettings;
458
459 AxisFunctionMap_t _axisFunctionToJoystickAxisMap;
460 static constexpr const int kJoystickAxisNotAssigned = -1;
461
462 QElapsedTimer _axisElapsedTimer;
463 QStringList _availableActionTitles;
464 std::atomic<bool> _exitThread = false;
465
466 // HOTAS/Multi-device linking
467 QString _linkedGroupId;
468 QString _linkedGroupRole;
469
470 static constexpr const char *_buttonActionNone = QT_TR_NOOP("No Action");
471 static constexpr const char *_buttonActionArm = QT_TR_NOOP("Arm");
472 static constexpr const char *_buttonActionDisarm = QT_TR_NOOP("Disarm");
473 static constexpr const char *_buttonActionToggleArm = QT_TR_NOOP("Toggle Arm");
474 static constexpr const char *_buttonActionVTOLFixedWing = QT_TR_NOOP("VTOL: Fixed Wing");
475 static constexpr const char *_buttonActionVTOLMultiRotor = QT_TR_NOOP("VTOL: Multi-Rotor");
476 static constexpr const char *_buttonActionContinuousZoomIn = QT_TR_NOOP("Continuous Zoom In");
477 static constexpr const char *_buttonActionContinuousZoomOut = QT_TR_NOOP("Continuous Zoom Out");
478 static constexpr const char *_buttonActionStepZoomIn = QT_TR_NOOP("Step Zoom In");
479 static constexpr const char *_buttonActionStepZoomOut = QT_TR_NOOP("Step Zoom Out");
480 static constexpr const char *_buttonActionNextStream = QT_TR_NOOP("Next Video Stream");
481 static constexpr const char *_buttonActionPreviousStream = QT_TR_NOOP("Previous Video Stream");
482 static constexpr const char *_buttonActionNextCamera = QT_TR_NOOP("Next Camera");
483 static constexpr const char *_buttonActionPreviousCamera = QT_TR_NOOP("Previous Camera");
484 static constexpr const char *_buttonActionTriggerCamera = QT_TR_NOOP("Trigger Camera");
485 static constexpr const char *_buttonActionStartVideoRecord = QT_TR_NOOP("Start Recording Video");
486 static constexpr const char *_buttonActionStopVideoRecord = QT_TR_NOOP("Stop Recording Video");
487 static constexpr const char *_buttonActionToggleVideoRecord = QT_TR_NOOP("Toggle Recording Video");
488 static constexpr const char *_buttonActionGimbalDown = QT_TR_NOOP("Gimbal Down");
489 static constexpr const char *_buttonActionGimbalUp = QT_TR_NOOP("Gimbal Up");
490 static constexpr const char *_buttonActionGimbalLeft = QT_TR_NOOP("Gimbal Left");
491 static constexpr const char *_buttonActionGimbalRight = QT_TR_NOOP("Gimbal Right");
492 static constexpr const char *_buttonActionGimbalCenter = QT_TR_NOOP("Gimbal Center");
493 static constexpr const char *_buttonActionGimbalYawLock = QT_TR_NOOP("Gimbal Yaw Lock");
494 static constexpr const char *_buttonActionGimbalYawFollow = QT_TR_NOOP("Gimbal Yaw Follow");
495 static constexpr const char *_buttonActionEmergencyStop = QT_TR_NOOP("Emergency Stop");
496 static constexpr const char *_buttonActionGripperGrab = QT_TR_NOOP("Gripper Grab");
497 static constexpr const char *_buttonActionGripperRelease = QT_TR_NOOP("Gripper Release");
498 static constexpr const char *_buttonActionGripperHold = QT_TR_NOOP("Gripper Hold");
499 static constexpr const char *_buttonActionLandingGearDeploy= QT_TR_NOOP("Landing gear deploy");
500 static constexpr const char *_buttonActionLandingGearRetract= QT_TR_NOOP("Landing gear retract");
501 static constexpr const char *_buttonActionMotorInterlockEnable= QT_TR_NOOP("Motor Interlock enable");
502 static constexpr const char *_buttonActionMotorInterlockDisable= QT_TR_NOOP("Motor Interlock disable");
503
504};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
QElapsedTimer buttonElapsedTimer
Definition Joystick.h:32
virtual void setPlayerIndex(int index)
Definition Joystick.h:211
virtual bool hasAccelerometer() const
Definition Joystick.h:232
void setLinkedGroupId(const QString &groupId)
Definition Joystick.cc:1673
void stopConfiguration()
Tells the joystick that the configuration UI is being closed so it can do any special processing requ...
Definition Joystick.cc:1640
void rawButtonPressedChanged(int index, bool pressed)
Signalled during PollingForConfiguration.
void setArmed(bool arm)
void gimbalYawLock(bool lock)
virtual bool hasRumbleTriggers() const
Definition Joystick.h:203
void touchpadEvent(int touchpad, int finger, bool down, float x, float y, float pressure)
virtual quint16 firmwareVersion() const
Definition Joystick.h:218
virtual int batteryPercent() const
Definition Joystick.h:212
virtual bool setVirtualTouchpad(int touchpad, int finger, bool down, float x, float y, float pressure)
Definition Joystick.h:283
virtual QVariantMap getTouchpadFinger(int touchpad, int finger) const
Definition Joystick.h:243
int _buttonCount
Definition Joystick.h:378
virtual bool requiresCalibration() const
Definition Joystick.h:201
void triggerCamera()
QString linkedGroupId() const
HOTAS/Multi-device linking (devices with same groupId act as single joystick)
Definition Joystick.h:311
virtual bool hasAxis(int axis) const
Definition Joystick.h:259
virtual int ballCount() const
Definition Joystick.h:220
virtual void rumble(quint16 lowFreq, quint16 highFreq, quint32 durationMs)
Definition Joystick.h:222
@ aux6ExtensionFunction
Definition Joystick.h:142
@ aux2ExtensionFunction
Definition Joystick.h:138
@ pitchExtensionFunction
Definition Joystick.h:135
@ rollFunction
Definition Joystick.h:131
@ yawFunction
Definition Joystick.h:133
@ maxAxisFunction
Definition Joystick.h:143
@ aux5ExtensionFunction
Definition Joystick.h:141
@ aux3ExtensionFunction
Definition Joystick.h:139
@ throttleFunction
Definition Joystick.h:134
@ rollExtensionFunction
Definition Joystick.h:136
@ aux4ExtensionFunction
Definition Joystick.h:140
@ aux1ExtensionFunction
Definition Joystick.h:137
@ pitchFunction
Definition Joystick.h:132
QString name() const
Definition Joystick.h:198
QString disabledActionName() const
Definition Joystick.h:306
virtual bool addMapping(const QString &mapping)
Definition Joystick.h:228
void mappingRemapped()
void batteryStateChanged()
virtual QString deviceType() const
Definition Joystick.h:209
virtual bool isVirtual() const
Definition Joystick.h:217
virtual int touchpadCount() const
Definition Joystick.h:241
virtual bool hasMonoLED() const
Definition Joystick.h:291
RemoteControlCalibrationController::StickFunction mapAxisFunctionToRCCStickFunction(AxisFunction_t axisFunction) const
Definition Joystick.cc:1228
void startVideoRecord()
virtual bool isGamepad() const
Definition Joystick.h:214
HatDirection
Standard gamepad hat/D-pad directions.
Definition Joystick.h:148
@ HatRightUp
Definition Joystick.h:154
@ HatLeftDown
Definition Joystick.h:157
@ HatRightDown
Definition Joystick.h:155
@ HatCentered
Definition Joystick.h:149
@ HatLeftUp
Definition Joystick.h:156
QString _name
Definition Joystick.h:376
int _hatCount
Definition Joystick.h:379
virtual void rumbleTriggers(quint16 left, quint16 right, quint32 durationMs)
Definition Joystick.h:223
const QmlObjectListModel * assignableActions() const
Definition Joystick.h:307
virtual QString axisLabel(int axis) const
Definition Joystick.h:225
virtual QString gamepadType() const
Definition Joystick.h:215
void setLinkedGroupRole(const QString &role)
Definition Joystick.cc:1694
void setFlightMode(const QString &flightMode)
virtual QVariantMap getButtonBinding(int button) const
Definition Joystick.h:255
virtual float accelerometerDataRate() const
Definition Joystick.h:238
virtual QVariantMap getAxisInitialState(int axis) const
Definition Joystick.h:299
void motorInterlock(bool enable)
QString name READ name CONSTANT(JoystickSettings *settings READ settings CONSTANT) 1(int axisCount READ axisCount CONSTANT) 1(int buttonCount READ buttonCount CONSTANT) 1(bool requiresCalibration READ requiresCalibration CONSTANT) 1(bool hasRumble READ hasRumble CONSTANT) 1(bool hasRumbleTriggers READ hasRumbleTriggers CONSTANT) 1(bool hasLED READ hasLED CONSTANT) 1(QString guid READ guid CONSTANT) 1(quint16 vendorId READ vendorId CONSTANT) 1(quint16 productId READ productId CONSTANT) 1(QString serial READ serial CONSTANT) 1(QString deviceType READ deviceType CONSTANT) 1(int playerIndex READ playerIndex WRITE setPlayerIndex NOTIFY playerIndexChanged) 1(int batteryPercent READ batteryPercent NOTIFY batteryStateChanged) 1(QString powerState READ powerState NOTIFY batteryStateChanged) 1(bool isGamepad READ isGamepad CONSTANT) 1(QString gamepadType READ gamepadType CONSTANT) 1(QString path READ path CONSTANT) 1(bool isVirtual READ isVirtual CONSTANT) 1(quint16 firmwareVersion READ firmwareVersion CONSTANT) 1(QString connectionType READ connectionType CONSTANT) 1(int ballCount READ ballCount CONSTANT) 1(const QmlObjectListModel *assignableActions READ assignableActions NOTIFY assignableActionsChanged) 1(QString disabledActionName READ disabledActionName CONSTANT) 1(QStringList assignableActionTitles READ assignableActionTitles NOTIFY assignableActionsChanged) 1(QStringList buttonActions READ buttonActions NOTIFY buttonActionsChanged) 1(QString buttonActionNone READ buttonActionNone CONSTANT) 1(QString linkedGroupId READ linkedGroupId WRITE setLinkedGroupId NOTIFY linkedGroupChanged) 1(QString linkedGroupRole READ linkedGroupRole WRITE setLinkedGroupRole NOTIFY linkedGroupChanged) Joystick(const QString &name
virtual QString getMapping() const
Definition Joystick.h:227
static QString axisFunctionToString(AxisFunction_t function)
Definition Joystick.cc:1602
void setFunctionForChannel(RemoteControlCalibrationController::StickFunction stickFunction, int channel)
Definition Joystick.cc:1294
void updateComplete()
void axisValues(float roll, float pitch, float yaw, float throttle)
virtual void hapticRumbleStop()
Definition Joystick.h:273
virtual QString buttonLabel(int button) const
Definition Joystick.h:226
void landingGearDeploy()
virtual bool hasPlayerLED() const
Definition Joystick.h:293
void buttonActionsChanged()
void stop()
Definition Joystick.cc:1661
virtual QVariantMap getBall(int ball) const
Definition Joystick.h:248
int axisCount() const
Definition Joystick.h:200
@ ButtonEventDownTransition
Definition Joystick.h:109
@ ButtonEventNone
Definition Joystick.h:111
@ ButtonEventRepeat
Definition Joystick.h:110
@ ButtonEventUpTransition
Definition Joystick.h:108
void assignableActionsChanged()
virtual QVector3D accelerometerData() const
Definition Joystick.h:236
static constexpr int AxisMin
Definition Joystick.h:104
virtual int touchpadFingerCount(int touchpad) const
Definition Joystick.h:242
void centerGimbal()
virtual bool hasButton(int button) const
Definition Joystick.h:258
void unknownAction(const QString &action)
void playerIndexChanged()
virtual quint16 vendorId() const
Definition Joystick.h:206
QString name READ name int int int hatCount
Definition Joystick.h:101
virtual float gyroscopeDataRate() const
Definition Joystick.h:237
virtual QVector3D gyroscopeData() const
Definition Joystick.h:235
int getChannelForFunction(RemoteControlCalibrationController::StickFunction stickFunction) const
Definition Joystick.cc:1299
void vehicleJoystickData(float roll, float pitch, float yaw, float throttle, uint16_t buttonsLow, uint16_t buttonsHigh, float gimbalPitch, float gimbalYaw)
virtual int playerIndex() const
Definition Joystick.h:210
QString getButtonAction(int button) const
Definition Joystick.cc:1381
virtual bool hasGyroscope() const
Definition Joystick.h:231
virtual bool sendEffect(const QByteArray &data)
Definition Joystick.h:251
virtual QString serial() const
Definition Joystick.h:208
void connectionStateChanged(const QString &newState)
void stopVideoRecord()
virtual QString realGamepadType() const
Definition Joystick.h:262
void stepZoom(int direction)
virtual QVariantMap getAxisBinding(int axis) const
Definition Joystick.h:254
QStringList buttonActions() const
Definition Joystick.cc:1392
AxisFunction_t mapRCCStickFunctionToAxisFunction(RemoteControlCalibrationController::StickFunction stickFunction) const
Definition Joystick.cc:1261
void startConfiguration()
Tells the joystick that the configuration UI is being displayed so it can do any special processing r...
Definition Joystick.cc:1635
virtual QString connectionType() const
Definition Joystick.h:219
QString name READ name int axisCount
Definition Joystick.h:101
virtual quint16 productId() const
Definition Joystick.h:207
Joystick::AxisCalibration_t getAxisCalibration(int axis) const
Definition Joystick.cc:1191
virtual bool hasRumble() const
Definition Joystick.h:202
void setAxisCalibration(int axis, const AxisCalibration_t &calibration)
Definition Joystick.cc:1182
void gripperAction(QGCMAVLink::GripperActions gripperAction)
void gimbalPitchStop()
int _axisCount
Definition Joystick.h:377
QString name READ name int int buttonCount
Definition Joystick.h:101
void gimbalYawStop()
QString buttonActionNone() const
Definition Joystick.h:305
void startContinuousZoom(int direction)
JoystickSettings * settings()
Definition Joystick.h:197
virtual QString getMappingForGUID(const QString &guid) const
Definition Joystick.h:276
virtual QString buttonLabelForType(int button) const
Definition Joystick.h:265
void stopContinuousZoom()
virtual bool setMapping(const QString &mapping)
Definition Joystick.h:302
void emergencyStop()
virtual void setLED(quint8 red, quint8 green, quint8 blue)
Definition Joystick.h:224
GamepadAxis
Standard gamepad axis indices.
Definition Joystick.h:182
@ AxisTriggerLeft
Definition Joystick.h:187
@ AxisLeftX
Definition Joystick.h:183
@ AxisRightY
Definition Joystick.h:186
@ AxisLeftY
Definition Joystick.h:184
@ AxisTriggerRight
Definition Joystick.h:188
@ AxisRightX
Definition Joystick.h:185
bool getButtonRepeat(int button)
Definition Joystick.cc:1324
virtual bool setGyroscopeEnabled(bool enabled)
Definition Joystick.h:233
virtual bool hasLED() const
Definition Joystick.h:204
virtual bool hapticRumblePlay(float strength, quint32 durationMs)
Definition Joystick.h:272
static constexpr int AxisMax
Definition Joystick.h:105
int buttonCount() const
Definition Joystick.h:199
void setButtonAction(int button, const QString &action)
Definition Joystick.cc:1333
QString name READ name int int int QObject * parent
Definition Joystick.h:101
void stepCamera(int direction)
void accelerometerDataUpdated(const QVector3D &data)
void setVtolInFwdFlight(bool set)
virtual bool setVirtualButton(int button, bool down)
Definition Joystick.h:280
virtual int hapticEffectsCount() const
Definition Joystick.h:269
void stepStream(int direction)
virtual QString connectionState() const
Definition Joystick.h:296
void landingGearRetract()
void toggleVideoRecord()
virtual bool setAccelerometerEnabled(bool enabled)
Definition Joystick.h:234
GamepadButton
Standard gamepad button indices.
Definition Joystick.h:162
@ ButtonDPadLeft
Definition Joystick.h:176
@ ButtonRightShoulder
Definition Joystick.h:173
@ ButtonDPadRight
Definition Joystick.h:177
@ ButtonStart
Definition Joystick.h:169
@ ButtonDPadDown
Definition Joystick.h:175
@ ButtonLeftShoulder
Definition Joystick.h:172
@ ButtonLeftStick
Definition Joystick.h:170
@ ButtonBack
Definition Joystick.h:167
@ ButtonGuide
Definition Joystick.h:168
@ ButtonRightStick
Definition Joystick.h:171
@ ButtonDPadUp
Definition Joystick.h:174
virtual QString path() const
Definition Joystick.h:216
virtual bool hapticRumbleSupported() const
Definition Joystick.h:270
void gimbalPitchStart(int direction)
virtual bool hasHaptic() const
Definition Joystick.h:268
virtual bool setVirtualBall(int ball, int dx, int dy)
Definition Joystick.h:282
virtual bool hapticRumbleInit()
Definition Joystick.h:271
QStringList assignableActionTitles() const
Definition Joystick.h:308
void gyroscopeDataUpdated(const QVector3D &data)
virtual QString guid() const
Definition Joystick.h:205
void linkedGroupChanged()
void rawChannelValuesChanged(QVector< int > channelValues)
Signalled during PollingForConfiguration.
QString linkedGroupRole() const
Definition Joystick.h:313
void gimbalYawStart(int direction)
void setButtonRepeat(int button, bool repeat)
Definition Joystick.cc:1304
virtual QString powerState() const
Definition Joystick.h:213
virtual bool setVirtualAxis(int axis, int value)
Definition Joystick.h:279
virtual bool sendVirtualSensorData(int sensorType, float x, float y, float z)
Definition Joystick.h:286
virtual bool hasRGBLED() const
Definition Joystick.h:292
virtual bool setVirtualHat(int hat, quint8 value)
Definition Joystick.h:281