一个无线鼠标的HID Report Desc

news2024/11/19 12:39:07

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*/


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;         //描述该接口的字符串索引值 


code:0145                 .byte 9
code:0146                 .byte 0x21              ; HID_DESCRIPTOR_TYPE
code:0147                 .byte 0x11
code:0148                 .byte    1
code:0149                 .byte 0
code:014A                 .byte 1
code:014B                 .byte 0x22                 
code:014C                 .byte 0x41
code:014D                 .byte    0

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 
code:0153                 .byte 0
code:0154                 .byte 0xA


code:0155                 .byte 9
code:0156                 .byte 4
code:0157                 .byte 1
code:0158                 .byte    0
code:0159                 .byte 1
code:015A                 .byte    3              ;  ;     BYTE bInterfaceClass;   //接口类型  3, hid
code:015B                 .byte    1
code:015C                 .byte 2
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
code:0164                 .byte 0x22 ; 
code:0165                 .byte 0x5F
code:0166                 .byte 1

code:0167                 .byte    7
code:0168                 .byte    5              ; USB_ENDPOINT_DESCRIPTOR_TYPE
code:0169                 .byte 0x82              ; IN 2
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
code:0171                 .byte    0
code:0172                 .byte    2
code:0173                 .byte 3                 ;  ;     BYTE bInterfaceClass;   //接口类型  3, hid
code:0174                 .byte 0
code:0175                 .byte 0
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
code:017F                 .byte 0

code:0180                 .byte 7
code:0181                 .byte 5                 ; USB_ENDPOINT_DESCRIPTOR_TYPE
code:0182                 .byte 0x83              ; IN 3
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
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

报告描述

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
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
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

干货!数据智能作为先进生产力,如何助力销售效能提升?

存量竞争市场中,企业需要通过精细化运营提升客户价值与 ROI。数据智能作为先进生产力,在搜索、广告、推荐业务方面已经足够成熟,那么它是如何助力销售提升效能呢?本文将详细介绍。点击文末“阅读原文”即可观看完整版直播回放&…

中科大2007年复试机试题

中科大2007年复试机试题 文章目录中科大2007年复试机试题第一题问题描述解题思路及代码第二题问题描述解题思路及代码第三题问题描述解题思路及代码第四题问题描述解题思路及代码第一题 问题描述 编写程序,判断给定数字是否是回文数。 示例 1 输入:12…

博主的心肝宝贝

写的不错的文档 Sql(Structured Query Language)语句笔记_sky wide的博客-CSDN博客常用sql语句总结https://blog.csdn.net/qq_44652591/article/details/127545318Linux samba服务配置_sky wide的博客-CSDN博客_linux samba配置但是,注意后面公司的需求,…

Docker部署Jenkins

系列文章目录 Docker部署 registry Docker搭建 svn Docker部署 Harbor Docker 部署SQL Server 2017 Docker 安装 MS SqlServer Docker部署 Oracle12c Docker部署Jenkins Docker部署Jenkins系列文章目录前言一、启动docker,下载Jenkins镜像文件二、创建Jenkins挂载目…

fastjson 1.2.24漏洞复现

原理 fastjson由于没有对type进行安全性验证,使攻击者传入危险的类,通过rmi服务指定的攻击机上的恶意class文件,导致命令执行。 版本 1.2.24 环境准备 靶机:ubuntu,192.168.52.129 攻击机:kali&#…

数组的定义和使用

一、一维数组的定义、初始化 1. 一维数组的定义 元素类型 数组名[常量表达式]; (1)一维数组是由元素类型、数组名和长度组成的构造类型。 (2)数组名必须符合C标识符规则。 (3)常量表…

【ONE·C || 初识C语言 】

总言 C语言初步认识。 文章目录总言1、main函数的三种写法2、常见数据类型:内置类型、自定义类型2.1、内置类型总述2.2、内置类型大小计算(32/64)2.3、计算机基本存储单位3、常量、变量3.1、变量3.1.1、变量的分类:全局变量、局部变量3.1.2、变量的作用域…

XL1278-SMT无线模块介绍

XL1278-SMT无线模块简介XL1278-SMT无线模块是采用SEMTECH公司最新的LoRaTM调制技术的无线芯片,该模块除传统的GFSK调制技术外,还采用了LoRa(远程)扩频技术,具有超远距离扩频通讯,高抗干扰性和最大限度的减小…

SAP 成本组件分割价格详解

