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 <functional>
7
8// Forward-declare SDL types so consumers don't pull <SDL3/SDL.h> through
9// this header. Both are typedef'd from struct tags of the same name.
10struct SDL_Gamepad;
11struct SDL_GamepadBinding;
12
17namespace SDLJoystick {
18
19// ============================================================================
20// Initialization
21// ============================================================================
22
24bool init();
25
27void shutdown();
28
30bool isInitialized();
31
32// ============================================================================
33// Event Control
34// ============================================================================
35
37void pumpEvents();
38
40void setJoystickEventsEnabled(bool enabled);
42
44void setGamepadEventsEnabled(bool enabled);
46
48void updateJoysticks();
49void updateGamepads();
50
51// ============================================================================
52// Thread Safety
53// ============================================================================
54
56void lockJoysticks();
57void unlockJoysticks();
58
68
69// ============================================================================
70// Type/String Conversions
71// ============================================================================
72
74QString gamepadTypeToString(int type);
75int gamepadTypeFromString(const QString &str);
76QString gamepadTypeDisplayName(int type);
77
79QString gamepadAxisToString(int axis);
80int gamepadAxisFromString(const QString &str);
81
83QString gamepadButtonToString(int button);
84int gamepadButtonFromString(const QString &str);
85
87QString connectionStateToString(int state);
88
89// ============================================================================
90// GUID Utilities
91// ============================================================================
92
94QVariantMap getGUIDInfo(const QString &guid);
95
97QString getMappingForGUID(const QString &guid);
98
99// ============================================================================
100// Mapping Management
101// ============================================================================
102
104int addMappingsFromFile(const QString &filePath);
105
107bool addMapping(const QString &mapping);
108
110bool addMappingPersistent(const QString &mapping);
111
113bool reloadMappings();
114
116QString userMappingsFilePath();
117
118// ============================================================================
119// Player Index
120// ============================================================================
121
123int getInstanceIdFromPlayerIndex(int playerIndex);
124
125// ============================================================================
126// Pre-Open Device Queries (query device info without opening)
127// ============================================================================
128
130QString getNameForInstanceId(int instanceId);
131
133QString getPathForInstanceId(int instanceId);
134
136QString getGUIDForInstanceId(int instanceId);
137
139int getVendorForInstanceId(int instanceId);
140
142int getProductForInstanceId(int instanceId);
143
145int getProductVersionForInstanceId(int instanceId);
146
148QString getTypeForInstanceId(int instanceId);
149
151QString getRealTypeForInstanceId(int instanceId);
152
154int getPlayerIndexForInstanceId(int instanceId);
155
158QString getConnectionStateForInstanceId(int instanceId);
159
160// ============================================================================
161// Virtual Joystick
162// ============================================================================
163
165int createVirtualJoystick(const QString &name, int axisCount, int buttonCount, int hatCount);
166
168bool destroyVirtualJoystick(int instanceId);
169
171bool isVirtualJoystick(int instanceId);
172
173// ============================================================================
174// Gamepad Binding Utilities
175// ============================================================================
176
178void populateBindingResult(QVariantMap &result, const SDL_GamepadBinding *binding);
179
182QVariantMap findBinding(SDL_Gamepad *gamepad,
183 const std::function<bool(const SDL_GamepadBinding *)> &matchFunc);
184
185} // namespace SDLJoystick
struct SDL_Gamepad SDL_Gamepad
Definition JoystickSDL.h:13
RAII lock guard for joysticks.
Definition SDLJoystick.h:61
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.
QVariantMap findBinding(SDL_Gamepad *gamepad, const std::function< bool(const SDL_GamepadBinding *)> &matchFunc)
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)
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.