QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
JoystickManager.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QObject>
4#include <QtCore/QTimer>
5#include <QtCore/QVariantList>
6#include <QtQmlIntegration/QtQmlIntegration>
7
8class Joystick;
10class Vehicle;
11
12class JoystickManager : public QObject
13{
14 Q_OBJECT
15 QML_ELEMENT
16 QML_UNCREATABLE("")
17 Q_MOC_INCLUDE("Joystick.h")
18
19
22
25
26
28
29#ifdef QGC_UNITTEST_BUILD
30 friend class JoystickManagerTest;
31#endif
32
33public:
34 explicit JoystickManager(QObject *parent = nullptr);
35 ~JoystickManager() override;
36
37 static JoystickManager *instance();
38
39 QStringList availableJoystickNames() const { return _name2JoystickMap.keys(); }
40 int joystickCount() const { return _name2JoystickMap.count(); }
41
45
48 Q_INVOKABLE QStringList linkedGroupMembers(const QString &groupId) const;
49
51 Q_INVOKABLE Joystick *joystickByName(const QString &name) const;
52
53signals:
57
58public slots:
59 void init();
60
61private slots:
63 void _checkForAddedOrRemovedJoysticks();
64 void _activeVehicleChanged(Vehicle *activeVehicle);
65 void _setActiveJoystickByName(const QString &name);
66
67 // SDL event handlers (called via QMetaObject::invokeMethod from sdlEventWatcher)
68 void _handleUpdateComplete(int instanceId);
69 void _handleBatteryUpdated(int instanceId);
70 void _handleGamepadRemapped(int instanceId);
71 void _handleTouchpadEvent(int instanceId, int touchpad, int finger, bool down, float x, float y, float pressure);
72 void _handleSensorUpdate(int instanceId, int sensor, float x, float y, float z);
73
74private:
75 void _setActiveJoystickFromSettings();
76 void _setActiveJoystick(Joystick *joystick);
77 bool _joystickEnabledForVehicle(Vehicle *vehicle) const;
78 void _setJoystickEnabledForVehicle(Vehicle *vehicle, bool enabled);
79 Joystick *_findJoystickByInstanceId(int instanceId);
80 void _updatePollingTimer();
81
82 JoystickManagerSettings *_joystickManagerSettings = nullptr;
83 Joystick *_activeJoystick = nullptr;
84 QMap<QString, Joystick*> _name2JoystickMap;
85 QTimer _pollTimer;
86};
bool activeJoystickEnabledForActiveVehicle() const
~JoystickManager() override
static JoystickManager * instance()
Joystick * activeJoystick()
Q_INVOKABLE Joystick * joystickByName(const QString &name) const
Get joystick by name (returns nullptr if not found)
void setActiveJoystickEnabledForActiveVehicle(bool enabled)
QStringList availableJoystickNames() const
void availableJoystickNamesChanged()
void activeJoystickChanged(Joystick *joystick)
int joystickCount() const
Q_INVOKABLE QStringList linkedGroupMembers(const QString &groupId) const
void activeJoystickEnabledForActiveVehicleChanged()