HID主条目input item、output item和feature item详解
HID的main条目按数据相关性可分为两种:
- 与数据相关的 input、output、feature
input item、output item和feature item描述由一个或多个物理控件提供的数据的信息。 应用程序可以使用此信息来解释设备提供的数据。 单个item中定义的所有数据字段共享相同的数据格式。
input item、output item和feature item有8位,其二进制值为 1000 00nn,其中nn可为00,01,10或11,分别表示后跟0字节,1字节,2字节和4字节。
Bit 0 {Data (0) | Constant (1)}
指示项目是数据还是常量值。 数据表示该项目正在定义包含可修改设备数据的报告字段。 常量表示该项目是报表中的静态只读字段,主机无法修改(写入)。Bit 1 {Array (0) | Variable (1)}
指示项目是在报告中创建变量还是数组数据字段。在变量字段中,每个字段代表来自物理控件的数据。为每个字段保留的位数由前面的报告大小/报告计数项目决定。例如,一组八个开/关开关可以在由变量输入项声明的 1 个字节中报告,其中每一位代表一个开关,开 (1) 或关 (0)(报告大小 = 1,报告计数 = 8) .
或者,变量 Input 项可以添加 1 个报告字节,用于表示四个三位按钮的状态,其中每个按钮的状态由两位表示(Report Size = 2, Report count = 4)。或者来自变量输入项的 1 个字节可以表示操纵杆的 x 位置(报告大小 = 8,报告计数 = 1)。
数组提供了一种替代方法来描述从一组按钮返回的数据。数组更有效,比可变项目不那么灵活。数组不是为组中的每个按钮返回一个位,而是返回与按下的按钮对应的每个字段中的索引(如键盘扫描代码)。数组字段中的超出范围的值被视为未声明任何控制。数组中同时按下的按钮或键需要在多个字段中报告。因此,数组输入项(报告计数)中的字段数决定了可以报告的同时控制的最大数量。使用具有三个 8 位字段的数组(报告大小 = 8,报告计数 = 3),键盘最多可以同时报告三个键。
逻辑最小值指定数组返回的最低索引值,逻辑最大值指定最大值。可以通过检查差异来推导出数组中的元素数介于逻辑最小值和逻辑最大值之间(元素数 = Logical Maximum -Logical Minimum + 1)。
Bit 2 {Absolute (0) | Relative (1)}
指示数据是绝对数据(基于固定原点)还是相对数据(指示上次报告的值变化)。 鼠标设备通常提供相对数据,而平板电脑通常提供绝对数据。Bit 3 {No Wrap (0) | Wrap (1)}
指示当达到极高或极低值时数据是否“翻滚”。例如,可以自由旋转360度的刻度盘可能输出0到10之间的值。如果指示“环绕”,则在递增方向上通过10位置后报告的下一个值将为0。Bit 4 {Linear (0) | Non Linear (1)}
表示来自设备的原始数据是否经过某种方式处理,不再代表测量的数据与报告的数据之间的线性关系。
加速度曲线和操纵杆死区是此类数据的示例。 灵敏度设置会影响单位项目,但数据仍将是线性的。Bit 5 {Preferred State (0) | No Preferred (1)}
指示控件是否具有在用户未与控件进行物理交互时将返回的首选状态。 按钮(与切换按钮相反)和自动对中操纵杆是示例。Bit 6 {No Null position (0) | Null state(1)}
指示控件是否处于不发送有意义数据的状态。 空状态的一种可能用途是用于需要用户与控件进行物理交互以使其
报告有用的数据。 例如,一些操纵杆有一个多向开关(帽子开关)。
当没有按下帽子开关时,它处于空状态。 当处于空状态时,控件将报告指定的逻辑最小值和逻辑最大值之外的值(最负值,例如 -128 表示 8 位值)。
- Bit 7 Reserved (0) 保留
- Bit 8 {Bit Field (0) | Buffered Bytes (1)}
指示控件发出固定大小的字节流。数据字段的内容由应用程序决定。缓冲区的内容不会解释为单个数字量。由缓冲字节项定义的报表数据必须在8位边界上对齐。来自条形码阅读器的数据就是一个例子
- Bit 31-9 Reserved (0) 保留
注意:
如果输入项是数组,则只有数据/常量、变量/数组和绝对/相对属性适用。
- 可以通过检查报告大小和报告计数值来确定项目中数据字段的数量。例如,报告大小为 8 位且报告计数为 3 的项目具有三个 8 位数据字段。
- Array 项返回的值是一个索引,因此推荐:
1) 当数组中没有控件被断言时,数组字段返回 0 值。
2) 逻辑最小值等于 1。
3) 逻辑最大值等于数组中的元素数。 - 输入项定义了输入报告,可通过控制管道使用 Get_Report (Input) 请求访问。
- 输入类型报告也通过中断输入管道以轮询率发送。
- 数据 |常量,变量 |数组,绝对值 |相对,非线性,
输出项的换行和空状态数据与输入项的数据相同。 - 输出项使用 Set_Report (Output) 命令通过控制管道访问输出报告。
输出类型报告可以选择通过中断输出管道发送。
虽然功能相似,但输出和特征项在以下方面有所不同方法:FeautreItem定义设备的配置选项,通常由控制面板应用程序设置。因为它们会影响设备的行为(例如,按钮重复率、重置原点等),所以功能项通常对软件应用程序不可见。相反,输出项表示设备输出给用户(例如,LED、音频、触觉反馈等)。软件应用程序可能会设置设备输出项。
FeautreItem可以是其他项的属性。例如,原点重置功能可应用于一个或多个位置输入项。与输出项一样,要素项构成了可通过控制管道访问的要素报告,其中包含Get_report(feature)和Set_report(feature)请求