HID开发笔记
+ -

XBOX游戏手柄在Windows下的分析

2021-08-02 67 0

学习学习,对USB的学习其实带着问题有目的的解决问题,是最棒的。
昨日本站USB中文网技术交流群一位同学拿了一个游戏手柄,没想到在本群中关于它的分析出展开了…
该游戏手柄接入PC机后,在Windows下的设备管理器中的设备树如下:
XBOS游戏手柄设备树

usbtreeview给出的设备信息如下:

Device Description       : 支持 Windows 的 XBOX 360 手柄
Device Path              : \\?\usb#vid_045e&pid_028e#5&92c31b4&0&12#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
Device ID                : USB\VID_045E&PID_028E\5&92C31B4&0&12
Hardware IDs             : USB\VID_045E&PID_028E&REV_0110 USB\VID_045E&PID_028E
Driver KeyName           : {d61ca365-5af4-4486-998b-9db4734c6ca3}\0000 ({D61CA365-5AF4-4486-998B-9DB4734C6CA3})
Driver                   : \SystemRoot\System32\drivers\xusb22.sys (Version: 10.0.18362.1  Date: 2019-03-19)
Driver Inf               : C:\Windows\inf\xusb22.inf
Legacy BusType           : PNPBus
Class                    : XnaComposite
Class GUID               : {d61ca365-5af4-4486-998b-9db4734c6ca3}
Interface GUID           : {a5dcbf10-6530-11d2-901f-00c04fb951ed} (GUID_DEVINTERFACE_USB_DEVICE)
Service                  : xusb22
Enumerator               : USB
Location Info            : Port_#0012.Hub_#0001
Location IDs             : PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(12), ACPI(_SB_)#ACPI(PCI0)#ACPI(XHC_)#ACPI(RHUB)#ACPI(HS12)
Container ID             : {45ac991f-dcca-11eb-a34d-b025aa2b39ec}
Manufacturer Info        : Microsoft
Capabilities             : 0x84 (Removable, SurpriseRemovalOK)
Status                   : 0x0180600A (DN_DRIVER_LOADED, DN_STARTED, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER)
Problem Code             : 0
Power State              : D0 (supported: D0, D3, wake from D0)
 Child Device 1          : USB 输入设备
  Device ID              : USB\VID_045E&PID_028E&IG_00\6&4C290CB&0&00
  Class                  : HIDClass
   Child Device 1        : HID-compliant game controller
    DevicePath           : \\?\hid#vid_045e&pid_028e&ig_00#7&53b87d7&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
    KernelName           : \Device\00000129
    Device ID            : HID\VID_045E&PID_028E&IG_00\7&53B87D7&0&0000
    Class                : HIDClass
`

我们可以知道,根设备是由xusb22.sys驱动的,该驱动作为总线驱动又枚举出了一个USB input设备,USB input设备通过分析该USB HID INPUT设备的报表描述符,又枚举出了一个 HID-compliant game controller即游戏手柄设备。

而在微软的官方文档中 DirectInput and XUSB Devices 一节中,链接为:https://docs.microsoft.com/en-us/windows/win32/xinput/directinput-and-xusb-devices
其有一段话如下:

The driver for the Xbox Common Controller class (XUSB) on Windows implements the kernel-mode interface for the XINPUT DLL. To provide a good experience for legacy titles that use the DirectInput API with the common controller device, the driver also exports a Human Interface Device (HID) class interface, which is picked up by DirectInput. We chose the mapping of XUSB to HID based on typical behavior in a set of gaming applications for the original XINPUT version, and we updated the mapping for newer subtypes. This topic describes the mapping.

所以通过以上文,本人的理解是:

  • XBOX 360 手柄接入PC机后,使用Xbox Common Controller class (XUSB)驱动(在win10当前的版本中是xusb22.sys ),该驱动提供了游戏专用 XINPUT DLL 的内核模式接口。
  • 为了使用DirectInput API 和通用控制器设备的传统游戏提供良好的体验,驱动程序还额外导出了一个由 DirectInput 选取的人机接口设备 (HID) 类接口,该接口是标准的HID 游戏手柄接口。该游戏手柄的HID设备的报表描述符类似USBIF提供的标准游戏手柄报表描述符。详见:http://www.usbzh.com/article/detail-113.html

以上都是猜测,实际并未真正测试验证。。。。

0 篇笔记 写笔记

HID 报表描述符游戏手柄
LOGICAL_MINIMUM (0) 15 00 USAGE_PAGE (Generic Desktop) 05 01USAGE (Joystick) 09 04CO......
XBOX游戏手柄在Windows下的分析
学习学习,对USB的学习其实带着问题有目的的解决问题,是最棒的。昨日本站USB中文网技术交流群一位同学拿了一个游戏手柄,没想到在本群中关于它的分析出展开了…该游戏手柄接入PC机后,在Windows下的设备管理器中的设备树如下:usbtreeview给出的设备信息如下:Device Descrip......
HID报告描述符xbox游戏手柄
xbox游戏手柄HID报告描述符CollectionNumber 1ReportId 0InputLength 14OutputLength 0FeatureLength 0--......
作者信息
USB中文网
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!