Commit f1b82fb9 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #4452 from NaterGator/sdlerr

SDL: warn with SDL error string when joystick feature detection fails
parents bd11543d 3907cd09
...@@ -53,7 +53,10 @@ void JoystickManager::setToolbox(QGCToolbox *toolbox) ...@@ -53,7 +53,10 @@ void JoystickManager::setToolbox(QGCToolbox *toolbox)
_multiVehicleManager = _toolbox->multiVehicleManager(); _multiVehicleManager = _toolbox->multiVehicleManager();
QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
}
void JoystickManager::discoverJoysticks()
{
#ifdef __sdljoystick__ #ifdef __sdljoystick__
_name2JoystickMap = JoystickSDL::discover(_multiVehicleManager); _name2JoystickMap = JoystickSDL::discover(_multiVehicleManager);
#elif defined(__android__) #elif defined(__android__)
......
...@@ -48,6 +48,9 @@ public: ...@@ -48,6 +48,9 @@ public:
// Override from QGCTool // Override from QGCTool
virtual void setToolbox(QGCToolbox *toolbox); virtual void setToolbox(QGCToolbox *toolbox);
public slots:
void discoverJoysticks();
signals: signals:
void activeJoystickChanged(Joystick* joystick); void activeJoystickChanged(Joystick* joystick);
void activeJoystickNameChanged(const QString& name); void activeJoystickNameChanged(const QString& name);
......
...@@ -15,7 +15,7 @@ JoystickSDL::JoystickSDL(const QString& name, int axisCount, int buttonCount, in ...@@ -15,7 +15,7 @@ JoystickSDL::JoystickSDL(const QString& name, int axisCount, int buttonCount, in
QMap<QString, Joystick*> JoystickSDL::discover(MultiVehicleManager* _multiVehicleManager) { QMap<QString, Joystick*> JoystickSDL::discover(MultiVehicleManager* _multiVehicleManager) {
static QMap<QString, Joystick*> ret; static QMap<QString, Joystick*> ret;
if (SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER | SDL_INIT_NOPARACHUTE) < 0) { if (SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER | SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE) < 0) {
qWarning() << "Couldn't initialize SimpleDirectMediaLayer:" << SDL_GetError(); qWarning() << "Couldn't initialize SimpleDirectMediaLayer:" << SDL_GetError();
return ret; return ret;
} }
...@@ -33,7 +33,7 @@ QMap<QString, Joystick*> JoystickSDL::discover(MultiVehicleManager* _multiVehicl ...@@ -33,7 +33,7 @@ QMap<QString, Joystick*> JoystickSDL::discover(MultiVehicleManager* _multiVehicl
int axisCount, buttonCount, hatCount; int axisCount, buttonCount, hatCount;
bool isGameController; bool isGameController;
SDL_Joystick* sdlJoystick = SDL_JoystickOpen(i);
if (SDL_IsGameController(i)) { if (SDL_IsGameController(i)) {
isGameController = true; isGameController = true;
axisCount = SDL_CONTROLLER_AXIS_MAX; axisCount = SDL_CONTROLLER_AXIS_MAX;
...@@ -41,13 +41,21 @@ QMap<QString, Joystick*> JoystickSDL::discover(MultiVehicleManager* _multiVehicl ...@@ -41,13 +41,21 @@ QMap<QString, Joystick*> JoystickSDL::discover(MultiVehicleManager* _multiVehicl
hatCount = 0; hatCount = 0;
} else { } else {
isGameController = false; isGameController = false;
axisCount = SDL_JoystickNumAxes(sdlJoystick); if (SDL_Joystick* sdlJoystick = SDL_JoystickOpen(i)) {
buttonCount = SDL_JoystickNumButtons(sdlJoystick); SDL_ClearError();
hatCount = SDL_JoystickNumHats(sdlJoystick); axisCount = SDL_JoystickNumAxes(sdlJoystick);
buttonCount = SDL_JoystickNumButtons(sdlJoystick);
hatCount = SDL_JoystickNumHats(sdlJoystick);
if (axisCount < 0 || buttonCount < 0 || hatCount < 0) {
qCWarning(JoystickLog) << "\t libsdl error parsing joystick features:" << SDL_GetError();
}
SDL_JoystickClose(sdlJoystick);
} else {
qCWarning(JoystickLog) << "\t libsdl failed opening joystick" << qPrintable(name) << "error:" << SDL_GetError();
continue;
}
} }
SDL_JoystickClose(sdlJoystick);
qCDebug(JoystickLog) << "\t" << name << "axes:" << axisCount << "buttons:" << buttonCount << "hats:" << hatCount << "isGC:" << isGameController; qCDebug(JoystickLog) << "\t" << name << "axes:" << axisCount << "buttons:" << buttonCount << "hats:" << hatCount << "isGC:" << isGameController;
ret[name] = new JoystickSDL(name, qMax(0,axisCount), qMax(0,buttonCount), qMax(0,hatCount), i, isGameController, _multiVehicleManager); ret[name] = new JoystickSDL(name, qMax(0,axisCount), qMax(0,buttonCount), qMax(0,hatCount), i, isGameController, _multiVehicleManager);
} else { } else {
......
...@@ -429,6 +429,9 @@ bool QGCApplication::_initForNormalAppBoot(void) ...@@ -429,6 +429,9 @@ bool QGCApplication::_initForNormalAppBoot(void)
// Load known link configurations // Load known link configurations
toolbox()->linkManager()->loadLinkConfigurationList(); toolbox()->linkManager()->loadLinkConfigurationList();
// Probe for joysticks - TODO: manage on a timer or use events to deal with hotplug
toolbox()->joystickManager()->discoverJoysticks();
if (_settingsUpgraded) { if (_settingsUpgraded) {
settings.clear(); settings.clear();
settings.setValue(_settingsVersionKey, QGC_SETTINGS_VERSION); settings.setValue(_settingsVersionKey, QGC_SETTINGS_VERSION);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment