版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第15章HID协议
何宾2023.10HID类设备简介
HID(HumanInterfaceDevice)类主要由人类用来控制计算机系统操作的设备组成HID类设备的典型示例包括键盘和指针设备:标准鼠标设备、跟踪球和操纵杆。面板控制:旋钮、开关、按钮和滑块。电话、VCR遥控器、游戏或模拟设备等设备上的控件:数据手套、油门、方向盘和方向舵踏板。某些HID类设备可能不需要人工交互,但可以提供HID类似的格式数据的设备:条形码阅读器、温度计或电压表。许多典型的HID类设备包括指示器、专用显示器、音频反馈以及力或触觉反馈。因此,HID类定义包括对针对最终用户的各种类型的输出的支持。设备范围HID类设备简介
--HID规范的意义尽量节省设备的数据空间。允许软件应用程序跳过未知信息。可扩展且鲁棒。支持嵌套和集合。自我描述以允许通用软件应用程序。主机请求
--标准请求虽然在之前的课时已经学习过了标准描述符相关的内容,但在HID类设备中,主机针对此类设备发出的请求会与之前的学习过的标准请求有所区别。主要体现区别的请求为:GetDescriptorSetDescriptor
主机请求
--标准请求HID类使用USB标准请求GetDescriptor,如USB规范中所述。当发出GetDescriptor(Configuration)请求时,它返回每个接口的配置描述符、所有接口描述符、所有端点描述符和HID描述符。注意:(1)使用GetDescriptor请求时点它不应返回字符串描述符、HID报告描述符或其他可选的HID类描述符。(2)GetDescriptor请求可用于检索标准、类别和供应商具体描述符。
主机请求
--标准请求使用GetDescriptor请求获取设备的描述符的顺序顺序应为:配置描述符接口描述符HID描述符端点描述符端点描述符指定HID类与接口描述符关联用于HID中断端点(IN端点)用于HID中断OUT端点(可选)12345主机请求
--标准请求GetDescriptor在标准请求与HID请求中数据结构的区别如下表:字段USB标准描述符HID类描述符bmRequestType100xxxxx10000001bRequestGET_DESCRIPTOR(0x06)GET_DESCRIPTOR(0x06)wValue描述符类型一节描述符索引描述符类型一节描述符索引wIndex0或者语言ID接口号wLength描述符长度描述符长度Data描述符描述符主机请求
--标准请求SetDescriptor在标准请求与HID请求中数据结构的区别如下表:字段USB标准描述符HID类描述符bmRequestType100xxxxx10000001bRequestSET_DESCRIPTOR(0x07)SET_DESCRIPTOR(0x07)wValue描述符类型一节描述符索引描述符类型一节描述符索引wIndex0或者语言ID接口号wLength描述符长度描述符长度Data描述符描述符主机请求
--标准请求SetDescriptor请求允许主机更改设备中的描述符。设备对该请求的支持是可选的。程序中如果设备收到这一个请求,直接进入挂起操作。主机请求
--类特定请求此部分请求特定于HID类设备,请求允许主机查询设备的功能和状态,并设置输出和功能项的状态。这些事务(交易)通过控制管道完成,因此遵循USB规范中定义的控制管道中标准请求格式。主机请求
--类特定请求遵循USB规范中定义的控制管道中标准请求格式。因此类特定请求的一般格式:字段偏移(字节)说明bmRequestType0/1指定请求特征的位。有效值为10100001或00100001仅基于以下描述:7数据传输方向0=从主机到设备1=从设备到主机6..5类型1=类4..0接收对象1=接口主机请求
--类特定请求bRequest1/1详细的请求wValue2/2指定字长字段的数值表达式(根据请求变化而变化)wIndex4/2指定字长字段的索引或偏移量(根据请求变化而变化)wLength6/2指定在数据阶段传输的字节数字段偏移(字节)说明请求bRequest值功能GET_REPORT0x01请求允许主机通过控制管道接收报告SET_REPORT0x09请求允许主机向设备发送报告,以设置输入、输出或功能控件的状态GET_IDLE0x02请求读取特定输入报告的当前空闲率SET_IDLE0x0A请求屏蔽中断输入管道上的特定报告,直到新事件发生或经过指定的时间间隔GET_PROTOCOL0x03请求读取当前已激活的协议(例如引导协议或报告协议)SET_PROTOCOL0x0B切换引导协议或报告协议主机请求
--类特定请求类特定该请求的bRequest字段值决定了请求的类型注意:以上请求所有设备需要强制支持,以上请求仅启动引导类设备需要
类特定请求
--Get_Report请求
Get_Report请求允许主机通过控制管道接收报告。此请求在初始化绝对项和确定特征项的状态时很有用。此请求不用于定期轮询设备状态。中断IN管道应该用于重复的输入报告。输入报告回复与来自中断管道的报告具有相同的格式。可以选择将中断输出管道用于低延迟输出报告。如果未声明中断输出端点,则通过中断输出管道的输出报告具有与通过控制管道发送的输出报告相同的格式。bmRequestTypebRequestwValuewIndexwLength数据过程0xA1GET_REPORT报告类型和报告ID接口号报告大小报告类特定请求
--Set_Report请求Set_Report请求允许主机向设备发送报告,以设置输入、输出或控件功能。
bmRequestTypebRequestwValuewIndexwLength数据0x21SET_REPORT报告类型和报告ID接口号报告大小报告类特定请求
--Set_Report请求
备注:Set_Report请求的请求字段的含义与Get_Report请求相同,只是数据方向相反,报告数据是从主机发送到设备的。设备可能会选择忽略输入的Set_Report请求,因为它没有意义。或者,这些报告可用于重置控件的原点(即,当前位置应报告为零)。发送报告的效果还取决于收件者控件是绝对的还是相对的。类特定请求
--Get_Idle请求Get_Idle请求读取特定输入报告的当前空闲率bmRequestTypebRequestwValuewIndexwLength数据0x81GET_IDLE0和报告ID接口号1空闲速率类特定请求
--Set_Idle请求Set_Idle请求使中断输入管道上的特定报告被屏蔽,直到发生新事件或经过指定的时间量。bmRequestTypebRequestwValuewIndexwLength数据0x21SET_IDLE持续和报告ID接口号0无类特定请求
--Get_Protocol请求Get_Protocol请求读取当前处于活动状态的协议(引导协议或报告协议。)Boot子类中的设备支持此请求。wValue字段指示应该使用哪个协议。bmRequestTypebRequestwValuewIndexwLength数据0x81GET_PROTOCOL0接口号10=boot协议1=报告协议类特定请求
--Set_Protocol请求Set_Protocol在引导协议和报告协议之间切换(反之亦然)。BOOT子类中的设备支持此请求。wValue字段指示应该使用哪个协议。
初始化时,所有设备默认报告协议。然而,主机不应该对设备的状态做出假设,应该在初始化设备时设置所需的协议。bmRequestTypebRequestwValuewIndexwLength数据0x21SET_PROTOCOL0=Boot协议1=报告协议接口号0无
HID协议
--描述符有关USB设备的信息存储在其ROM的段中。这些段称为描述符。描述符分为HID标准描述符和类特定描述符。HID协议
--描述符HID类设备的描述符结构可由下图表示设备描述符配置描述符接口描述符端点描述符HID描述符报告描述符物理描述符HID类设备仅有一个配置,因此HID只能有一个配置描述符在这个描述符内定义了此设备为HID类设备标准描述符
--设备描述符
注意:设备描述符中的bDeviceClass和bDeviceSubClass字段不应用于将设备标识为属于HID类。标识设备是HID类是使用接口描述符中的bInterfaceClass和bInterfaceSubClass字段。标准描述符
--接口描述符
其余标准描述符内容如USB2.0规范所定义字段值解释bInterfaceClass3固定值bInterfaceSubClass10支持引导协议bInterfaceProtocol012无设备键盘设备鼠标设备bInterfaceProtocol字段有在bInterfaceSubClass字段声明设备支持启动接口时才有意义,否则为0。类特定描述符
每个设备类包含一类或多类特定的描述符。这些描述符区别于标准USB描述符。HID类设备使用以下特定类描述符:HID描述符(HID):HID描述符标识设备的从属描述符的长度和类型。报告描述符(Report):报告描述符是HID设备最重要的一个描述符,报告描述符重要的作用是描述在中断传输中的报告的格式。物理描述符(Physical):不做过多讲解类特定描述符
--HID描述符
HID描述符标识设备的从属描述符的长度和类型。字段偏移位/大小(字节)描述bLength0/1表示HID描述符总大小的数值表示。bDescriptorType1/1指定HID类型的常量名称描述符。bcdHID(版本)2/2标识HID类规范版本的数值表示。bCountryCode4/1识别本地化硬件的国家代码的数值表示。类特定描述符
--HID描述符
bDescriptorType6/1标识类描述符类型的常量名称。请参阅第7.1.2节:Set_Descriptor_Request以获取类描述符常量表。wDescriptorLength7/2表示报告描述符总大小的数值表式。[bDescriptorType]...9/1指定可选描述符类型的常量名称。[wDescriptorLength]...10/2表示可选描述符总大小的数值表式。bNumDescriptors5/1指定类描述符数量的数值表示总是至少一个,即报告描述符。)字段偏移位/大小(字节)描述类特定描述符
--报告描述符
报告描述符是HID设备最重要的一个描述符,报告描述符重要的作用是描述在中断传输中的报告的格式。对于初学者,仅仅需了解报告描述符的构成即可。要注意:报告描述符和报告是两个概念。类特定描述符
--报告描述符
报告描述符与其他描述符不同,因为它不仅仅是一个值表。报告描述符的长度和内容因设备报告所需的一个或多个报告所需的数据字段数而异。报告描述符由提供有关设备的信息的项目(item)组成。类特定描述符
--报告描述符(项目)
所有项目都包含一个1字节的前缀,表示项目的基本类型。HID类定义了项目的两种基本格式:短项目:总长度1–5个字节;用于最常见的项目。一个短项通常包含1或0个字节的可选数据。长项目:长度为3–258字节;用于需要较大数据的项目零件的结构。项目
--短项目短项目格式将项目大小、类型和标签由第一个字节描述。第一个字节后面可能跟着0、1、2或4个可选数据注意:短项目为常用的项目格式项目
--短项目其中具体的字段的定义如表:字段描述bSize指明数据的大小0=0bytes,1=1byte,2=2bytes,3=4bytesbType指定项目类型0=主项目,1=全局项目,2=本地项目,3=保留bTag指定该项目的功能[data]可选的数据短项目分为三类:主项目、全局项目和本地项目。项目类型(bType)指定项目类别。项目
--长项目与短项格式一样,长项格式将项大小、类型和标签由第一个字节描述。长项格式使用一个特殊的项目标签值来指示它是一个长项。项目数据最多可包含255个字节的数据。短项目
--主项目主项目用于定义或分组报告描述符中的某些类型的数据字段。主项目有两种类型:数据类型和非数据类型。其中数据类型有:Input(输入项)Output(输出项)Feature(特征项)Collection(集合项)主项目
--输入项、输出项以及特征项输入、输出和特征项用于在报告中创建数据字段。输入项描述了有关由一个或多个物理控件提供的数据的信息。描述设备到主机的数据,例如鼠标的移动状态输出项用于定义报告中的输出数据字段。描述主机到设备的数据,例如键盘LED状态特征项描述可以发送到设备的设备配置信息。主项目
--集合项和集合结束项集合项标识两个或多个数据之间的关系,集合项目的类型包括:注意:当使用集合项(Collectionitem)打开一个数据集合时,必须使用集合结束项(EndCollectionitem)关闭一个集合物理(physical)应用(Application)逻辑(Logical)报告(report)命名数组(namedarray)用法切换(UsageSwitch)用法修饰(UsageModifier)短项目
--全局项全局项描述而不是定义来自控件的数据。UsagepageLogicalMinimumLogicalMaximumPhysicalMinimumPhysicalMaximumUnitExponentUnitReportSizeReportIDReportCountPushPop全局项标签短项目
--本地项本地项目标签定义控件的特征。本地项标签UsageUsageMinimumUsageMaximumDesignatorIndexDesignatorMinimumDesignatorMaximumStringIndexStringMinimumStringMaximumDelimiter(定界符)HID协议
--报告设备通过向主机发送报告,可以将诸如鼠标移动、点击等信息返回给主机。报告通过中断输入管道从设备发送到主机。报告也可以请求(轮询)报告并通过控制管道发送,或通过可选的中断输出管道发送。主机需依据设备提供的报告描述符对设备上传的报告进行识别。注意:报告与报告描述符是两个概念报告
--标准项报告格式报告格式由8位(8-bit)报告标识符和属于该报告的数据组成。报告ID报告ID字段的长度为8位。如果报告描述符中没有使用报告ID标签,则只有一份报告,并且报告ID字段被省略。报告数据数据字段是报告可变长度字段。1514131211109876543210第1字节至第n字节:报告第0字节:报告ID报告
--数组项的报告格式数组中的每个按钮都报告一个分配的编号,称为数组索引。这可以通过查找数组元素“用法”页和“用法”转换为键码。当任何按钮在打开和关闭之间转换时,数组中当前关闭的按钮的整个索引列表将传输到主机。例如:键盘码值n…1817161514131211109876543210第2字节至第n字节:数组索引第1字节:位图第0字节:报告ID报告
--报告约束以下约束适用于报告和报告处理程序:报告中的项目字段不能超过4个字节。例如,一个32位项目必须从字节边界开始以满足此条件。一次USB传输中只允许一份报告。一份报告可能跨越一个或多个USB事务。例如,具有10字节报告的应用程序将跨越低速设备中的至少两个USB事务。报告
--报告约束以下约束适用于报告和报告处理程序:除了最长的超过端点的wMaxPacketSize的报告之外的所有报告都必须以一个短数据包终止。最长的报告不需要短数据包终止。每个顶级集合必须是一个应用程序集合,并且报告不得跨越多个顶级集合。如果顶级集合中有多个报告,则所有报告(最长的报告除外)都必须以短数据包结束。报告始终是字节对齐的。如果需要,报告用位(0)填充,直到到达下一个字节边界。
报告描述符示例
UsagePage(GenericDesktop),
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐器维修技师考试试卷及答案
- 2025年亳州机场管理有限公司劳务派遣人员招聘9人笔试历年参考题库附带答案详解
- 2025年6月山东临沂高新控股集团有限公司及权属子公司招聘24人笔试历年参考题库附带答案详解
- 2025山东能源集团上海中期期货股份有限公司及所属企业社会招聘12人笔试历年参考题库附带答案详解
- 2025山东圣阳电源股份有限公司招聘10人笔试历年参考题库附带答案详解
- 2025安徽某国企高速收费站收费员招聘18人笔试历年参考题库附带答案详解
- 2025天津开元捷能科技有限公司招聘3人笔试历年参考题库附带答案详解
- 2025国家电投集团吉电股份招聘110人(吉林)笔试历年参考题库附带答案详解
- 2025四川航空科瑞特工程技术有限公司招聘10人笔试历年参考题库附带答案详解
- 2025四川成都产业投资集团有限公司所属公司招聘运营经理等岗位20人笔试历年参考题库附带答案详解
- 装修包工不包料合同
- 可研报告收费标准(国家标准)
- 安徽省安庆市怀宁县2024-2025学年七年级上学期期中考试数学试卷
- 国开(河北)2024年秋《现代产权法律制度专题》形考作业1-4答案
- 部编人教版语文小学六年级下册第四单元主讲教材解读(集体备课)
- 统编版语文四年级下册第七单元教材解读解读与集体备课课件
- E临床医学专业内科学呼吸系统试题
- 人工智能原理与技术智慧树知到期末考试答案章节答案2024年同济大学
- 《先进制造技术》教案
- 马克思主义基本原理智慧树知到课后章节答案2023年下湖南大学
- Zootopia疯狂动物城中英文对照台词
评论
0/150
提交评论