关于USB HID的一些粗浅见解和备忘

近期因为在尝试用STM32的USB功能,实现一个手柄。初步了解了一些USB HID协议的内容,发现其主要内涵在于设备的报告描述符,对于标签网上盛传的一个表格如下

主标签项目 全域标签项目 区域标签项目
标签 代码 标签 代码 标签 代码
Input(向主机输入) 0x8? Usage Page(用例页定义) Usage(用例定义) 0x0?
Output(从主机输出) 0x9? Logical Minimum(逻辑最小) Usage Minimum(用例下限) 0x1?
Logical Maxium(逻辑最大) Usage Maximum(用例上限) 0x2?
Feature(功能信息) 0x0b? Physical Minimum(物理最小) Designator Index(指示器索引) 0x3?
Physical Maximum(物理最大) Designator Minimum(指示器下限) 0x4?
Unit Exponent() Designator Maximum(指示器上限) 0x5?
Unit() String() 0x7?
Report Size() Sreing Minimum() 0x8?
Report ID() String Maximum() 0x9?
Report Coumt() Delimiter() 0xa?
Collection(集合开始) 0xa1 Push()
EndCollection(集合结束) 0xc0 Pop()
这些定义要怎么使用呢?这里介绍个工具HID Descriptor Tool 可以快速生成一个描述文档(自行百度搜索 ) 在我的应用里,计划实现的是三个矢量轴,和10个按钮

首先定义一个用例页:USAGE_PAGE:generic Desktop 表明设备是通用型设备
然后将用途选择为GamePad(另一个选择为JoyStick,实现起来貌似也没有什么问题)
接着创建一个集合,类型定义为Application表明这是一系列子集合构成的控制集合,
注意:集合是一个有头有尾类似括号的东西,结尾可能会忘记的话,就现在把End Collection准备出来

#目前的伪代码:
USAGE_PAGE(Generic Desktop)
USAGE(Game Pad)
Collection(Application)
...
End Collection

现在我们由易到难,由于摇杆部分是一个控制量输出的设备,感官上配置起来会比较复杂一些,因此先从按钮开始
首先是一个Usage,Application下可以使用的混合型用例比较多,按钮的话,我这里选择用BUTTON类来实现,由于我准备定义10个按钮,因此定义的内容

USAGE_PAGE(Button)
USAGE_MINIMUM(1)
USAGE_MAXIUM(10)

如此一来应该就正常了。由于后续开发较多,这个帖子就暂时写到这里。其实总结起来的话,找一份前辈的描述符数组自己稍加分析就可以理解了。

你可能感兴趣的:(玩转嵌入式)