我为奇怪的标题表示歉意,但这是我现在能想到的最好的方法。因此,我有一个项目,在该项目中,我将构建一个将用作游戏控制器的HID设备。我正在考虑模拟控制器,以便它在Windows PC上显示为Xbox 360控制器。有一个不错的API,称为游戏的XInput API,以便他们可以利用360控制器。我想利用这一点。
我目前正在研究将微控制器编码为PC的360度控制器所需要的处理方式。我确实有一些问题,希望有一个在该领域有更多专业知识的人可以帮助我。
1)我正在研究HID标准。我想知道,是否为我可以使用的与XInput API兼容的游戏控制器指定了HID标准的单独子类?还是至少有HID标准中的游戏控制器条款?
2)我在这里找到了有关如何使用XInput API的文档:https://docs.microsoft.com/en-us/windows/desktop/xinput/getting-started-with-xinput
现在,我想知道,是否有任何文档指定如何使HID设备符合XInput API,或者我将在使用API指导如何对微控制器进行编码时进行一些反向工程吗? / p>
3)最后,在PC上用于与Xbox One控制器通信的API上是否有任何文档?还是XInput API?还是Gamepad类(https://docs.microsoft.com/en-us/uwp/api/windows.gaming.input.gamepad)
感谢您抽出宝贵的时间阅读本文,我们期待您的回复!
答案 0 :(得分:0)
关于此的一些信息:
Xbox 360控制器使用专有协议通过USB与PC \控制台通信。 Windows附带的XUSB22.sys中实现了它的驱动程序(之前是单独的驱动程序包)。 在引擎盖下有USB总线上的所谓的rypto包(codename of wired controller)和用于无线控制器的Argon包(无线控制器RF代号)。驱动程序产生XInput接口和USB HID接口(供DirectInput使用)。
Xbox One控制器使用称为GIP(游戏输入协议)的专有协议。驱动程序实现位于xboxgip.sys中。还提供XInput接口和USB HID接口,但功能有限(触发器下的电机不起作用)。无线控制器使用其中封装了GIP的Wifi数据包。
Windows.Gaming.Input-是XInput API之外的新WinRT API,它在内部使用这两个驱动程序(通过XusbGameControllerProvider and GipGameControllerProvider)。它的本机界面,用于在PC和Xbox ONE UWP应用程序/游戏中使用Xbox ONE控制器。 XInput缺少Windows.Gaming.Input的某些功能:
您可以尝试通过IDA PRO调试,USB,嗅探等对这些协议进行反向工程。MicrosoftPublic PDB服务提供了PDB符号(IDA将自动下载它们): xusb.sys xboxgip.sys