在這理整理一下基本 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 */

參考資料:

猛哥的軌跡: 簡單講講USB

Device Class Definition for HID - USB.org

HID Usage Tables 1.12 - USB.org

Tutorial about USB HID Report Descriptor

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

  1. USB HID Report Descriptor 报告描述符详解

    Report descriptors are composed of pieces of information. Each piece of information is called an Ite ...

  2. (USB HID) Configuration Descriptor

    最近完成了HID的基本收發,使用的配置用了2個Endpoint,把一些特別重要要的地方紀錄下來 整個Configuration 分成4大部分 : 1. Configuration 2. Interfa ...

  3. 浅析USB HID ReportDesc (HID报告描述符)

    在USB中,USB Host是通过各种描述符来识别识别设备的,一般在设备枚举的过程将会获取有设备描述符/配置描述符/接口描述符/端点描述符/字符串描述符等 现在我们来介绍一下HID ReportDes ...

  4. (USB HID) In/Out Report 收發 Function

    在紀錄 In/Out Report 收發之前先來看一下一個struct typedef struct _Device_cb { uint8_t (*Init) (void *pdev , uint8_ ...

  5. USB HID介绍【转】

    本文转载自:http://blog.csdn.net/leo_wonty/article/details/6721214 HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复 ...

  6. USB HID 协议入门

    转载请注明来源:cuixiaolei的技术博客 USB HID设备类的应用场合 USB HID类是USB设备的一个标准设备类,包括的设备非常多.HID类设备定义它属于人机交互操作的设备,用于控制计算机 ...

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

    在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等.USB报告描述符(Report Descriptor)是HID ...

  8. USB HID介绍

    HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB协议的相关内容. USB设备描述符-概述 当插入USB设备后,主机会向设备请求各种描述符来识别设备.那什么是设 ...

  9. USB HID复合设备实例—键盘+鼠标

    实现这种USB HID复合设备有两种方法,在<USB HID协议入门>一节已经讲到其中一种方法,说一个USB HID设备可以包含多种功能的报告描述符合集,这样可以实现复合设备,如带鼠标功能 ...

随机推荐

  1. 跨版本mysqldump恢复报错Errno1449

    已经有一套主从mysql,新增两个slave主库Server version: 5.6.22-log MySQL Community Server (GPL)旧从库Server version: 5. ...

  2. Bigtable:一个分布式的结构化数据存储系统

    Bigtable:一个分布式的结构化数据存储系统 摘要 Bigtable是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB级的数据.Google的很多项目将 ...

  3. vs2015发布网站至azure web应用服务

    进入www.azure.cn管理门户 1,左下角新建web应用,实例如下,url设置为demo(有防止重名判断) 2,进入demo配置页(左侧web应用下点击demo) 3,demo首页,下载配置文件 ...

  4. kcp源码segment头文件各字段含义

    conv conv为一个表示会话编号的整数,和tcp的 conv一样,通信双// 方需保证 conv相同,相互的数据包才能够被认可 cmd             cmd用来区分分片的作用.IKCP_ ...

  5. Linux CentOS 7 安装confluence 5.8.10

    一..需要下载的安装包如下 1.atlassian-confluence-5.8.10-x64.bin #confluence安装包 2.confluence5.x-crack.zip #conflu ...

  6. post上传文件限制--另一种解决途径

    问题:项目之前的上传功能是没有问题的,但是今天同样的代码上传一个压缩包的时候出现了问题,报的是struts.xml的错,说是找不到返回的映射, 问题截图: 很奇怪的问题,之前都没问题的,仔细对比后发现 ...

  7. 【微服务架构】SpringCloud之Eureka(注册中心集群篇)(三)

    上一篇讲解了spring注册中心(eureka),但是存在一个单点故障的问题,一个注册中心远远无法满足实际的生产环境,那么我们需要多个注册中心进行集群,达到真正的高可用.今天我们实战来搭建一个Eure ...

  8. day 21 01 序列化模块和模块的导入的复习以及包的初识

    day 21 01 序列化和模块的导入的复习以及包的初识 1.序列化模块 什么是序列化模块:数据类型转化成字符串的过程就是序列卷 为什么要使用序列化模块:为了方便存储和网络传输 三种序列化模块: (1 ...

  9. 使用Razor视图引擎来生成邮件内容

    邮件的内容其实是就HTML,传统的做法都是通过在程序中拼接字符串来生成邮件的内容,生成困难,维护也困难.Razor是MVC里面使用的视图引擎,用来生成HTML非常方便,ZKEACMS中就是使用了Raz ...

  10. 为微软ContosoUniversity例子加上学生自选课程计划

    把ContosoUniversity例子过了一遍,好象还是有很多东西未能理解,决定自己随便加个功能看可以自己完成不.... 从github的例子中clone下来ContosoUniversity项目, ...