(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,內容如下 :
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1)
0x09, 0x01, // USAGE (Vendor Usage 1)
0xa1, 0x01, // COLLECTION (Application)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0x00, 0xff, // LOGICAL_MAXIMUM (255)
0x85, 0x01, // REPORT_ID (1)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x3f, // REPORT_COUNT (63)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x91, 0x00, // OUTPUT (Data,Ary,Abs)
0x85, 0x02, // REPORT_ID (2)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x08, // REPORT_COUNT (8)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x81, 0x00, // INPUT (Data,Ary,Abs)
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 的功能
以下是我實驗時配置的Report Descripot
__ALIGN_BEGIN static uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] __ALIGN_END =
{
0x06, 0x00, 0xFF, // USAGE PAGE
0x09, 0x01, // USAGE (Vendor Usage 1)
0xa1, 0x01, // COLLECTION (Application)
/* 7 */
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0xff, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
/* 13 */
0x85, 0x01, // REPORT_ID (1). This defines input to STM32 (received from host)
0x95, USB_HID_RECEIVE_FRAME_SIZE - , // REPORT_COUNT (63)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x91, 0x02, // OUTPUT (Data,Var,Abs) (note: output from host)
/* 21 */
0x85, 0x02, // REPORT_ID (2). This defines output from STM32 (sent to host)
0x95, USB_HID_SEND_FRAME_SIZE-, // REPORT_COUNT (63)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x81, 0x02, // INPUT (Data,Var,Abs) (note: input to host)
/* 29 */
0xc0 // END_COLLECTION
}; /* CustomHID_ReportDescriptor */
參考資料:
Device Class Definition for HID - USB.org
HID Usage Tables 1.12 - USB.org
Tutorial about USB HID Report Descriptor
(USB HID) Report Descriptor 理解的更多相关文章
- USB HID Report Descriptor 报告描述符详解
Report descriptors are composed of pieces of information. Each piece of information is called an Ite ...
- (USB HID) Configuration Descriptor
最近完成了HID的基本收發,使用的配置用了2個Endpoint,把一些特別重要要的地方紀錄下來 整個Configuration 分成4大部分 : 1. Configuration 2. Interfa ...
- 浅析USB HID ReportDesc (HID报告描述符)
在USB中,USB Host是通过各种描述符来识别识别设备的,一般在设备枚举的过程将会获取有设备描述符/配置描述符/接口描述符/端点描述符/字符串描述符等 现在我们来介绍一下HID ReportDes ...
- (USB HID) In/Out Report 收發 Function
在紀錄 In/Out Report 收發之前先來看一下一個struct typedef struct _Device_cb { uint8_t (*Init) (void *pdev , uint8_ ...
- USB HID介绍【转】
本文转载自:http://blog.csdn.net/leo_wonty/article/details/6721214 HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复 ...
- USB HID 协议入门
转载请注明来源:cuixiaolei的技术博客 USB HID设备类的应用场合 USB HID类是USB设备的一个标准设备类,包括的设备非常多.HID类设备定义它属于人机交互操作的设备,用于控制计算机 ...
- USB HID报告及报告描述符简介
在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等.USB报告描述符(Report Descriptor)是HID ...
- USB HID介绍
HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB协议的相关内容. USB设备描述符-概述 当插入USB设备后,主机会向设备请求各种描述符来识别设备.那什么是设 ...
- USB HID复合设备实例—键盘+鼠标
实现这种USB HID复合设备有两种方法,在<USB HID协议入门>一节已经讲到其中一种方法,说一个USB HID设备可以包含多种功能的报告描述符合集,这样可以实现复合设备,如带鼠标功能 ...
随机推荐
- 跨版本mysqldump恢复报错Errno1449
已经有一套主从mysql,新增两个slave主库Server version: 5.6.22-log MySQL Community Server (GPL)旧从库Server version: 5. ...
- Bigtable:一个分布式的结构化数据存储系统
Bigtable:一个分布式的结构化数据存储系统 摘要 Bigtable是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB级的数据.Google的很多项目将 ...
- vs2015发布网站至azure web应用服务
进入www.azure.cn管理门户 1,左下角新建web应用,实例如下,url设置为demo(有防止重名判断) 2,进入demo配置页(左侧web应用下点击demo) 3,demo首页,下载配置文件 ...
- kcp源码segment头文件各字段含义
conv conv为一个表示会话编号的整数,和tcp的 conv一样,通信双// 方需保证 conv相同,相互的数据包才能够被认可 cmd cmd用来区分分片的作用.IKCP_ ...
- Linux CentOS 7 安装confluence 5.8.10
一..需要下载的安装包如下 1.atlassian-confluence-5.8.10-x64.bin #confluence安装包 2.confluence5.x-crack.zip #conflu ...
- post上传文件限制--另一种解决途径
问题:项目之前的上传功能是没有问题的,但是今天同样的代码上传一个压缩包的时候出现了问题,报的是struts.xml的错,说是找不到返回的映射, 问题截图: 很奇怪的问题,之前都没问题的,仔细对比后发现 ...
- 【微服务架构】SpringCloud之Eureka(注册中心集群篇)(三)
上一篇讲解了spring注册中心(eureka),但是存在一个单点故障的问题,一个注册中心远远无法满足实际的生产环境,那么我们需要多个注册中心进行集群,达到真正的高可用.今天我们实战来搭建一个Eure ...
- day 21 01 序列化模块和模块的导入的复习以及包的初识
day 21 01 序列化和模块的导入的复习以及包的初识 1.序列化模块 什么是序列化模块:数据类型转化成字符串的过程就是序列卷 为什么要使用序列化模块:为了方便存储和网络传输 三种序列化模块: (1 ...
- 使用Razor视图引擎来生成邮件内容
邮件的内容其实是就HTML,传统的做法都是通过在程序中拼接字符串来生成邮件的内容,生成困难,维护也困难.Razor是MVC里面使用的视图引擎,用来生成HTML非常方便,ZKEACMS中就是使用了Raz ...
- 为微软ContosoUniversity例子加上学生自选课程计划
把ContosoUniversity例子过了一遍,好象还是有很多东西未能理解,决定自己随便加个功能看可以自己完成不.... 从github的例子中clone下来ContosoUniversity项目, ...