本文整理CKM3中“CV成本组件”视图下各项成本的价格取值逻辑。 SELECTTCKH3~ELEMT ”成本构成号TCKH3~EL_HV ”全部成本TCKH1~TXELE ”成本构成名称TKEVA04~WERTKOMP1 ”字段名FROM TCKH3INNER JOIN TCKH1 ON TCKH1~ELEHK TCKH3~ELEHKAND T…

JavaScript 比较 和 逻辑运算符

文章目录JavaScript 比较 和 逻辑运算符比较运算符如何使用逻辑运算符条件运算符JavaScript 比较 和 逻辑运算符 比较和逻辑运算符用于测试 true 或者 false。 比较运算符 比较运算符在逻辑语句中使用,以测定变量或值是否相等。 x5,下面的表格解释了比较…

笔记本电脑连接不上wifi怎么办?看下面4种方法

WIFI可以让我们的网络运行得更快,尤其是对于工作来说,它是不可或缺的。但是有时候,我们明明在笔记本电脑上看到WIFI,但就是连接不上,笔记本电脑连接不上wifi怎么办?方法主要有下面4个! 演示机型…

剖析valueOf方法,深入探究Integer缓存实现机制

一. 问题展现我们在面试的时候,面试官经常会给面试者洒出一些迷雾,用来迷惑面试者,这时往往就需要面试者掌握底层源码,才能对问题进行较好的回答。接下来壹哥就以Integer的缓存数组为例,通过分析其源码来教会大家该如何…

Linux串口测试例程

嵌入式Linux开发过程中,进行Linux串口测试,需要针对串口进行回环测试或者指定串口接收一定的数据或者指定串口发送一定的数据使用该测试用例很快验证硬件串口的稳定性和正确性。使用代码连接如下Linux串口测试例程,进行Linux串口测试&#xf…

爬虫逆向之字体反爬(二)、镀金的天空-字体反爬-2

趁热打铁来写字体反爬的第二篇,首先是题目 网页上显示的不是常规的数字,源码里面也是一些汉字 虽然看上去很乱,但是仔细观察还是能发现一些规律,比如:长 对应 2,思对应 1 所以这里的解题思路,也…

基于Python实现四大名著章节标注汉语拼音

起因很单纯,就是给我1年级小豆包的女儿标注三国和西游章节的汉语拼音,我女儿每天都朗读 ,结果有很多字不认识,我爱人居然让我给标记不认识的完了手动注音......我勒个去......身为程序员的我怎么能忘记用程序实现呢,特…

再次战胜人类:Meta AI推出首款可以忽悠人的AI模型

文|ShonaCicero,是Meta AI提出的能够在『强权外交』游戏中超越人类的AI模型。它凭借自己"忽悠"人的能力(模拟谈判与合作),成为游戏里的顶级高手。AI模型连外交这活儿都能得心应手了?没错&#xf…

【尚硅谷】Java数据结构与算法笔记07 - 排序算法

文章目录一、排序算法简介二、排序的分类三、冒泡排序3.1 基本介绍3.2 算法图解3.3 代码实现四、选择排序4.1 基本介绍4.2 思路分析4.3 算法图解4.4 代码实现五、插入排序5.1 基本介绍5.2 思路分析5.3 算法图解5.4 代码实现六、希尔排序6.1 简单插入排序存在的问题6.2 基本介绍…

知识点查漏补缺

目录谷粒商城知识点补充前言1 java8新特性之lambda表达式1.1 为什么使用1.2 从匿名类到Lambda的转换1.3 语法总结2 Stream API2.1 概述2.2 创建2.2.1 通过集合2.2.2 通过数组2.2.3 通过Stream的of()2.2.4 创建无限流2.3 中间操作2.3.1 筛选与切片1)、filter2)、limit3)、skip(n…

【数据结构】—— Java实现队列和循环队列

队列与循环队列一、队列1.概念2.队列的使用3.队列的模拟实现二、循环队列1.基本概念2.代码实现一、队列 1.概念 队列:是允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出的(First In First Out)的…

商场楼层分布图用什么软件做,高效、便捷的商场二三维地图绘制平台

现在的很多大型购物商场占地面积较大,商品种类繁多,如果没有商场导航,会导致新顾客难以找到想要的店铺和商品,那么大型购物商场导航怎么实现呢?电子地图作为大家最喜闻乐见的高效应用形式,在商业应用中&…