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

Я прошу прощения за странный заголовок, но это лучшее, что я могу придумать прямо сейчас. Итак, у меня есть проект, в котором я создаю устройство 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)

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

1 Ответ

0 голосов
/ 03 апреля 2019

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

Контроллеры Xbox 360 используют собственный протокол для связи с ПК \ консолью через USB. Драйвер для него реализован в XUSB22.sys, который поставляется с Windows (ранее был отдельным пакетом драйверов). Под крышкой находятся так называемые пакеты Krypton ( кодовое имя проводного контроллера ) на шине 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

...