硬件:罗技F710游戏手柄、一台笔记本电脑软件:USBlyzer分析仪(下载地址)
大家都知道,罗技F710上有D模式和X模式,D模式是普通模式,每帧数据传输8个字节;X模式是xbox手柄模式,有更多的信息,每帧传输15个字节(因为有陀螺仪数据)。
D模式
先看8个字节的通讯协议:以下是抓包内容,各种描述符分类清晰,在stm32的usb驱动程序中可以按照命名轻易找到对应的接口来修改。
Device DescriptorLogitech Cordless RumblePad 2
Configuration Descriptor 1Bus Powered, 98 mA
Interface Descriptor 0/0HID, 2 Endpoints
HID Descriptor
Endpoint Descriptor 811 In, Interrupt, 4 ms
Endpoint Descriptor 011 Out, Interrupt, 8 ms
Interface 0 HID Report DescriptorGame Pad
结合通讯协议,以及报告描述符,可以轻易写joystick驱动代码(用stm32的usb主机模式,读取usb-hid类设备驱动程序即可)
X模式
协议解析:Device DescriptorWireless Gamepad F710
Configuration Descriptor 1Bus Powered, 98 mA
Interface Descriptor 0/0Vendor-Specific, 2 Endpoints
Unrecognized Class-Specific Descriptor
Endpoint Descriptor 811 In, Interrupt, 4 ms
Endpoint Descriptor 022 Out, Interrupt, 8 ms
手柄完整的数据协议:/liudijiang/article/details/86693435#Logitech_Wireless_Gamepad_F710_2
程序
顺便放一个我的程序,裸机读取usb手柄数据并发给串口,基于stm32h743
,使用意法半导体官方IDEstm32cubeide
生成并修改了部分驱动内容。
蓝奏云:/i8wf6de
PS: 后续有时间更新一下生成和修改的过程,并移植到freertos中(官方ide直接生成的freertos + usb-host代码有bug,会直接内存泄露)。
如果觉得《罗技F710手柄描述符数据抓包 - 以及stm32读取usb-hid数据程序》对你有帮助,请点赞、收藏,并留下你的观点哦!