HID 报告描述符生成工具说明
在前文 HID 报告描述符 中提到过 USB 官网提供的 HID 报告描述符生成工具,https://www.usb.org/document-library/hid-descriptor-tool 该工具提供以下功能:
- 创建新的 HID 报告描述符。
- 编辑已存在的 HID 报告描述符
- 验证描述符
- 导出不同格式 ( .hid、.dat、 .txt、.inc、.h)
通过本文你可以获取下面知识
- 使用 HID 报告描述符生成工具
- 增加 USAGE 内容
使用 链接到标题
该工具只能在 windows 上工作,下载后解压缩,双击 dt.exe 看到如下界面
创建报告描述符 链接到标题
在 dt.exe 的界面左侧 HID Items 栏中是一系列的 Item,通过双击需要的 Item 添加到右侧 Report Descriptor 中。添加过程中该工具会根据不同的 Item 让你选择或者填入值。以HID 报告描述符 一文为例
USAGE_PAGE ( Consumer Devices)
USAGE ( Consumer Control)
COLLECTION ( Application)
REPORT_ID ( 1)
LOGICAL_MINIMUM ( 0)
LOGICAL_MAXIMUM ( 1)
REPORT_SIZE ( 1)
REPORT_COUNT ( 1)
USAGE ( Play/Pause)
INPUT ( Data,Var,Abs)
USAGE ( Volume Up)
INPUT ( Data,Var,Abs)
USAGE ( Volume Down)
INPUT ( Data,Var,Abs)
USAGE ( Scan Next Track)
INPUT ( Data,Var,Abs)
USAGE ( Scan Previous Track)
INPUT ( Data,Var,Abs)
REPORT_COUNT ( 1)
REPORT_SIZE ( 3)
INPUT ( Cnst,Var,Abs)
END_COLLECTION
选择有代表性的进行说明: USAGE_PAGE ( Consumer Devices), 双击 USAGE_PAGE,在弹出的对话框中双击 Consumer Devices
USAGE ( Consumer Control), 双击 USAGE,在弹出的对话框中双击 Consumer Control dt.exe 会根据你最近一次的 USAGE PAGE 给出 PAGE ID,此时也可以点击 Change Page 按钮选择所需 USAGE_PAGE
COLLECTION ( Application), 双击 COLLECTION,在弹出的对话框中选中 Application 后点 OK
REPORT_ID ( 1), 双击 REPORT_ID,在弹出的对话框中输入 REPORT_ID 的值后点 OK. LOGICAL_MINIMUM, LOGICAL_MAXIMUM, REPORT_SIZE, REPORT_COUNT 这些都一样,通过填值完成。
INPUT ( Data,Var,Abs),双击 INPUT,在弹出的对话框中对不同的 bit 进行选择配置,完成后点 OK
END_COLLECTION, 不存在可选数据,直接双击 END_COLLECTION 即可完成 按照上面的方法将所有的 Item 加完后的结果如下:
校验 链接到标题
点击 Parser Descriptor 就会显示解析的结果 如果描述符有错,会给予提示,例如把例子中的 END_COLLECTION 去掉,再进行校验就会有如下提示:
编辑 链接到标题
通过 File->Open 打开已存在的。hid 文件,然后在 Report Discriptor 中进行编辑。注意该软件只能打开。hid 文件
- 修改:双击要修改的 Item,在弹出的对话框中修改值
- 删除:选中要删除的 Item,按键盘的 Delete 按建
- 插入:选中要插入条目的位置,再双击左侧 HID Items 栏位中想要插入的 Item。注意插入的位置是选中条目的前面。
- 复制:选中要复制的 Item,做 Ctrl+C
- 粘贴:选中要插入条目的位置,做 Ctrl+V。注意粘贴的位置是选中条目的前面。
保存和导出 链接到标题
不同的情况的处理方式如下:
- 新建的报告描述符: 只能通过 File->Save As 保存为 hid,将来可以再次打开编辑
- 被打开的 hid 文件:修改后通过 File->Save 保存
- 导出文件:通过 File->Save As,按照需要选择要保存的格式
增加 Usage 内容 链接到标题
该工具从官网的信息看是 2001 年发布的,已经非常"老"了, 这导致后面更新的 USB hud Spec 描述的 Usage 通过该软件无法加入,不过该软件做了很好的扩展,可以对其进行修改。
增加 Usage ID 链接到标题
在我创建 consumer 设备时,要加入 USAGE ( Play/Pause) ,发现工具中无该选项,通过下面方式进行添加: 在 hut 中查找 Play/Pause 的 Usage ID,可以知道 Usage ID=CC 对应的是 Play/Pause 在 dt.exe 所在的目录下打开 consume.upg, 可以看到老的 spec 中 CC-DF 都是保留字段
CA Tracking Increment
CB Tracking Decrement
CC-DF Reserved
E0 Volume
E1 Balance
将下面内容加入到该文件,重开 dt.exe 就可以看到 USAGE ( Play/Pause) 了
CA Tracking Increment
CB Tracking Decrement
CC Stop/Eject
CD Play/Pause
CE Play/Skip
CF Voice Command
D0-DF Reserved
E0 Volume
注意 Page ID 和描述之间是 Tab,用空格将无法显示在软件中
增加 Usage Page 链接到标题
如果你需要有自定义的 Usage Page,可以通过添加。upg 文件来完成,例如我要增加一个 Frank Device 的 Usage Page, Usage Page 值为 65281,方法如下:
修改 dt.ini 文件,最后增加一项 UP21=65281,Frank Device,frank.upg
,将 Count 总数从 21 变成 22
[UsagePages]
Count=22
UP0=01,Generic Desktop,desktop.upg
UP1=02,Simulation Controls,sim.upg
UP2=03,VR Controls,vr.upg
UP3=04,Sports Controls,sports.upg
UP4=05,Gaming Controls,gaming.upg
UP5=07,Keyboard,kbd.upg
UP6=08,LEDs,leds.upg
UP7=09,Button,button.upg
UP8=10,Ordinals,ordinal.upg
UP9=11,Telephony Devices,tele.upg
UP10=12,Consumer Devices,consume.upg
UP11=13,Digitizers,digit.upg
UP12=16,Unicode,unicode.upg
UP13=20,Alphnumeric Display,andisp.upg
UP14=128,Monitor,monitor.upg
UP15=129,Monitor Enumerated Values,mon_enum.upg
UP16=130,VESA Virtual Controls,VESAVC.upg
UP17=131,VESA Command,VESACmnd.upg
UP18=132,Power Device,pwrdev.upg
UP19=133,Battery System,batsys.upg
UP20=65280,Vendor Defined Page 1,vendor1.upg
UP21=65281,Frank Device,frank.upg
增加 frank.upg 文件,该 Usage Page 下有 Run/Skip/Stop 三个 Usage,内容如下:
Frank Device
NORMAL
00 Run
01 Skip
02 Stop
03-FFFF Reserved
注意 frank.upg 中第一行的内容 Frank Device,一定要和 ini 文件中的一致。 添加完后重开 dt.exe 就可以选择新添加的 USAGE_PAGE 和 USAGE 了: