В течение нескольких дней я искал, как сделать поддержку геймпада и джойстика на Mac, и все ресурсы, которые я нашел, похоже, предлагают предустановленный драйвер вместе с использованием Apple HID API, который работает.
Недостатком этого подхода является то, что для каждого джойстика и геймпада потребуется загрузить другое расширение ядра, чтобы его можно было распознать менеджером HID, или, по крайней мере, код менее Info.plist
, говорящий о том, что он соответствует ранее установленному драйверу. Например, если у меня есть драйвер Xbox 360 KEXT дома, контроллер Xbox от Microsoft будет работать, но не контроллер Logitech (я пробовал F710).
Как предлагает Apple, приложение, использующее геймпад или джойстик, должно иметь возможность работать в пользовательском пространстве, не вводя никаких KEXT вещей. Есть способ сделать это?
Я имел в виду что-то вроде использования IORegistry или IOUSB API для получения устройства, когда оно подключается (по крайней мере, USB Prober показывает это). Затем каким-то образом получите описание устройства, а затем используйте это описание, чтобы зарегистрировать устройство как HID. Тогда можно будет использовать весь HID-менеджер.
Я на правильном пути? Или есть другой способ сделать это?
Поскольку IOKit API фактически предоставляет такие ключевые слова, как kHIDUsage_GD_Joystick, и есть библиотека ForceFeedback.h, я полагаю, Apple разработала свой HID API с учетом джойстика и обратной связи по усилию. У меня была слабая надежда, что это сработает.
Некоторая справочная документация и проект с открытым исходным кодом: