スクラッチUSB(二十から一、USBインタフェース、HIDクラスのデバイス(3)_グローバル・リポーティング・ディスクリプタクラス)から学びます

動作を説明するためのグローバルアイテム(メインアイテム)使用されるデータフォーマットは、メインアイテムを変更するための状態テーブルパラメータの状態テーブルの量を変化させることができます。再割り当てされていない場合には、グローバル項目は変更されません。 

 

グローバル項目タグ 半角プレフィックス(NN表す
サイズ値)
説明
使用状況ページ 0000 01 NN 機能指定したデバイス(06H、A0hの、FFhで)。32ビット値の使用は、スペースを節約するために使用ページ項目16以降の高い使用レポート記述子を使用することによって提供することができます。これは、ユーザIDとして解釈されるべき後続の使用、およびページ32ビット使用量を形成するために接続された使用法の16以下のように定義されます。
論理最小 0001 01 NN 論理ユニットの値の範囲。これは、変数またはアイテムの配列の最小値が報告されるべきです。例えば、位置の論理値からのレポートは、0にマウス128の最小値128ロジックの最大0 xは。
論理最大 0010 01 NN 論理ユニットの値の範囲。これは、変数またはアイテムの配列の最大値が報告されるべきです。
物理的な最小 0011 01 NN 最小物理エクステント変数用語。これは、最小の論理ユニットのアプリケーションことを示しています。
物理的な最大 0100 01 NN 物理的変数の用語の最大範囲。
単位指数 0101 01 NN ユニットベース10のインデックス値。詳細については、このセクションの表を参照してください。
単位 0110 01 NN 単位。
レポートサイズ 0111 01 NN 符号なし整数は、レポートフィールドのサイズをビット単位で指定します。これは、パーサが使用するプロジェクトマッピングされreportmハンドラを構築することができます。報告プロトコル:詳細については、第8章を参照してください。
報告書ID 1000年01 NN

符号なしの値は、レポートIDを指定しました。レポート内の任意の場所には、レポート記述子タグのIDを使用している場合、すべてのデータは、デバイスが単一バイトのIDフィールドで始まりますが報告されています。IDタグ内のすべての項目の最初の報告の後、2番目のレポートは、ID 1バイトのプレフィックスレポートでIDマークに含まれている前に。第二レポートIDタグの前にはなく第三の報告の前にすべての項目は、第二の第二の報告に接頭辞として、IDタグIDに含まれる、というようにしています。

		<p>此报告ID值指示添加到特定报告的前缀。 例如,报告描述符可以定义报告ID为01的3字节报告。该设备将生成4字节数据报告,其中第一个字节为01.设备还可以生成其他报告,每个报告都具有唯一 ID。 这允许主机区分通过管道中的单个中断到达的不同类型的报告。 并允许设备区分通过单个中断输出管道到达的不同类型的报告。 报告ID为零保留,不应使用。</p>
		</td>
	</tr><tr><td style="width:146px;">Report Count</td>
		<td style="width:122px;">1001 01 nn</td>
		<td style="width:581px;">无符号整数,指定项目的数据字段数; 确定此特定项目的报告中包含的字段数(以及因此向报告添加了多少位)。</td>
	</tr><tr><td style="width:146px;">Push</td>
		<td style="width:122px;">1010 01 nn</td>
		<td style="width:581px;">将 Global 项目状态表送入堆栈</td>
	</tr><tr><td style="width:146px;">Pop</td>
		<td style="width:122px;">1011 01 nn</td>
		<td style="width:581px;">从堆栈恢复 Global 项目状态表</td>
	</tr><tr><td style="width:146px;">&nbsp;</td>
		<td style="width:122px;">1100 01 nn –<br>
		1111 01 nn</td>
		<td style="width:581px;">保留</td>
	</tr></tbody></table></div><ul><li>当逻辑最小值和逻辑最大值(范围)绑定设备返回的值时,物理最小值和物理最大值通过允许报告值偏移和缩放来赋予这些边界意义。例如,温度计可能具有0和999的逻辑范围,但物理范围为32和212度。可以使用以下算法确定分辨率:</li>

とき線形解析レポート記述子、グローバル状態ユニット値
は宣言されるまで、物理的な「未完成」状態にあると考えられ、インデックス、および最小物理的な最大値。

  • 項目単位は、次の表の値と一致します。

 

 

A、使用状況ページと使用法プロジェクト
 

使用ページパートデータ項目は1〜2バイトで、すべての現在のバイトを定義しています。使用ページは、共通のデバイス機能、使用ページ(およびその他の項目)上の特定の定義の内容を定義し、缶アクセスHID使用法テーブル、テーブルは、HID使用法テーブルから使用ページ定義です。
 

各項目は、有効な使用ページで定義され、このようなデータアイテムの使用方法ページ値としてそれぞれの低い方の定義があり、装置が汎用デスクトップコントロールとして定義され、そのような装置の特定の機能は、HID使用法テーブル上にあってもよいです特定の定義で見つかりました。HID使用テーブルは以下の表は、機能デバイスで定義されている一般的なデスクトップ・コントロール

使用量(使用量)は、様々な一般的な使用のために定義された使用ページの各々に対するデバイス特性の多種多様を定義します。3つの情報の種類、すなわち、制御、およびデータ収集の手順。デバイス制御などのオン/オフなどの指示、有効/無効などの状態。説明関係及び制御データのセットを組み合わせます。テーブルの使用タイプ(使用タイプ)は、商品の主なタイプによって生成されたアプリケーションデータを処理する方法を説明し、特定の定義の詳細な説明は、HID使用表を参照してください。

以下に示すように、おそらく、ラインは、あまりにも、そしてはみ出さないことを確認するために使用されます。

 

二、Report ID 项目
 

Report ID 放在信息包中报表数据之前,设备可以支持多个相同类型的报表,每一个报表包含不同的数据与其特有的 ID。
在报表描述符中, Report ID 项目作用于其后续所有的项目, 直到遇到下一个 Report ID为止。如果报表描述符中没有 Report ID 项目,默认的 ID 值是 0,描述符不能定义一个为0 的 Report ID ,输入报表、输出报表与特征报表可以分享同一个 Report ID 。
在 Set_Report 和 Get_Report 请求传输中, 主机在设置事务的 wValue 字段的低字节中指定一个 Report ID 。在中断传输中如果接口支持一个以上的 Report ID , Report ID 必须是传送报表中的第一个字节。如果接口只支持数值为 0 的默认 Report ID ,此 Report ID不应该在中断传输中随着报表一起传送。
 

三、 Logical Minimum 和 Logical Maximum 项目


Logical Minimum 与 Logical Maximum 项目定义报表的变量 (Variable )或阵列(Array )数据的限制范围,此限制范围以逻辑单位来表示。例如设备报表的一个电流值读数是500mA ,而一个单位是 2mA ,则 Logical Maximum 值等于 250 。负数值以 2 的补码来表示。 如果 Logical Minimum 与 Logical Maximum 都是正数, 就不需要有正负号位。不管 Logical Minimum 与 Logical Maximum 是以有正负号或是无正负号的数值来表示,设备都可以正确地传输数据。数据的接收者必须知道数据是否可以是负值。
 

四、 Physical Minimum 和 Physical Maximum 项目

Physical Minimum 和 Physical Maximum 项目定义数值的限制范围,该限制范围使用Unit 项目定义的单位来表示。 上例中设备报表的一个电流值读数是 500mA , 单位是 2mA ,Logical Maximum 值等于 250 ,而 Physical Maximum 值是 500 。Logical Minimum 与 Logical Maximum 值说明了设备返回数值的边界,可以根据Physical Minimum 和 Physical Maximum 值对数据进行偏移和比例变换。

 

五、Unit Exponent 项目


Unit Exponent 项目定义了在使用逻辑范围和实际范围将设备的返回数值转换成实际数值时,使用 10 的多少次方对数值进行定标。 Unit Exponent 的值的编码为 4 位补码,代表 10 的指数范围是 -8~+7 。

根据以上 5 个项目的值可以换算出报表传送数据 (逻辑数据) 与物理数据的转换关系。
物理数据值 = 逻辑数据值÷分辨率
分辨率 = (LogicalMaximum - LogicalMinimum )÷((PhysicalMaximum - PhysicalMinimum )× 10^ UnitExponent )
 

例如,400 dpi的鼠标可能具有下表中显示的项目。


  
  
  1. Logical Minimum - 127
  2. Logical Maximum 127
  3. Physical Minimum - 3175
  4. Physical Maximum 3175
  5. Unit Exponent - 4
  6. Unit Inches
  7. Resolution = ( 127-(- 127)) / (( 3175-(- 3175)) * 10^- 4) = 400 counts per inch

 

六、Unit 项目


Unit 项目指定报表数据在使用 Physical 与 Unit Exponent 项目转换后使用什么度量单位,以及单位的幂指数值。 Unit 的数值部分可以长达 4 字节,按照 4 位为一段分段,可以分为 8 个半字节段,由高到低分别为半字节 7、半字节 6、 …、半字节 0。每一个半字节对应不同的基本单位, 其数值表示单位的指数值, 采用 4 位 2 的补码表示, 取值范围是 -8~+7之间。
从半字节 0~6 由下表给出了具体的定义, 其中半字节 0 表示测量系统, 半字节 7 保留。例如在半字节 0 数值为 1(表示采用线性公制测量系统) 的条件下, 半字节 1 表示长度 (单位为厘米) ,如果其数值为 1 表示厘米,数值为 2 表示(厘米)^ 2,成为面积单位。半字节3 表示时间(单位为秒) ,如果其数值为 -2,表示(秒)^ -2。

虽然表中只是定义了有限的基本单位,但可以通过这些基本单位的组合派生出大多数其它的常用单。
例如报表使用一个字节传送一个从 -20 到 110 华氏度温度值,可以定义以下报表描述项目:


  
  
  1. Logical Minimum = - 128
  2. Logical Maximum = 127
  3. Physical Minimum = - 20
  4. Physical Maximum = 110
  5. Unit Exponent = 0
  6. Unit = 30003h

Unit 的半字节 0=3 选择英制线性测量系统,半字节 4=3 选择华氏温度单位。
130 (110+20 )华氏度的数值范围线性分布到了 256 和有效数值区域,每一位相当于0.51 华氏度,这样就提高了分辨率。

七、Report Size 和 Report Count 项目

Report Size 项目指定 Input 、 Output 与 Feature 项目字段的大小,以位为单位。

Report Count 项目指定 Input 、 Output 与 Feature 项目包含的字段数目。
例如:

两个 8 位的字段, Report Size 等于 8, 而 Report Count 等于 2。

8 个 1 位的字段,Report Size 等于 1,而 Report Count 等于 8。
Input 、 Output 与 Feature 项目报表可以有多个项目, 每一个项目可以有自己的 ReportSize 和 Report Count 项目。
 

八、 Push 和 Pop 项目


