Как вы анализируете информацию с устройства с человеческим интерфейсом / HID?

#c# #hid #gamecontroller #human-interface #playstation

#c# #hid #gamecontroller #интерфейс пользователя #playstation

Вопрос:

Возможно, я даже недостаточно знаю о взаимодействии с HID, чтобы задать хороший вопрос, но вот мой лучший снимок на данный момент. Я использую C # и в настоящее время нахожусь в Windows.

Я изучал, как взаимодействовать с игровым контроллером, таким как контроллер PlayStation 4 или PlayStation 5. Я хотел бы иметь возможность определять, когда нажата кнопка, как далеко нажат триггер, и любой другой ввод, который может выполнить пользователь. Другая часть, которую я хотел бы выяснить, как это сделать, — это предоставить ввод контроллеру. Это может быть что-то вроде указания контроллеру rumble, или он может указывать контроллеру PlayStation 5 регулировать напряжение в его триггерах, что является новой функцией для этого контроллера.

Я зашел достаточно далеко, чтобы, как я думаю, я мог найти устройство, подключиться к нему, а затем начать получать отчеты с данными от контроллера. Я также вижу способы записи данных в контроллер, но я еще не пробовал это.

Основной барьер, с которым я сталкиваюсь, заключается в том, что я не знаю, как анализировать те данные, которые я получаю обратно. Я получаю 63 байта данных, но не знаю, что все это должно означать. Аналогично, я не знаю, какой формат использовать при отправке данных на контроллер.

Я знаю, что могу отслеживать эти 63 байта, чтобы увидеть, что меняется при нажатии кнопок на контроллере, но мне интересно, есть ли для меня хороший способ получить эту информацию без проб и ошибок. Я также не знаю ничего подобного, что я мог бы сделать, чтобы выяснить, как самостоятельно предоставлять данные контроллеру.

Есть ли способ получить эту информацию от самого устройства, или эта информация должна быть предоставлена производителем контроллера?

Комментарии:

1. Github — ваш самый большой друг github.com/Mr-Kittyhawk/dualsense-dotnet

2. Блин. Я не знаю, как я это пропустил. Первое, что я сделал, это поискал DualSense и C #. Спасибо! Похоже, ему не хватает той функциональности, которая мне нужна, но это только начало.

3. Также на Github github.com/abend0c1/hidrdd будет декодировать дескриптор отчета HID, который вы можете получить, записав трассировку Wireshark или используя libusb для извлечения. Это сообщит вам, каков формат каждого отчета.

4. @aja Спасибо. Я не знал о hidrdd. Я еще недостаточно пробовал, но, похоже, это может работать только для дескрипторов, которые были официально опубликованы. Возможно, я также недостаточно хорошо знаю терминологию для этих устройств, но в этом репозитории упоминаются дескрипторы отчетов, которые, я думаю, могут применяться только для чтения входных данных с USB-устройства и могут не содержать информации о том, как записывать данные на само устройство.

5. Бретт, дескрипторы отчетов HID определяют структуру входных отчетов (от устройства к хосту), выходных отчетов (от хоста к устройству) и отчетов о функциях (которые являются двунаправленными). Hidrdd знает обо всех обычаях, опубликованных usb.org но позволяет вам определить свои собственные способы использования, зависящие от конкретного поставщика, если вы пожелаете.