5#include <QtGui/QVector3D>
22#ifdef QGC_UNITTEST_BUILD
23 friend class JoystickTest;
28 explicit JoystickSDL(
const QString &
name,
const QList<int> &gamepadAxes,
const QList<int> &nonGamepadAxes,
int buttonCount,
int hatCount,
int instanceId, QObject *parent =
nullptr);
39 bool hasLED()
const override;
40 void rumble(quint16 lowFreq, quint16 highFreq, quint32 durationMs)
override;
41 void rumbleTriggers(quint16 left, quint16 right, quint32 durationMs)
override;
42 void setLED(quint8 red, quint8 green, quint8 blue)
override;
43 bool sendEffect(
const QByteArray &data)
override;
46 QString
guid()
const override;
49 QString
serial()
const override;
51 QString
path()
const override;
69 QString
axisLabel(
int axis)
const override;
74 bool addMapping(
const QString &mapping)
override;
95 QVariantMap
getBall(
int ball)
const override;
98 bool hasButton(
int button)
const override;
99 bool hasAxis(
int axis)
const override;
123 bool setVirtualTouchpad(
int touchpad,
int finger,
bool down,
float x,
float y,
float pressure)
override;
138 bool setMapping(
const QString &mapping)
override;
140 [[nodiscard]]
static bool init();
141 static void shutdown(
bool deleteDiscoveryCache =
true);
142 static QMap<QString, Joystick*>
discover();
145 [[nodiscard]]
bool _open() final;
147 bool _update() final;
149 bool _getButton(
int idx) const final;
150 int _getAxisValue(
int idx) const final;
151 bool _getHat(
int hat,
int idx) const final;
153 quint64 _getProperties() const;
154 bool _checkVirtualJoystick(const
char *methodName) const;
155 bool _hasGamepadCapability(const
char *propertyName) const;
157 QList<
int> _gamepadAxes;
158 QList<
int> _nonGamepadAxes;
159 int _instanceId = -1;
168 QVector3D _cachedGyroData;
169 QVector3D _cachedAccelData;
170 std::atomic<
bool> _gyroDataCached{
false};
171 std::atomic<bool> _accelDataCached{
false};
174 QString _lastConnectionState;
177 QVector<int> _initialAxisValues;
178 bool _driftWarningEmitted =
false;
struct SDL_Gamepad SDL_Gamepad
struct SDL_Joystick SDL_Joystick
struct SDL_Haptic SDL_Haptic
QString getMapping() const override
QString powerState() const override
bool isVirtual() const override
int batteryPercent() const override
quint16 vendorId() const override
QVariantMap getTouchpadFinger(int touchpad, int finger) const override
bool addMapping(const QString &mapping) override
QVariantMap getButtonBinding(int button) const override
void rumbleTriggers(quint16 left, quint16 right, quint32 durationMs) override
bool setVirtualButton(int button, bool down) override
QString serial() const override
bool setMapping(const QString &mapping) override
void updateCachedGyroData(const QVector3D &data)
bool setVirtualTouchpad(int touchpad, int finger, bool down, float x, float y, float pressure) override
QVector3D gyroscopeData() const override
void checkConnectionStateChanged()
bool hasAxis(int axis) const override
friend class MockJoystick
bool hasPlayerLED() const override
int playerIndex() const override
bool setVirtualHat(int hat, quint8 value) override
static void shutdown(bool deleteDiscoveryCache=true)
QString deviceType() const override
QString realGamepadType() const override
QVariantMap getBall(int ball) const override
void setPlayerIndex(int index) override
QVariantMap getAxisInitialState(int axis) const override
bool hasGyroscope() const override
bool hasMonoLED() const override
void axisDriftDetected(const QVariantList &driftingAxes)
Emitted when significant axis drift is detected on open.
quint16 productId() const override
bool setAccelerometerEnabled(bool enabled) override
QString gamepadType() const override
void rumble(quint16 lowFreq, quint16 highFreq, quint32 durationMs) override
bool setVirtualBall(int ball, int dx, int dy) override
QString axisLabel(int axis) const override
QString getMappingForGUID(const QString &guid) const override
bool setVirtualAxis(int axis, int value) override
static QMap< QString, Joystick * > discover()
bool requiresCalibration() const override
int ballCount() const override
void hapticRumbleStop() override
Q_INVOKABLE QVariantList detectAxisDrift(int threshold=8000) const
bool hasAccelerometer() const override
bool hasRumble() const override
void updateCachedAccelData(const QVector3D &data)
bool hapticRumblePlay(float strength, quint32 durationMs) override
QString buttonLabel(int button) const override
QVector3D accelerometerData() const override
QString connectionState() const override
QString buttonLabelForType(int button) const override
QVariantMap getAxisBinding(int axis) const override
QString connectionType() const override
bool hasButton(int button) const override
QString path() const override
void setInstanceId(int instanceId)
QString guid() const override
bool isGamepad() const override
bool hasRumbleTriggers() const override
bool sendVirtualSensorData(int sensorType, float x, float y, float z) override
void setLED(quint8 red, quint8 green, quint8 blue) override
float gyroscopeDataRate() const override
float accelerometerDataRate() const override
bool hasRGBLED() const override
bool hasLED() const override
bool hasHaptic() const override
bool hapticRumbleSupported() const override
bool sendEffect(const QByteArray &data) override
quint16 firmwareVersion() const override
int hapticEffectsCount() const override
int touchpadCount() const override
int touchpadFingerCount(int touchpad) const override
bool hapticRumbleInit() override
bool setGyroscopeEnabled(bool enabled) override