9 changed files with 163 additions and 96 deletions
@ -0,0 +1,73 @@ |
|||||||
|
#include "JoystickSDL.h" |
||||||
|
|
||||||
|
#include "QGCApplication.h" |
||||||
|
|
||||||
|
#include <QQmlEngine> |
||||||
|
|
||||||
|
JoystickSDL::JoystickSDL(const QString& name, int axisCount, int buttonCount, int index, MultiVehicleManager* multiVehicleManager) |
||||||
|
: Joystick(name,axisCount,buttonCount,multiVehicleManager) |
||||||
|
, _index(index) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
QMap<QString, Joystick*> JoystickSDL::discover(MultiVehicleManager* _multiVehicleManager) { |
||||||
|
static QMap<QString, Joystick*> ret; |
||||||
|
|
||||||
|
if (SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE) < 0) { |
||||||
|
qWarning() << "Couldn't initialize SimpleDirectMediaLayer:" << SDL_GetError(); |
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
|
// Load available joysticks
|
||||||
|
|
||||||
|
qCDebug(JoystickLog) << "Available joysticks"; |
||||||
|
|
||||||
|
for (int i=0; i<SDL_NumJoysticks(); i++) { |
||||||
|
QString name = SDL_JoystickName(i); |
||||||
|
|
||||||
|
if (!ret.contains(name)) { |
||||||
|
int axisCount, buttonCount; |
||||||
|
|
||||||
|
SDL_Joystick* sdlJoystick = SDL_JoystickOpen(i); |
||||||
|
axisCount = SDL_JoystickNumAxes(sdlJoystick); |
||||||
|
buttonCount = SDL_JoystickNumButtons(sdlJoystick); |
||||||
|
SDL_JoystickClose(sdlJoystick); |
||||||
|
|
||||||
|
qCDebug(JoystickLog) << "\t" << name << "axes:" << axisCount << "buttons:" << buttonCount; |
||||||
|
ret[name] = new JoystickSDL(name, axisCount, buttonCount, i, _multiVehicleManager); |
||||||
|
} else { |
||||||
|
qCDebug(JoystickLog) << "\tSkipping duplicate" << name; |
||||||
|
} |
||||||
|
} |
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
|
bool JoystickSDL::_open(void) { |
||||||
|
sdlJoystick = SDL_JoystickOpen(_index); |
||||||
|
|
||||||
|
if (!sdlJoystick) { |
||||||
|
qCWarning(JoystickLog) << "SDL_JoystickOpen failed:" << SDL_GetError(); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
void JoystickSDL::_close(void) { |
||||||
|
SDL_JoystickClose(sdlJoystick); |
||||||
|
} |
||||||
|
|
||||||
|
bool JoystickSDL::_update(void) |
||||||
|
{ |
||||||
|
SDL_JoystickUpdate(); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
bool JoystickSDL::_getButton(int i) { |
||||||
|
return !!SDL_JoystickGetButton(sdlJoystick, i); |
||||||
|
} |
||||||
|
|
||||||
|
int JoystickSDL::_getAxis(int i) { |
||||||
|
return SDL_JoystickGetAxis(sdlJoystick, i); |
||||||
|
} |
||||||
|
|
@ -0,0 +1,34 @@ |
|||||||
|
#ifndef JOYSTICKSDL_H |
||||||
|
#define JOYSTICKSDL_H |
||||||
|
|
||||||
|
#include "Joystick.h" |
||||||
|
#include "Vehicle.h" |
||||||
|
#include "MultiVehicleManager.h" |
||||||
|
|
||||||
|
#ifdef Q_OS_MAC |
||||||
|
#include <SDL.h> |
||||||
|
#else |
||||||
|
#include <SDL/SDL.h> |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
class JoystickSDL : public Joystick |
||||||
|
{ |
||||||
|
public: |
||||||
|
JoystickSDL(const QString& name, int axisCount, int buttonCount, int index, MultiVehicleManager* multiVehicleManager); |
||||||
|
|
||||||
|
static QMap<QString, Joystick*> discover(MultiVehicleManager* _multiVehicleManager);
|
||||||
|
|
||||||
|
private: |
||||||
|
bool _open() final; |
||||||
|
void _close() final; |
||||||
|
bool _update() final; |
||||||
|
|
||||||
|
bool _getButton(int i) final; |
||||||
|
int _getAxis(int i) final; |
||||||
|
|
||||||
|
SDL_Joystick *sdlJoystick; |
||||||
|
int _index; ///< Index for SDL_JoystickOpen
|
||||||
|
}; |
||||||
|
|
||||||
|
#endif // JOYSTICKSDL_H
|
Loading…
Reference in new issue