I’m having the same issue other folks have mentioned regarding the HORI Real Arcade Pro EX. I’ve got flashing lights but the driver does recognize it. This is what I get from /var/log/syslog.log:
Oct 25 00:37:03 disorder kernel[0]: Unknown device release 100start - failed to read chatpad setting
Dug into the code and saw this:
if (device->DeviceRequest(&controlReq, 100, 100, NULL) != kIOReturnSuccess)
{
IOLog(“start - failed to read chatpad setting
”);
goto fail;
}
I also found this:
bool Xbox360Peripheral::start(IOService *provider)
{
const IOUSBConfigurationDescriptor *cd;
IOUSBFindInterfaceRequest intf;
IOUSBFindEndpointRequest pipe;
XBOX360_OUT_LED led;
IOWorkLoop *workloop = NULL;
if (!super::start(provider))
return false;
// Get device
device=OSDynamicCast(IOUSBDevice,provider);
if(device==NULL) {
IOLog("start - invalid provider
");
goto fail;
}
// Check for configurations
if(device->GetNumConfigurations()<1) {
device=NULL;
IOLog(“start - device has no configurations!
”);
goto fail;
}
// Set configuration
cd=device->GetFullConfigurationDescriptor(0);
if(cd==NULL) {
device=NULL;
IOLog(“start - couldn’t get configuration descriptor
”);
goto fail;
}
// Open
if(!device->open(this)) {
device=NULL;
IOLog(“start - unable to open device
”);
goto fail;
}
if(device->SetConfiguration(this,cd->bConfigurationValue,true)!=kIOReturnSuccess) {
IOLog(“start - unable to set configuration
”);
goto fail;
}
// Get release
{
UInt16 release = device->GetDeviceRelease();
switch (release) {
default:
IOLog(“Unknown device release %.4x”, release);
// fall through
case 0x0110:
chatpadInit[0] = 0x01;
chatpadInit[1] = 0x02;
break;
case 0x0114:
chatpadInit[0] = 0x09;
chatpadInit[1] = 0x00;
break;
}
}
These two functions combined seem to make the the contents of the log file. Don’t know that much about device drivers or ObjC, but I can do some guessing:
It looks like the first conditional does not return kIOReturnSuccess, which would indicate that the DeviceRequest was fulfilled.
In the second code section, it looks like device is some sort of pointer to a struct or object and GetDeviceRelease is the method for that struct or object. The return value is release, which is an 16 bit int. The switch logic defaults to failure if release doesn’t match the either of the hex values listed above. Since there are no comments for those values, I have no idea what they’re for.
And honestly, what the hell does chat pad have to do with the Hori Real Arcade Pro EX? I hope the developer is still active. Maybe I can help with feedback or something.