一个无线鼠标的HID Report Desc

2023-05-16

HID设备是USB规范定义的设备类型之一,其分类号为0x03.
关于USB设备类型定义,可参见本站:USB设备类型定义 - USB中文网

HID设备除了用于专门的输入输出设备外,有时也与其它的设备类型组合成一个复杂的设备。如对于UVC摄像头设备,可以附带一个UAC麦克风音频设备和一个HID设备用于固件升级或自定义通讯。

HID设备类型定义于接口描述符中,通过bInterfaceClass、bInterfaceSubClass和bInterfaceProtocol来标识。

HID设备Class

对于HID类设备,接口描述符的bInterfaceClass字段值固定为0x03.

HID设备SubClass

在HID规范的早期,SubClass用于标别不同类型HID类设备的特定协议,但随着HID设备附加功能的变化,但很快就发现这种方法限制太多。设备需要适应狭义定义的子类,并且不能提供子类所支持的功能以外的任何功能。例如,带有定位器的键盘,或提供击键的定位器。

接口描述符的字段bInterfaceSubClass仅用于设备是否支持启动接口。

Subclass CodesSubclass Code Description
0No Subclass
1Boot Interface Subclass
2 - 255Reserved
  • BIOS下识别USB键盘 BIOS下识别USB键盘 - USB中文网

HID设备Protocols

HID设备支持多种协议。接口描述符的bInterfaceProtocol成员只有在InterfaceSubClass支持启动接口时才有意义,否则为0。
支持boot interface subclass的设备也只有两种,分别为键盘和鼠标:

Subclass CodesSubclass Code Description
0None
1Keyboard
2Mouse
3 - 255Reserved

HID设备连接到USB主机后,主机通过发送Get_Descriptor请求读取HID设备的描述符,了解描述符对了解USB设备是至关重要的。

HID设备的描述符

HID设备除了支持USB设备的5种标准描述符之外,还支持HID设备特有的3种描述符。这些描述符是:

USB标准描述符:设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。
HID特有的描述符:HID描述符、报表描述符(Report)和实体描述符(Physical)

从描述符的关联关系看,HID描述符是关联于接口。所以如果一个HID设备有2个端点,设备不需要每个端点有一个HID描述符。

从前面的USB描述符可以看出一个规律,描述符的第一、二字节分别是描述符的长度和类型,描述符的类型字段(bDescriptorType)表明描述符的种类,下表列出了不同描述符的类型字段数值。

描述符应用数值类型
设备描述符所有设备必须有,只能一个1
配置描述符所有设备必须有,至少一个2
字符串描述符可选择3
接口描述符每一个接口一个4
端点描述符除端点0之外的每个端点一个5
设备限定描述符 Device_Qualiffier同时支持全速与高速的设备必须有一个6
其它速率配置描述符 Other_Speed_Configuration7
Interface_power8
HID描述符HID设备必须有21
Hub描述符29
报表描述符HID设备必须有22
实体描述符 Physical可选择的23

对于一个HID设备,设备描述符与配置描述符没有HID特定的信息。其设备描述符的bDeviceClass和bDeviceSubClass字段的值为0,接口描述符的bInterfaceClass字段值为03,表示设备的该接口是HID类别。在接口描述符中其他包含HID特定信息的字段还有子类别码(blnterfaceSubClass)与协议码(blnterfaceProtocol字段)。

  在接口描述符中子类别码字段等于1表示此设备支持启动接口(Boot Interface)。如果设备有启动接口,即便主机的HID没有加载驱动程序,设备也可以使用。这种情形可能发生在计算机是由DOS直接启动,在启动时观看系统设置画面或使用Wndows的安全模式时。

  含有启动接口的键盘或鼠标可以使用BIOS或许多主机支持的默认简单协议。HID规范定义了键盘与鼠标的启动接口协议。如果设备没有启动接口,并且接口描述符中协议码字段是1,表示设备支持键盘接口,协议码字段是2,表示支持鼠标接口。接口描述符中协议码字段是0,表示设备不支持启动协议。

  在 HID Usage Tables规范中定义了键盘与鼠标的启动描述符(Boot Descriptor)。BIOS不需要从设备中读取描述符,因为它知道启动协议,并且假设设备支持启动协议。所以要启动的设备不需要在固件内包含启动接口描述符,它只要在主机尚未要求在报表描述符中的定义协议时支持启动协议即可。在操作系统加载HlD驱动程序后会使用Set_Protocol请求,将设备由启动协议转换成报表协议。

 硬件描述

