https://bugs.winehq.org/show_bug.cgi?id=36441
--- Comment #11 from Bob Z jazzsax006@gmail.com --- I think I've narrowed-in on the problem. When the controller is connected via USB, the code in dlls/dinput/joystick_osx.c detects the correct number of axes/buttons/povs. However, when connected via bluetooth, the correct number of buttons/povs is detected, but not the correct number of axes.
USB: 002e:trace:dinput:get_osx_device_elements axes 6 povs 1 buttons 14 002e:trace:dinput:alloc_device 6 axes 14 buttons 1 povs
Bluetooth: 002e:trace:dinput:get_osx_device_elements axes 553 povs 1 buttons 14 002e:trace:dinput:alloc_device 553 axes 14 buttons 1 povs
The actual crash occurs in get_osx_device_elements_props when CFArrayGetValueAtIndex( device->elements, idx ) is then called for the incorrectly-detected axis elements.
Given the rest of the HID handling for the PS4 controller seems to work correctly when connected via USB and that the button/pov detection is correct via bluetooth, I imagine the fix is probably somewhat easy.
I've checked-out the latest wine code from git, built it locally, reproduced again with my checkout, and have been adding some trace statements of my own to try to hone in further, but unfortunately I'm both new to the wine code base and completely unfamiliar with MacOS/IOKit APIs, so I'm fumbling around rather blindly.
I'll try to reach out via either IRC or mailing list, but any pointers on where to look would be very appreciated. I don't mind fixing and submitting a patch myself if I can get that far.