level 4
白匠啊º
楼主
我想要实现一下USB 设备XINPUT和键盘等HID类同时枚举(也就是在XINPUT上增加HID接口),使用USB分析仪抓包,发现手柄的进行了三次枚举,三次都是不同的设备PID VID,第一次枚举是个HID类,report分析好像是个收发数据的,我猜测是厂商的BootLoader之类的,第二次枚举是标准的XINPUT,使用的是XBOX厂商的PID VID,之后由进行了第三次枚举,使用的是自定义厂商PID VID 这次的配置描述符总共有三个接口第一个是厂商是自定义接口,应该是用来走XINPUT的,后面两个一个就是正常的键盘HID接口,一个是数据收发HID接口和第一次枚举时的功能没啥太大差别似乎估计也是固件升级的接口。
这其中的关键在于第二次XINPUT的枚举和第三次枚举是如何实现主机不注销XINPUT接口的,我个人是能够成功枚举XINPUT设备的,但是在这个厂商抓包中,在XINPUT枚举是主机请求了两次序列字符串描述符之后,设备响应完成之后,主机下发OUT DATA1 从机一直应答ACK一直循环,直到后面复位重新进行枚举,在我自己的XINPUT抓包时是不同的。还有就是复位是的状态手柄端一直是JJJJ SE0 J SE0 J 复位的,而我自己的复位就是SE0 J SE0 J 。这两点就是有很大的不同。目前我也没啥想法去实现这些,我也是个USB新手,所以想问一下各位大佬具体这些是如何实现的。
我第一次的想法是在XINPUT的配置符上添加一个HID接口,来实现HID设备和xinput设备同时枚举,但是一旦使用了XBOX的厂商PID VID主机将不会进行任何获取HID report描述符的请求,看网上说需要setup中添加啥厂商请求的描述符其实根本不需要,抓包中主机根本没有进行任何请求厂商描述符。第三次描述符我发评论区





2026年02月12日 04点02分
1
这其中的关键在于第二次XINPUT的枚举和第三次枚举是如何实现主机不注销XINPUT接口的,我个人是能够成功枚举XINPUT设备的,但是在这个厂商抓包中,在XINPUT枚举是主机请求了两次序列字符串描述符之后,设备响应完成之后,主机下发OUT DATA1 从机一直应答ACK一直循环,直到后面复位重新进行枚举,在我自己的XINPUT抓包时是不同的。还有就是复位是的状态手柄端一直是JJJJ SE0 J SE0 J 复位的,而我自己的复位就是SE0 J SE0 J 。这两点就是有很大的不同。目前我也没啥想法去实现这些,我也是个USB新手,所以想问一下各位大佬具体这些是如何实现的。
我第一次的想法是在XINPUT的配置符上添加一个HID接口,来实现HID设备和xinput设备同时枚举,但是一旦使用了XBOX的厂商PID VID主机将不会进行任何获取HID report描述符的请求,看网上说需要setup中添加啥厂商请求的描述符其实根本不需要,抓包中主机根本没有进行任何请求厂商描述符。第三次描述符我发评论区




