HID设备示例
+ -

USB鼠标HID设备示例

2021-12-19 1648 1

本示例的鼠标是一个最简单的USB鼠标,不包括任何其它附加设备。该设备在设备管理器中如下图所示:
USB鼠标

该USB鼠标的枚举过程如示:

Device  Length    Phase  Data                                                Description      
------  --------  -----  --------------------------------------------------  ---------------- 
   9.0            CTL    80 06 00 01  00 00 12 00                            GET DESCRIPTOR   
   9.0        18  IN     12 01 00 02  00 00 00 08  6d 04 77 c0  00 72 01 02  ........m.w..r.. 
                         00 01                                               ..               
   9.0            CTL    80 06 00 02  00 00 09 00                            GET DESCRIPTOR   
   9.0         9  IN     09 02 22 00  01 01 00 a0  32                        ..".....2        
   9.0            CTL    80 06 00 02  00 00 22 00                            GET DESCRIPTOR   
   9.0        34  IN     09 02 22 00  01 01 00 a0  32 09 04 00  00 01 03 01  ..".....2....... 
                         02 00 09 21  11 01 00 01  22 2e 00 07  05 81 03 04  ...!...."....... 
                         00 0a                                               ..               
   9.0            CTL    00 09 01 00  00 00 00 00                            SET CONFIG       
   9.0            CTL    21 0a 00 00  00 00 00 00                            SET IDLE         
   9.0            CTL    81 06 00 22  00 00 6e 00                            GET DESCRIPTOR   
   9.0        46  IN     05 01 09 02  a1 01 09 01  a1 00 05 09  19 01 29 03  ..............). 
                         15 00 25 01  95 08 75 01  81 02 05 01  09 30 09 31  ..%...u......0.1 
                         09 38 15 81  25 7f 75 08  95 03 81 06  c0 c0        .8..%.u.......   
   9.0            CTL    80 06 00 02  00 00 09 00                            GET DESCRIPTOR   
   9.0         9  IN     09 02 22 00  01 01 00 a0  32                        ..".....2        
   9.0            CTL    80 06 00 02  00 00 22 00                            GET DESCRIPTOR   
   9.0        34  IN     09 02 22 00  01 01 00 a0  32 09 04 00  00 01 03 01  ..".....2....... 
                         02 00 09 21  11 01 00 01  22 2e 00 07  05 81 03 04  ...!...."....... 
                         00 0a                                               ..               
   9.1         4  IN     00 ff ff 00                                         ....             
  14          24  IN     01 00 00 00  00 00 00 00  00 00 00 00  ff ff ff ff  ................ 
                         ff ff ff ff  00 00 00 00                            ........         
   9.1         4  IN     00 ff f7 00                                         ....             
  14          24  IN     01 00 00 00  00 00 00 00  00 00 00 00  ff ff ff ff  ................ 
                         f7 ff ff ff  00 00 00 00                            ........

在BUSHOUND中通过的设备ID如下图所法:
BUSHOUND抓包USB鼠标

通过USBTreeView的获取的设备描述符信息如下:

    =========================== USB Port9 ===========================

Connection Status        : 0x01 (Device is connected)
Port Chain               : 2-9
Properties               : 0x01
 IsUserConnectable       : yes
 PortIsDebugCapable      : no
 PortHasMultiCompanions  : no
 PortConnectorIsTypeC    : no
ConnectionIndex          : 9

      ======================== USB Device ========================

        +++++++++++++++++ Device Information ++++++++++++++++++
