QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
SDLJoystick.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QString>
4#include <QtCore/QVariantMap>
5
6#include <SDL3/SDL.h>
7
12namespace SDLJoystick {
13
14// ============================================================================
15// Initialization
16// ============================================================================
17
19bool init();
20
22void shutdown();
23
25bool isInitialized();
26
27// ============================================================================
28// Event Control
29// ============================================================================
30
32void pumpEvents();
33
35void setJoystickEventsEnabled(bool enabled);
37
39void setGamepadEventsEnabled(bool enabled);
41
43void updateJoysticks();
44void updateGamepads();
45
46// ============================================================================
47// Thread Safety
48// ============================================================================
49
51void lockJoysticks();
52void unlockJoysticks();
53
62
63// ============================================================================
64// Type/String Conversions
65// ============================================================================
66
68QString gamepadTypeToString(int type);
69int gamepadTypeFromString(const QString &str);
70QString gamepadTypeDisplayName(int type);
71
73QString gamepadAxisToString(int axis);
74int gamepadAxisFromString(const QString &str);
75
77QString gamepadButtonToString(int button);
78int gamepadButtonFromString(const QString &str);
79
81QString connectionStateToString(int state);
82
83// ============================================================================
84// GUID Utilities
85// ============================================================================
86
88QVariantMap getGUIDInfo(const QString &guid);
89
91QString getMappingForGUID(const QString &guid);
92
93// ============================================================================
94// Mapping Management
95// ============================================================================
96
98int addMappingsFromFile(const QString &filePath);
99
101bool addMapping(const QString &mapping);
102
104bool addMappingPersistent(const QString &mapping);
105
107bool reloadMappings();
108
110QString userMappingsFilePath();
111
112// ============================================================================
113// Player Index
114// ============================================================================
115
117int getInstanceIdFromPlayerIndex(int playerIndex);
118
119// ============================================================================
120// Pre-Open Device Queries (query device info without opening)
121// ============================================================================
122
124QString getNameForInstanceId(int instanceId);
125
127QString getPathForInstanceId(int instanceId);
128
130QString getGUIDForInstanceId(int instanceId);
131
133int getVendorForInstanceId(int instanceId);
134
136int getProductForInstanceId(int instanceId);
137
139int getProductVersionForInstanceId(int instanceId);
140
142QString getTypeForInstanceId(int instanceId);
143
145QString getRealTypeForInstanceId(int instanceId);
146
148int getPlayerIndexForInstanceId(int instanceId);
149
152QString getConnectionStateForInstanceId(int instanceId);
153
154// ============================================================================
155// Virtual Joystick
156// ============================================================================
157
159int createVirtualJoystick(const QString &name, int axisCount, int buttonCount, int hatCount);
160
162bool destroyVirtualJoystick(int instanceId);
163
165bool isVirtualJoystick(int instanceId);
166
167// ============================================================================
168// Gamepad Binding Utilities
169// ============================================================================
170
172void populateBindingResult(QVariantMap &result, const SDL_GamepadBinding *binding);
173
178template<typename MatchFunc>
179inline QVariantMap findBinding(SDL_Gamepad *gamepad, MatchFunc matchFunc)
180{
181 QVariantMap result;
182 result[QStringLiteral("valid")] = false;
183
184 if (!gamepad) {
185 return result;
186 }
187
188 int bindingCount = 0;
189 SDL_GamepadBinding **bindings = SDL_GetGamepadBindings(gamepad, &bindingCount);
190 if (!bindings) {
191 return result;
192 }
193
194 for (int i = 0; i < bindingCount; ++i) {
195 SDL_GamepadBinding *binding = bindings[i];
196 if (binding && matchFunc(binding)) {
197 populateBindingResult(result, binding);
198 SDL_free(bindings);
199 return result;
200 }
201 }
202
203 SDL_free(bindings);
204 return result;
205}
206
207} // namespace SDLJoystick
struct SDL_Gamepad SDL_Gamepad
Definition JoystickSDL.h:14
RAII lock guard for joysticks.
Definition SDLJoystick.h:55
JoystickLock & operator=(const JoystickLock &)=delete
JoystickLock(const JoystickLock &)=delete
QVariantMap getGUIDInfo(const QString &guid)
Parse GUID info (vendor, product, version, crc16)
void unlockJoysticks()
bool destroyVirtualJoystick(int instanceId)
Destroy a virtual joystick.
QString connectionStateToString(int state)
Connection state to string.
bool gamepadEventsEnabled()
QString getPathForInstanceId(int instanceId)
Get device path for instance ID.
QString userMappingsFilePath()
Get path to user's custom mappings file.
int getVendorForInstanceId(int instanceId)
Get vendor ID for instance ID.
bool reloadMappings()
Reload all gamepad mappings.
void shutdown()
Shutdown SDL joystick/gamepad subsystems.
QString gamepadTypeDisplayName(int type)
bool isVirtualJoystick(int instanceId)
Check if a joystick is virtual.
void updateJoysticks()
Update joystick/gamepad state.
QString getTypeForInstanceId(int instanceId)
Get gamepad type string for instance ID.
QString getConnectionStateForInstanceId(int instanceId)
int addMappingsFromFile(const QString &filePath)
Add gamepad mappings from a file.
bool addMapping(const QString &mapping)
Add a single mapping string.
bool init()
Initialize SDL joystick/gamepad subsystems with QGC-specific hints.
QString getRealTypeForInstanceId(int instanceId)
Get real (underlying) gamepad type string for instance ID.
int gamepadButtonFromString(const QString &str)
QString getGUIDForInstanceId(int instanceId)
Get GUID string for instance ID.
int getProductVersionForInstanceId(int instanceId)
Get product version for instance ID.
QString getMappingForGUID(const QString &guid)
Get mapping string for a GUID.
QString getNameForInstanceId(int instanceId)
Get device name for instance ID.
int getPlayerIndexForInstanceId(int instanceId)
Get player index for instance ID.
bool isInitialized()
Check if SDL joystick subsystem is initialized.
void setJoystickEventsEnabled(bool enabled)
Enable/disable joystick event processing.
int createVirtualJoystick(const QString &name, int axisCount, int buttonCount, int hatCount)
Create a virtual joystick.
void setGamepadEventsEnabled(bool enabled)
Enable/disable gamepad event processing.
void populateBindingResult(QVariantMap &result, const SDL_GamepadBinding *binding)
Populate a QVariantMap with binding information from SDL_GamepadBinding.
bool addMappingPersistent(const QString &mapping)
Add a mapping and persist it to user's config file.
void pumpEvents()
Pump SDL events (call periodically)
bool joystickEventsEnabled()
int getProductForInstanceId(int instanceId)
Get product ID for instance ID.
int gamepadTypeFromString(const QString &str)
QVariantMap findBinding(SDL_Gamepad *gamepad, MatchFunc matchFunc)
int getInstanceIdFromPlayerIndex(int playerIndex)
Get instance ID from player index.
QString gamepadButtonToString(int button)
Gamepad button conversions.
QString gamepadTypeToString(int type)
Gamepad type conversions.
int gamepadAxisFromString(const QString &str)
QString gamepadAxisToString(int axis)
Gamepad axis conversions.
void updateGamepads()
void lockJoysticks()
Lock joystick access for thread-safe operations.