1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21/*
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26
27
28
29
30 Hidparser: Solaris implementation
31 _________________________________
32
33
34Report descriptors are basically made of items. Items can be 'Main'
35items, 'Local' Items and 'Global' Items. Local and Global items differ
36in their scope. Local items hold their value only within the main item
37in which they are defined while global items retain their values through
38out all main items unless *redefined*.
39
40Main Items are collection, input, output and feature and end collection
41items. Each of the main items are represented by an 'entity_item' struc-
42ture. Solaris maintains global and local items as a linked list of
43entity_attribute structures in the 'entity_item' structure. Since local
44items are specific to a main item it makes sense to keep local items
45with in the main item. List of global items can't be kept as a single
46global list because they can get redefined in any subsequent main item
47and Solaris won't be able to know what will be the value for each main
48item. Hence they also figure in the list maintained by the entity_item
49structure.
50
51So how do we construct the tree ?
52
53Each main item forms a sibling or child of another main item except for the
54root main item which will always be a Collection main item. Each collect-
55ion item should be closed by an end collection. So root collection's
56sibling will be an end collection. Whatever input, output and feature
57items which fall inside a collection (please see a collection as '{' and
58end collection as '}' in 'C' language) will form a child of the parent
59collection with each of them forming a sibling of each other. i.e if
60an Input main item comes first within a collection then it'll form the
61child of the collection with the subsequent main items being linked as
62siblings of each other. When we reach an end collection, it must form the
63sibling of the collection. This applies for nested collections also. i.e
64if a collection falls within another collection, it'll form a child of
65the parent collection with the 'input','output' and 'feature' main items
66falling within the child collection forming a child of child collection.
67Whatever falls outside the child collection,but inside a parent collection
68will form a sibling of the child collection.
69
70When hidparser starts, it'll get the raw descriptor in a structure called
71'hidparser_tok' structure. Solaris will proceed by taking one byte first
72(which sort of forms a header and indicates how many to follow for each
73item for the 'item data') and then proceeds to take the value for the item
74(which is the item data). This 'hidparser_tok' structure contains a list
75of global and local items. As and when the parser encounters a global item
76it'll add it to the global item list. The same applies for local items also.
77The only difference is that if a global item is getting redefined (i.e the
78global item is already present in the gitem list), then "the global item"
79(i.e one of the global item) is freed and the new one is put instead. Local
80items can get redefined without disturbing the earlier values. This goes
81on till a main item is encountered. When a main item is encountered the
82global item list is copied over to the entity_item structure and the local
83item list will start where the global item list stops ( in the 'entity_
84attribute' list). Before we start on the next item the local item list will
85be freed (in the hidparser_tok structure) but the global item list will be
86maintained since their scope is through out the report descriptor.
87
88The two additions which has happened in this round of changes are the
89support for push|pop and delimiter items. 'push' basically asks the parser
90to copy over the list of global items, while 'pop' takes the last pushed
91list as the current one. The entity_attribute_stack forms a stack of global
92item list pointers from which they can be pop-ed on the gitem list.'delimit-
93er'items basically allows you to interpret the data that is being received
94differently depending on the way you use it and requires the parser to reco-
95gnize only the first 'usage' (which is what Solaris does with my changes).
96
97
98___________________________________________________________________________
99
100Example:
101
102
103Following is the report descriptor dump for Labtec Spaceball (you can call
104it a mouse).
105
106hid1: Index = 0 value =0x5
107hid1: Index = 1 value =0x1
108hid1: Index = 2 value =0x9
109hid1: Index = 3 value =0x8
110hid1: Index = 4 value =0xa1
111hid1: Index = 5 value =0x1
112hid1: Index = 6 value =0xa1
113hid1: Index = 7 value =0x0
114hid1: Index = 8 value =0x85
115hid1: Index = 9 value =0x1
116hid1: Index = 10 value =0x16
117hid1: Index = 11 value =0x0
118hid1: Index = 12 value =0x80
119hid1: Index = 13 value =0x26
120hid1: Index = 14 value =0xff
121hid1: Index = 15 value =0x7f
122hid1: Index = 16 value =0x9
123hid1: Index = 17 value =0x30
124hid1: Index = 18 value =0x9
125hid1: Index = 19 value =0x31
126hid1: Index = 20 value =0x9
127hid1: Index = 21 value =0x32
128hid1: Index = 22 value =0x75
129hid1: Index = 23 value =0x10
130hid1: Index = 24 value =0x95
131hid1: Index = 25 value =0x3
132hid1: Index = 26 value =0x81
133hid1: Index = 27 value =0x2
134hid1: Index = 28 value =0xc0
135hid1: Index = 29 value =0xa1
136hid1: Index = 30 value =0x0
137hid1: Index = 31 value =0x85
138hid1: Index = 32 value =0x2
139hid1: Index = 33 value =0x9
140hid1: Index = 34 value =0x33
141hid1: Index = 35 value =0x9
142hid1: Index = 36 value =0x34
143hid1: Index = 37 value =0x9
144hid1: Index = 38 value =0x35
145hid1: Index = 39 value =0x75
146hid1: Index = 40 value =0x10
147hid1: Index = 41 value =0x95
148hid1: Index = 42 value =0x3
149hid1: Index = 43 value =0x81
150hid1: Index = 44 value =0x2
151hid1: Index = 45 value =0xc0
152hid1: Index = 46 value =0xa1
153hid1: Index = 47 value =0x2
154hid1: Index = 48 value =0x85
155hid1: Index = 49 value =0x3
156hid1: Index = 50 value =0x5
157hid1: Index = 51 value =0x1
158hid1: Index = 52 value =0x9
159hid1: Index = 53 value =0x3a
160hid1: Index = 54 value =0x75
161hid1: Index = 55 value =0x10
162hid1: Index = 56 value =0x95
163hid1: Index = 57 value =0x1
164hid1: Index = 58 value =0x81
165hid1: Index = 59 value =0x2
166hid1: Index = 60 value =0x5
167hid1: Index = 61 value =0x9
168hid1: Index = 62 value =0x19
169hid1: Index = 63 value =0x1
170hid1: Index = 64 value =0x29
171hid1: Index = 65 value =0xd
172hid1: Index = 66 value =0x15
173hid1: Index = 67 value =0x0
174hid1: Index = 68 value =0x25
175hid1: Index = 69 value =0x1
176hid1: Index = 70 value =0x35
177hid1: Index = 71 value =0x0
178hid1: Index = 72 value =0x45
179hid1: Index = 73 value =0x1
180hid1: Index = 74 value =0x75
181hid1: Index = 75 value =0x1
182hid1: Index = 76 value =0x95
183hid1: Index = 77 value =0xd
184hid1: Index = 78 value =0x81
185hid1: Index = 79 value =0x2
186hid1: Index = 80 value =0x95
187hid1: Index = 81 value =0x3
188hid1: Index = 82 value =0x81
189hid1: Index = 83 value =0x1
190hid1: Index = 84 value =0xc0
191hid1: Index = 85 value =0x5
192hid1: Index = 86 value =0x1
193hid1: Index = 87 value =0x9
194hid1: Index = 88 value =0x3a
195hid1: Index = 89 value =0xa1
196hid1: Index = 90 value =0x2
197hid1: Index = 91 value =0x15
198hid1: Index = 92 value =0x80
199hid1: Index = 93 value =0x25
200hid1: Index = 94 value =0x7f
201hid1: Index = 95 value =0x75
202hid1: Index = 96 value =0x8
203hid1: Index = 97 value =0x9
204hid1: Index = 98 value =0x3a
205hid1: Index = 99 value =0xa1
206hid1: Index = 100 value =0x2
207hid1: Index = 101 value =0x85
208hid1: Index = 102 value =0x4
209hid1: Index = 103 value =0x9
210hid1: Index = 104 value =0x3a
211hid1: Index = 105 value =0x95
212hid1: Index = 106 value =0x4
213hid1: Index = 107 value =0xb1
214hid1: Index = 108 value =0x2
215hid1: Index = 109 value =0xc0
216hid1: Index = 110 value =0xa1
217hid1: Index = 111 value =0x2
218hid1: Index = 112 value =0x85
219hid1: Index = 113 value =0x5
220hid1: Index = 114 value =0x9
221hid1: Index = 115 value =0x3a
222hid1: Index = 116 value =0x95
223hid1: Index = 117 value =0x1
224hid1: Index = 118 value =0xb1
225hid1: Index = 119 value =0x2
226hid1: Index = 120 value =0xc0
227hid1: Index = 121 value =0xa1
228hid1: Index = 122 value =0x2
229hid1: Index = 123 value =0x85
230hid1: Index = 124 value =0x6
231hid1: Index = 125 value =0x9
232hid1: Index = 126 value =0x3a
233hid1: Index = 127 value =0x95
234hid1: Index = 128 value =0x1
235hid1: Index = 129 value =0xb1
236hid1: Index = 130 value =0x2
237hid1: Index = 131 value =0xc0
238hid1: Index = 132 value =0xa1
239hid1: Index = 133 value =0x2
240hid1: Index = 134 value =0x85
241hid1: Index = 135 value =0x7
242hid1: Index = 136 value =0x9
243hid1: Index = 137 value =0x3a
244hid1: Index = 138 value =0x95
245hid1: Index = 139 value =0x10
246hid1: Index = 140 value =0xb1
247hid1: Index = 141 value =0x2
248hid1: Index = 142 value =0xc0
249hid1: Index = 143 value =0xa1
250hid1: Index = 144 value =0x2
251hid1: Index = 145 value =0x85
252hid1: Index = 146 value =0x8
253hid1: Index = 147 value =0x9
254hid1: Index = 148 value =0x3a
255hid1: Index = 149 value =0x95
256hid1: Index = 150 value =0x10
257hid1: Index = 151 value =0xb1
258hid1: Index = 152 value =0x2
259hid1: Index = 153 value =0xc0
260hid1: Index = 154 value =0xa1
261hid1: Index = 155 value =0x2
262hid1: Index = 156 value =0x85
263hid1: Index = 157 value =0x9
264hid1: Index = 158 value =0x9
265hid1: Index = 159 value =0x3a
266hid1: Index = 160 value =0x95
267hid1: Index = 161 value =0xc
268hid1: Index = 162 value =0xb1
269hid1: Index = 163 value =0x2
270hid1: Index = 164 value =0xc0
271hid1: Index = 165 value =0xa1
272hid1: Index = 166 value =0x2
273hid1: Index = 167 value =0x85
274hid1: Index = 168 value =0xa
275hid1: Index = 169 value =0x9
276hid1: Index = 170 value =0x3a
277hid1: Index = 171 value =0x95
278hid1: Index = 172 value =0x1
279hid1: Index = 173 value =0xb1
280hid1: Index = 174 value =0x2
281hid1: Index = 175 value =0xc0
282hid1: Index = 176 value =0xa1
283hid1: Index = 177 value =0x2
284hid1: Index = 178 value =0x85
285hid1: Index = 179 value =0xb
286hid1: Index = 180 value =0x9
287hid1: Index = 181 value =0x3a
288hid1: Index = 182 value =0x95
289hid1: Index = 183 value =0x1
290hid1: Index = 184 value =0xb1
291hid1: Index = 185 value =0x2
292hid1: Index = 186 value =0xc0
293hid1: Index = 187 value =0xa1
294hid1: Index = 188 value =0x2
295hid1: Index = 189 value =0x85
296hid1: Index = 190 value =0xc
297hid1: Index = 191 value =0x9
298hid1: Index = 192 value =0x3a
299hid1: Index = 193 value =0x95
300hid1: Index = 194 value =0x1
301hid1: Index = 195 value =0xb1
302hid1: Index = 196 value =0x2
303hid1: Index = 197 value =0xc0
304hid1: Index = 198 value =0xa1
305hid1: Index = 199 value =0x2
306hid1: Index = 200 value =0x85
307hid1: Index = 201 value =0xd
308hid1: Index = 202 value =0x9
309hid1: Index = 203 value =0x3a
310hid1: Index = 204 value =0x95
311hid1: Index = 205 value =0x2
312hid1: Index = 206 value =0xb1
313hid1: Index = 207 value =0x2
314hid1: Index = 208 value =0xc0
315hid1: Index = 209 value =0xc0
316hid1: Index = 210 value =0xc0
317
318___________________________________________________________________________
319
320Item format:
321
322 ------------------------------------
323 |data|data(8)|tag(4),type(2),size(2)|
324 ------------------------------------
325 |<------'ch'---------->|
326
327___________________________________________________________________________
328
329'hidparser_ReportDescriptor()' will call 'hidparser_scan()' first. Hence
330you will see the 'scanner' output first. The scanner will go through the
331first byte and set hidparser_tok_token to the tag|type value. hidparser_tok
332_leng will be set to size and the 'data' part will be copied to tok_ text.
333'hidparser_ReportDescriptor' will call 'hidparser_ItemList()' to take
334charge of the rest of the parsing.
335
336___________________________________________________________________________
337
338hidparser: scanner: index = 0x0 ch = 0x5 [ = 0x00000101 = tag[0],
339 type[1], size[1] ]
340
341hidparser: scanner: parsed_length = 1 <========size[1] [Type 1 = Global
342 Tag[0] = Usage Page ]
343
344___________________________________________________________________________
345
346Here the length of 1 indicates that the parameter or value associated with
347the usage page is contained in the next character/byte.
348
349___________________________________________________________________________
350
351hidparser: scanner: parsed_text[0] = 0x1,index = 0x1
352___________________________________________________________________________
353
354The next byte contains a value of 0x1. If you look at the usage table spec
355you can see that value of 1 stands for Generic Desktop.
356___________________________________________________________________________
357
358hidparser: scanner: lexical analyzer found 0x5 before translation
359hidparser: scanner: aindex = 0x2
360___________________________________________________________________________
361
362Here 'hidparser_ItemList()' would have been called, which again calls
363'hidparser_Items()'. The purpose of 'hidparser_Items()' is to get through
364all the Items and break when it encounters a main item. 'hidparser_Items()
365will again call 'hidparser_GlobalItem()' and 'hidparser_LocalItem()' to
366make a list of entity attributes in the hidparser_tok structure.
367___________________________________________________________________________
368
369hidparser: hidparser_GlobalItem:index = 0x0 token = 0x4
370
371___________________________________________________________________________
372
373The above goes to gitem list.
374___________________________________________________________________________
375
376
377hidparser: scanner: index = 0x2 ch = 0x9 [ = 0x00001001 = tag[0],
378 type[2], size[1]]
379hidparser: scanner: parsed_length = 1
380hidparser: scanner: parsed_text[0] = 0x8,index = 0x3
381hidparser: scanner: lexical analyzer found 0x9 before translation
382hidparser: scanner: aindex = 0x4
383hidparser: hidparser_LocalItem:index = 0x2 token = 0x8
384___________________________________________________________________________
385
386The above goes to local item list in hidparser_tok_structure.
387___________________________________________________________________________
388
389hidparser: scanner: index = 0x4 ch = 0xa1 [= 0x10100001 = tag[a],
390 type[0], size[1]]
391hidparser: scanner: parsed_length = 1 [ This is a main item ]
392hidparser: scanner: parsed_text[0] = 0x1,index = 0x5
393hidparser: scanner: lexical analyzer found 0xa1 before translation
394hidparser: scanner: aindex = 0x6
395
396____________________________________________________________________________
397
398Here 'hidparser_Items()' will break and pass the control back to 'hidparser_
399ItemList()' which will call 'hidparser_MainItem()' to do things specific to
400a main item (like allocating an entity_item structure and returning it in
401curr_ei). 'hidparser_MainItem()' will allocate an entity_item structure and
402copy the gitem list from hidparser tok structure and add the local item list
403to the end of global item list (in the entity_item_attributes member of
404entity_item structure).
405
406____________________________________________________________________________
407
408hidparser: hidparser_MainItem:index = 0x4 token = 0xa0
409hidparser: scanner: index = 0x6 ch = 0xa1
410hidparser: scanner: parsed_length = 1
411hidparser: scanner: parsed_text[0] = 0x0,index = 0x7
412hidparser: scanner: lexical analyzer found 0xa1 before translation
413hidparser: scanner: aindex = 0x8
414hidparser: Start Collection:cache_ei = 0xcab8d220, curr_ei = 0xcab8d220
415
416____________________________________________________________________________
417
418This forms the root collection. 'cache_ei' or the cached entity_item will
419always point to the last collection encountered. Each entity_item structure
420will have a pointer to the previous collection. This is basically to remove
421recursion when we support nested collections. So if I have something like
422
423Collection
424 ....
425 Collection
426 ....
427 Collection
428 ....
429 End Collection
430 ....
431 End collection
432 ....
433End Collection
434
435and if we assume that the parser is currently @ the third Collection item,
436then cache_ei will point to the third collection, it's prev_ei will point to
437the second collection and it's prev_ei will point to the root collection. As
438we move down the first end collection, cache_ei would have changed to second
439collection and so on.
440____________________________________________________________________________
441
442hidparser: hidparser_MainItem:index = 0x6 token = 0xa0
443
444____________________________________________________________________________
445
446We encounter another collection here [ so a nested collection ]. This 'ei'
447will have a global item list (only, as there are no local items. Remember
448that we preserve global item list in the hidparser_tok_structure while
449blanking out the local item list as we encounter a main item).
450____________________________________________________________________________
451
452hidparser: scanner: index = 0x8 ch = 0x85
453hidparser: scanner: parsed_length = 1
454hidparser: scanner: parsed_text[0] = 0x1,index = 0x9
455hidparser: scanner: lexical analyzer found 0x85 before translation
456hidparser: scanner: aindex = 0xa
457hidparser: Start Collection:cache_ei = 0xcab84db0, curr_ei = 0xcab84db0
458
459
460hidparser: hidparser_GlobalItem:index = 0x8 token = 0x84
461_____________________________________________________________________________
462
463This is a global item. Will get added to already existent Usage page GI in the
464'hidparser_tok' structure.
465
466hidparser: scanner: index = 0xa ch = 0x16
467hidparser: scanner: parsed_length = 2
468hidparser: scanner: parsed_text[0] = 0x0,index = 0xb
469hidparser: scanner: parsed_text[1] = 0x80,index = 0xc
470hidparser: scanner: lexical analyzer found 0x16 before translation
471hidparser: scanner: aindex = 0xd
472hidparser: hidparser_GlobalItem:index = 0xa token = 0x14
473hidparser: scanner: index = 0xd ch = 0x26
474hidparser: scanner: parsed_length = 2
475hidparser: scanner: parsed_text[0] = 0xff,index = 0xe
476hidparser: scanner: parsed_text[1] = 0x7f,index = 0xf
477hidparser: scanner: lexical analyzer found 0x26 before translation
478hidparser: scanner: aindex = 0x10
479hidparser: hidparser_GlobalItem:index = 0xd token = 0x24
480hidparser: scanner: index = 0x10 ch = 0x9
481hidparser: scanner: parsed_length = 1
482hidparser: scanner: parsed_text[0] = 0x30,index = 0x11
483hidparser: scanner: lexical analyzer found 0x9 before translation
484hidparser: scanner: aindex = 0x12
485hidparser: hidparser_LocalItem:index = 0x10 token = 0x8
486hidparser: scanner: index = 0x12 ch = 0x9
487hidparser: scanner: parsed_length = 1
488hidparser: scanner: parsed_text[0] = 0x31,index = 0x13
489hidparser: scanner: lexical analyzer found 0x9 before translation
490hidparser: scanner: aindex = 0x14
491hidparser: hidparser_LocalItem:index = 0x12 token = 0x8
492hidparser: scanner: index = 0x14 ch = 0x9
493hidparser: scanner: parsed_length = 1
494hidparser: scanner: parsed_text[0] = 0x32,index = 0x15
495hidparser: scanner: lexical analyzer found 0x9 before translation
496hidparser: scanner: aindex = 0x16
497hidparser: hidparser_LocalItem:index = 0x14 token = 0x8
498hidparser: scanner: index = 0x16 ch = 0x75
499hidparser: scanner: parsed_length = 1
500hidparser: scanner: parsed_text[0] = 0x10,index = 0x17
501hidparser: scanner: lexical analyzer found 0x75 before translation
502hidparser: scanner: aindex = 0x18
503hidparser: hidparser_GlobalItem:index = 0x16 token = 0x74
504hidparser: scanner: index = 0x18 ch = 0x95
505hidparser: scanner: parsed_length = 1
506hidparser: scanner: parsed_text[0] = 0x3,index = 0x19
507hidparser: scanner: lexical analyzer found 0x95 before translation
508hidparser: scanner: aindex = 0x1a
509hidparser: hidparser_GlobalItem:index = 0x18 token = 0x94
510hidparser: scanner: index = 0x1a ch = 0x81
511hidparser: scanner: parsed_length = 1
512hidparser: scanner: parsed_text[0] = 0x2,index = 0x1b
513hidparser: scanner: lexical analyzer found 0x81 before translation
514hidparser: scanner: aindex = 0x1c
515hidparser: hidparser_MainItem:index = 0x1a token = 0x80
516hidparser: scanner: index = 0x1c ch = 0xc0
517hidparser: scanner: parsed_length = 0
518hidparser: scanner: lexical analyzer found 0xc0 before translation
519hidparser: scanner: aindex = 0x1d
520hidparser: Main Item: token = 0x80, curr_ei = 0xcab7ecf8 will be the
521 child of prev_ei = 0xcab84db0, cache_ei being 0xcab84db0
522
523___________________________________________________________________________
524
525This is the Input main item and will form the child of collection @ 0xcab84-
526db0.
527___________________________________________________________________________
528
529hidparser: hidparser_MainItem:index = 0x1c token = 0xc0
530hidparser: scanner: index = 0x1d ch = 0xa1
531hidparser: scanner: parsed_length = 1
532hidparser: scanner: parsed_text[0] = 0x0,index = 0x1e
533hidparser: scanner: lexical analyzer found 0xa1 before translation
534hidparser: scanner: aindex = 0x1f
535hidparser: End Collection: cache_ei = 0xcab84db0, curr_ei = 0xcab84630
536____________________________________________________________________________
537
538This End collection and will for the right sibling of 0xcab84db0 which will
539make cache_ei point to root collection.
540____________________________________________________________________________
541
542hidparser: hidparser_MainItem:index = 0x1d token = 0xa0
543hidparser: scanner: index = 0x1f ch = 0x85
544hidparser: scanner: parsed_length = 1
545hidparser: scanner: parsed_text[0] = 0x2,index = 0x20
546hidparser: scanner: lexical analyzer found 0x85 before translation
547hidparser: scanner: aindex = 0x21
548hidparser: Start Collection:cache_ei = 0xcab84750, curr_ei = 0xcab84750
549____________________________________________________________________________
550
551Again a Collection Item.
552
553The tree corresponding to the above list will be
554
555hidparser: Usage Page(0x1) <---------------------- GI
556hidparser: Usage(0x8) <--------------------------- LI
557hidparser: Collection(0x1)<----------------------- MI
558hidparser: Usage Page(0x1)<------------------ Carried over GI
559hidparser: Collection(0x0)<------------------ MI
560hidparser: Usage Page(0x1)<------------- Carried over GI
561hidparser: Report Id(0x1)<-------------- GI [ New ]
562hidparser: Logical Minimum(0x8000)<----- GI
563hidparser: Logical Maximum(0x7FFF)<----- GI
564hidparser: Report Size(0x10)<----------- GI
565hidparser: Report Count(0x3)<----------- GI
566hidparser: Usage(0x30)<----------------- LI
567hidparser: Usage(0x31)<----------------- LI
568hidparser: Usage(0x32)<----------------- LI
569hidparser: Input(0x2)<------------------ MI
570hidparser: End Collection(0x0)<-------------- MI
571hidparser: Usage Page(0x1)<------------------ Carried over GI
572hidparser: Report Id(0x1)<------------------- Carried over GI
573hidparser: Logical Minimum(0x8000)<---------- " "
574hidparser: Logical Maximum(0x7FFF)<---------- " "
575hidparser: Report Size(0x10)<---------------- " "
576hidparser: Report Count(0x3)<---------------- " "
577hidparser: Collection(0x0)<------------------ MI
578
579The actual tree corresponding to a descriptor dump will be
580
581
582 0x5, 0x1, /* Usage Page (Generic Desktop) */
583 0x9, 0x8, /* Usage (0x8:Multi-axis controller) */
584 0xa1, 0x1, /* Collection (Application) */
585 0xa1, 0, /* Collection (Physical) */
586 0x85, 0x1, /* Report ID (0x1) */
587 0x16, 0, 0x80, /* Logical Minimum (0x8000) */
588 0x26, 0xff, 0x7f, /* Logical Maximum (0x7fff) */
589 0x9, 0x30, /* Usage (0x30:X) */
590 0x9, 0x31, /* Usage (0x31:Y) */
591 0x9, 0x32, /* Usage (0x32:Z) */
592 0x75, 0x10, /* Report Size (0x10) */
593 0x95, 0x3, /* Report Count (0x3) */
594 0x81, 0x2, /* Input (Data, Variable, Absolute) */
595 0xc0, /* End Collection */
596 0xa1, 0, /* Collection (Physical) */
597
598As can be seen, the tree that Solaris constructs have carried over GI extra
599which is the only difference. But that doesn't make a difference in the way
600we handle data.
601
602There are somethings to be noted at this point. If subsequently we encount-
603er another global item which has already been defined (say report size),
604then we will go to the global list maintained in the 'hidparser_tok' st-
605ructure and replace the already existant one (i.e report size(0x10) with
606the new one ).
607
608For end collection main item, we don't attach the global item list to the
609entity item structure.
610
611The rest of the document is a continuation of where we left off the parsing.
612The theory of operation is the same.
613
614___________________________________________________________________________
615
616
617hidparser: hidparser_GlobalItem:index = 0x1f token = 0x84
618hidparser: scanner: index = 0x21 ch = 0x9
619hidparser: scanner: parsed_length = 1
620hidparser: scanner: parsed_text[0] = 0x33,index = 0x22
621hidparser: scanner: lexical analyzer found 0x9 before translation
622hidparser: scanner: aindex = 0x23
623hidparser: hidparser_LocalItem:index = 0x21 token = 0x8
624hidparser: scanner: index = 0x23 ch = 0x9
625hidparser: scanner: parsed_length = 1
626hidparser: scanner: parsed_text[0] = 0x34,index = 0x24
627hidparser: scanner: lexical analyzer found 0x9 before translation
628hidparser: scanner: aindex = 0x25
629hidparser: hidparser_LocalItem:index = 0x23 token = 0x8
630hidparser: scanner: index = 0x25 ch = 0x9
631hidparser: scanner: parsed_length = 1
632hidparser: scanner: parsed_text[0] = 0x35,index = 0x26
633hidparser: scanner: lexical analyzer found 0x9 before translation
634hidparser: scanner: aindex = 0x27
635hidparser: hidparser_LocalItem:index = 0x25 token = 0x8
636hidparser: scanner: index = 0x27 ch = 0x75
637hidparser: scanner: parsed_length = 1
638hidparser: scanner: parsed_text[0] = 0x10,index = 0x28
639hidparser: scanner: lexical analyzer found 0x75 before translation
640hidparser: scanner: aindex = 0x29
641hidparser: hidparser_GlobalItem:index = 0x27 token = 0x74
642hidparser: scanner: index = 0x29 ch = 0x95
643hidparser: scanner: parsed_length = 1
644hidparser: scanner: parsed_text[0] = 0x3,index = 0x2a
645hidparser: scanner: lexical analyzer found 0x95 before translation
646hidparser: scanner: aindex = 0x2b
647hidparser: hidparser_GlobalItem:index = 0x29 token = 0x94
648hidparser: scanner: index = 0x2b ch = 0x81
649hidparser: scanner: parsed_length = 1
650hidparser: scanner: parsed_text[0] = 0x2,index = 0x2c
651hidparser: scanner: lexical analyzer found 0x81 before translation
652hidparser: scanner: aindex = 0x2d
653hidparser: hidparser_MainItem:index = 0x2b token = 0x80
654hidparser: scanner: index = 0x2d ch = 0xc0
655hidparser: scanner: parsed_length = 0
656hidparser: scanner: lexical analyzer found 0xc0 before translation
657hidparser: scanner: aindex = 0x2e
658hidparser: Main Item: token = 0x80, curr_ei = 0xcab7e098 will be the
659 child of prev_ei = 0xcab84750, cache_ei being 0xcab84750
660hidparser: hidparser_MainItem:index = 0x2d token = 0xc0
661hidparser: scanner: index = 0x2e ch = 0xa1
662hidparser: scanner: parsed_length = 1
663hidparser: scanner: parsed_text[0] = 0x2,index = 0x2f
664hidparser: scanner: lexical analyzer found 0xa1 before translation
665hidparser: scanner: aindex = 0x30
666hidparser: End Collection: cache_ei = 0xcab84750, curr_ei = 0xcab7af40
667hidparser: hidparser_MainItem:index = 0x2e token = 0xa0
668hidparser: scanner: index = 0x30 ch = 0x85
669hidparser: scanner: parsed_length = 1
670hidparser: scanner: parsed_text[0] = 0x3,index = 0x31
671hidparser: scanner: lexical analyzer found 0x85 before translation
672hidparser: scanner: aindex = 0x32
673hidparser: Start Collection:cache_ei = 0xcab7ad30, curr_ei = 0xcab7ad30
674hidparser: hidparser_GlobalItem:index = 0x30 token = 0x84
675hidparser: scanner: index = 0x32 ch = 0x5
676hidparser: scanner: parsed_length = 1
677hidparser: scanner: parsed_text[0] = 0x1,index = 0x33
678hidparser: scanner: lexical analyzer found 0x5 before translation
679hidparser: scanner: aindex = 0x34
680hidparser: hidparser_GlobalItem:index = 0x32 token = 0x4
681hidparser: scanner: index = 0x34 ch = 0x9
682hidparser: scanner: parsed_length = 1
683hidparser: scanner: parsed_text[0] = 0x3a,index = 0x35
684hidparser: scanner: lexical analyzer found 0x9 before translation
685hidparser: scanner: aindex = 0x36
686hidparser: hidparser_LocalItem:index = 0x34 token = 0x8
687hidparser: scanner: index = 0x36 ch = 0x75
688hidparser: scanner: parsed_length = 1
689hidparser: scanner: parsed_text[0] = 0x10,index = 0x37
690hidparser: scanner: lexical analyzer found 0x75 before translation
691hidparser: scanner: aindex = 0x38
692hidparser: hidparser_GlobalItem:index = 0x36 token = 0x74
693hidparser: scanner: index = 0x38 ch = 0x95
694hidparser: scanner: parsed_length = 1
695hidparser: scanner: parsed_text[0] = 0x1,index = 0x39
696hidparser: scanner: lexical analyzer found 0x95 before translation
697hidparser: scanner: aindex = 0x3a
698hidparser: hidparser_GlobalItem:index = 0x38 token = 0x94
699hidparser: scanner: index = 0x3a ch = 0x81
700hidparser: scanner: parsed_length = 1
701hidparser: scanner: parsed_text[0] = 0x2,index = 0x3b
702hidparser: scanner: lexical analyzer found 0x81 before translation
703hidparser: scanner: aindex = 0x3c
704hidparser: hidparser_MainItem:index = 0x3a token = 0x80
705hidparser: scanner: index = 0x3c ch = 0x5
706hidparser: scanner: parsed_length = 1
707hidparser: scanner: parsed_text[0] = 0x9,index = 0x3d
708hidparser: scanner: lexical analyzer found 0x5 before translation
709hidparser: scanner: aindex = 0x3e
710hidparser: Main Item: token = 0x80, curr_ei = 0xcab7ad60 will be the
711 child of prev_ei = 0xcab7ad30, cache_ei being 0xcab7ad30
712hidparser: hidparser_GlobalItem:index = 0x3c token = 0x4
713hidparser: scanner: index = 0x3e ch = 0x19
714hidparser: scanner: parsed_length = 1
715hidparser: scanner: parsed_text[0] = 0x1,index = 0x3f
716hidparser: scanner: lexical analyzer found 0x19 before translation
717hidparser: scanner: aindex = 0x40
718hidparser: hidparser_LocalItem:index = 0x3e token = 0x18
719hidparser: scanner: index = 0x40 ch = 0x29
720hidparser: scanner: parsed_length = 1
721hidparser: scanner: parsed_text[0] = 0xd,index = 0x41
722hidparser: scanner: lexical analyzer found 0x29 before translation
723hidparser: scanner: aindex = 0x42
724hidparser: hidparser_LocalItem:index = 0x40 token = 0x28
725hidparser: scanner: index = 0x42 ch = 0x15
726hidparser: scanner: parsed_length = 1
727hidparser: scanner: parsed_text[0] = 0x0,index = 0x43
728hidparser: scanner: lexical analyzer found 0x15 before translation
729hidparser: scanner: aindex = 0x44
730hidparser: hidparser_GlobalItem:index = 0x42 token = 0x14
731hidparser: scanner: index = 0x44 ch = 0x25
732hidparser: scanner: parsed_length = 1
733hidparser: scanner: parsed_text[0] = 0x1,index = 0x45
734hidparser: scanner: lexical analyzer found 0x25 before translation
735hidparser: scanner: aindex = 0x46
736hidparser: hidparser_GlobalItem:index = 0x44 token = 0x24
737hidparser: scanner: index = 0x46 ch = 0x35
738hidparser: scanner: parsed_length = 1
739hidparser: scanner: parsed_text[0] = 0x0,index = 0x47
740hidparser: scanner: lexical analyzer found 0x35 before translation
741hidparser: scanner: aindex = 0x48
742hidparser: hidparser_GlobalItem:index = 0x46 token = 0x34
743hidparser: scanner: index = 0x48 ch = 0x45
744hidparser: scanner: parsed_length = 1
745hidparser: scanner: parsed_text[0] = 0x1,index = 0x49
746hidparser: scanner: lexical analyzer found 0x45 before translation
747hidparser: scanner: aindex = 0x4a
748hidparser: hidparser_GlobalItem:index = 0x48 token = 0x44
749hidparser: scanner: index = 0x4a ch = 0x75
750hidparser: scanner: parsed_length = 1
751hidparser: scanner: parsed_text[0] = 0x1,index = 0x4b
752hidparser: scanner: lexical analyzer found 0x75 before translation
753hidparser: scanner: aindex = 0x4c
754hidparser: hidparser_GlobalItem:index = 0x4a token = 0x74
755hidparser: scanner: index = 0x4c ch = 0x95
756hidparser: scanner: parsed_length = 1
757hidparser: scanner: parsed_text[0] = 0xd,index = 0x4d
758hidparser: scanner: lexical analyzer found 0x95 before translation
759hidparser: scanner: aindex = 0x4e
760hidparser: hidparser_GlobalItem:index = 0x4c token = 0x94
761hidparser: scanner: index = 0x4e ch = 0x81
762hidparser: scanner: parsed_length = 1
763hidparser: scanner: parsed_text[0] = 0x2,index = 0x4f
764hidparser: scanner: lexical analyzer found 0x81 before translation
765hidparser: scanner: aindex = 0x50
766hidparser: hidparser_MainItem:index = 0x4e token = 0x80
767hidparser: scanner: index = 0x50 ch = 0x95
768hidparser: scanner: parsed_length = 1
769hidparser: scanner: parsed_text[0] = 0x3,index = 0x51
770hidparser: scanner: lexical analyzer found 0x95 before translation
771hidparser: scanner: aindex = 0x52
772hidparser: Main Item: token = 0x80, curr_ei = 0xcab7ecc8 will be the
773 right sibling of prev_ei = 0xcab7ad60, cache_ei being 0xc
774ab7ad30
775hidparser: hidparser_GlobalItem:index = 0x50 token = 0x94
776hidparser: scanner: index = 0x52 ch = 0x81
777hidparser: scanner: parsed_length = 1
778hidparser: scanner: parsed_text[0] = 0x1,index = 0x53
779hidparser: scanner: lexical analyzer found 0x81 before translation
780hidparser: scanner: aindex = 0x54
781hidparser: hidparser_MainItem:index = 0x52 token = 0x80
782hidparser: scanner: index = 0x54 ch = 0xc0
783hidparser: scanner: parsed_length = 0
784hidparser: scanner: lexical analyzer found 0xc0 before translation
785hidparser: scanner: aindex = 0x55
786hidparser: Main Item: token = 0x80, curr_ei = 0xcab7ec98 will be the
787 right sibling of prev_ei = 0xcab7ecc8, cache_ei being 0xc
788ab7ad30
789hidparser: hidparser_MainItem:index = 0x54 token = 0xc0
790hidparser: scanner: index = 0x55 ch = 0x5
791hidparser: scanner: parsed_length = 1
792hidparser: scanner: parsed_text[0] = 0x1,index = 0x56
793hidparser: scanner: lexical analyzer found 0x5 before translation
794hidparser: scanner: aindex = 0x57
795hidparser: End Collection: cache_ei = 0xcab7ad30, curr_ei = 0xcab7ad00
796hidparser: hidparser_GlobalItem:index = 0x55 token = 0x4
797hidparser: scanner: index = 0x57 ch = 0x9
798hidparser: scanner: parsed_length = 1
799hidparser: scanner: parsed_text[0] = 0x3a,index = 0x58
800hidparser: scanner: lexical analyzer found 0x9 before translation
801hidparser: scanner: aindex = 0x59
802hidparser: hidparser_LocalItem:index = 0x57 token = 0x8
803hidparser: scanner: index = 0x59 ch = 0xa1
804hidparser: scanner: parsed_length = 1
805hidparser: scanner: parsed_text[0] = 0x2,index = 0x5a
806hidparser: scanner: lexical analyzer found 0xa1 before translation
807hidparser: scanner: aindex = 0x5b
808hidparser: hidparser_MainItem:index = 0x59 token = 0xa0
809hidparser: scanner: index = 0x5b ch = 0x15
810hidparser: scanner: parsed_length = 1
811hidparser: scanner: parsed_text[0] = 0x80,index = 0x5c
812hidparser: scanner: lexical analyzer found 0x15 before translation
813hidparser: scanner: aindex = 0x5d
814hidparser: Start Collection:cache_ei = 0xcab7ea58, curr_ei = 0xcab7ea58
815hidparser: hidparser_GlobalItem:index = 0x5b token = 0x14
816hidparser: scanner: index = 0x5d ch = 0x25
817hidparser: scanner: parsed_length = 1
818hidparser: scanner: parsed_text[0] = 0x7f,index = 0x5e
819hidparser: scanner: lexical analyzer found 0x25 before translation
820hidparser: scanner: aindex = 0x5f
821hidparser: hidparser_GlobalItem:index = 0x5d token = 0x24
822hidparser: scanner: index = 0x5f ch = 0x75
823hidparser: scanner: parsed_length = 1
824hidparser: scanner: parsed_text[0] = 0x8,index = 0x60
825hidparser: scanner: lexical analyzer found 0x75 before translation
826hidparser: scanner: aindex = 0x61
827hidparser: hidparser_GlobalItem:index = 0x5f token = 0x74
828hidparser: scanner: index = 0x61 ch = 0x9
829hidparser: scanner: parsed_length = 1
830hidparser: scanner: parsed_text[0] = 0x3a,index = 0x62
831hidparser: scanner: lexical analyzer found 0x9 before translation
832hidparser: scanner: aindex = 0x63
833hidparser: hidparser_LocalItem:index = 0x61 token = 0x8
834hidparser: scanner: index = 0x63 ch = 0xa1
835hidparser: scanner: parsed_length = 1
836hidparser: scanner: parsed_text[0] = 0x2,index = 0x64
837hidparser: scanner: lexical analyzer found 0xa1 before translation
838hidparser: scanner: aindex = 0x65
839hidparser: hidparser_MainItem:index = 0x63 token = 0xa0
840hidparser: scanner: index = 0x65 ch = 0x85
841hidparser: scanner: parsed_length = 1
842hidparser: scanner: parsed_text[0] = 0x4,index = 0x66
843hidparser: scanner: lexical analyzer found 0x85 before translation
844hidparser: scanner: aindex = 0x67
845hidparser: Start Collection:cache_ei = 0xcab7ea88, curr_ei = 0xcab7ea88
846hidparser: hidparser_GlobalItem:index = 0x65 token = 0x84
847hidparser: scanner: index = 0x67 ch = 0x9
848hidparser: scanner: parsed_length = 1
849hidparser: scanner: parsed_text[0] = 0x3a,index = 0x68
850hidparser: scanner: lexical analyzer found 0x9 before translation
851hidparser: scanner: aindex = 0x69
852hidparser: hidparser_LocalItem:index = 0x67 token = 0x8
853hidparser: scanner: index = 0x69 ch = 0x95
854hidparser: scanner: parsed_length = 1
855hidparser: scanner: parsed_text[0] = 0x4,index = 0x6a
856hidparser: scanner: lexical analyzer found 0x95 before translation
857hidparser: scanner: aindex = 0x6b
858hidparser: hidparser_GlobalItem:index = 0x69 token = 0x94
859hidparser: scanner: index = 0x6b ch = 0xb1
860hidparser: scanner: parsed_length = 1
861hidparser: scanner: parsed_text[0] = 0x2,index = 0x6c
862hidparser: scanner: lexical analyzer found 0xb1 before translation
863hidparser: scanner: aindex = 0x6d
864hidparser: hidparser_MainItem:index = 0x6b token = 0xb0
865hidparser: scanner: index = 0x6d ch = 0xc0
866hidparser: scanner: parsed_length = 0
867hidparser: scanner: lexical analyzer found 0xc0 before translation
868hidparser: scanner: aindex = 0x6e
869hidparser: Main Item: token = 0xb0, curr_ei = 0xcab7acd0 will be the
870 child of prev_ei = 0xcab7ea88, cache_ei being 0xcab7ea88
871hidparser: hidparser_MainItem:index = 0x6d token = 0xc0
872hidparser: scanner: index = 0x6e ch = 0xa1
873hidparser: scanner: parsed_length = 1
874hidparser: scanner: parsed_text[0] = 0x2,index = 0x6f
875hidparser: scanner: lexical analyzer found 0xa1 before translation
876hidparser: scanner: aindex = 0x70
877hidparser: End Collection: cache_ei = 0xcab7ea88, curr_ei = 0xcab7ab20
878hidparser: hidparser_MainItem:index = 0x6e token = 0xa0
879hidparser: scanner: index = 0x70 ch = 0x85
880hidparser: scanner: parsed_length = 1
881hidparser: scanner: parsed_text[0] = 0x5,index = 0x71
882hidparser: scanner: lexical analyzer found 0x85 before translation
883hidparser: scanner: aindex = 0x72
884hidparser: Start Collection:cache_ei = 0xcab7aaf0, curr_ei = 0xcab7aaf0
885hidparser: hidparser_GlobalItem:index = 0x70 token = 0x84
886hidparser: scanner: index = 0x72 ch = 0x9
887hidparser: scanner: parsed_length = 1
888hidparser: scanner: parsed_text[0] = 0x3a,index = 0x73
889hidparser: scanner: lexical analyzer found 0x9 before translation
890hidparser: scanner: aindex = 0x74
891hidparser: hidparser_LocalItem:index = 0x72 token = 0x8
892hidparser: scanner: index = 0x74 ch = 0x95
893hidparser: scanner: parsed_length = 1
894hidparser: scanner: parsed_text[0] = 0x1,index = 0x75
895hidparser: scanner: lexical analyzer found 0x95 before translation
896hidparser: scanner: aindex = 0x76
897hidparser: hidparser_GlobalItem:index = 0x74 token = 0x94
898hidparser: scanner: index = 0x76 ch = 0xb1
899hidparser: scanner: parsed_length = 1
900hidparser: scanner: parsed_text[0] = 0x2,index = 0x77
901hidparser: scanner: lexical analyzer found 0xb1 before translation
902hidparser: scanner: aindex = 0x78
903hidparser: hidparser_MainItem:index = 0x76 token = 0xb0
904hidparser: scanner: index = 0x78 ch = 0xc0
905hidparser: scanner: parsed_length = 0
906hidparser: scanner: lexical analyzer found 0xc0 before translation
907hidparser: scanner: aindex = 0x79
908hidparser: Main Item: token = 0xb0, curr_ei = 0xcab7aac0 will be the
909 child of prev_ei = 0xcab7aaf0, cache_ei being 0xcab7aaf0
910hidparser: hidparser_MainItem:index = 0x78 token = 0xc0
911hidparser: scanner: index = 0x79 ch = 0xa1
912hidparser: scanner: parsed_length = 1
913hidparser: scanner: parsed_text[0] = 0x2,index = 0x7a
914hidparser: scanner: lexical analyzer found 0xa1 before translation
915hidparser: scanner: aindex = 0x7b
916hidparser: End Collection: cache_ei = 0xcab7aaf0, curr_ei = 0xcab7e548
917hidparser: hidparser_MainItem:index = 0x79 token = 0xa0
918hidparser: scanner: index = 0x7b ch = 0x85
919hidparser: scanner: parsed_length = 1
920hidparser: scanner: parsed_text[0] = 0x6,index = 0x7c
921hidparser: scanner: lexical analyzer found 0x85 before translation
922hidparser: scanner: aindex = 0x7d
923hidparser: Start Collection:cache_ei = 0xcab7ea28, curr_ei = 0xcab7ea28
924hidparser: hidparser_GlobalItem:index = 0x7b token = 0x84
925hidparser: scanner: index = 0x7d ch = 0x9
926hidparser: scanner: parsed_length = 1
927hidparser: scanner: parsed_text[0] = 0x3a,index = 0x7e
928hidparser: scanner: lexical analyzer found 0x9 before translation
929hidparser: scanner: aindex = 0x7f
930hidparser: hidparser_LocalItem:index = 0x7d token = 0x8
931hidparser: scanner: index = 0x7f ch = 0x95
932hidparser: scanner: parsed_length = 1
933hidparser: scanner: parsed_text[0] = 0x1,index = 0x80
934hidparser: scanner: lexical analyzer found 0x95 before translation
935hidparser: scanner: aindex = 0x81
936hidparser: hidparser_GlobalItem:index = 0x7f token = 0x94
937hidparser: scanner: index = 0x81 ch = 0xb1
938hidparser: scanner: parsed_length = 1
939hidparser: scanner: parsed_text[0] = 0x2,index = 0x82
940hidparser: scanner: lexical analyzer found 0xb1 before translation
941hidparser: scanner: aindex = 0x83
942hidparser: hidparser_MainItem:index = 0x81 token = 0xb0
943hidparser: scanner: index = 0x83 ch = 0xc0
944hidparser: scanner: parsed_length = 0
945hidparser: scanner: lexical analyzer found 0xc0 before translation
946hidparser: scanner: aindex = 0x84
947hidparser: Main Item: token = 0xb0, curr_ei = 0xcab7e608 will be the
948 child of prev_ei = 0xcab7ea28, cache_ei being 0xcab7ea28
949hidparser: hidparser_MainItem:index = 0x83 token = 0xc0
950hidparser: scanner: index = 0x84 ch = 0xa1
951hidparser: scanner: parsed_length = 1
952hidparser: scanner: parsed_text[0] = 0x2,index = 0x85
953hidparser: scanner: lexical analyzer found 0xa1 before translation
954hidparser: scanner: aindex = 0x86
955hidparser: End Collection: cache_ei = 0xcab7ea28, curr_ei = 0xcab7e5d8
956hidparser: hidparser_MainItem:index = 0x84 token = 0xa0
957hidparser: scanner: index = 0x86 ch = 0x85
958hidparser: scanner: parsed_length = 1
959hidparser: scanner: parsed_text[0] = 0x7,index = 0x87
960hidparser: scanner: lexical analyzer found 0x85 before translation
961hidparser: scanner: aindex = 0x88
962hidparser: Start Collection:cache_ei = 0xcab7e5a8, curr_ei = 0xcab7e5a8
963hidparser: hidparser_GlobalItem:index = 0x86 token = 0x84
964hidparser: scanner: index = 0x88 ch = 0x9
965hidparser: scanner: parsed_length = 1
966hidparser: scanner: parsed_text[0] = 0x3a,index = 0x89
967hidparser: scanner: lexical analyzer found 0x9 before translation
968hidparser: scanner: aindex = 0x8a
969hidparser: hidparser_LocalItem:index = 0x88 token = 0x8
970hidparser: scanner: index = 0x8a ch = 0x95
971hidparser: scanner: parsed_length = 1
972hidparser: scanner: parsed_text[0] = 0x10,index = 0x8b
973hidparser: scanner: lexical analyzer found 0x95 before translation
974hidparser: scanner: aindex = 0x8c
975hidparser: hidparser_GlobalItem:index = 0x8a token = 0x94
976hidparser: scanner: index = 0x8c ch = 0xb1
977hidparser: scanner: parsed_length = 1
978hidparser: scanner: parsed_text[0] = 0x2,index = 0x8d
979hidparser: scanner: lexical analyzer found 0xb1 before translation
980hidparser: scanner: aindex = 0x8e
981hidparser: hidparser_MainItem:index = 0x8c token = 0xb0
982hidparser: scanner: index = 0x8e ch = 0xc0
983hidparser: scanner: parsed_length = 0
984hidparser: scanner: lexical analyzer found 0xc0 before translation
985hidparser: scanner: aindex = 0x8f
986hidparser: Main Item: token = 0xb0, curr_ei = 0xcab7e578 will be the
987 child of prev_ei = 0xcab7e5a8, cache_ei being 0xcab7e5a8
988hidparser: hidparser_MainItem:index = 0x8e token = 0xc0
989hidparser: scanner: index = 0x8f ch = 0xa1
990hidparser: scanner: parsed_length = 1
991hidparser: scanner: parsed_text[0] = 0x2,index = 0x90
992hidparser: scanner: lexical analyzer found 0xa1 before translation
993hidparser: scanner: aindex = 0x91
994hidparser: End Collection: cache_ei = 0xcab7e5a8, curr_ei = 0xcab7af10
995hidparser: hidparser_MainItem:index = 0x8f token = 0xa0
996hidparser: scanner: index = 0x91 ch = 0x85
997hidparser: scanner: parsed_length = 1
998hidparser: scanner: parsed_text[0] = 0x8,index = 0x92
999hidparser: scanner: lexical analyzer found 0x85 before translation
1000hidparser: scanner: aindex = 0x93
1001hidparser: Start Collection:cache_ei = 0xcab7aa60, curr_ei = 0xcab7aa60
1002hidparser: hidparser_GlobalItem:index = 0x91 token = 0x84
1003hidparser: scanner: index = 0x93 ch = 0x9
1004hidparser: scanner: parsed_length = 1
1005hidparser: scanner: parsed_text[0] = 0x3a,index = 0x94
1006hidparser: scanner: lexical analyzer found 0x9 before translation
1007hidparser: scanner: aindex = 0x95
1008hidparser: hidparser_LocalItem:index = 0x93 token = 0x8
1009hidparser: scanner: index = 0x95 ch = 0x95
1010hidparser: scanner: parsed_length = 1
1011hidparser: scanner: parsed_text[0] = 0x10,index = 0x96
1012hidparser: scanner: lexical analyzer found 0x95 before translation
1013hidparser: scanner: aindex = 0x97
1014hidparser: hidparser_GlobalItem:index = 0x95 token = 0x94
1015hidparser: scanner: index = 0x97 ch = 0xb1
1016hidparser: scanner: parsed_length = 1
1017hidparser: scanner: parsed_text[0] = 0x2,index = 0x98
1018hidparser: scanner: lexical analyzer found 0xb1 before translation
1019hidparser: scanner: aindex = 0x99
1020hidparser: hidparser_MainItem:index = 0x97 token = 0xb0
1021hidparser: scanner: index = 0x99 ch = 0xc0
1022hidparser: scanner: parsed_length = 0
1023hidparser: scanner: lexical analyzer found 0xc0 before translation
1024hidparser: scanner: aindex = 0x9a
1025hidparser: Main Item: token = 0xb0, curr_ei = 0xcab7aa30 will be the
1026 child of prev_ei = 0xcab7aa60, cache_ei being 0xcab7aa60
1027hidparser: hidparser_MainItem:index = 0x99 token = 0xc0
1028hidparser: scanner: index = 0x9a ch = 0xa1
1029hidparser: scanner: parsed_length = 1
1030hidparser: scanner: parsed_text[0] = 0x2,index = 0x9b
1031hidparser: scanner: lexical analyzer found 0xa1 before translation
1032hidparser: scanner: aindex = 0x9c
1033hidparser: End Collection: cache_ei = 0xcab7aa60, curr_ei = 0xcab7aa00
1034hidparser: hidparser_MainItem:index = 0x9a token = 0xa0
1035hidparser: scanner: index = 0x9c ch = 0x85
1036hidparser: scanner: parsed_length = 1
1037hidparser: scanner: parsed_text[0] = 0x9,index = 0x9d
1038hidparser: scanner: lexical analyzer found 0x85 before translation
1039hidparser: scanner: aindex = 0x9e
1040hidparser: Start Collection:cache_ei = 0xcab7a9d0, curr_ei = 0xcab7a9d0
1041hidparser: hidparser_GlobalItem:index = 0x9c token = 0x84
1042hidparser: scanner: index = 0x9e ch = 0x9
1043hidparser: scanner: parsed_length = 1
1044hidparser: scanner: parsed_text[0] = 0x3a,index = 0x9f
1045hidparser: scanner: lexical analyzer found 0x9 before translation
1046hidparser: scanner: aindex = 0xa0
1047hidparser: hidparser_LocalItem:index = 0x9e token = 0x8
1048hidparser: scanner: index = 0xa0 ch = 0x95
1049hidparser: scanner: parsed_length = 1
1050hidparser: scanner: parsed_text[0] = 0xc,index = 0xa1
1051hidparser: scanner: lexical analyzer found 0x95 before translation
1052hidparser: scanner: aindex = 0xa2
1053hidparser: hidparser_GlobalItem:index = 0xa0 token = 0x94
1054hidparser: scanner: index = 0xa2 ch = 0xb1
1055hidparser: scanner: parsed_length = 1
1056hidparser: scanner: parsed_text[0] = 0x2,index = 0xa3
1057hidparser: scanner: lexical analyzer found 0xb1 before translation
1058hidparser: scanner: aindex = 0xa4
1059hidparser: hidparser_MainItem:index = 0xa2 token = 0xb0
1060hidparser: scanner: index = 0xa4 ch = 0xc0
1061hidparser: scanner: parsed_length = 0
1062hidparser: scanner: lexical analyzer found 0xc0 before translation
1063hidparser: scanner: aindex = 0xa5
1064hidparser: Main Item: token = 0xb0, curr_ei = 0xcab7a9a0 will be the
1065 child of prev_ei = 0xcab7a9d0, cache_ei being 0xcab7a9d0
1066hidparser: hidparser_MainItem:index = 0xa4 token = 0xc0
1067hidparser: scanner: index = 0xa5 ch = 0xa1
1068hidparser: scanner: parsed_length = 1
1069hidparser: scanner: parsed_text[0] = 0x2,index = 0xa6
1070hidparser: scanner: lexical analyzer found 0xa1 before translation
1071hidparser: scanner: aindex = 0xa7
1072hidparser: End Collection: cache_ei = 0xcab7a9d0, curr_ei = 0xcab7a970
1073hidparser: hidparser_MainItem:index = 0xa5 token = 0xa0
1074hidparser: scanner: index = 0xa7 ch = 0x85
1075hidparser: scanner: parsed_length = 1
1076hidparser: scanner: parsed_text[0] = 0xa,index = 0xa8
1077hidparser: scanner: lexical analyzer found 0x85 before translation
1078hidparser: scanner: aindex = 0xa9
1079hidparser: Start Collection:cache_ei = 0xcab7a940, curr_ei = 0xcab7a940
1080hidparser: hidparser_GlobalItem:index = 0xa7 token = 0x84
1081hidparser: scanner: index = 0xa9 ch = 0x9
1082hidparser: scanner: parsed_length = 1
1083hidparser: scanner: parsed_text[0] = 0x3a,index = 0xaa
1084hidparser: scanner: lexical analyzer found 0x9 before translation
1085hidparser: scanner: aindex = 0xab
1086hidparser: hidparser_LocalItem:index = 0xa9 token = 0x8
1087hidparser: scanner: index = 0xab ch = 0x95
1088hidparser: scanner: parsed_length = 1
1089hidparser: scanner: parsed_text[0] = 0x1,index = 0xac
1090hidparser: scanner: lexical analyzer found 0x95 before translation
1091hidparser: scanner: aindex = 0xad
1092hidparser: hidparser_GlobalItem:index = 0xab token = 0x94
1093hidparser: scanner: index = 0xad ch = 0xb1
1094hidparser: scanner: parsed_length = 1
1095hidparser: scanner: parsed_text[0] = 0x2,index = 0xae
1096hidparser: scanner: lexical analyzer found 0xb1 before translation
1097hidparser: scanner: aindex = 0xaf
1098hidparser: hidparser_MainItem:index = 0xad token = 0xb0
1099hidparser: scanner: index = 0xaf ch = 0xc0
1100hidparser: scanner: parsed_length = 0
1101hidparser: scanner: lexical analyzer found 0xc0 before translation
1102hidparser: scanner: aindex = 0xb0
1103hidparser: Main Item: token = 0xb0, curr_ei = 0xcab7a910 will be the
1104 child of prev_ei = 0xcab7a940, cache_ei being 0xcab7a940
1105hidparser: hidparser_MainItem:index = 0xaf token = 0xc0
1106hidparser: scanner: index = 0xb0 ch = 0xa1
1107hidparser: scanner: parsed_length = 1
1108hidparser: scanner: parsed_text[0] = 0x2,index = 0xb1
1109hidparser: scanner: lexical analyzer found 0xa1 before translation
1110hidparser: scanner: aindex = 0xb2
1111hidparser: End Collection: cache_ei = 0xcab7a940, curr_ei = 0xcab7a8e0
1112hidparser: hidparser_MainItem:index = 0xb0 token = 0xa0
1113hidparser: scanner: index = 0xb2 ch = 0x85
1114hidparser: scanner: parsed_length = 1
1115hidparser: scanner: parsed_text[0] = 0xb,index = 0xb3
1116hidparser: scanner: lexical analyzer found 0x85 before translation
1117hidparser: scanner: aindex = 0xb4
1118hidparser: Start Collection:cache_ei = 0xcab7a8b0, curr_ei = 0xcab7a8b0
1119hidparser: hidparser_GlobalItem:index = 0xb2 token = 0x84
1120hidparser: scanner: index = 0xb4 ch = 0x9
1121hidparser: scanner: parsed_length = 1
1122hidparser: scanner: parsed_text[0] = 0x3a,index = 0xb5
1123hidparser: scanner: lexical analyzer found 0x9 before translation
1124hidparser: scanner: aindex = 0xb6
1125hidparser: hidparser_LocalItem:index = 0xb4 token = 0x8
1126hidparser: scanner: index = 0xb6 ch = 0x95
1127hidparser: scanner: parsed_length = 1
1128hidparser: scanner: parsed_text[0] = 0x1,index = 0xb7
1129hidparser: scanner: lexical analyzer found 0x95 before translation
1130hidparser: scanner: aindex = 0xb8
1131hidparser: hidparser_GlobalItem:index = 0xb6 token = 0x94
1132hidparser: scanner: index = 0xb8 ch = 0xb1
1133hidparser: scanner: parsed_length = 1
1134hidparser: scanner: parsed_text[0] = 0x2,index = 0xb9
1135hidparser: scanner: lexical analyzer found 0xb1 before translation
1136hidparser: scanner: aindex = 0xba
1137hidparser: hidparser_MainItem:index = 0xb8 token = 0xb0
1138hidparser: scanner: index = 0xba ch = 0xc0
1139hidparser: scanner: parsed_length = 0
1140hidparser: scanner: lexical analyzer found 0xc0 before translation
1141hidparser: scanner: aindex = 0xbb
1142hidparser: Main Item: token = 0xb0, curr_ei = 0xcab7a880 will be the
1143 child of prev_ei = 0xcab7a8b0, cache_ei being 0xcab7a8b0
1144hidparser: hidparser_MainItem:index = 0xba token = 0xc0
1145hidparser: scanner: index = 0xbb ch = 0xa1
1146hidparser: scanner: parsed_length = 1
1147hidparser: scanner: parsed_text[0] = 0x2,index = 0xbc
1148hidparser: scanner: lexical analyzer found 0xa1 before translation
1149hidparser: scanner: aindex = 0xbd
1150hidparser: End Collection: cache_ei = 0xcab7a8b0, curr_ei = 0xcab7a850
1151hidparser: hidparser_MainItem:index = 0xbb token = 0xa0
1152hidparser: scanner: index = 0xbd ch = 0x85
1153hidparser: scanner: parsed_length = 1
1154hidparser: scanner: parsed_text[0] = 0xc,index = 0xbe
1155hidparser: scanner: lexical analyzer found 0x85 before translation
1156hidparser: scanner: aindex = 0xbf
1157hidparser: Start Collection:cache_ei = 0xcab7a820, curr_ei = 0xcab7a820
1158hidparser: hidparser_GlobalItem:index = 0xbd token = 0x84
1159hidparser: scanner: index = 0xbf ch = 0x9
1160hidparser: scanner: parsed_length = 1
1161hidparser: scanner: parsed_text[0] = 0x3a,index = 0xc0
1162hidparser: scanner: lexical analyzer found 0x9 before translation
1163hidparser: scanner: aindex = 0xc1
1164hidparser: hidparser_LocalItem:index = 0xbf token = 0x8
1165hidparser: scanner: index = 0xc1 ch = 0x95
1166hidparser: scanner: parsed_length = 1
1167hidparser: scanner: parsed_text[0] = 0x1,index = 0xc2
1168hidparser: scanner: lexical analyzer found 0x95 before translation
1169hidparser: scanner: aindex = 0xc3
1170hidparser: hidparser_GlobalItem:index = 0xc1 token = 0x94
1171hidparser: scanner: index = 0xc3 ch = 0xb1
1172hidparser: scanner: parsed_length = 1
1173hidparser: scanner: parsed_text[0] = 0x2,index = 0xc4
1174hidparser: scanner: lexical analyzer found 0xb1 before translation
1175hidparser: scanner: aindex = 0xc5
1176hidparser: hidparser_MainItem:index = 0xc3 token = 0xb0
1177hidparser: scanner: index = 0xc5 ch = 0xc0
1178hidparser: scanner: parsed_length = 0
1179hidparser: scanner: lexical analyzer found 0xc0 before translation
1180hidparser: scanner: aindex = 0xc6
1181hidparser: Main Item: token = 0xb0, curr_ei = 0xcab7a7f0 will be the
1182 child of prev_ei = 0xcab7a820, cache_ei being 0xcab7a820
1183hidparser: hidparser_MainItem:index = 0xc5 token = 0xc0
1184hidparser: scanner: index = 0xc6 ch = 0xa1
1185hidparser: scanner: parsed_length = 1
1186hidparser: scanner: parsed_text[0] = 0x2,index = 0xc7
1187hidparser: scanner: lexical analyzer found 0xa1 before translation
1188hidparser: scanner: aindex = 0xc8
1189hidparser: End Collection: cache_ei = 0xcab7a820, curr_ei = 0xcab7a7c0
1190hidparser: hidparser_MainItem:index = 0xc6 token = 0xa0
1191hidparser: scanner: index = 0xc8 ch = 0x85
1192hidparser: scanner: parsed_length = 1
1193hidparser: scanner: parsed_text[0] = 0xd,index = 0xc9
1194hidparser: scanner: lexical analyzer found 0x85 before translation
1195hidparser: scanner: aindex = 0xca
1196hidparser: Start Collection:cache_ei = 0xcab7a790, curr_ei = 0xcab7a790
1197hidparser: hidparser_GlobalItem:index = 0xc8 token = 0x84
1198hidparser: scanner: index = 0xca ch = 0x9
1199hidparser: scanner: parsed_length = 1
1200hidparser: scanner: parsed_text[0] = 0x3a,index = 0xcb
1201hidparser: scanner: lexical analyzer found 0x9 before translation
1202hidparser: scanner: aindex = 0xcc
1203hidparser: hidparser_LocalItem:index = 0xca token = 0x8
1204hidparser: scanner: index = 0xcc ch = 0x95
1205hidparser: scanner: parsed_length = 1
1206hidparser: scanner: parsed_text[0] = 0x2,index = 0xcd
1207hidparser: scanner: lexical analyzer found 0x95 before translation
1208hidparser: scanner: aindex = 0xce
1209hidparser: hidparser_GlobalItem:index = 0xcc token = 0x94
1210hidparser: scanner: index = 0xce ch = 0xb1
1211hidparser: scanner: parsed_length = 1
1212hidparser: scanner: parsed_text[0] = 0x2,index = 0xcf
1213hidparser: scanner: lexical analyzer found 0xb1 before translation
1214hidparser: scanner: aindex = 0xd0
1215hidparser: hidparser_MainItem:index = 0xce token = 0xb0
1216hidparser: scanner: index = 0xd0 ch = 0xc0
1217hidparser: scanner: parsed_length = 0
1218hidparser: scanner: lexical analyzer found 0xc0 before translation
1219hidparser: scanner: aindex = 0xd1
1220hidparser: Main Item: token = 0xb0, curr_ei = 0xcab7a760 will be the
1221 child of prev_ei = 0xcab7a790, cache_ei being 0xcab7a790
1222hidparser: hidparser_MainItem:index = 0xd0 token = 0xc0
1223hidparser: scanner: index = 0xd1 ch = 0xc0
1224hidparser: scanner: parsed_length = 0
1225hidparser: scanner: lexical analyzer found 0xc0 before translation
1226hidparser: scanner: aindex = 0xd2
1227hidparser: End Collection: cache_ei = 0xcab7a790, curr_ei = 0xcab7a730
1228hidparser: hidparser_MainItem:index = 0xd1 token = 0xc0
1229hidparser: scanner: index = 0xd2 ch = 0xc0
1230hidparser: scanner: parsed_length = 0
1231hidparser: scanner: lexical analyzer found 0xc0 before translation
1232hidparser: scanner: aindex = 0xd3
1233hidparser: End Collection: cache_ei = 0xcab7ea58, curr_ei = 0xcab7a700
1234hidparser: hidparser_MainItem:index = 0xd2 token = 0xc0
1235hidparser: scanner: eindex = 0xd3
1236hidparser: End Collection: cache_ei = 0xcab8d220, curr_ei = 0xcab7a6d0
1237hidparser: Usage Page(0x1)
1238hidparser: Usage(0x8)
1239hidparser: Collection(0x1)
1240hidparser: Usage Page(0x1)
1241hidparser: Collection(0x0)
1242hidparser: Usage Page(0x1)
1243hidparser: Report Id(0x1)
1244hidparser: Logical Minimum(0x8000)
1245hidparser: Logical Maximum(0x7FFF)
1246hidparser: Report Size(0x10)
1247hidparser: Report Count(0x3)
1248hidparser: Usage(0x30)
1249hidparser: Usage(0x31)
1250hidparser: Usage(0x32)
1251hidparser: Input(0x2)
1252hidparser: End Collection(0x0)
1253hidparser: Usage Page(0x1)
1254hidparser: Report Id(0x1)
1255hidparser: Logical Minimum(0x8000)
1256hidparser: Logical Maximum(0x7FFF)
1257hidparser: Report Size(0x10)
1258hidparser: Report Count(0x3)
1259hidparser: Collection(0x0)
1260hidparser: Usage Page(0x1)
1261hidparser: Logical Minimum(0x8000)
1262hidparser: Logical Maximum(0x7FFF)
1263hidparser: Report Id(0x2)
1264hidparser: Report Size(0x10)
1265hidparser: Report Count(0x3)
1266hidparser: Usage(0x33)
1267hidparser: Usage(0x34)
1268hidparser: Usage(0x35)
1269hidparser: Input(0x2)
1270hidparser: End Collection(0x0)
1271hidparser: Usage Page(0x1)
1272hidparser: Logical Minimum(0x8000)
1273hidparser: Logical Maximum(0x7FFF)
1274hidparser: Report Id(0x2)
1275hidparser: Report Size(0x10)
1276hidparser: Report Count(0x3)
1277hidparser: Collection(0x2)
1278hidparser: Logical Minimum(0x8000)
1279hidparser: Logical Maximum(0x7FFF)
1280hidparser: Report Id(0x3)
1281hidparser: Usage Page(0x1)
1282hidparser: Report Size(0x10)
1283hidparser: Report Count(0x1)
1284hidparser: Usage(0x3A)
1285hidparser: Input(0x2)
1286hidparser: Report Id(0x3)
1287hidparser: Usage Page(0x9)
1288hidparser: Logical Minimum(0x0)
1289hidparser: Logical Maximum(0x1)
1290hidparser: Physical Minimum(0x0)
1291hidparser: Physical Maximum(0x1)
1292hidparser: Report Size(0x1)
1293hidparser: Report Count(0xD)
1294hidparser: Usage Minimum(0x1)
1295hidparser: Usage Maximum(0xD)
1296hidparser: Input(0x2)
1297hidparser: Report Id(0x3)
1298hidparser: Usage Page(0x9)
1299hidparser: Logical Minimum(0x0)
1300hidparser: Logical Maximum(0x1)
1301hidparser: Physical Minimum(0x0)
1302hidparser: Physical Maximum(0x1)
1303hidparser: Report Size(0x1)
1304hidparser: Report Count(0x3)
1305hidparser: Input(0x1)
1306hidparser: End Collection(0x0)
1307hidparser: Report Id(0x3)
1308hidparser: Logical Minimum(0x0)
1309hidparser: Logical Maximum(0x1)
1310hidparser: Physical Minimum(0x0)
1311hidparser: Physical Maximum(0x1)
1312hidparser: Report Size(0x1)
1313hidparser: Report Count(0x3)
1314hidparser: Usage Page(0x1)
1315hidparser: Usage(0x3A)
1316hidparser: Collection(0x2)
1317hidparser: Report Id(0x3)
1318hidparser: Physical Minimum(0x0)
1319hidparser: Physical Maximum(0x1)
1320hidparser: Report Count(0x3)
1321hidparser: Usage Page(0x1)
1322hidparser: Logical Minimum(0x80)
1323hidparser: Logical Maximum(0x7F)
1324hidparser: Report Size(0x8)
1325hidparser: Usage(0x3A)
1326hidparser: Collection(0x2)
1327hidparser: Physical Minimum(0x0)
1328hidparser: Physical Maximum(0x1)
1329hidparser: Usage Page(0x1)
1330hidparser: Logical Minimum(0x80)
1331hidparser: Logical Maximum(0x7F)
1332hidparser: Report Size(0x8)
1333hidparser: Report Id(0x4)
1334hidparser: Report Count(0x4)
1335hidparser: Usage(0x3A)
1336hidparser: Feature(0x2)
1337hidparser: End Collection(0x0)
1338hidparser: Physical Minimum(0x0)
1339hidparser: Physical Maximum(0x1)
1340hidparser: Usage Page(0x1)
1341hidparser: Logical Minimum(0x80)
1342hidparser: Logical Maximum(0x7F)
1343hidparser: Report Size(0x8)
1344hidparser: Report Id(0x4)
1345hidparser: Report Count(0x4)
1346hidparser: Collection(0x2)
1347hidparser: Physical Minimum(0x0)
1348hidparser: Physical Maximum(0x1)
1349hidparser: Usage Page(0x1)
1350hidparser: Logical Minimum(0x80)
1351hidparser: Logical Maximum(0x7F)
1352hidparser: Report Size(0x8)
1353hidparser: Report Id(0x5)
1354hidparser: Report Count(0x1)
1355hidparser: Usage(0x3A)
1356hidparser: Feature(0x2)
1357hidparser: End Collection(0x0)
1358hidparser: Physical Minimum(0x0)
1359hidparser: Physical Maximum(0x1)
1360hidparser: Usage Page(0x1)
1361hidparser: Logical Minimum(0x80)
1362hidparser: Logical Maximum(0x7F)
1363hidparser: Report Size(0x8)
1364hidparser: Report Id(0x5)
1365hidparser: Report Count(0x1)
1366hidparser: Collection(0x2)
1367hidparser: Physical Minimum(0x0)
1368hidparser: Physical Maximum(0x1)
1369hidparser: Usage Page(0x1)
1370hidparser: Logical Minimum(0x80)
1371hidparser: Logical Maximum(0x7F)
1372hidparser: Report Size(0x8)
1373hidparser: Report Id(0x6)
1374hidparser: Report Count(0x1)
1375hidparser: Usage(0x3A)
1376hidparser: Feature(0x2)
1377hidparser: End Collection(0x0)
1378hidparser: Physical Minimum(0x0)
1379hidparser: Physical Maximum(0x1)
1380hidparser: Usage Page(0x1)
1381hidparser: Logical Minimum(0x80)
1382hidparser: Logical Maximum(0x7F)
1383hidparser: Report Size(0x8)
1384hidparser: Report Id(0x6)
1385hidparser: Report Count(0x1)
1386hidparser: Collection(0x2)
1387hidparser: Physical Minimum(0x0)
1388hidparser: Physical Maximum(0x1)
1389hidparser: Usage Page(0x1)
1390hidparser: Logical Minimum(0x80)
1391hidparser: Logical Maximum(0x7F)
1392hidparser: Report Size(0x8)
1393hidparser: Report Id(0x7)
1394hidparser: Report Count(0x10)
1395hidparser: Usage(0x3A)
1396hidparser: Feature(0x2)
1397hidparser: End Collection(0x0)
1398hidparser: Physical Minimum(0x0)
1399hidparser: Physical Maximum(0x1)
1400hidparser: Usage Page(0x1)
1401hidparser: Logical Minimum(0x80)
1402hidparser: Logical Maximum(0x7F)
1403hidparser: Report Size(0x8)
1404hidparser: Report Id(0x7)
1405hidparser: Report Count(0x10)
1406hidparser: Collection(0x2)
1407hidparser: Physical Minimum(0x0)
1408hidparser: Physical Maximum(0x1)
1409hidparser: Usage Page(0x1)
1410hidparser: Logical Minimum(0x80)
1411hidparser: Logical Maximum(0x7F)
1412hidparser: Report Size(0x8)
1413hidparser: Report Id(0x8)
1414hidparser: Report Count(0x10)
1415hidparser: Usage(0x3A)
1416hidparser: Feature(0x2)
1417hidparser: End Collection(0x0)
1418hidparser: Physical Minimum(0x0)
1419hidparser: Physical Maximum(0x1)
1420hidparser: Usage Page(0x1)
1421hidparser: Logical Minimum(0x80)
1422hidparser: Logical Maximum(0x7F)
1423hidparser: Report Size(0x8)
1424hidparser: Report Id(0x8)
1425hidparser: Report Count(0x10)
1426hidparser: Collection(0x2)
1427hidparser: Physical Minimum(0x0)
1428hidparser: Physical Maximum(0x1)
1429hidparser: Usage Page(0x1)
1430hidparser: Logical Minimum(0x80)
1431hidparser: Logical Maximum(0x7F)
1432hidparser: Report Size(0x8)
1433hidparser: Report Id(0x9)
1434hidparser: Report Count(0xC)
1435hidparser: Usage(0x3A)
1436hidparser: Feature(0x2)
1437hidparser: End Collection(0x0)
1438hidparser: Physical Minimum(0x0)
1439hidparser: Physical Maximum(0x1)
1440hidparser: Usage Page(0x1)
1441hidparser: Logical Minimum(0x80)
1442hidparser: Logical Maximum(0x7F)
1443hidparser: Report Size(0x8)
1444hidparser: Report Id(0x9)
1445hidparser: Report Count(0xC)
1446hidparser: Collection(0x2)
1447hidparser: Physical Minimum(0x0)
1448hidparser: Physical Maximum(0x1)
1449hidparser: Usage Page(0x1)
1450hidparser: Logical Minimum(0x80)
1451hidparser: Logical Maximum(0x7F)
1452hidparser: Report Size(0x8)
1453hidparser: Report Id(0xA)
1454hidparser: Report Count(0x1)
1455hidparser: Usage(0x3A)
1456hidparser: Feature(0x2)
1457hidparser: End Collection(0x0)
1458hidparser: Physical Minimum(0x0)
1459hidparser: Physical Maximum(0x1)
1460hidparser: Usage Page(0x1)
1461hidparser: Logical Minimum(0x80)
1462hidparser: Logical Maximum(0x7F)
1463hidparser: Report Size(0x8)
1464hidparser: Report Id(0xA)
1465hidparser: Report Count(0x1)
1466hidparser: Collection(0x2)
1467hidparser: Physical Minimum(0x0)
1468hidparser: Physical Maximum(0x1)
1469hidparser: Usage Page(0x1)
1470hidparser: Logical Minimum(0x80)
1471hidparser: Logical Maximum(0x7F)
1472hidparser: Report Size(0x8)
1473hidparser: Report Id(0xB)
1474hidparser: Report Count(0x1)
1475hidparser: Usage(0x3A)
1476hidparser: Feature(0x2)
1477hidparser: End Collection(0x0)
1478hidparser: Physical Minimum(0x0)
1479hidparser: Physical Maximum(0x1)
1480hidparser: Usage Page(0x1)
1481hidparser: Logical Minimum(0x80)
1482hidparser: Logical Maximum(0x7F)
1483hidparser: Report Size(0x8)
1484hidparser: Report Id(0xB)
1485hidparser: Report Count(0x1)
1486hidparser: Collection(0x2)
1487hidparser: Physical Minimum(0x0)
1488hidparser: Physical Maximum(0x1)
1489hidparser: Usage Page(0x1)
1490hidparser: Logical Minimum(0x80)
1491hidparser: Logical Maximum(0x7F)
1492hidparser: Report Size(0x8)
1493hidparser: Report Id(0xC)
1494hidparser: Report Count(0x1)
1495hidparser: Usage(0x3A)
1496hidparser: Feature(0x2)
1497hidparser: End Collection(0x0)
1498hidparser: Physical Minimum(0x0)
1499hidparser: Physical Maximum(0x1)
1500hidparser: Usage Page(0x1)
1501hidparser: Logical Minimum(0x80)
1502hidparser: Logical Maximum(0x7F)
1503hidparser: Report Size(0x8)
1504hidparser: Report Id(0xC)
1505hidparser: Report Count(0x1)
1506hidparser: Collection(0x2)
1507hidparser: Physical Minimum(0x0)
1508hidparser: Physical Maximum(0x1)
1509hidparser: Usage Page(0x1)
1510hidparser: Logical Minimum(0x80)
1511hidparser: Logical Maximum(0x7F)
1512hidparser: Report Size(0x8)
1513hidparser: Report Id(0xD)
1514hidparser: Report Count(0x2)
1515hidparser: Usage(0x3A)
1516hidparser: Feature(0x2)
1517hidparser: End Collection(0x0)
1518hidparser: End Collection(0x0)
1519hidparser: End Collection(0x0)
1520
1521The actual tree is
1522
1523
1524unsigned char hid_report_desc[] = {
1525 0x5, 0x1, /* Usage Page (Generic Desktop) */
1526 0x9, 0x8, /* Usage (0x8:Multi-axis controller) */
1527 0xa1, 0x1, /* Collection (Application) */
1528 0xa1, 0, /* Collection (Physical) */
1529 0x85, 0x1, /* Report ID (0x1) */
1530 0x16, 0, 0x80, /* Logical Minimum (0x8000) */
1531 0x26, 0xff, 0x7f, /* Logical Maximum (0x7fff) */
1532 0x9, 0x30, /* Usage (0x30:X) */
1533 0x9, 0x31, /* Usage (0x31:Y) */
1534 0x9, 0x32, /* Usage (0x32:Z) */
1535 0x75, 0x10, /* Report Size (0x10) */
1536 0x95, 0x3, /* Report Count (0x3) */
1537 0x81, 0x2, /* Input (Data, Variable, Absolute) */
1538 0xc0, /* End Collection */
1539 0xa1, 0, /* Collection (Physical) */
1540 0x85, 0x2, /* Report ID (0x2) */
1541 0x9, 0x33, /* Usage (0x33:Rx) */
1542 0x9, 0x34, /* Usage (0x34:Ry) */
1543 0x9, 0x35, /* Usage (0x35:Rz) */
1544 0x75, 0x10, /* Report Size (0x10) */
1545 0x95, 0x3, /* Report Count (0x3) */
1546 0x81, 0x2, /* Input (Data, Variable, Absolute) */
1547 0xc0, /* End Collection */
1548 0xa1, 0x2, /* Collection (Logical) */
1549 0x85, 0x3, /* Report ID (0x3) */
1550 0x5, 0x1, /* Usage Page (Generic Desktop) */
1551 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1552 0x75, 0x10, /* Report Size (0x10) */
1553 0x95, 0x1, /* Report Count (0x1) */
1554 0x81, 0x2, /* Input (Data, Variable, Absolute) */
1555 0x5, 0x9, /* Usage Page (Button) */
1556 0x19, 0x1, /* Usage Minimum (0x1) */
1557 0x29, 0xd, /* Usage Maximum (0xd) */
1558 0x15, 0, /* Logical Minimum (0) */
1559 0x25, 0x1, /* Logical Maximum (0x1) */
1560 0x35, 0, /* Physical Minimum (0) */
1561 0x45, 0x1, /* Physical Maximum (0x1) */
1562 0x75, 0x1, /* Report Size (0x1) */
1563 0x95, 0xd, /* Report Count (0xd) */
1564 0x81, 0x2, /* Input (Data, Variable, Absolute) */
1565 0x95, 0x3, /* Report Count (0x3) */
1566 0x81, 0x1, /* Input (Constant, Array, Absolute) */
1567 0xc0, /* End Collection */
1568 0x5, 0x1, /* Usage Page (Generic Desktop) */
1569 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1570 0xa1, 0x2, /* Collection (Logical) */
1571 0x15, 0x80, /* Logical Minimum (0x80) */
1572 0x25, 0x7f, /* Logical Maximum (0x7f) */
1573 0x75, 0x8, /* Report Size (0x8) */
1574 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1575 0xa1, 0x2, /* Collection (Logical) */
1576 0x85, 0x4, /* Report ID (0x4) */
1577 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1578 0x95, 0x4, /* Report Count (0x4) */
1579 0xb1, 0x2, /* Feature (Data, Variable, Absolute) */
1580 0xc0, /* End Collection */
1581 0xa1, 0x2, /* Collection (Logical) */
1582 0x85, 0x5, /* Report ID (0x5) */
1583 0x9, 0x3a, /* Usage (0x3a:Counted Buffer) */
1584 0x95, 0x1, /* Report Count (0x1) */
1585 0xb1, 0x2, /* Feature (Data, Variable, Absolute) */
1586 0xc0, /* End Collection */
1587 0xa1, 0x2, /* Collection (Logical) */
1588 0x85, 0x6, /* Report ID (0x6) */
1589 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1590 0x95, 0x1, /* Report Count (0x1) */
1591 0xb1, 0x2, /* Feature (Data, Variable, Absolute) */
1592 0xc0, /* End Collection */
1593 0xa1, 0x2, /* Collection (Logical) */
1594 0x85, 0x7, /* Report ID (0x7) */
1595 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1596 0x95, 0x10, /* Report Count (0x10) */
1597 0xb1, 0x2, /* Feature (Data, Variable, Absolute) */
1598 0xc0, /* End Collection */
1599 0xa1, 0x2, /* Collection (Logical) */
1600 0x85, 0x8, /* Report ID (0x8) */
1601 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1602 0x95, 0x10, /* Report Count (0x10) */
1603 0xb1, 0x2, /* Feature (Data, Variable, Absolute) */
1604 0xc0, /* End Collection */
1605 0xa1, 0x2, /* Collection (Logical) */
1606 0x85, 0x9, /* Report ID (0x9) */
1607 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1608 0x95, 0xc, /* Report Count (0xc) */
1609 0xb1, 0x2, /* Feature (Data, Variable, Absolute) */
1610 0xc0, /* End Collection */
1611 0xa1, 0x2, /* Collection (Logical) */
1612 0x85, 0xa, /* Report ID (0xa) */
1613 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1614 0x95, 0x1, /* Report Count (0x1) */
1615 0xb1, 0x2, /* Feature (Data, Variable, Absolute) */
1616 0xc0, /* End Collection */
1617 0xa1, 0x2, /* Collection (Logical) */
1618 0x85, 0xb, /* Report ID (0xb) */
1619 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1620 0x95, 0x1, /* Report Count (0x1) */
1621 0xb1, 0x2, /* Feature (Data, Variable, Absolute) */
1622 0xc0, /* End Collection */
1623 0xa1, 0x2, /* Collection (Logical) */
1624 0x85, 0xc, /* Report ID (0xc) */
1625 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1626 0x95, 0x1, /* Report Count (0x1) */
1627 0xb1, 0x2, /* Feature (Data, Variable, Absolute) */
1628 0xc0, /* End Collection */
1629 0xa1, 0x2, /* Collection (Logical) */
1630 0x85, 0xd, /* Report ID (0xd) */
1631 0x9, 0x3a, /* Usage (0x3a: Counted Buffer) */
1632 0x95, 0x2, /* Report Count (0x2) */
1633 0xb1, 0x2, /* Feature (Data, Variable, Absolute) */
1634 0xc0, /* End Collection */
1635 0xc0, /* End Collection */
1636 0xc0, /* End Collection */
1637};
1638
1639______________________________________________________________________________
1640