Device Description       : USB 输入设备
Device Path              : \\?\USB#VID_046D&PID_C077#5&1e7d8db7&0&9#{a5dcbf10-6530-11d2-901f-00c04fb951ed} (GUID_DEVINTERFACE_USB_DEVICE)
Kernel Name              : \Device\USBPDO-3
Device ID                : USB\VID_046D&PID_C077\5&1E7D8DB7&0&9
Hardware IDs             : USB\VID_046D&PID_C077&REV_7200 USB\VID_046D&PID_C077
Driver KeyName           : {745a17a0-74d3-11d0-b6fe-00a0c90f57da}\0006 (GUID_DEVCLASS_HIDCLASS)
Driver                   : \SystemRoot\System32\drivers\hidusb.sys (Version: 10.0.14393.82  Date: 2016-08-06)
Driver Inf               : C:\Windows\inf\input.inf
Legacy BusType           : PNPBus
Class                    : HIDClass
Class GUID               : {745a17a0-74d3-11d0-b6fe-00a0c90f57da} (GUID_DEVCLASS_HIDCLASS)
Service                  : HidUsb
Enumerator               : USB
Location Info            : Port_#0009.Hub_#0001
Location IDs             : PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(9), ACPI(_SB_)#ACPI(PCI0)#ACPI(XHC_)#ACPI(RHUB)#ACPI(HS09)
Container ID             : {6ddf2e93-3fc3-11ec-a93f-0c9d92c27dc6}
Manufacturer Info        : (标准系统设备)
Capabilities             : 0x84 (Removable, SurpriseRemovalOK)
Status                   : 0x0180600A (DN_DRIVER_LOADED, DN_STARTED, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER)
Problem Code             : 0
HcDisableSelectiveSuspend: 0
EnableSelectiveSuspend   : 0
SelectiveSuspendEnabled  : 0
EnhancedPowerMgmtEnabled : 1
IdleInWorkingState       : 0
WakeFromSleepState       : 0
Power State              : D0 (supported: D0, D1, D2, D3, wake from D0, wake from D1, wake from D2)
 Child Device 1          : HID-compliant mouse
  Device Path 1          : \\?\HID#VID_046D&PID_C077#6&2687a67d&1&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd} (GUID_DEVINTERFACE_MOUSE)
  Device Path 2          : \\?\HID#VID_046D&PID_C077#6&2687a67d&1&0000#{4d1e55b2-f16f-11cf-88cb-001111000030} (GUID_DEVINTERFACE_HID)
  Kernel Name            : \Device\00000100
  Device ID              : HID\VID_046D&PID_C077\6&2687A67D&1&0000
  Class                  : Mouse
  Driver KeyName         : {4d36e96f-e325-11ce-bfc1-08002be10318}\0000 (GUID_DEVCLASS_MOUSE)
  Service                : mouhid

        +++++++++++++++++ Registry USB Flags +++++++++++++++++
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\046DC0777200
 osvc                    : REG_BINARY 00 00
 NewInterfaceUsage       : REG_DWORD 00000000 (0)

        ---------------- Connection Information ---------------
Connection Index         : 0x09 (9)
Connection Status        : 0x01 (DeviceConnected)
Current Config Value     : 0x01
Device Address           : 0x0B (11)
Is Hub                   : 0x00 (no)
Device Bus Speed         : 0x00 (Low-Speed)
Number Of Open Pipes     : 0x01 (1 pipe to data endpoints)
Pipe[0]                  : EndpointID=1  Direction=IN   ScheduleOffset=0  Type=Interrupt
Data (HexDump)           : 09 00 00 00 12 01 00 02 00 00 00 08 6D 04 77 C0   ............m.w.
                           00 72 01 02 00 01 01 00 00 0B 00 01 00 00 00 01   .r..............
                           00 00 00 07 05 81 03 04 00 0A 00 00 00 00         ..............

        --------------- Connection Information V2 -------------
Connection Index         : 0x09 (9)
Length                   : 0x10 (16 bytes)
SupportedUsbProtocols    : 0x03
 Usb110                  : 1 (yes)
 Usb200                  : 1 (yes)
 Usb300                  : 0 (no)
 ReservedMBZ             : 0x00
Flags                    : 0x00
 DevIsOpAtSsOrHigher     : 0 (Is not operating at SuperSpeed or higher)
 DevIsSsCapOrHigher      : 0 (Is not SuperSpeed capable or higher)
 DevIsOpAtSsPlusOrHigher : 0 (Is not operating at SuperSpeedPlus or higher)
 DevIsSsPlusCapOrHigher  : 0 (Is not SuperSpeedPlus capable or higher)
 ReservedMBZ             : 0x00
Data (HexDump)           : 09 00 00 00 10 00 00 00 03 00 00 00 00 00 00 00   ................

    ---------------------- Device Descriptor ----------------------
bLength                  : 0x12 (18 bytes)
bDescriptorType          : 0x01 (Device Descriptor)
bcdUSB                   : 0x200 (USB Version 2.00) -> wrong, device is Low-Speed only
bDeviceClass             : 0x00 (defined by the interface descriptors)
bDeviceSubClass          : 0x00
bDeviceProtocol          : 0x00
bMaxPacketSize0          : 0x08 (8 bytes)
idVendor                 : 0x046D (Logitech Inc.)
idProduct                : 0xC077
bcdDevice                : 0x7200
iManufacturer            : 0x01 (String Descriptor 1)
 Language 0x0409         : "Logitech"
iProduct                 : 0x02 (String Descriptor 2)
 Language 0x0409         : "USB Optical Mouse"
iSerialNumber            : 0x00 (No String Descriptor)
bNumConfigurations       : 0x01 (1 Configuration)
Data (HexDump)           : 12 01 00 02 00 00 00 08 6D 04 77 C0 00 72 01 02   ........m.w..r..
                           00 01                                             ..

    ------------------ Configuration Descriptor -------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x02 (Configuration Descriptor)
wTotalLength             : 0x0022 (34 bytes)
bNumInterfaces           : 0x01 (1 Interface)
bConfigurationValue      : 0x01 (Configuration 1)
iConfiguration           : 0x00 (No String Descriptor)
bmAttributes             : 0xA0
 D7: Reserved, set 1     : 0x01
 D6: Self Powered        : 0x00 (no)
 D5: Remote Wakeup       : 0x01 (yes)
 D4..0: Reserved, set 0  : 0x00
MaxPower                 : 0x32 (100 mA)
Data (HexDump)           : 09 02 22 00 01 01 00 A0 32 09 04 00 00 01 03 01   ..".....2.......
                           02 00 09 21 11 01 00 01 22 2E 00 07 05 81 03 04   ...!....".......
                           00 0A                                             ..

        ---------------- Interface Descriptor -----------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x04 (Interface Descriptor)
bInterfaceNumber         : 0x00
bAlternateSetting        : 0x00
bNumEndpoints            : 0x01 (1 Endpoint)
bInterfaceClass          : 0x03 (HID - Human Interface Device)
bInterfaceSubClass       : 0x01 (Boot Interface)
bInterfaceProtocol       : 0x02 (Mouse)
iInterface               : 0x00 (No String Descriptor)
Data (HexDump)           : 09 04 00 00 01 03 01 02 00                        .........

        ------------------- HID Descriptor --------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x21 (HID Descriptor)
bcdHID                   : 0x0111 (HID Version 1.11)
bCountryCode             : 0x00 (00 = not localized)
bNumDescriptors          : 0x01
Data (HexDump)           : 09 21 11 01 00 01 22 2E 00                        .!...."..
Descriptor 1:
bDescriptorType          : 0x22 (Class=Report)
wDescriptorLength        : 0x002E (46 bytes)
Error reading descriptor : ERROR_INVALID_PARAMETER

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
bmAttributes             : 0x03 (TransferType=Interrupt)
wMaxPacketSize           : 0x0004
bInterval                : 0x0A (10 ms)
Data (HexDump)           : 07 05 81 03 04 00 0A                              .......

    ----------------- Device Qualifier Descriptor -----------------
Error                    : ERROR_GEN_FAILURE

      -------------------- String Descriptors -------------------
             ------ String Descriptor 0 ------