code:0121                 .byte 0x12              // bLength
code:0122                 .byte    1              // USB_DEVICE_DESCRIPTOR_TYPE
code:0123                 .word 2                 // bcdUSB
code:0125                 .byte    0              // bDeviceClass
code:0126                 .byte    0              // bDeviceSubClass
code:0127                 .byte 0                 // bDeviceProtocol
code:0128                 .byte 8                 // bMaxPacketSize
code:0129                 .word 0xF204            // VID
code:012B                 .word 0x2311            // DEVICE ID
code:012D                 .word 2                 // bcdDevice
code:012F                 .byte 1                 // USBD_IDX_MFC_STR
code:0130                 .byte    2              // USBD_IDX_PRODUCT_STR
code:0131                 .byte 0                 // USBD_IDX_SERIAL_STR
code:0132                 .byte    1              // USBD_CFG_MAX_NUM

code:0133                 .byte 9                 //  //配置描述符的字节数大小,固定为9字节
code:0134                 .byte    2              // 描述符类型编号,为0x02
code:0135                 .byte 0x5B              // WORD wTotalLength;     //配置所返回的所有数量的大小
code:0136                 .byte    0
code:0137                 .byte 3                 // /*bNumInterfaces: 3 interface*/
code:0138                 .byte    1              //   /*bConfigurationValue: Configuration value*/
code:0139                 .byte    0              //  /*iConfiguration: Index of string descriptor describing
code:013A                 .byte 0xA0              // /*bmAttributes: bus powered and Support Remote Wake-up */
code:013B                 .byte 0x32 ; 2          //   /*MaxPower 100 mA: this current is used for detecting Vbus*/


//interface 0
code:013C                 .byte 9                 // //设备描述符的字节数大小,为0x09
code:013D                 .byte 4                 //  //描述符类型编号,为0x04
code:013E                 .byte 0                 //   /*bInterfaceNumber: Number of Interface*/ 编号
code:013F                 .byte 0                 //     BYTE bAlternateSetting;//备用的接口描述符编号
code:0140                 .byte 1                 //     BYTE bNumEndpoints;     //该接口使用端点数,不包括端点0
code:0141                 .byte    3              //     BYTE bInterfaceClass;   //接口类型  3, hid
code:0142                 .byte    1              //     BYTE bInterfaceSubClass;//接口子类型, 1 for boot
code:0143                 .byte 1                 //    BYTE bInterfaceProtocol;//接口所遵循的协议  1 for keybarod
code:0144                 .byte    0              //      BYTE iInterface;         //描述该接口的字符串索引值 


//HID DESCRIPTOR
code:0145                 .byte 9
code:0146                 .byte 0x21              // HID_DESCRIPTOR_TYPE  HID设备的描述符
code:0147                 .byte 0x11              // bcdHID	 HID规范版本号(BCD) byte 0  bcdHID:设备与其描述符所遵循的HID规范的版本号码,此数值是4个16进位的BCD格式字符。例如版本1.1的bcdHID是0110h。
code:0148                 .byte    1              // bcdHID	 HID规范版本号(BCD) byte 1
code:0149                 .byte 0                 //bCountryCode	1	Numeric	硬件设备所在国家的国家代码	
code:014A                 .byte 1                 //bNumDescriptors	1	Numeric	类别描述符数目(至少有一个报表描述符)
code:014B                 .byte 0x22              //bReportType	1	Constant  总是0x22?
code:014C                 .byte 0x41              // wReportLength	2	Numeric	该类别描述符的总长度 Total length of Report descriptor
code:014D                 .byte    0              //【wDescriptorLength】

//端口1, IN, EP1, maxpacketsize
code:014E                 .byte 7
code:014F                 .byte 5                 //; USB_ENDPOINT_DESCRIPTOR_TYPE
code:0150                 .byte 0x81               //; IN 1
code:0151                 .byte 3
code:0152                 .byte 8                  //;wMaxPacketSize 
													/*
														USB2.0时:
														对于同步端点,此值用于指示主机在调度中保留的总线时间,这是每(微)帧数据有效负载所需的时间,
														有效负载时间就是发送一帧数据需要占用的总线时间,在实际数据传输过程中,管道实际使用的带宽
														可能比保留的带宽少,大家想想,如果实际使用的带宽比保留的还多,那就丢数了;
														对于其类型的端点,bit10~bit0指定最大数据包大小(以字节为单位);
														bit12~bit11对于高速传输的同步和中断端点有效:bit12~bit11可指定每个微帧的额外通信次数,
														这里大家一定要知道是在高速传输中,当一个事务超时时,在一个微帧时间内重传的次数,如果设置为
														00b(None),则表示在一个微帧内只传输一个事务,不进行额外的超时重传,如果设置为01b,
														则表示在一个微帧内可以传输两次事务,有一次额外的重传机会,从下面可以看出,一个微帧最多可以
														有两次重传事务的机会,如果微帧结束了还是失败,就需要等到下一个微帧继续发送该事务;
																											*/