Push 项目将一个 Global 项目状态表格的副本压入 CPU 的堆栈内。 GIobal 项目状态表格包含所有之前定义的 Gobal 项目的目前设置。
Pop 项目恢复之前压入堆栈的 Global 项目状态的储存状态。
 

 


  
  
  1. HID_Report_desc_table:
  2. db 06h, A0h, FFh ; Usage Page(Vendor defined) 定义设备功能
  3. db 09h, A5h ; Usage(Vendor Defined) 定义用法
  4. db A1h, 01h ; Collection(Application) 开一个集合
  5. db 09H, A6h ; Usage(Vendor defined) 定义用法
  6. ; 输入报表
  7. db 09h, A7h ; Usgae(Vendor defined) 定义用法
  8. db 15h, 80h ; Logical Minimum 定义输入最小值 =- 128
  9. db 25h, 7Fh ; Logical Maximum 定义输入最大值 =+ 127
  10. db 75h, 08h ; Report Size 定义报表数据项大小 = 8
  11. db 95h, 02h ; Report Count 定义报表数据项个数 = 2
  12. db 81h, 02h ; Input(Data,Variable,Absolute) 输入项目
  13. ; 输出报表
  14. db 09h, A9h ; Usgae(Vendor defined) 定义用法
  15. db 15h, 80h ; Logical Minimum 定义输入最小值 =- 128
  16. db 25h, 7Fh ; Logical Maximum 定义输入最大值 =+ 27
  17. db 75h, 08h ; Report Size 定义报表数据项大小 = 8
  18. db 95h, 02h ; Report Count 定义报表数据向个数 = 2
  19. db 91h, 02h ; Output(Data,Variable,Absolute) 输出项目
  20. db C0h ; End Collection 关闭集合

Local类项相关的细节还没学习,下一节描述。

 

第二行,06 A0 FF 其中0x06对应着Global类项目中的Usage Page项,数据共2字节。数据0xFFA0表明由厂商定义。

第三行,09 A5  其中0x09对应着Local类项的Usage项,数据共一个字节。数据0xA5看后面的Local项章节。

第四行,A1 01 其中0xA1对应着Main类项的Collection项,数据共一个字节。数据0x01表示(Application)。

第五行,09 A6 其中0x09对应着Local类项的Usage项,数据共一个字节。数据0xA6看后面的Local项章节。

 

第七行,09 A7 其中0x09对应着Local类项的Usage项,数据共一个字节。数据A7看后面的Local项章节。

第八行,15 80 其中0x15对应着Global类项的Logical Minimum项,数据共一个字节。数据80表示逻辑上最小为-128。

第九行,25 7F 其中0x15对应着Global类项的Logical  Maximum项,数据共一个字节。数据7F表示逻辑上最大为+127。

第十行,75 08 其中0x75对应着Global类项的Report Size项,数据共一个字节。指的是报表数据大小5个字节。

第十一行,95 02 其中0x95对应着Global类项的Report Count项,数据共一个字节。指的是是报表个数为2。

第十二行,81 02其中81对对应着Main类项的Input项,数据共一个字节。指的输入数据是变量。

 

第十四行,09 A9 其中0x09对应着Local类项的Usage项,数据共一个字节。数据A9看后面的Local项章节。

第十五行,15 80 其中0x15对应着Global类项的Logical Minimum项,数据共一个字节。数据80表示逻辑上最小为-128。

第十六行,25 7F 其中0x15对应着Global类项的Logical  Maximum项,数据共一个字节。数据7F表示逻辑上最大为+127。

第十七行,75 08 其中0x75对应着Global类项的Report Size项,数据共一个字节。指的是报表数据大小5个字节。

第十八行,95 02 其中0x95对应着Global类项的Report Count项,数据共一个字节。指的是是报表个数为2。

第十九行,91 02其中81对对应着Main类项的Output项,数据共一个字节。指的输出数据是变量。

 

第二十行,C0 表示结束集合。
 

 

**********色代表本节学习的内容

**********色代表上节学习的内容

**********色代表下节学习的内容

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_16777851/article/details/86420290

发布了47 篇原创文章 · 获赞 9 · 访问量 1万+

Global Item 用于描述一个操作( Main Item )所用到的数据格式,它可以改变一个 state table 的量, 这个 state table 的参数用于修饰 Main Item 。在不被重新赋值的情况下, Global Item 将会保持不变。 

おすすめ

転載: blog.csdn.net/u013836909/article/details/104902596