I've discovered two bugs in the latest version (0.10) of Colin Munro's Xbox 360 controller driver for Mac; one is minor, while the other is very significant.
A compiled version of the driver with these patches incorporated is available here: 360ControllerInstall.dmg (version 0.10a)
Note that the above build is currently for OS X 10.6 and 10.7 only; I still need to install the older version of Xcode for compiling against earlier APIs.
— codeman38, 12 October 2011
Patches
-
Button Ordering Patch
Munro's driver attempts to match the button ordering used by DirectInput on Windows for the sake of compatibility. However, there is one place where it differs: the Back and Start buttons are swapped with LS and RS, respectively.
In games where Xbox button mappings are hardcoded, such as the Mac version of Portal 2, this means that the game is paused by pressing down on the right stick— and that any actions mapped to pressing down on the sticks are instead triggered by Back and Start.
To correct the button ordering to match the Windows driver, patch the source code with 360Controller.buttonorder.patch.
-
Deadlock Patch
On at least some systems, the driver exhibited a deadlock when a wired controller was unplugged, causing the entire USB hub to which the controller was attached to lock up. This was due to a flaw in the mutual exclusion logic: both the ReleaseAll() method, and an input method called during its run, locked the same mutex, thus allowing neither method to complete.
The solution, in this case, was to simply check whether the handler object existed in the input method before locking the mutex. Since this object had already been deleted by the ReleaseAll() method by the point that the input method was called, this allowed the release of the driver to proceed without deadlock.
To prevent this deadlock, patch the original source code with 360Controller.deadlock.patch.