code:0153                 .byte 0


code:0154                 .byte 0xA                 //主机查询端点的时间间隔 


code:0155                 .byte 9
code:0156                 .byte 4
code:0157                 .byte 1                 //   /*bInterfaceNumber: Number of Interface*/ 编号
code:0158                 .byte    0               //备用编号
code:0159                 .byte 1                 //     BYTE bNumEndpoints;     //该接口使用端点数,不包括端点0
code:015A                 .byte    3               //  BYTE bInterfaceClass;   //接口类型  3, hid
code:015B                 .byte    1              //      BYTE bInterfaceSubClass;//接口子类型   boot
code:015C                 .byte 2                  //    BYTE bInterfaceProtocol;//接口所遵循的协议  2 for mouse
code:015D                 .byte    0

code:015E                 .byte    9
code:015F                 .byte 0x21              //  HID_DESCRIPTOR_TYPE
code:0160                 .byte 0x11
code:0161                 .byte 1
code:0162                 .byte    0
code:0163                 .byte 1            //bNumDescriptors	1	Numeric	类别描述符数目(至少有一个报表描述符)
code:0164                 .byte 0x22 ;      //bReportType	1	Constant  总是0x22?
code:0165                 .byte 0x5F        // wReportLength	2	Numeric	该类别描述符的总长度 Total length of Report descriptor
code:0166                 .byte 1

code:0167                 .byte    7
code:0168                 .byte    5             //USB_ENDPOINT_DESCRIPTOR_TYPE
code:0169                 .byte 0x82             //IN EP2
code:016A                 .byte    3
code:016B                 .byte 0x20             //wMaxPacketSize 
code:016C                 .byte    0
code:016D                 .byte    4

code:016E                 .byte    9
code:016F                 .byte    4
code:0170                 .byte    2         //   /*bInterfaceNumber: Number of Interface*/ 编号         
code:0171                 .byte    0         //备用编号
code:0172                 .byte    2         //     BYTE bNumEndpoints;     //该接口使用端点数,不包括端点0    
code:0173                 .byte 3            //  BYTE bInterfaceClass;   //接口类型  3, hid             //     BYTE bInterfaceClass;   //接口类型  3, hid
code:0174                 .byte 0           //      BYTE bInterfaceSubClass;//接口子类型   not boot 
code:0175                 .byte 0          //    BYTE bInterfaceProtocol;//接口所遵循的协议  0 for None
code:0176                 .byte 0

code:0177                 .byte 9
code:0178                 .byte 0x21              ; HID_DESCRIPTOR_TYPE
code:0179                 .byte 0x11
code:017A                 .byte 1
code:017B                 .byte    0
code:017C                 .byte 1
code:017D                 .byte 0x22
code:017E                 .byte 0x1A         // wReportLength	2	Numeric	该类别描述符的总长度 Total length of Report descriptor
code:017F                 .byte 0

code:0180                 .byte 7
code:0181                 .byte 5                 // USB_ENDPOINT_DESCRIPTOR_TYPE
code:0182                 .byte 0x83              //IN EP3 
code:0183                 .byte 3
code:0184                 .byte 0x40               //wMaxPacketSize 
code:0185                 .byte    0
code:0186                 .byte 0xA

code:0187                 .byte 7
code:0188                 .byte 5                 // USB_ENDPOINT_DESCRIPTOR_TYPE
code:0189                 .byte    3              //  OUT EP3
code:018A                 .byte 3
code:018B                 .byte 0x20                //wMaxPacketSize 
code:018C                 .byte    0
code:018D                 .byte    6


code:018E                 .byte 4
code:018F                 .byte 3                 ; USB_STRING_DESCRIPTOR_TYPE

code:0190                 .byte 9
code:0191                 .byte 4
code:0192                 .byte 0x10
code:0193                 .byte    3              ; USB_STRING_DESCRIPTOR_TYPE
								/*
													09 04 10 03 43 00 68 00  69 00 63 00 6F 00 6E 00  ....C.h.i.c.o.n.
													79 00 20 03 57 00 69 00  72 00 65 00 6C 00 65 00  y. .W.i.r.e.l.e.
													73 00 73 00 20 00 44 00  65 00 76 00 69 00 63 00  s.s. .D.e.v.i.c.
													65 00                                             e
								*/
