《设备管理协议中文版接口设备》由会员分享,可在线阅读,更多相关《设备管理协议中文版接口设备(67页珍藏版)》请在金锄头文库上搜索。
1、设备管理协议中文 版接口设备 设备管理协议中文 版接口设备 HIDUsageTables 其中前者是 HID 的基本规范文件,后者可以是前者的附件,为开发人员提供 实际的控制类型的描述。文件是用来定义让主机了解以及使用 HID 数据的数 值 。 这 两 份 文 件 是 由 USBDeviceWorkingGroup 制 定 的 , 可 以 在 网 址 hidpage/#Class_Definition 下载。 8.1.1HID 设备的硬件要求 HID 接口必须符合 DeviceClassDefinitionforHumaninterfaceDevices 规范 内所定义的 HID 类别的需求。
2、在此文件内描述了所需的描述符、传输的频率 以及传输的类型等。为了符合规范,HID 接口的端点与描述符都必须符合数 个要求。 所有的 HID 传输都是使用默认控制管道或是一个中断管道,HID 设备必须有 一个中断输入端点来传送数据到主机,中断输出端点则不是必需的。 表 8-1HID 设备的传输类型表 8-1HID 设备的传输类型 传输 类型 数据来源数据类型 是否需 要管道 设备(输入)没有严格时间限制的数据是 控制 主机(输出) 没有严格时间限制的数据 或是没有中断输出管道时的任何数据 设备(输入)定时或低延迟的数据是 中断 主机(输出)定时或低延迟的数据是 主机与设备之间所交换的数据,可以分
3、成两种类型: 低延迟的数据,必须尽快地到达目的; 配置或其他的数据,没有严格时间限制的需求。 中断管道是控制管道之外的另一种数据交换的方式,特别适合使用在接收端 需要定时或是尽可能及时收到数据的时候。中断输入管道携带数据到主机, 中断输出管道则是携带数据到设备。在总线忙的时候,控制管道可能会被延 迟,而中断管道保证会有可得到的带宽。HID 不需要一定有中断输出管道。 如果没有中断输出管道,主机会在控制管道上使用 HID 设备特有的 Set_Report 请求来传送所有的报表。 8.1.2HID 固件的要求 主机的驱动程序要与 HID 设备通信,设备的固件必须符合下列需求: 设备的描述符必须识别
4、该设备包含有 HID 接口。 除了默认控制管道外,固件必须另外支持一个中断输入管道。 固件必须包含一个报表描述符来定义要传送与接收的设备数 据。 如果要传送数据,固件必须支持 Get_Report 控制传输与中断输入传输。如 果要接收数据,固件必须支持 Set_Report 控制传输与选择性的中断输出传 输。 所有的 HID 数据都必须使用定义过的报表格式来定义报表中数据的大小与 内容。设备可以支持一个或多个报表。在固件中的一个报表描述符用来描述 此报表,以及如何使用报表数据的信息。 在每一个报表中的一个数值,定义此报表是一个输入(Input) 、输出 (Output)或是特征(Feature
5、)报表。主机在输入报表中接收数据,在输 出报表中传送数据,特征报表可以在任何方向传递。 Windows98 以及后来版本的 HID 驱动程序使用中断传输来传递输入报表。输 出报表的传输类型要根据设备支持的端点与 Windows 的版本而定。 Windows98Gold 只符合 HID1.0 规范, 它的 HID 驱动程序使用控制传输来传递 输出报表。Windows98SE、Wndows2000 符合 HID1.1 规范,HID 驱动程序在有 中断输出端点时使用中断传输,否则使用控制传输来传递输出报表。特征报 表都是使用控制传输。 8.2 HID 设备描述符 HID 设备连接到 USB 主机后,
6、 主机通过发送 Get_Descriptor 请求读取 HID 设 备的描述符,了解描述符对了解 USB 设备是至关重要的。 8.2.1HID 设备的描述符 HID 设备除了支持 USB 设备的 5 种标准描述符之外,还支持 HID 设备特有的 3 种描述符。这些描述符是: USB 标准描述符:设备、配置、接口、端点和字符串描述符。 HID 特有的描述符:HID、报表(Report)和实体(Physical) 描述符。 从描述符的关联关系看,HID 描述符是关联于接口。所以如果一个 HID 设备 有 2 个端点,设备不需要每个端点有一个 HID 描述符。 从前面的 USB 描述符可以看出一个规
7、律,描述符的第一、二字节分别是描述 符的长度和类型,描述符的类型字段(bDescriptorType)表明描述符的种 类,下表列出了不同描述符的类型字段数值。 表 8-2HID 的描述符表 8-2HID 的描述符 类型描述符应用 数 值 设备 Device所有设备必须有,只能一个01 配置 Configuration所有设备必须有,至少一个02 字符串 String可选择03 接口 Interface每一个接口一个04 端点 Endpoint除端点 0 之外的每个端点一个05 设备限定 Device_Qualiffier06 标准 Other_Speed_Configuration 同时支持全
8、速与高速的设备必须 有一个07 图 8-2 HID 描述符的关联关系 接口描述符 Interface 端点描述符 Endpoint HID 描述符 Hid 报表描述符 Report 实体描述符 Physical HID、报表和实体描 述符是 HID 设备特 有的描述符 Interface_power08 HIDHID 设备必须有21 类别 Hub29 报表 ReportHID 设备必须有22HID 特定实体 Physical可选择的23 对于一个 HID 设备,设备描述符与配置描述符没有 HID 特定的信息。其设备 描述符的 bDeviceClass 和 bDeviceSubClass 字段的
9、值为 0,接口描述符的 bInterfaceClass 字段值为 03,表示设备的该接口是 HID 类别。在接口描述 符中其他包含 HID 特定信息的字段还有子类别码(blnterfaceSubClass)与 协议码(blnterfaceProtocol 字段) 。 在 接 口 描 述 符 中 子 类 别 码 字 段 等 于 1 表 示 此 设 备 支 持 启 动 接 口 (BootInterface) 。如果设备有启动接口,即便主机的 HID 没有加载驱动程 序,设备也可以使用。这种情形可能发生在计算机是由 DOS 直接启动,在启 动时观看系统设置画面或使用 Wndows 的安全模式时。 含
10、有启动接口的键盘或鼠标可以使用 BIOS 或许多主机支持的默认简单协议。 HID 规范定义了键盘与鼠标的启动接口协议。 如果设备没有启动接口,并且接口描述符中协议码字段是 1,表示设备支持 键盘接口,协议码字段是 2,表示支持鼠标接口。接口描述符中协议码字段 是 0,表示设备不支持启动协议。 在 HIDUsageTables 规 范 中 定 义 了 键 盘 与 鼠 标 的 启 动 描 述 符 (BootDescriptor) 。BIOS 不需要从设备中读取描述符,因为它知道启动协 议,并且假设设备支持启动协议。所以要启动的设备不需要在固件内包含启 动接口描述符,它只要在主机尚未要求在报表描述符
11、中的定义协议时支持启 动协议即可。在操作系统加载 HlD 驱动程序后会使用 Set_Protocol 请求, 将设备由启动协议转换成报表协议。 8.2.2HID 描述符 HID 描述符的主要作用是用来识别 HID 通信所使用的额外描述符。下表是 HID 描述符结构。 表 8-3HID 描述符结构表 8-3HID 描述符结构 偏 移 量 字段 字 节 数 数值 类型 说明 0bLength1Numeric描述符字节数 1bDescriptorType1Constant0 x21=HID 描述符 2bcdHID2NumericHID 规范版本号(BCD) 4bCountryCode1Numeric
12、硬件设备所在国家的国家代码 5bNumDescriptors1Numeric 类别描述符数目(至少有一个报 表描述符) 6bDescriptorType1Constant类别描述符的类型 7wDescriptorLength2Numeric报表描述符的总长度 9bDescriptorType.1Constant附加的描述符的类型,可选的 10 wDescriptorLength. . 2Numeric附加的描述符的总长度,可选的 bcdHID:bcdHID:设备与其描述符所遵循的 HID 规范的版本号码,此数值是 4 个 16 进位的 BCD 格式字符。例如版本 1.1 的 bcdHID 是
13、0110h。 bCountryCode:bCountryCode:硬件目的国家的识别码。如果不说明,该字段为 0。 bDescriptorType:bDescriptorType:HID 描述符附属的描述符的类型(报表或实体) 。每一个 HID 都必须至少支持一个报表描述符。一个接口可以支持多个报表描述符, 以及一个或多个实体描述符。 HID 描述符的偏移量为 9 和 10 的 bDescriptorType 和 wDescriptorLength 可以重复存在多个。 1.报表描述符 报表描述符定义了执行设备功能的数据格式和使用方法。 报表描述符和 USB 的其他描述符是不一样的,它不是一个简
14、单的表格,报表 描述符是 USB 所有描述符中最复杂的。报表描述符非常复杂而有弹性,因为 它需要处理各种用途的设备。报表的数据必须以简洁的格式来储存,这样才 不会浪费设备内的储存空间以及数据传输时的总线时间。 实际上可以这样理解,报表内容的简洁,是通过报表描述符全面的、复杂的 数据描述实现的。 报表描述符必须先描述数据的大小与内容。报表描述符的内容与大小因设备 的不同而不同,在进行报表传输之前,主机必须先请求设备的报表描述符, 只有得到了报表描述符才可正确解析报表的数据。 报表描述符是报表描述项目(Item)的集合,每一个描述项目都有相对统一 的数据结构,项目很多,通过编码实现。 (1)项目
15、报表描述符由描述 HID 设备的数据项目(Item)组成,项目的第一个字节 (项目前缀)由三部分构成,即项目类型(itemtype) 、项目标志 (itemtag)和项目长度(itemsize) 。其中项目类型说明项目的数据类型, 项目标签说明项目的功能,项目长度说明项目的数据部分的长度。 HID 的项目有短项目和长项目两种,其中短项目的格式如下图。 短项目的数据字节数由 bSize 的值定义,bSize 为 0、1、2、3 时 Data 部分 的字节数分别为 0、 1、 2、 4 个字节。 短项目的项目类型由 bType 定义, bType 为 0、1、2 时分别为 Main、Global
16、和 Local 类型。 长项目可以携带较多的数据,其格式如下图。 项目中的第一个字节为上图中的特定值时表明该项目是一个长项目。长项目 中的 bDataSize 说明 Data 部分的字节数,bLongItemTag 在 HID 规范中没有 定义。 下面是通过汇编实现的一个简单的报表描述符, 描述符的每一行是一个项目, 该描述符描述了一个从设备接收 2 个字节的输入报表和发送 2 个字节到设 备的输出报表。 HID_Report_desc_table: db06h,A0h,FFh;UsagePage(Vendordefined)定义设备功能 Data (可以是 0、1、2、4 个字节) bTagbType bSize 7 6 5 4 3 2 1 0 位序 字段 图 8-3 HID 报表短项目格式 db09h,A5h;Usage(VendorDefined)定义用法 dbA1h,01h;Collection(Application)开一个集合 db09H,A6h;Usage(Vendordefined)定义用法 ;输入报表 db09h,A7h;Usgae(Vendord