Added GameCube Adapter support

The libusb driver must be installed on the adapter (e.g. zadig can be used to install the driver in Windows).  GameCube pad controllers are supported and will override the current input device assigned to the port.  GameCube controller buttons are auto-configured and cannot be re-assigned.  Rumble is supported.  Hotplug is supported while playing a game.  If a controller is unplugged from the adapter, Dolphin will fallback to using the host input device on that port.  If a port on the adapter is unused, Dolphin will use the host input device for that port, allowing a mixture of host input devices and controllers connected to the adapter.

The adapter support can be disabled in the Controllers config if the OS driver is preferred (allowing the pad buttons to be reconfigured).

One adapter per system is supported.

Bongos, Wavebirds and DDR dance mats are untested.

GC Keyboard, Steering Wheel, GBA and some dance mats are untested and unlikely to work.

If you have any of the above controllers, enable the log (View > Show Log Configuration and View > Show Log) and enable Warning verbosity, Write to Window and check the "SerialInt" Log Type.  The log will have a message like "New device connected to Port 1 of Type: XX" when the device is plugged into the adapter while playing a game.  Let me know what the XX is and we might be able to get some support for those controllers.


I would rather have one of these be a local variable of the function that does the writing. The _swap suffix is an implementation detail.