code:0194                 .byte 0x43 ; C
code:0195                 .byte 0
code:0196                 .byte 0x68
code:0197                 .byte 0
code:0198                 .byte 0x69
code:0199                 .byte 0
code:019A                 .byte 0x63
code:019B                 .byte    0
code:019C                 .byte 0x6F ; o
code:019D                 .byte 0
code:019E                 .byte 0x6E
code:019F                 .byte 0
code:01A0                 .byte 0x79
code:01A1                 .byte    0
code:01A2                 .byte 0x20
code:01A3                 .byte 3                 
code:01A4                 .byte 0x57
code:01A5                 .byte 0
code:01A6                 .byte 0x69
code:01A7                 .byte 0
code:01A8                 .byte 0x72
code:01A9                 .byte    0
code:01AA                 .byte 0x65
code:01AB                 .byte    0
code:01AC                 .byte 0x6C
code:01AD                 .byte 0
code:01AE                 .byte 0x65
code:01AF                 .byte    0
code:01B0                 .byte 0x73
code:01B1                 .byte 0
code:01B2                 .byte 0x73
code:01B3                 .byte    0
code:01B4                 .byte 0x20
code:01B5                 .byte 0
code:01B6                 .byte 0x44
code:01B7                 .byte    0
code:01B8                 .byte 0x65
code:01B9                 .byte    0
code:01BA                 .byte 0x76
code:01BB                 .byte    0
code:01BC                 .byte 0x69
code:01BD                 .byte 0
code:01BE                 .byte 0x63
code:01BF                 .byte    0
code:01C0                 .byte 0x65 ; e
code:01C1                 .byte 0

报告描述

//interface 0
0x05 0x01 Usage Page (Generic Desktop)
0x09 0x06 Usage (Keyboard)
0xa1 0x01 Collection (Application)
	0x05 0x07 Usage Page (Keyboard)
	0x19 0xe0 Usage Minimum (-32)
	0x29 0xe7 Usage Maximum (-25)
	0x15 0x00 Logical Minimum (0)
	0x25 0x01 Logical Maximum (1)
	0x95 0x08 Report Count (8)
	0x75 0x01 Report Size (1)
	0x81 0x02 Input (Data,Var,Abs)
	0x95 0x08 Report Count (8)
	0x75 0x01 Report Size (1)
	0x81 0x01 Input (Cnst,Ary,Abs)
	0x05 0x08 Usage Page (LEDs)
	0x19 0x01 Usage Minimum (1)
	0x29 0x03 Usage Maximum (3)
	0x95 0x03 Report Count (3)
	0x75 0x01 Report Size (1)
	0x91 0x02 Output (Data,Var,Abs)
	0x95 0x01 Report Count (1)
	0x75 0x05 Report Size (5)
	0x91 0x01 Output (Cnst,Ary,Abs)
	0x05 0x07 Usage Page (Keyboard)
	0x19 0x00 Usage Minimum (0)
	0x2a 0xff 0x00 Usage Maximum (255)
	0x15 0x00 Logical Minimum (0)
	0x26 0xff 0x00 Logical Maximum (255)
	0x95 0x06 Report Count (6)
	0x75 0x08 Report Size (8)
	0x81 0x00 Input (Data,Ary,Abs)
0xc0 End Collection

//interface 1
0x05 0x01 Usage Page (Generic Desktop)
0x09 0x80 Usage (System Control)
0xa1 0x01 Collection (Application)
	0x85 0x01 Report ID (1)
	0x19 0x81 Usage Minimum (-127)
	0x29 0x83 Usage Maximum (-125)
	0x15 0x00 Logical Minimum (0)
	0x25 0x01 Logical Maximum (1)
	0x75 0x01 Report Size (1)
	0x95 0x03 Report Count (3)
	0x81 0x02 Input (Data,Var,Abs)
	0x95 0x05 Report Count (5)
	0x81 0x01 Input (Cnst,Ary,Abs)
0xc0 End Collection
0x06 0x00 0xff Usage Page (Vendor Defined Page 1)
0x09 0x01 Usage (Vendor Usage 1)
0xa1 0x01 Collection (Application)
	0x85 0x02 Report ID (2)
	0x1a 0xf1 0x00 Usage Minimum (241)
	0x2a 0xfb 0x00 Usage Maximum (251)
	0x15 0x00 Logical Minimum (0)
	0x25 0x01 Logical Maximum (1)
	0x75 0x01 Report Size (1)
	0x95 0x0b Report Count (11)
	0x81 0x02 Input (Data,Var,Abs)
	0x95 0x05 Report Count (5)
	0x81 0x01 Input (Cnst,Ary,Abs)
