浅析USB HID ReportDesc (HID报告描述符) 在USB中,USB Host是通过各种描述符来识别识别设备的,一般在设备枚举的过程将会获取有设备描述符/配置描述符/接口描述符/端点描述符/字符串描述符等 现在我们来介绍一下HID ReportDesc. 我们看一下在其内容为 我们先来使用HID Descriptor Tool来生成上面的数据 小结 USAGE_...
其中Reprot Size 用来描述某个数据域有多少个位;Report Count用来描述这样的数据域有多少个;Logical Minimum和Logical Maximum用来描述数据域的取值范围。 举一例,如果是鼠标的3个按键,每个按键占用一个一位的字段,则Report Size(1),Report Count(3); 那么这个报告长度为3个位,可以同时呈现出3个按键的状态。 Logica...
我们把一个HID的报告描述符比喻成一个公司,那么Collection就是一个部门,部门可以嵌套部门,部门里面有很多人,这里的人就是描述符中的Report,而Usage就是这个人身上的技能。对于单独的report,可以认为他就是一个光杆司令。 鼠标的报告描述符 uint8_t report_desc[] ={0x05, 0x01, //USAGE_PAGE (Generic Desktop...
框架上采用 PICO SDK + FreeRTOS,USB协议栈采用 tinyusb。 1. HID,在HID描述符中添加 TUD_HID_REPORT_DESC_GENERIC_INOUT 作为文件传输通道,描述配置轮询间隔为1ms,如下: uint8_t const desc_hid_report[]={TUD_HID_REPORT_DESC_KEYBOARD(HID_REPORT_ID(REPORT_ID_KEYBOARD)),TUD_HID_REPORT_DESC_MOUSE(HI...
在Interface desc 层,就对 HID desc 有指定。除了HID的三个特定描述符组成对HID设备的解释外,5个标准描述符中与HID设备有关的部分有: 设备描述符中:bDeviceClass, bDeviceSubClass, bDeviceProtocol三个值必须为 0 接口描述符中:bInterfaceClass的值必须是 0x03,bInterfaceSubClass的值为 0 或 1,为1表示HID设...
类别描述符数目(至少有一个报表描述符)*/0x22,/* bDescriptorType 报告描述符 */CUSTOMHID_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor 报告描述符大小 */0x00,/* 标志类别描述符说明结束 */// 端点1描述符///*** Descriptor of Custom HID endpoints ***//* 27 */0x07...
游戏垫有一个HID报告,描述为描述符中的inreport_desc_HID0变量。请注意,如果此报表结构发生了变化,则需要在描述符中更新以下长度的-#define report_desc_size_HID0。描述符.c文件中当前的描述符是:Usage(USB_HID_JOYSTICK), Collection(USB_HID_APPLICATI ...
macOS 10.0+Mac Catalyst 13.0+ typedefstructIOUSBHIDReportDesc { ... }IOUSBHIDReportDesc; Overview USB HID Report Descriptor header. See the USB HID Specification athttp://www.usb.org. (This structure should have used the #pragma pack(1) compiler directive to get byte alignment. ...
HID_Report_desc_ta 20、ble: db 06h, AOh, FFh db 09h, A5h db A1h, 01h db 09H, A6h;Usage Page(Vendor defined) ;Usage(Vendor Defined);Collection(Application);Usage(Vendor defined)定义设备功能 定义用法 开一个集合 定义用法db 09h, A7h;输入报表;Usgae(Vendor defined)定义用法db 15h, ...
if (!(rdesc = kmalloc(rsize, GFP_KERNEL))) { dbg_hid("couldn't allocate rdesc memory\n"); return NULL; } //Set idle_time = 0 hid_set_idle(dev, interface->desc.bInterfaceNumber, 0, 0); //Get Report_Descriptors if ((n = hid_get_class_descriptor(dev, interface->desc.bInterf...