Мне нужна помощь, чтобы понять, что такое игровые USB-контроллеры (HID-устройства).

Прошу прощения за странное название, но это лучшее, что я могу придумать прямо сейчас. Итак, у меня есть проект, в котором я создаю HID-устройство, которое будет играть роль игрового контроллера. Я думаю эмулировать контроллер, чтобы он отображался как контроллер Xbox 360 на ПК с Windows. Существует достойный API под названием XInput API для игр, чтобы они могли использовать контроллер 360. Я хотел бы воспользоваться этим.

В настоящее время я изучаю, что потребуется, чтобы закодировать микроконтроллер, чтобы он отображался как контроллер 360 для ПК. У меня есть несколько вопросов, и я надеюсь, что кто-то с большим опытом в этой области сможет мне помочь.

1) Я изучаю стандарт HID. Мне интересно, существует ли отдельный подкласс стандарта HID, предназначенный для игровых контроллеров, который я могу использовать и который совместим с XInput API? Или, по крайней мере, есть ли в стандарте HID положение для игрового контроллера?

2) Я нашел документацию по использованию XInput API здесь: https://docs.microsoft.com/en-us/windows/desktop/xinput/getting-started-with-xinput

Теперь мне интересно, есть ли какая-либо документация, в которой указано, как сделать HID-устройство совместимым с XInput API, или я буду заниматься реверс-инжинирингом, где я использую API, чтобы указать, как я кодирую микроконтроллер?

3) Наконец, есть ли какая-либо документация по API, который ПК использует для связи с контроллером Xbox One? Или это все еще XInput API? Или это класс Gamepad (https://docs.microsoft.com/en-us/uwp/api/windows.gaming.input.gamepad)

Спасибо, что нашли время, чтобы прочитать это, и я с нетерпением жду вашего ответа!


person philm    schedule 30.08.2018    source источник
comment
XINPUT не использует HID, он использует XUSB для контроллеров Xbox 360 или GIP для Xbox One. Драйверы Windows для этих устройств также эмулируют HID для использования с устаревшим DirectInput.   -  person Chuck Walbourn    schedule 02.09.2018
comment
Привет, Чак, спасибо за ответ. Есть ли в стандарте USB положение о создании XUSB-устройства? Кроме того, есть ли хорошие ресурсы о том, как я могу закодировать устройство для работы в качестве устройства XUSB и/или GIP?   -  person philm    schedule 02.09.2018


Ответы (1)


Некоторая информация, которая у меня есть по этому поводу:

Контроллеры Xbox 360 используют проприетарный протокол для связи с ПК\консолью через USB и беспроводную связь. Драйвер для него реализован в XUSB22.sys, который идет в комплекте с Windows (ранее был отдельным пакетом драйверов). Под капотом находятся так называемые Krypton Packets (кодовое название проводного контроллера) на шине USB. и Argon Packets (кодовое название беспроводного контроллера RF) для беспроводных контроллеров. Драйвер создает интерфейс XInput и интерфейс HID ( используется устаревшим DirectInput). Под HID отсутствует поддержка вибрации, а LT/RT только под одной осью.

Контроллеры Xbox One используют проприетарный протокол GIP (протокол игрового ввода) для USB и беспроводной связи, а также HID для Bluetooth (на более новых контроллерах). Реализация драйвера лежит в xboxgip.sys. Он обеспечивает интерфейс XInput и интерфейс USB HID. Под HID отсутствует вибрация, LT/RT под одной осью, LT/RT моторы (так называемые импульсные триггеры) не работают. Беспроводные контроллеры используют пакеты Wifi на физическом уровне с инкапсулированным в них GIP.

Windows.Gaming.Input — это новый WinRT/UWP API, который поставляется в дополнение к XInput, HID и устаревшим API DirectInput. Он использует XUSB/GIP/HID для внутреннего использования (через XusbGameControllerProvider, GipGameControllerProvider, HidGameControllerProvider). Это собственный интерфейс для использования контроллеров Xbox One на ПК, поскольку вы можете использовать триггеры impluse только через этот API.

Вы можете попытаться реконструировать эти протоколы/драйверы с помощью отладчика IDA PRO, USB-сниффинга и т. д. Символы PDB доступны в службе Microsoft Public PDB (IDA загрузит их автоматически): xusb.sys xboxgip.sys

Проверьте этот драйвер геймпада Xbox для Linux

person DJm00n    schedule 03.04.2019
comment
Также здесь находится github.com/ViGEm/ViGEmBus эмулятор USB-устройства, эмулирующий геймпады Xbox 360 и ONE. - person DJm00n; 04.04.2019
comment
Всем привет, спасибо за информацию! Это был проект потенциального клиента, который мы в итоге не стали выполнять, потому что считаем, что это может нарушать права интеллектуальной собственности MS. В которые мы не хотим вмешиваться. - person philm; 06.08.2019
comment
@philm, тогда я думаю, вам следует подумать о том, чтобы связаться с MS напрямую и запросить их поддержку и лицензионную поддержку. microsoft.com/en-us/supportforbusiness/issuedetails - person DJm00n; 07.08.2019
comment
@philm лучше поздно, чем никогда partsnotincluded.com/< /а> - person DJm00n; 25.04.2020
comment
Вау, круто! Спасибо за информацию! Проект умер через пару недель после этой публикации просто потому, что мы чувствовали, что будем нарушать права MS IP, учитывая, что протокол связи является надлежащим, и учитывая, что у MS много денег по сравнению с нами, я думаю, что мы проиграем эту битву. Но кто знает, может быть, это будет веселый проект, похожий на выходные???? - person philm; 27.04.2020