1

我为这个奇怪的标题道歉,但这是我现在能想到的最好的。所以我有一个项目,我正在构建一个充当游戏控制器的 HID 设备。我正在考虑模拟控制器,以便它在 Windows PC 上显示为 Xbox 360 控制器。有一个不错的 API,称为 XInput API 用于游戏,以便他们可以使用 360 控制器。我想利用这一点。

我目前正在研究如何将微控制器编码为 PC 上的 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) 最后,是否有关于 PC 用于与 Xbox One 控制器通信的 API 的文档?还是它仍然是 XInput API?或者是游戏手柄类(https://docs.microsoft.com/en-us/uwp/api/windows.gaming.input.gamepad

感谢您抽出宝贵时间阅读本文,期待您的回复!

4

1 回答 1

2

我对此的一些信息:

Xbox 360 控制器使用专有协议通过 USB 和无线与 PC\控制台进行通信。它的驱动程序是在XUSB22.sysWindows 附带的(之前是单独的驱动程序包)中实现的。在引擎盖下,USB 总线上有所谓的 Krypton Packets(有线控制器的代号)和无线控制器的 Argon Packets(无线控制器 RF 代号)。驱动程序生成 XInput 接口和HID接口(由旧版 DirectInput 使用)。在 HID 下,它缺乏振动支持,LT/RT 仅在一个轴下。

Xbox One 控制器对 USB 和无线使用称为 GIP(游戏输入协议)的专有协议,也对蓝牙使用 HID(在较新的控制器上)。驱动程序实现位于xboxgip.sys. 它提供XInput接口和USB HID接口。在 HID 下它缺乏振动,LT/RT 在一个轴下,LT/RT 电机(所谓的impuse 触发器)不工作。无线控制器在物理级别使用 Wifi 数据包,其中包含封装的 GIP。

Windows.Gaming.Input - 是除了 XInput、HID 和旧版 DirectInput API 之外的新 WinRT/UWP API。它在内部使用 XUSB/GIP/HID(通过XusbGameControllerProviderGipGameControllerProviderHidGameControllerProvider)。它是用于在 PC 上使用 Xbox One 控制器的本机界面,因为您只能通过此 API使用impluse 触发器。

您可以尝试通过 IDA PRO 调试器、USB 嗅探等对这些协议/驱动程序进行逆向工程。PDB 符号可从 Microsoft Public PDB 服务获得(IDA 将自动下载它们): xusb.sys xboxgip.sys

检查此 Linux Xbox 游戏手柄驱动程序

于 2019-04-03T07:21:19.567 回答