圈圈.报告描述符__ZC记录

ZC:PDF等资料 位于:"...\_eBook\WindowsDriver\圈圈教你玩USB\HID_ZC" 。

 

1、ZC:到目前(20181126)为止,对 报告描述符的整体理解还是 有些困难,不能准确的说出(指明)其中的细节。还需要一边看报告描述符 一边对照资料查阅理解含义。

  ZC:现在,只理解了 一个大框架,和 其中的一部分细节(数据传输 在Collection中的 格式)

  ZC:下面我把 至今为止,对于 报告描述符的理解 都记录下来,方便以后查阅(隔得时间一长,我就会忘,又要重新翻资料 重新理解 甚是痛苦...)

2、

(2.A)、HID1_11.pdf 的 P.34

One or more fields of data from controls are defined by a Main item and further
described by the preceding Global and Local items. Local items only describe the
data fields defined by the next Main item. Global items become the default
attributes for all subsequent data fields in that descriptor. For example, consider
the following (details omitted for brevity): 

  ZC:我的翻译:从control来的数据 都是通过 主条目被定义的,而主条目的属性又是通过 全局和局部条目来定义的。局部条目 只定义 紧接着它下面的那个主条目。全局条目 对于所有它描述符范围内的 接下来的数据 定义默认的属性。(下面是一个例子。为了简洁 省略了一些细节)

  ZC:我的理解(用 全局变量/局部变量 或者 JS的变量作用域的概念 来理解这里的含义):(1)、主条目 定义data;(2)、局部条目 就像 局部变量 只对 接下来的一个全局变量有效;(3)、全局条目 就像 全局变量 一样,只要定义了 某全局条目的值 后面都是使用这个值,直到 重新定义了 该全局条目的值

 

每行开始的第一字节为该条目的前缀,前缀的格式为:
D7~D4:bTag(4位);D3~D2:bType(2位);D1~D0:bSize(2位)。
主目录、全局目录、局部目录,主要是看 bType:
	主目录:   00
	全局目录: 01
	局部目录: 10

 2.1、大的一个概念(大框架,识别 具体的Item):举例子:第3章 UsbMouse 报告描述符

 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
 0x09, 0x02, // USAGE (Mouse)
 0xa1, 0x01, // COLLECTION (Application)
 0x09, 0x01, //   USAGE (Pointer)
 0xa1, 0x00, //   COLLECTION (Physical)
 
... ... 0xc0, // END_COLLECTION 0xc0 // END_COLLECTION

  ZC:这里 只是理解了大概的结构,理解如下:先判断是 长条目 还是 短条目(结构类似 只是 所跟的数据长度不同)(长条目 很少使用)

  (1)第1个 byte就是 Item的头,0x05:  (条目头 看 HID1_11.pdf 的 P36)

    bit从高到低: 0000 0101    也就是说:bTag(4位): 0000;bType(2位): 01;bSize(2位): 01

    (A)看 bType是 01 ==> 全局条目  HID1_11.pdf 的 P45

    (B)bTag 是 0000 ==> Usage Page ==> 查看 Hut1_12v2.pdf 的 P14 查找具体的 Usage Page

    (C)bSize为 01 ==> 条蜜头后面只跟 1byte的数据 ==> 数据为 0x01

    (D)数据 0x01就是 bTag的具体数据值,于是来到 Hut1_12v2.pdf 的 P14 查找具体的 "3 Usage Pages"中,查找 0x01就是 "Generic Desktop Controls"。"2.1"中 列出来的一些信息 都可以使用这个方式来查找,bSize为0 就说明 后面没有跟数据

 

 2.2、小的一个概念(如何定义数据,使得USB知道如何传输数据 [ 数据格式 ]):举例子:第3章 UsbMouse 报告描述符

 0xa1, 0x00, //   COLLECTION (Physical)       主Item
