我需要一些帮助来理解USB游戏控制器(HID设备)

我需要一些帮助来理解USB游戏控制器(HID设备),usb,hid,xbox360,xbox-one,xinput,Usb,Hid,Xbox360,Xbox One,Xinput,我为这个奇怪的标题道歉,但这是我现在能想到的最好的。因此,我有一个项目,我正在建设一个隐藏设备,将作为一个游戏控制器。我正在考虑模拟该控制器,使其在Windows PC上显示为Xbox 360控制器。有一个称为XInput API的象样API用于游戏,因此他们可以使用360控制器。我想利用这一点 我目前正在研究如何将一个微控制器编码成一个360控制器出现在PC上。我确实有一些问题,我希望在这个领域有更多专业知识的人可以帮助我 1) 我正在研究HID标准。我想知道,是否有一个单独的HID标准子类指

我为这个奇怪的标题道歉,但这是我现在能想到的最好的。因此,我有一个项目,我正在建设一个隐藏设备,将作为一个游戏控制器。我正在考虑模拟该控制器,使其在Windows PC上显示为Xbox 360控制器。有一个称为XInput API的象样API用于游戏,因此他们可以使用360控制器。我想利用这一点

我目前正在研究如何将一个微控制器编码成一个360控制器出现在PC上。我确实有一些问题,我希望在这个领域有更多专业知识的人可以帮助我

1) 我正在研究HID标准。我想知道,是否有一个单独的HID标准子类指定给游戏控制器,我可以使用它与XInput API兼容?或者至少,HID标准中是否有游戏控制器的规定

2) 我在这里找到了关于如何使用XInput API的文档:

现在,我想知道,是否有任何文档指定如何使HID设备符合XInput API,或者我是否会做一些反向工程,使用API指导如何编写微控制器代码

3) 最后,有没有关于电脑用来与Xbox One控制器通信的API的文档?还是仍然是XInput API?还是Gamepad类()


感谢您花时间阅读本文,我期待着您的回复

我在这方面的一些信息:

Xbox 360控制器使用专有协议通过USB和无线与PC\控制台通信。 它的驱动程序在Windows附带的
XUSB22.sys
中实现(以前是单独的驱动程序包)。 在引擎盖下,USB总线上有所谓的氪包()和用于无线控制器的氩包(无线控制器RF代码名)。驱动程序生成XInput接口和接口(由传统DirectInput使用)。在HID下,缺少振动支撑,LT/RT仅位于一个轴下

Xbox One控制器使用名为GIP(游戏输入协议)的专有协议进行USB和无线连接,也使用HID进行蓝牙连接(在较新的控制器上)。驱动程序实现位于
xboxgip.sys
。它提供XInput接口和USB HID接口。在没有振动的情况下,LT/RT在一个轴下,LT/RT电机(所谓的注入触发器)不工作。 无线控制器在物理层面上使用Wifi数据包,其中包含嵌入式GIP

Windows.Gaming.Input是新的WinRT/UWP API,它是XInput、HID和传统DirectInput API的补充。它在内部使用XUSB/GIP/HID(通过,)。这是在PC上使用Xbox One控制器的本机接口,因为您只能通过此API使用impluse触发器

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


XINPUT不使用HID,它对Xbox 360控制器使用XUSB,对Xbox One使用GIP。这些设备的Windows驱动程序也模拟HID,用于传统DirectInput。你好,Chuck,谢谢你的回复。USB标准中是否有关于创建XUSB设备的规定?另外,关于如何将设备编码为XUSB和/或GIP设备,是否有好的资源?这里还有模拟Xbox 360和ONE Gamepad的usb设备模拟器。大家好,谢谢你们提供的信息!这是一个我们最终没有做的潜在客户项目,因为我们觉得这可能侵犯MS IP。我想你应该考虑直接联系MS,并请求他们的支持和许可@好莱坞比永远不会令人惊叹!谢谢你的信息!该项目在发布后几周就夭折了,原因很简单,因为我们觉得我们会侵犯MS IP,因为通信协议是恰当的,而且考虑到MS与我们相比有很多钱,我认为我们会输掉这场战斗。但谁知道呢,也许这将是一个有趣的小周末,就像项目一样????