bLength                  : 0x04 (4 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language ID[0]           : 0x0409 (English - United States)
Data (HexDump)           : 04 03 09 04                                       ....
             ------ String Descriptor 1 ------
bLength                  : 0x12 (18 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language 0x0409          : "Logitech"
Data (HexDump)           : 12 03 4C 00 6F 00 67 00 69 00 74 00 65 00 63 00   ..L.o.g.i.t.e.c.
                           68 00                                             h.
             ------ String Descriptor 2 ------
bLength                  : 0x24 (36 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language 0x0409          : "USB Optical Mouse"
Data (HexDump)           : 24 03 55 00 53 00 42 00 20 00 4F 00 70 00 74 00   $.U.S.B. .O.p.t.
                           69 00 63 00 61 00 6C 00 20 00 4D 00 6F 00 75 00   i.c.a.l. .M.o.u.
                           73 00 65 00                                       s.e.
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

USB鼠标HID报告描述符数据格式分析
注意:这里的鼠标为普通鼠标报告描述符的信息解释,其并不适用于全鼠标报表描述符。一个示例如下:0x05,0x01, // Global Generic Desktop0x09,0x02, // Local Mouse0xa1,0x01, // Main app collection0x09,......
为什么Windows7重新安装系统后插在USB3.0端口的鼠标不能使用?
在 Windows 7 及更早版本的操作系统中,USB 3.0 驱动程序堆栈由第三方提供,操作系统不提供USB3.0驱动栈。 因此,Windows7重新安装系统后插在USB3.0端口上的所有设备都无法工作,需要安装第三方提供的USB控制器和集线器驱动,这样才能识别出挂接在该USB总线下的设备。从Wi......
HID 报表描述符鼠标实例
USAGE_PAGE (Generic Desktop) 05 01USAGE (Mouse) 09 02COLLECTION (Application) A1 01 ......
Win10使用虚拟USB鼠标实现自动挂机测试功能
昨天要测试一个软件不停的整机的功能:在整机软件中需要不停地点击某个软件的按钮,启动会议功能,然后隔一段时间后,需要再次呼出关闭按钮,并点击将该按钮停止会议,如此往复的操作。当然这些操作是需要人工操作点击软件界面的某些按钮实现的。本以为是一个很简单的东西,没想到还是弄出了花样。初始版本 - 脚本方......
USB鼠标HID全局坐标报表描述符
常用的USB HID鼠标是相对的描述符,鼠标的移动是相对当前位置的相对移动。如相对当前位置左移,右移等。这种相对的坐标描述符有的时候在使用上有一定麻烦的,最重要的原因就是需要计算鼠标指针的当前位置。如本人之前做的一个USB鼠标挂机测试脚本,内容详见:http://www.usbzh.com/ar......
HID复合设备(键盘、鼠标)的实现
在使用一些USB键盘或鼠标的时候,特别是一些电竟高档HID设备时,经常发现这些设备会额外定义一些特别的快捷键,使得这些设备不仅有基础设备(如键盘,鼠标)的功能,也有一些特别的快捷功能(如系统声音的放大放小)。甚至更有一些复杂的设备,只需要一个USB接口,就同时支持鼠标键盘功能或在键盘的额外区域支持触......
Windows10下开发虚拟USB鼠标之枚举子设备失败(STATUS_DEVICE_DATA_ERROR)
之前发过一篇文章:Win10使用虚拟USB鼠标实现自动挂机测试功能(文章地址:http://www.usbzh.com/article/detail-476.html ) 使用的是虚拟驱动实现的一个虚拟USB鼠标,实现了产品的自动测试功能。生成的设备在设备管理器中如下:但在开发过程中,并不是一帆......
Windows下通过USB虚拟的键盘鼠标总结
产品级详见:https://www.usbzh.com/article/detail-1182.html哐哐铛铛的,终于把以前搞的虚拟键盘、鼠标的驱动代码重新整理完成,并且在此基础上将USB虚拟的键盘和鼠标整合到一个驱动中。将键盘和鼠标的代码合并在一起的原因很简单:第一是为了验证自己写的这个虚......
USB虚拟鼠标功能演示
该功能是USB中文网的开发例程,其设计原理见:http://www.usbzh.com/article/detail-476.html使用驱动程序实现的是虚拟USB鼠标功能。鼠标的事件由应用应用层下发:当前完成的功能:鼠标指针的移动鼠标的点击事件动态创建和销毁鼠标设备支持WIN7,WIN10 ......
USB鼠标HID设备示例
本示例的鼠标是一个最简单的USB鼠标,不包括任何其它附加设备。该设备在设备管理器中如下图所示:该USB鼠标的枚举过程如示:Device Length Phase Data Descriptio......
USB中文网出品-HID虚拟全局坐标鼠标
以往我们的鼠标指针移动都是相对当前的坐标进行移动,如果要移动到指定的位置,需要不停地获取当前应用层的鼠标指针进行逼近,这样实现鼠标的定位移动或者按下等动作。但是在实际的USB鼠标分类中,还存在另一种鼠标类型,叫做全局坐标鼠标类型,即通过在指定相关的XY坐标进行相应的鼠标动作,其实现原理也和触摸屏类似......
USB键盘鼠标芯片选型
型号协议功能时钟工作温度封装 CH93292.0 全速 Device串口转HID键盘/鼠标/自定义HID芯片,支持多种工作模式和串口通讯模式内置-40~+85℃SOP16 CH93282.0 全速 Device串口转HID键盘芯片,实现串口数据转US......
BIOS下HID鼠标枚举实例及数据抓包分析
通过BIOS下识别USB键盘一节可以知道,一个鼠标想要在BIOS下使用,使用系统默认的报告描述符即主机不再主动获取报告描述符,并且这的一个前提条件是接口描述符的bInterfaceSubClass必须为1,表示HID设备符是一个启动设备(Boot Device)。实际在使用时,发现有获取这个报告......
HID报告描述符教程
USB HID报告描述符是USB主机可以从USB设备请求获取的描述符之一。HID 设备使用报告向主机发送数据,HID报告描述符告诉主机如何解释数据。这里我们将尝试向您展示如何编写这些描述符。什么是USB HID 报告描述符?HID 协议使设备的实现非常简单。设备定义它们的数据包,然后向主机提供一个......
使用USB鼠标HID报告描述符分析HID_REPORT及成员HID_REPORT_ITEM关系
HID报告描述分过程比较麻烦,对于MAIN ITEM,相对来说比较简单,就是一个简单的树形结构。但对于GLOBAL ITEM和LOCAL ITEM组织的数据结构定义,还是相对比较麻烦的。每一个HID报告描述符都会有很多集合,这是由MAIN ITEM的Collection关键字定义的,无论它是Appl......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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