0xc0 End Collection
0x05 0x0c Usage Page (Consumer Devices)
0x09 0x01 Usage (Consumer Control)
0xa1 0x01 Collection (Application)
	0x85 0x03 Report ID (3)
	0x15 0x00 Logical Minimum (0)
	0x25 0x01 Logical Maximum (1)
	0x75 0x01 Report Size (1)
	0x95 0x08 Report Count (8)
	0x19 0xb5 Usage Minimum (-75)
	0x29 0xb8 Usage Maximum (-72)
	0x09 0xcd Usage (UNK)
	0x09 0xe2 Usage (Mute)
	0x09 0xe9 Usage (Volume Up)
	0x09 0xea Usage (Volume Down)
	0x81 0x02 Input (Data,Var,Abs)
	0x0a 0x83 0x01 Usage (UNK)
	0x0a 0x8a 0x01 Usage (UNK)
	0x0a 0x92 0x01 Usage (UNK)
	0x0a 0x94 0x01 Usage (UNK)
	0x0a 0x21 0x02 Usage (UNK)
	0x1a 0x23 0x02 Usage Minimum (547)
	0x2a 0x25 0x02 Usage Maximum (549)
	0x81 0x02 Input (Data,Var,Abs)
	0x0a 0x26 0x02 Usage (UNK)
	0x0a 0x27 0x02 Usage (UNK)
	0x0a 0x2a 0x02 Usage (UNK)
	0x95 0x03 Report Count (3)
	0x81 0x02 Input (Data,Var,Abs)
	0x95 0x05 Report Count (5)
	0x81 0x01 Input (Cnst,Ary,Abs)
0xc0 End Collection
0x05 0x01 Usage Page (Generic Desktop)
0x09 0x02 Usage (Mouse)
0xa1 0x01 Collection (Application)
	0x09 0x01 Usage (Pointer)
	0xa1 0x00 Collection (Physical)
		0x85 0x04 Report ID (4)
		0x05 0x09 Usage Page (Button)
		0x19 0x01 Usage Minimum (1)
		0x29 0x03 Usage Maximum (3)
		0x15 0x00 Logical Minimum (0)
		0x25 0x01 Logical Maximum (1)
		0x95 0x03 Report Count (3)
		0x75 0x01 Report Size (1)
		0x81 0x02 Input (Data,Var,Abs)
		0x95 0x05 Report Count (5)
		0x81 0x01 Input (Cnst,Ary,Abs)
		0x05 0x01 Usage Page (Generic Desktop)
		0x16 0x01 0xf8 Logical Minimum (-2047)
		0x26 0xff 0x07 Logical Maximum (2047)
		0x75 0x0c Report Size (12)
		0x95 0x02 Report Count (2)
		0x09 0x30 Usage (X)
		0x09 0x31 Usage (Y)
		0x81 0x06 Input (Data,Var,Rel)
		0x15 0x81 Logical Minimum (-127)
		0x25 0x7f Logical Maximum (127)
		0x75 0x08 Report Size (8)
		0x95 0x01 Report Count (1)
		0x09 0x38 Usage (Wheel)
		0x81 0x06 Input (Data,Var,Rel)
	0xc0 End Collection
0xc0 End Collection
0x06 0x01 0xff Usage Page (UNK)
0x09 0x01 Usage (UNK)
0xa1 0x01 Collection (Application)
	0x85 0x05 Report ID (5)
	0x95 0x01 Report Count (1)
	0x75 0x08 Report Size (8)
	0x15 0x00 Logical Minimum (0)
	0x25 0x0a Logical Maximum (10)
	0x09 0x20 Usage (UNK)
	0xb1 0x03 Feature (3)
	0x27 0xff 0xff 0x00 0x00 Logical Maximum (65535)
	0x75 0x10 Report Size (16)
	0x09 0x27 Usage (UNK)
	0xb1 0x03 Feature (3)
	0x09 0x23 Usage (UNK)
	0xb1 0x03 Feature (3)
	0x09 0x24 Usage (UNK)
	0xb1 0x03 Feature (3)
0xc0 End Collection
0x06 0x01 0xff Usage Page (UNK)
0x09 0x02 Usage (UNK)
0xa1 0x01 Collection (Application)
	0x85 0x06 Report ID (6)
	0x95 0x01 Report Count (1)
	0x75 0x08 Report Size (8)
	0x15 0x00 Logical Minimum (0)
	0x25 0x0a Logical Maximum (10)
	0x09 0x20 Usage (UNK)
	0xb1 0x03 Feature (3)
	0x27 0xff 0xff 0x00 0x00 Logical Maximum (65535)
	0x75 0x10 Report Size (16)
	0x09 0x27 Usage (UNK)
	0xb1 0x03 Feature (3)
	0x09 0x23 Usage (UNK)
	0xb1 0x03 Feature (3)
	0x09 0x24 Usage (UNK)
	0xb1 0x03 Feature (3)