0x05, 0x09, // USAGE_PAGE (Button)       全局Item 0x19, 0x01, // USAGE_MINIMUM (Button 1)    局部Item 0x29, 0x03, // USAGE_MAXIMUM (Button 3)    局部Item 0x15, 0x00, // LOGICAL_MINIMUM (0)       全局Item 0x25, 0x01, // LOGICAL_MAXIMUM (1)       全局Item 0x95, 0x03, // REPORT_COUNT (3)         全局Item 0x75, 0x01, // REPORT_SIZE (1)          全局Item 0x81, 0x02, // INPUT (Data,Var,Abs)      主Item 0x95, 0x01, // REPORT_COUNT (1)// ZC: 1个数据域    全局Item 0x75, 0x05, // REPORT_SIZE (5)// ZC: 每个数据域 长度为5bit (这里的单位是bit)  全局Item 0x81, 0x03, // INPUT (Cnst,Var,Abs)      主Item
0x05, 0x01, // USAGE_PAGE (Generic Desktop)  全局Item 0x09, 0x30, // USAGE (X)              局部Item 0x09, 0x31, // USAGE (Y)              局部Item 0x09, 0x38, // USAGE (Wheel)           局部Item 0x15, 0x81, // LOGICAL_MINIMUM (-127)      全局Item 0x25, 0x7f, // LOGICAL_MAXIMUM (127)       全局Item 0x75, 0x08, // REPORT_SIZE (8)          全局Item 0x95, 0x03, // REPORT_COUNT (3)          全局Item 0x81, 0x06, // INPUT (Data,Var,Rel)       主Item 0xc0, // END_COLLECTION            主Item
  ZC:INPUT(输入)的属性:
    Data表示 这些数据可以变动,
    Var 表示 这些数据域是独立的,每个域表示一个意思
    Abs 表示 绝对值。
    Rel 表示 这些值是 相对值。
    Cnst表示 这些值是 常量

   2.2.1、用 (2.A)的理解 来理解 2.2中的一段:

  0x05, 0x09, //     USAGE_PAGE (Button)       全局Item
  0x19, 0x01, //     USAGE_MINIMUM (Button 1)    局部Item
  0x29, 0x03, //     USAGE_MAXIMUM (Button 3)    局部Item
  0x15, 0x00, //     LOGICAL_MINIMUM (0)       全局Item
  0x25, 0x01, //     LOGICAL_MAXIMUM (1)       全局Item
  0x95, 0x03, //     REPORT_COUNT (3)         全局Item
  0x75, 0x01, //     REPORT_SIZE (1)          全局Item
  0x81, 0x02, //     INPUT (Data,Var,Abs)      主Item  // 到这里,描述的是 按键、按键1 按键2 按键3、逻辑最小值0 逻辑最大值1、3个数据域、每个数据域 1bit;
  0x95, 0x01, //     REPORT_COUNT (1)// ZC: 1个数据域    全局Item
  0x75, 0x05, //     REPORT_SIZE (5)// ZC: 每个数据域 长度为5bit (这里的单位是bit)  全局Item
  0x81, 0x03, //     INPUT (Cnst,Var,Abs)      主Item  // 到这里,描述的是 按键、按键1 按键2 按键3、逻辑最小值0 逻辑最大值1、1个数据域、每个数据域 5bit;

    主Item INPUT的data(长度为1字节):0x02-->含义为(bit 从高位到低位依次为) : Reserved (0), No Null position (0), Preferred State (0), Linear (0), No Wrap (0), Absolute (0), Variable (1), Data (0) .

    主Item INPUT的data(长度为1字节)为0x03-->含义为(bit 从高位到低位依次为) : Reserved (0), No Null position (0), Preferred State (0), Linear (0), No Wrap (0), Absolute (0), Variable (1), Constant (1) .

 

  这样来理解 这个 报告描述符中的一整块的 输入数据信息:
    只看INPUT主条目,共有3处
    部分(1):3个域,每个域 大小为1bit(每个域代表的信息是:按钮、按钮值范围1~3、逻辑值范围0~1。域属性:绝对值)
    部分(2):1个域             (域代表的信息是:按钮、按钮值范围1~3、逻辑值范围0~1。域属性:常量)
    部分(3):3个域,每个域 大小为8bit(每个域代表的信息是:常规桌面、X轴、Y轴、滚轮、逻辑值范围-127~127.域属性:相对值)
  这样,总共加起来 一共是占用 32bit的空间
   ...

 

 

3、

4、

5、

 

posted @ 2018-11-26 23:34  DanPianJi  阅读(484)  评论(0)    收藏  举报