diff --git a/src/Joystick/JoystickSDL.cc b/src/Joystick/JoystickSDL.cc index 3a230e4ab25835e03d58ac74d1f33263849b468e..915d4c47fd473ba174853c7cb6bbc78b35d33164 100644 --- a/src/Joystick/JoystickSDL.cc +++ b/src/Joystick/JoystickSDL.cc @@ -36,7 +36,6 @@ QMap JoystickSDL::discover(MultiVehicleManager* _multiVehicl for (int i=0; i JoystickSDL::discover(MultiVehicleManager* _multiVehicl } qCDebug(JoystickLog) << "\t" << name << "axes:" << axisCount << "buttons:" << buttonCount << "hats:" << hatCount << "isGC:" << isGameController; + + // Check for joysticks with duplicate names and differentiate the keys when neccessary. + // This is required when using an Xbox 360 wireless receiver that always identifies as + // 4 individual joysticks, regardless of how many joysticks are actually connected to the + // receiver. Using GUID does not help, all of these devices present the same GUID. + QString originalName = name; + uint8_t duplicateIdx = 1; + while (newRet[name]) { + name = QString("%1 %2").arg(originalName).arg(duplicateIdx++); + } + newRet[name] = new JoystickSDL(name, qMax(0,axisCount), qMax(0,buttonCount), qMax(0,hatCount), i, isGameController, _multiVehicleManager); } else { newRet[name] = ret[name];