0xc0 End Collection
0x06 0x01 0xff Usage Page (UNK)
0x09 0x03 Usage (UNK)
0xa1 0x01 Collection (Application)
	0x85 0x07 Report ID (7)
	0x95 0x01 Report Count (1)
	0x75 0x10 Report Size (16)
	0x15 0x00 Logical Minimum (0)
	0x27 0xff 0xff 0x00 0x00 Logical Maximum (65535)
	0x09 0x27 Usage (UNK)
	0xb1 0x03 Feature (3)
	0x75 0x08 Report Size (8)
	0x26 0xff 0x00 Logical Maximum (255)
	0x09 0x21 Usage (UNK)
	0xb1 0x03 Feature (3)
	0x09 0x22 Usage (UNK)
	0xb1 0x03 Feature (3)
	0x09 0x25 Usage (UNK)
	0xb1 0x03 Feature (3)
	0x09 0x26 Usage (UNK)
	0xb1 0x03 Feature (3)
0xc0 End Collection
0x06 0x01 0xff Usage Page (UNK)
0x09 0x08 Usage (UNK)
0xa1 0x01 Collection (Application)
	0x85 0x08 Report ID (8)
	0x06 0x00 0xff Usage Page (Vendor Defined Page 1)
	0x09 0x05 Usage (UNK)
	0x19 0x00 Usage Minimum (0)
	0x2a 0xff 0x7f Usage Maximum (32767)
	0x15 0x00 Logical Minimum (0)
	0x26 0xff 0x7f Logical Maximum (32767)
	0x75 0x10 Report Size (16)
	0x95 0x04 Report Count (4)
	0xb1 0x02 Feature (2)
0xc0 End Collection

interface 2
0x06 0x01 0xff Usage Page (UNK)
0x09 0x04 Usage (UNK)
0xa1 0x01 Collection (Application)
	0x85 0x04 Report ID (4)
	0x19 0x00 Usage Minimum (0)
	0x2a 0xff 0x00 Usage Maximum (255)
	0x15 0x00 Logical Minimum (0)
	0x26 0xff 0x00 Logical Maximum (255)
	0x75 0x08 Report Size (8)
	0x95 0x1f Report Count (31)
	0xb1 0x02 Feature (2)
