(USB HID) Report Descriptor 理解

在這理整理一下基本 Report Descriptor 對於入門基礎的了解。

在很多文件、Blog都有提到HID report 總共分為3種 Input、Output、Feature reports。

在這些 In/Out 方向提的是Host的方向(PC),則 Feature是雙向傳輸的。

USB的網站找得到一隻小工具主要是幫忙編輯USB HID Report Descriptor用的

如果少了這隻Tool,做為一個USB HID開發的工程師就必須去HID Usage Tables查表填對應的代碼

寫 report descriptor,這是一件很累的事情所以有了他可以減少很多查表的時間

上圖是我一邊理解一邊編輯的report,利用tool另存一個Report descriptor head file,內容如下 :

 1 0x06, 0x00, 0xff,              // USAGE_PAGE (Vendor Defined Page 1)
 2 0x09, 0x01,                    // USAGE (Vendor Usage 1)
 3 0xa1, 0x01,                    // COLLECTION (Application)
 4 0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
 5 0x26, 0x00, 0xff,              //   LOGICAL_MAXIMUM (255)
 6 0x85, 0x01,                    //   REPORT_ID (1)
 7 0x75, 0x08,                    //   REPORT_SIZE (8)
 8 0x95, 0x3f,                    //   REPORT_COUNT (63)
 9 0x09, 0x01,                    //   USAGE (Vendor Usage 1)
10 0x91, 0x00,                    //   OUTPUT (Data,Ary,Abs)
11 0x85, 0x02,                    //   REPORT_ID (2)
12 0x75, 0x08,                    //   REPORT_SIZE (8)
13 0x95, 0x08,                    //   REPORT_COUNT (8)
14 0x09, 0x01,                    //   USAGE (Vendor Usage 1)
15 0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
16 0xc0                           // END_COLLECTION

這個report我僅定義了in/out report 但我的目的是可以做到雙向傳輸,所以實際使用上我還會加上一個Feature Report

理解整個組成,把想要的Report 定義宣告好最後在用一個USAGE_PAGE/USAGE/COLLECTION/COLLECTION_END包起來

USAGE_PAGE (Generic Desktop)
USAGE (Keyboard)
COLLECTION (Application)
  ... 把我們已經寫好的東西放在這
END_COLLECTION

LOGIC_MIN/LOGIC_MAX顧名思義就是Report接收的資料範圍

REPORT_SIZE 我的理解,單位是bit

REPORT_COUNT 單位是次數

所以對於這個Report描述,能做的事情是可以 In/Out 8Bytes 的功能

參考資料:

猛哥的軌跡: 簡單講講USB

Device Class Definition for HID - USB.org

HID Usage Tables 1.12 - USB.org

Tutorial about USB HID Report Descriptor

原文地址:https://www.cnblogs.com/ollie-lin/p/10188001.html

时间: 2024-10-31 13:02:49

(USB HID) Report Descriptor 理解的相关文章

USB HID Report Descriptor 报告描述符详解

Report descriptors are composed of pieces of information. Each piece of information is called an Item.报告描述符由一些数据片组成.这些数据片被叫做Item.All items have a one-byte prefix that contains the item tag, item type, and item size. 每一个Item都包含一个字节的前缀,这个前缀中包含了三个信息--it

(USB HID) In/Out Report 收發 Function

在紀錄 In/Out Report 收發之前先來看一下一個struct 1 typedef struct _Device_cb 2 { 3 uint8_t (*Init) (void *pdev , uint8_t cfgidx); 4 uint8_t (*DeInit) (void *pdev , uint8_t cfgidx); 5 /* Control Endpoints*/ 6 uint8_t (*Setup) (void *pdev , USB_SETUP_REQ *req); 7 u

转 关于USB HID报告描述符

原文地址 USB HID报告及报告描述符简介 在USB中,USBHOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等.USB报 告描述符(ReportDescriptor)是HID设备中的一个描述符,它是比较复杂的一个描述符.USBHID设备是通过报告来给传送数据的,报告 有输入报告和输出报告.输入报告是USB设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等:输出 报告是主机发送在

[BLE--HID]USB HID设备类定义

简述 HID设备,即人机交互设备,常见的有鼠标,键盘,游戏手柄,等等.一般有线方式都是通过USB连线连接到机器设备,作为用户输入设备.在蓝牙技术中,HID设备的接入就是无线的了.不过HID的相关定义当然还是一样的,不然设备驱动,兼容等问题都会有很多麻烦了.蓝牙中有HID, HOGP profile,但是只是在蓝牙数据通信上做的规范,HID具体含义相关,还是需要看USB相关的HID文档. USB设备类? USB设备可以在启动时,或者是在之后的连接状态下,都能够被主机进行配置.USB设备种类是非常多

USB HID报告及报告描述符简介

在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等.USB报告描述符(Report Descriptor)是HID设备中的一个描述符,它是比较复杂的一个描述符.        USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告.输入报告是USB设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等:输出报告是主机发送给USB设备的,例如键盘上的数字

USB HID usage table

This usage table lets usbhidctl decode the HID data correctly for the APC RS/XS1000's. This work was obtained from [email protected] Sample output is available both with and without the table. Note that the default /usr/share/misc/usb_hid_usages alre

(USB HID) VC++ 使用 SetupAPI 操作 USB HID Device

在VC裡頭使用 Api必須include 跟加入 lib,加入之後就可以在VC裡頭任意使用api了 暫時先貼上程式碼...等待有空時候在更新說明 1 extern "C" 2 { 3 #include <hidsdi.h> 4 #include <SetupAPI.h> 5 } Dialog head file 1 // CUsbHidDlg dialog 2 class CUsbHidDlg : public CDialogEx 3 { 4 // Constr

stm32 USB hid设备与PC进行双向数据传输时PC不识别USB设备

stm32 USB hid设备与PC进行双向数据传输时PC不识别USB设备,或者开始时识别,拔出后再插入就没有反应了,就连鼠标U盘也没有反应. 我的问题是,我安装了VMware虚拟机,并进行USB设备的分配,使得虚拟机系统也识别USB设备. 所以,解决问题的办法如下: 在<属性>中选择禁用. 然后把下面的VMware Workstation Server 也禁用了.重启电脑就OK了.

USB HID描述符【转】

本文转载自: USB是个通用的总线,端口都是统一的.但是USB设备却各种各样,例如USB鼠标,USB键盘,U盘等等,那么USB主机是如何识别出不同的设备的呢?这就要依赖于描述符了.USB的描述符主要有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,HID描述符,报告描述符等等.关于报告描述符,请看我以前写的:<USB HID报告及报告描述符简介 > http://group.ednchina.com/93/198.aspx.一个USB设备有一个设备描述符,设备描述符里面决定了该设