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

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

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

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

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

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

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

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

0 ответов

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

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

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

Windows.Gaming.Input - это новый WinRT API, который поставляется в дополнение к XInput API и использует эти два драйвера внутренне (через XusbGameControllerProvider и GipGameControllerProvider). Его собственный интерфейс для использования контроллеров Xbox ONE для ПК и приложений и игр Xbox ONE UWP. В XInput отсутствуют некоторые функции Windows.Gaming.Input:

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

Проверьте этот драйвер Linux Xbox Gamepad

Другие вопросы по тегам