近期因为在尝试用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() |
首先定义一个用例页: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)
如此一来应该就正常了。由于后续开发较多,这个帖子就暂时写到这里。其实总结起来的话,找一份前辈的描述符数组自己稍加分析就可以理解了。