0xc0 End Collection

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个无线鼠标的HID Report Desc 的相关文章

  • Crystal Report:“文件对于附件来说太大”错误

    我是水晶报表服务器的新手 我在这里解释错误的详细信息 我正在使用 SAP Business Objects CMC 为我的应用程序生成报告 下面是图像中的版本详细信息 当我尝试生成文件大小超过 1MB 的报告文件时 它会抛出以下错误 Err
  • Java HTML->PDF 解决方案?

    我目前正在用 Java 构建一个基于 PDF 的报告 我已经研究过 iText 和 BIRT 但似乎需要付出很大的努力来学习他们的 API 我试图找到一个解决方案 让我可以在 HTMl 中生成报告 我已经知道的东西 并将其输出为 PDF 谁
  • 如何在 BIRT 中通过 URL 传递输入参数?

    我是 BIRT 报告新手 在我的 BIRT 报告中 我有两个输入参数 我想通过查询字符串 在 URL 中 将这两个输入参数传递给服务器 我怎样才能做到这一点 如果问题只是获取正确的 URL 则类似于 YOUR SERVER your bir
  • 如何合并多个 BIRT 报告

    我们目前拥有一整套报告设计 涵盖了我们应用程序的各个部分 并且这些报告是根据用户的需求生成的 我希望能够将其中几个报告捆绑成一个报告以返回给用户 我最初破解了一个自定义报告生成器 它使用报告库文件中的段生成报告设计文件 然后运行生成的设计
  • 主机不更新报告中的数据

    我正在尝试在 Raspberry Pi Pico 上使用 TinyUSB 开发自定义 UPS 并让 UPower 在我的 Ubuntu 主机上发现它 我试图向主机发出充电状态信号 但主机将电池报告为空 UPower 而不是充电 等离子桌面电
  • python读取HID

    我想做一个程序 它从连接到 Linux 系统的 HID 获取输入并从中生成 MIDI 我在 MIDI 方面还不错 但在 HID 方面却遇到了困难 虽然这种方法工作正常 取自 usr bin python2 import struct inp
  • 创建条带摘要报告

    我最近将付款处理切换到 Stripe 我现在需要为我们的财务部门创建一份报告 显示指定日期范围内的交易汇总 我已经开始创建一个简单的 PHP 网页 并使用 Stripe PHP 库 它将提供以下摘要 交易数量 交易金额 退款次数 退款金额
  • Jasper Reports:如何编译子报表

    我有一个独立的应用程序 它的职责之一是获取 jrxml 文件的路径并编译它 我可以毫无问题地执行此操作 直到出现带有子报表的报表 其中主报表的编译不会编译其任何子报表 从而导致稍后找不到子报表 jasper 文件 有什么办法可以 1 设置J
  • Document.NewPage() 不添加新页面

    我正在尝试向 pdf 文档添加新页面 但由于某种原因 这种情况没有发生 也许我的另一个问题https stackoverflow com questions 11428878 itextsharp splitlate not working
  • 省略 Access 报告最后一页的页眉?

    如何删除 Access 报告最后一页上的标题 将组添加到报告中 根据表达式进行分组 True 这将创建一个包含报告中所有记录的组 为该组提供组标题 然后将列标题标签从页标题移动到组标题 在组标题的属性中 设置Repeat Section t
  • 如何防止浏览器标题中出现 blob + guid

    基本上 我正在做的是在服务器上生成一个 PDF 文件并通过 javascript 在浏览器中显示它 如下所示 file new window Blob data type application pdf var fileUrl URL cr
  • 如何阻止 Linux 初始化 USB HID 设备

    我有一个 USB HID 设备 可以在两种不同的模式下工作 模式的选择基于发送给它的 USB 枚举 初始化数据包的顺序 我使用的是运行 Raspbian 的 Raspberry Pi 3 但是如果我为桌面 Ubuntu 发行版编译代码 我也
  • 适用于 OS X 的虚拟 HID 键盘

    我正在尝试创建一个虚拟的蓝牙Mac 操作系统的键盘客户端 这意味着我的 Mac 将充当 BT KB 我读到了 OS X 中的蓝牙 API 在 ObjC 中 并且我还发现了适用于 Mac 的 HID API 在 C 中 为了完成这项工作 我知
  • 从 .net 向操纵杆发送反馈/效果

    感谢这个答案https stackoverflow com a 13734766 637142 https stackoverflow com a 13734766 637142我能够知道何时按下按钮或何时旋转方向盘 现在我的问题是如何将效
  • SQL SSRS 报告管理器站点每次都要求登录

    SQL Server 2012 SSRS Windows 2008 R2 当尝试通过 URL 访问报告管理器时 http 服务器名称 报告 http servername reports 它提示我们输入用户名和密码 当我输入有效的用户 密码
  • iPhone KERN_INVALID_ADDRESS

    我不确定为什么会收到此错误 并且无法找出原因 不过 这只发生在设备上 模拟器按预期运行 没有错误 有人能理解这个崩溃日志吗 Exception Type EXC BAD ACCESS SIGSEGV Exception Codes KERN
  • 隐藏和删除 ssrs 报告中标题的空白

    我正在研究一个ssrs报告 我可以隐藏最后一页上的标题 IIF Globals PageNumber Globals TotalPages 1 or Globals PageNumber Globals TotalPages true fa
  • 如何在 odoo 中打印重复的 qweb 报告?

    我创建了一份运行良好的报告 现在我在表单的标题名称 打印重复 中创建了一个按钮 它将打印相同的报告 但是 当我点击 打印副本 按钮 我想在报告顶部打印 重复报告 截屏 https i stack imgur com Hiu67 png 单击
  • 对于简单的数据库/爱好者设置来说,什么是好的报告服务? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的 PC 上运行着一个微薄的生产环境 用于我在业余时间开发的一个小应用程序 此时我已经完成了基础设置
  • 如何在 Microsoft 报告中显示字节数组中的图像

    我使用报表文件和 ReportViewer 控件来显示在运行时从对象动态加载数据的报表 我需要显示一个以字节数组形式存储在对象中的图像 PictureBox 的值当前设置为 First Fields ImageData Value dtst

随机推荐

  • 利用火狐浏览器脚本功能_充分利用Firefox

    利用火狐浏览器脚本功能 Firefox 0 8的发布消息是凤凰网 Firebird Mozilla浏览器系列中的最新版本 xff0c 目前 xff0c Web开发社区对此感到非常关注 该发行版标志着Mozilla项目独立浏览器的第三个也是最
  • 串口接收无定长数据

    1 原理 xff1a 1 使能串口接收中断 定时器中断 xff1b 2 在串口第一次进入到中断后 xff0c 使能定时器计时 xff1b 3 在串口每次进入中断后 xff0c 清空定时器 xff1b 4 当定时器溢出时 xff0c 判定数据
  • OpenWRT 小记

    查看openwrt内核版本 xff1a cat proc version uname r 生成配置文件 xff1a config generate 查看DHCH 已经分配的IP cat var dhcp leases 分割cat tmp d
  • OpenWrt OpenMPTCProuter feed

    echo 34 src git OpenMPTCProuter https github com Ysurac openmptcprouter feeds git 34 gt gt feeds conf default echo 34 sr
  • openwrt路由器接华为E3372(E8372)网卡实现4G转有线和WIFI

    Hilink 在openwrt系统中安装kmod usb net rndis kmod usb net kmod usb2 usb modeswitch kmod usb net cdc ether 安装完成后 xff0c 把E3372 x
  • windows 10 内存居高不下,实际没开多少进程

    windows 10 内存居高不下 xff0c 实际没开多少进程 关闭快速启动 就好了
  • opkg list 报错

    opkg list Collected errors opkg conf load Could not lock var lock opkg lock Resource temporarily unavail echo 34 nameser
  • openwrt opkg install 强制替换安装

    查询 opkg list installed grep XXX opkg install XXX ipk force downgrade
  • stm32 硬件spi半双工三线的一些研究心得

    a7105可以使用四线spi 或者3线spi 但是之前都是使用3线的软件模拟的三线spi的 xff0c 所以不想改其它代码了 xff0c 就想可以提高一个spi的读写速度 xff0c 原来软件方式的读写速度 xff0c 在48Mhz的03x
  • Openwrt tftp刷机

    第一次写论坛 xff0c 今天早上才拿到路由器 开始学习openwrt 之前学过嵌入式Linux arm 移植 xff0c 开始正题 xff1a 拿到开发板后 xff0c 就开始烧写自己编译的 bin文件 xff0c 在烧写的过程中出现了问
  • openwrt ipk 安装 luci 界面

    试试看可行不 慢慢更新 opkg update 更新 opkg list grep svn
  • OpenWRT php 安装

    一 安装PHP opkg update opkg install php5 php5 mod apc opkg install php5 mod gd php5 mod session opkg install php5 mod pdo m
  • ESP8266 固件擦除

    折腾了两天 真是醉了 首先确认安装 python python2是否安装 python2 version sudo apt isntall python pip 安装pip和他的许多其他依赖 pip 9 0 1 from usr lib p
  • 第二次实验报告:使用Packet Tracer分析应用层协议

    姓名 xff1a 刘钰学号 xff1a 201821121036班级 xff1a 计算1812 1 实验目的 熟练使用Packet Tracer工具 分析抓到的应用层协议数据包 xff0c 深入理解应用层协议 xff0c 包括语法 语义 时
  • C++的类与C语言结构体比较

    C 43 43 的类与C语言结构体比较 C 43 43 的类与C语言结构体比较 一 结构体 xff0c 类的介绍二 结构体和类的具体区别1 C语言对结构体数组初始化 必须要在定义时初始化 xff1a 2 C 43 43 的类的初始化 构造函
  • CPP-网络/通信:经典HTTP协议详解

    2008 11 03 09 11 by Hundre 266688 阅读 23 评论 收藏 编辑 转自 xff1a http blog csdn net gueter archive 2007 03 08 1524447 aspx Auth
  • 串口编程3:使用串口读取GPS信息

    关于GPS的使用 xff0c 参考 本文主要参考的博客 xff0c 在此表示感谢 xff01 xff01 xff01 主函数 主函数gps main c xff0c 这里便涉及到了串口的打开 xff0c 读操作 xff0c 以及调用了串口设
  • 基于单片机语音智能导盲仪仿真设计-毕设课设资料

    资料下载地址 1110 xff08 百度网盘 xff09 xff1a 点击下载 包含超声波传感器检测障碍物 xff0c 温度传感器检测当前温度 可以通过按键设置距离报警范围 xff0c 报警装置通过声光报警 包含的电路有电源电路 显示电路
  • 宏定义详解

    宏定义有无参数宏定义和带参数宏定义两种 无参数的宏定义的一般形式为 define 标识符 字符序列 其中 define之后的标识符称为宏定义名 简称宏名 xff0c 要求宏名与字符序列之间用空格符分隔 这种宏定义要求编译预处理程序将源程序中
  • 一个无线鼠标的HID Report Desc

    HID设备是USB规范定义的设备类型之一 xff0c 其分类号为0x03 关于USB设备类型定义 xff0c 可参见本站 xff1a USB设备类型定义 USB中文网 HID设备除了用于专门的输入输出设备外 xff0c 有时也与其它的设备类