Поддержка геймпада и джойстика на Mac OS X в пространстве пользователя
Я искал, как сделать поддержку геймпада и джойстика на Mac в течение нескольких дней, и все ресурсы, которые я нашел, похоже, предлагают предустановленный драйвер вместе с использованием HID API Apple, который работает.
недостатком этого подхода является то, что каждый джойстик и геймпад требуют загрузки другого расширения ядра, поэтому его может распознать HID manager или, по крайней мере, код меньше Info.plist
говоря, что он соответствует ранее установленному драйверу. Например, когда у меня есть драйвер 360 Xbox KEXT в доме будет работать контроллер Xbox от Microsoft, но не Logitech (я попробовал F710).
как Apple предлагает приложение, которое использует геймпад или джойстик, должно иметь возможность делать себя в пользовательском пространстве без введения каких-либо материалов KEXT. Есть ли способ сделать это?
то, что я имел в виду, было что-то вроде использования IOREGISTRY или IOUSB API, чтобы получить устройство, когда они подключаются (USB Prober показывает его на наименьший.) Затем как-то получить описание устройства, а затем использовать это описание, чтобы зарегистрировать устройство как скрытый. Тогда можно использовать весь менеджер HID.
Я на правильном пути? Или есть другой способ сделать это?
поскольку IOKit API фактически предоставил ключевые слова, такие как kHIDUsage_GD_Joystick, и есть принудительная обратная связь.H library, я полагаю, Apple разработала свой HID API с джойстиком и силовой обратной связью. У меня была слабая надежда, что это возможно. работа.
некоторая справочная документация и проект с открытым исходным кодом:
1 ответов
после пересмотра этого я обнаружил, что решение работает непосредственно на файловых дескрипторах устройства. libusb-отличная библиотека, которая значительно упрощает вашу жизнь, и они поддерживают Mac.
xboxdrv ссылке - отличный пример работы с файловым сокетом с помощью libusb.
в псевдо-коде это должно выглядеть так:
- перечислить устройства
- обнаружить драйвер ядра и отсоединить его, если возможно
- открыть устройство
- файл с начальной передачи
- подождите функции обратного вызова для правильной обработки msg и ошибки
- запустить цикл запуска или выбрать FD для вызова libusb_event_handle
Проверьте libusb для получения дополнительной информации ссылке.