【问题标题】:I need some help to understand USB Game Controllers (HID devices)我需要一些帮助来了解 USB 游戏控制器(HID 设备)
【发布时间】:2019-02-04 21:59:39
【问题描述】:

我为这个奇怪的标题道歉,但这是我现在能想到的最好的。所以我有一个项目,我正在构建一个充当游戏控制器的 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?还是 Gamepad 类 (https://docs.microsoft.com/en-us/uwp/api/windows.gaming.input.gamepad)

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

【问题讨论】:

  • XINPUT 不使用 HID,它使用用于 Xbox 360 控制器的 XUSB 或用于 Xbox One 的 GIP。这些设备的 Windows 驱动程序还模拟 HID 以与旧版 DirectInput 一起使用。
  • 您好查克,感谢您的回复。 USB 标准中是否有关于创建 XUSB 设备的规定?另外,关于如何将设备编码为 XUSB 和/或 GIP 设备,是否有任何好的资源?

标签: usb hid xbox360 xbox-one xinput


【解决方案1】:

我对此的一些信息:

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

Xbox One 控制器对 USB 和无线使用称为 GIP(游戏输入协议)的专有协议,对蓝牙也使用 HID(在较新的控制器上)。驱动程序实现位于xboxgip.sys。它提供XInput接口和USB HID接口。在 HID 下它缺乏振动,LT/RT 在一个轴下,LT/RT 电机(所谓的 impluse 触发器)不工作。 无线控制器在物理层使用 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

Check this Linux Xbox Gamepad driver

【讨论】:

  • 这里还有 github.com/ViGEm/ViGEmBus 模拟 Xbox 360 和 ONE 游戏手柄的 USB 设备模拟器。
  • 大家好,感谢您提供的信息!这是一个潜在的客户项目,我们最终没有做,因为我们认为这可能侵犯了 MS IP。我们不想参与其中。
  • @philm 那么我认为你应该考虑直接联系 MS 并请求他们的支持和许可support.microsoft.com/en-us/supportforbusiness/issuedetails
  • @philm 迟到总比不到好partsnotincluded.com/…
  • 哇太棒了!谢谢(你的)信息!该项目在发布后几周就终止了,仅仅是因为我们认为我们会侵犯 MS IP,因为通信协议是适当的,并且考虑到 MS 与我们相比有很多钱,我认为我们会输掉这场战斗。但谁知道呢,也许这会是一个有趣的小周末项目????
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 2011-03-25
相关资源
最近更新 更多