USB HID设备类驱动详解:描述符、请求与驱动程序
4星 · 超过85%的资源 需积分: 9 94 浏览量
更新于2024-08-02
2
收藏 317KB DOC 举报
"HID设备类驱动程序"
HID(Human Interface Device)设备类驱动程序是针对需要直接与用户交互的USB设备,如键盘、鼠标、游戏控制器等设计的。HID设备可以是低速或全速设备,它们通过中断IN传输向主机发送数据。HID设备的类代码为0x03,子类代码为0x01,有0x01和0x02两种协议代码。
HID设备的特点主要包括:
1. 拥有一个控制端点,用于处理11种标准USB设备请求和6种HID设备类请求,控制端点数据传输量小且对时间要求不严格。
2. 至少有一个中断IN端点,用于向主机发送数据。
3. 中断OUT端点是可选的,可以通过控制传输的SetReport请求发送报告,传递少量数据。
4. 数据传输的端点配置如图所示,显示了不同类型的端点在HID设备中的应用。
HID设备支持的端点类型决定了其特定功能:
1. 适合传输少量到中量的数据,数据包大小根据设备速度限制(全速:64字节,低速:8字节,高速:1024字节)。
2. 数据传输具有突发性,主机需定期查询获取设备数据。
3. 速率受限,如全速设备最低1ms服务周期,最高速度64KB/s,高速设备最低125μs服务周期,最高速度24.576MB/s。
4. 无固定的传输速率。
5. 交换数据存储在报告结构中,设备必须遵循HID报告格式。
HID设备的识别主要依赖于设备的描述符,包括HID描述符、报表描述符和物理描述符:
- HID描述符定义了设备的基本信息,如版本号、最大报告长度等。
- 报表描述符详细描述了设备可能发送和接收的报告结构,包括main、global和local项目。
- Main项目包含输入、输出和Feature报告的定义。
- Global项目设置范围和单位,如逻辑最小值、最大值、物理最小值和最大值。
- Local项目定义特定输入、输出和特征项。
- 物理描述符则描述了设备的物理特性,如按钮的尺寸、位置等。
- 以标准键盘描述符为例,会包含按键布局、功能键等信息。
HID设备类请求包括GETREPORT、SETREPORT、GETIDLE、SETIDLE、GETPROTOCOL和SETPROTOCOL:
1. GETREPORT请求用于从设备获取报告。
2. SETREPORT请求用于向设备发送报告。
3. GETIDLE请求获取设备当前的空闲状态设置。
4. SETIDLE请求设置设备在没有数据发送时的等待时间。
5. GETPROTOCOL请求获取设备当前的工作协议。
6. SETPROTOCOL请求改变设备的工作协议。
HID设备驱动程序的层次关系通常包括:
1. 用户模式下的应用程序,它们通过系统提供的API与设备交互。
2. 用户模式下的驱动程序库,提供高层接口供应用程序调用。
3. 内核模式下的驱动程序,负责实际的I/O操作和硬件通信。
程序的关键回调函数部分可能包括:
- 设备初始化和枚举过程中的回调,例如设备连接和断开时的处理。
- 数据传输相关的回调,如中断IN端点的数据接收和发送。
- 用户请求处理的回调,实现GETREPORT、SETREPORT等请求的响应。
理解和开发HID设备类驱动程序涉及对USB协议、HID规范、设备描述符和驱动模型的深入理解,以及编写能够有效管理设备交互的代码。
2018-03-07 上传
2013-03-02 上传
2009-06-10 上传
2014-08-13 上传
2012-03-10 上传
2017-03-14 上传
306 浏览量
wangtingguang
- 粉丝: 121
- 资源: 10
最新资源
- 掌握Jive for Android SDK:示例应用的使用指南
- Python中的贝叶斯建模与概率编程指南
- 自动化NBA球员统计分析与电子邮件报告工具
- 下载安卓购物经理带源代码完整项目
- 图片压缩包中的内容解密
- C++基础教程视频-数据类型与运算符详解
- 探索Java中的曼德布罗图形绘制
- VTK9.3.0 64位SDK包发布,图像处理开发利器
- 自导向运载平台的行业设计方案解读
- 自定义 Datadog 代理检查:Python 实现与应用
- 基于Python实现的商品推荐系统源码与项目说明
- PMing繁体版字体下载,设计师必备素材
- 软件工程餐厅项目存储库:Java语言实践
- 康佳LED55R6000U电视机固件升级指南
- Sublime Text状态栏插件:ShowOpenFiles功能详解
- 一站式部署thinksns社交系统,小白轻松上手