int numberOfProfiles;
int numberOfDevices;
char deviceNames[MAX_DEVICES][128];
+static int numberOfProfilesSave;
// This is so that new devices have something reasonable to show for default
uint32_t defaultMap[21] = {
//
void SaveProfiles(void)
{
+ numberOfProfilesSave = numberOfProfiles;
memcpy(&profileBackup, &profile, sizeof(Profile) * MAX_PROFILES);
}
void RestoreProfiles(void)
{
memcpy(&profile, &profileBackup, sizeof(Profile) * MAX_PROFILES);
+ numberOfProfiles = numberOfProfilesSave;
}
*/
void AutoConnectProfiles(void)
{
- int foundProfiles[MAX_PROFILES];
+// int foundProfiles[MAX_PROFILES];
controller1Profile = -1;
controller2Profile = -1;
gamepadIDSlot1 = -1;
gamepadIDSlot2 = -1;
- // Connect keyboard devices first... (N.B.: this leaves gampadIDSlot1 at -1,
- // so it can be overridden by plugged-in gamepads.)
- ConnectProfileToDevice(0);
+ // Connect the keyboard automagically only if no gamepads are plugged in.
+ // Otherwise, check after all other devices have been checked, then try to
+ // add it in.
+ if (Gamepad::numJoysticks == 0)
+ {
+ ConnectProfileToDevice(0);
+ return;
+ }
// Connect the profiles that prefer a slot, if any.
// N.B.: Conflicts are detected, but ignored. 1st controller to grab a
}
}
+ // Connect the keyboard device (lowest priority)
+ // N.B.: The keyboard is always mapped to profile #0, so we can locate it
+ // easily. :-)
+ int slot = profile[0].preferredSlot;
+
+ if ((slot == CONTROLLER1) && (gamepadIDSlot1 == -1))
+ controller1Profile = 0;
+ else if ((slot == CONTROLLER2) && (gamepadIDSlot2 == -1))
+ controller2Profile = 0;
+ else if (slot == (CONTROLLER1 | CONTROLLER2))
+ {
+ if (gamepadIDSlot1 == -1)
+ controller1Profile = 0;
+ else if (gamepadIDSlot2 == -1)
+ controller2Profile = 0;
+ }
+
// Finally, attempt to connect profiles to controllers
ConnectProfileToController(controller1Profile, 0);
ConnectProfileToController(controller2Profile, 1);