1 /*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 #include "TestHidDescriptor.h"
17 #include "TestHidSensorSpec.h"
18 #include <cstring>
19
20 /**
21 * Example HID sensor descriptors in this file is extracted from published document
22 * "HID Sensors Usage" (hid-sensors-usage.docx). They are added for testing of HidParser.
23 *
24 * It is slightly modified in order to compile.
25 */
26 namespace {
27 /**
28 * Two sensors collection skeleton example.
29 */
30 const unsigned char col1_report_descriptor[] = {
31 HID_USAGE_PAGE_SENSOR,
32 HID_USAGE_SENSOR_TYPE_COLLECTION,
33 HID_COLLECTION(Application),
34
35 HID_REPORT_ID(1),
36 HID_USAGE_PAGE_SENSOR,
37
38 HID_USAGE_SENSOR_TYPE_MOTION_ACCELEROMETER_3D,
39 HID_COLLECTION(Physical),
40
41 //Feature Report Descriptor for Sensor Report ID = 1
42
43 //Input Report Descriptor for Sensor Report ID = 1
44
45 HID_END_COLLECTION, //for Report ID = 1
46
47 HID_REPORT_ID(2),
48 HID_USAGE_PAGE_SENSOR,
49 HID_USAGE_SENSOR_TYPE_MOTION_GYROMETER_3D,
50 HID_COLLECTION(Physical),
51
52 //Feature Report Descriptor for Sensor Report ID = 2
53
54 //Input Report Descriptor for Sensor Report ID = 2
55
56 HID_END_COLLECTION, //for Report ID = 2
57
58 //More sensors follow using the same pattern
59
60 HID_END_COLLECTION //Application
61 };
62
63
64 /**
65 * Composite device descriptor example: two sensors with a keyboard and a mouse.
66 */
67 const unsigned char col2_report_descriptor[] = {
68 //keyboard
69 0x05U, 0x01U, // USAGE PAGE (Generic Desktop)
70 0x09U, 0x06U, // USAGE (Keyboard)
71 0xA1U, 0x01U, // COLLECTION (Application)
72
73 0x85U, 0x03U, // REPORT_ID (1)
74
75 0x15U, 0x00U, // LOGICAL MINIMUM (0)
76 0x25U, 0x01U, // LOGICAL MAXIMUM (1)
77 0x75U, 0x01U, // REPORT SIZE (1)
78 0x95U, 0x08U, // REPORT COUNT (8)
79 0x05U, 0x07U, // USAGE PAGE (Keyboard)
80 0x19U, 0xE0U, // USAGE MINIMUM (Keyboard LeftControl)
81 0x29U, 0xE7U, // USAGE MAXIMUM (Keyboard Right GUI)
82 0x81U, 0x02U, // INPUT (Var)
83
84 0x75U, 0x08U, // REPORT SIZE (8)
85 0x95U, 0x0AU, // REPORT COUNT (10)
86 0x19U, 0x00U, // USAGE MINIMUM (No event)
87 0x29U, 0x91U, // USAGE MAXIMUM (Keyboard LANG2)
88 0x26U, 0xFFU, 0x00U, // LOGICAL MAXIMUM (0xFF)
89 0x81U, 0x00U, // INPUT (Data,Ary,Abs)
90
91 0xC0U, // END COLLECTION, //keyboard
92
93 // Two sensor collection skeleton example:
94 HID_USAGE_PAGE_SENSOR,
95 HID_USAGE_SENSOR_TYPE_COLLECTION,
96 HID_COLLECTION(Application),
97
98 HID_REPORT_ID(2),
99 HID_USAGE_PAGE_SENSOR,
100
101 HID_USAGE_SENSOR_TYPE_MOTION_ACCELEROMETER_3D,
102 HID_COLLECTION(Physical),
103
104 //Feature Report Descriptor for Sensor Report ID = 2
105
106 //Input Report Descriptor for Sensor Report ID = 2
107
108 HID_END_COLLECTION, //for Report ID = 2
109
110 HID_REPORT_ID(3),
111 HID_USAGE_PAGE_SENSOR,
112 HID_USAGE_SENSOR_TYPE_MOTION_GYROMETER_3D,
113 HID_COLLECTION(Physical),
114
115 //Feature Report Descriptor for Sensor Report ID = 3
116
117 //Input Report Descriptor for Sensor Report ID = 3
118
119 HID_END_COLLECTION, //for Report ID = 3
120
121 //More sensors follow using the same pattern
122
123 HID_END_COLLECTION, //Sensor collection
124
125 //mouse
126 0x05U, 0x01U, // USAGE PAGE (Generic Desktop)
127 0x09U, 0x02U, // USAGE (Mouse)
128 0xA1U, 0x01U, // COLLECTION (Application)
129 0x85U, 0x04U, // REPORT_ID (4)
130
131 // 5 mouse buttons
132 0x05U, 0x09U, // USAGE PAGE (Button)
133 0x19U, 0x01U, // USAGE MINIMUM (Button 1)
134 0x29U, 0x05U, // USAGE MAXIMUM (Button 5)
135 0x15U, 0x00U, // LOGICAL MINIMUM (0)
136 0x25U, 0x01U, // LOGICAL MAXIMUM (1)
137 0x95U, 0x05U, // REPORT COUNT (5)
138 0x75U, 0x01U, // REPORT SIZE (1)
139 0x81U, 0x02U, // INPUT (Data,Var,Abs)
140
141 // 3 unused buttons:
142 0x95U, 0x01U, // REPORT COUNT (1)
143 0x75U, 0x03U, // REPORT SIZE (3)
144 0x81U, 0x03U, // INPUT (Cnst,Var,Abs)
145
146 // mouse (delta x, delta y) position
147 0x15U, 0x81U, // LOGICAL MINIMUM (-127)
148 0x25U, 0x7fU, // LOGICAL MAXIMUM (+127)
149 0x75U, 0x08U, // REPORT SIZE (8)
150 0x95U, 0x02U, // REPORT COUNT (2)
151 0x05U, 0x01U, // USAGE PAGE (Generic Desktop)
152 0x09U, 0x30U, // USAGE(X)
153 0x09U, 0x31U, // USAGE (Y)
154 0x81U, 0x06U, // INPUT (Data,Var,Rel)
155
156 0xC0U, // END COLLECTION //mouse
157 };
158
159
160 /**
161 * Composite device descriptor example: one sensor with a keyboard and a mouse.
162 */
163 const unsigned char col3_report_descriptor[] = {
164 //keyboard
165 0x05U, 0x01U, // USAGE PAGE (Generic Desktop)
166 0x09U, 0x06U, // USAGE (Keyboard)
167 0xA1U, 0x01U, // COLLECTION (Application)
168
169 0x85U, 0x03U, // REPORT_ID (1)
170
171 0x15U, 0x00U, // LOGICAL MINIMUM (0)
172 0x25U, 0x01U, // LOGICAL MAXIMUM (1)
173 0x75U, 0x01U, // REPORT SIZE (1)
174 0x95U, 0x08U, // REPORT COUNT (8)
175 0x05U, 0x07U, // USAGE PAGE (Keyboard)
176 0x19U, 0xE0U, // USAGE MINIMUM (Keyboard LeftControl)
177 0x29U, 0xE7U, // USAGE MAXIMUM (Keyboard Right GUI)
178 0x81U, 0x02U, // INPUT (Var)
179
180 0x75U, 0x08U, // REPORT SIZE (8)
181 0x95U, 0x0AU, // REPORT COUNT (10)
182 0x19U, 0x00U, // USAGE MINIMUM (No event)
183 0x29U, 0x91U, // USAGE MAXIMUM (Keyboard LANG2)
184 0x26U, 0xFFU, 0x00U, // LOGICAL MAXIMUM (0xFF)
185 0x81U, 0x00U, // INPUT (Data,Ary,Abs)
186
187 0xC0U, // END COLLECTION, //keyboard
188
189 // One sensor collection skeleton example:
190 HID_USAGE_PAGE_SENSOR,
191 HID_USAGE_SENSOR_TYPE_COLLECTION,
192 HID_COLLECTION(Application),
193
194 HID_REPORT_ID(2),
195 HID_USAGE_PAGE_SENSOR,
196
197 HID_USAGE_SENSOR_TYPE_MOTION_GYROMETER_3D,
198 HID_COLLECTION(Physical),
199
200 //Feature Report Descriptor for Sensor Report ID = 2
201
202 //Input Report Descriptor for Sensor Report ID = 2
203
204 HID_END_COLLECTION, //for Report ID = 2
205
206 HID_END_COLLECTION, //Sensor collection
207
208 //mouse
209 0x05U, 0x01U, // USAGE PAGE (Generic Desktop)
210 0x09U, 0x02U, // USAGE (Mouse)
211 0xA1U, 0x01U, // COLLECTION (Application)
212 0x85U, 0x04U, // REPORT_ID (3)
213
214 // 5 mouse buttons
215 0x05U, 0x09U, // USAGE PAGE (Button)
216 0x19U, 0x01U, // USAGE MINIMUM (Button 1)
217 0x29U, 0x05U, // USAGE MAXIMUM (Button 5)
218 0x15U, 0x00U, // LOGICAL MINIMUM (0)
219 0x25U, 0x01U, // LOGICAL MAXIMUM (1)
220 0x95U, 0x05U, // REPORT COUNT (5)
221 0x75U, 0x01U, // REPORT SIZE (1)
222 0x81U, 0x02U, // INPUT (Data,Var,Abs)
223
224 // 3 unused buttons:
225 0x95U, 0x01U, // REPORT COUNT (1)
226 0x75U, 0x03U, // REPORT SIZE (3)
227 0x81U, 0x03U, // INPUT (Cnst,Var,Abs)
228
229 // mouse (delta x, delta y) position
230 0x15U, 0x81U, // LOGICAL MINIMUM (-127)
231 0x25U, 0x7fU, // LOGICAL MAXIMUM (+127)
232 0x75U, 0x08U, // REPORT SIZE (8)
233 0x95U, 0x02U, // REPORT COUNT (2)
234 0x05U, 0x01U, // USAGE PAGE (Generic Desktop)
235 0x09U, 0x30U, // USAGE(X)
236 0x09U, 0x31U, // USAGE (Y)
237 0x81U, 0x06U, // INPUT (Data,Var,Rel)
238
239 0xC0U, // END COLLECTION //mouse
240 };
241
242
243 /**
244 * Simple custom sensor example.
245 */
246 const unsigned char cus1_report_descriptor[] = {
247 HID_USAGE_PAGE_SENSOR, // USAGE_PAGE (Sensor)
248 HID_USAGE_SENSOR_TYPE_OTHER_CUSTOM, // USAGE (Simple Custom)
249 HID_COLLECTION(Physical),
250
251 //input reports (transmit)
252 HID_USAGE_PAGE_SENSOR,
253 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_1,
254 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
255 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
256 HID_REPORT_SIZE(16),
257 HID_REPORT_COUNT(1),
258 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
259 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_DATA_MOTION_SPEED value
260
261 HID_END_COLLECTION
262 };
263
264
265 /**
266 * More complex custom sensor example.
267 */
268 const unsigned char cus2_report_descriptor[] = {
269 HID_USAGE_PAGE_SENSOR, // USAGE_PAGE (Sensor)
270 HID_USAGE_SENSOR_TYPE_OTHER_CUSTOM, // USAGE (Simple Custom)
271 HID_COLLECTION(Physical),
272
273 //input reports (transmit)
274 HID_USAGE_PAGE_SENSOR,
275 HID_USAGE_SENSOR_DATA_CUSTOM_USAGE,
276 HID_LOGICAL_MIN_8(0),
277 HID_LOGICAL_MAX_16(0xFF,0xFF),
278 HID_REPORT_SIZE(16),
279 HID_REPORT_COUNT(1),
280 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_TYPE_MOTION_SPEEDOMETER
281 HID_USAGE_SENSOR_DATA_CUSTOM_BOOLEAN_ARRAY,
282 HID_LOGICAL_MIN_8(0),
283 HID_LOGICAL_MAX_16(0xFF,0xFF),
284 HID_REPORT_SIZE(16),
285 HID_REPORT_COUNT(1),
286 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_TYPE_MOTION_SPEEDOMETER
287 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_1,
288 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
289 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
290 HID_REPORT_SIZE(16),
291 HID_REPORT_COUNT(1),
292 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
293 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_DATA_MOTION_SPEED value
294 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_2,
295 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
296 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
297 HID_REPORT_SIZE(16),
298 HID_REPORT_COUNT(1),
299 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
300 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_DATA_MOTION_SPEED value
301 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_3,
302 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
303 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
304 HID_REPORT_SIZE(16),
305 HID_REPORT_COUNT(1),
306 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
307 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_DATA_MOTION_SPEED value
308 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_4,
309 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
310 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
311 HID_REPORT_SIZE(16),
312 HID_REPORT_COUNT(1),
313 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
314 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_DATA_MOTION_SPEED value
315 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_5,
316 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
317 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
318 HID_REPORT_SIZE(16),
319 HID_REPORT_COUNT(1),
320 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
321 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_DATA_MOTION_SPEED value
322 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_6,
323 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
324 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
325 HID_REPORT_SIZE(16),
326 HID_REPORT_COUNT(1),
327 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
328 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_DATA_MOTION_SPEED value
329
330 HID_END_COLLECTION
331 };
332
333
334 /**
335 * Custom sensor example with features
336 */
337 const unsigned char cus3_report_descriptor[] = {
338 HID_USAGE_PAGE_SENSOR, // USAGE_PAGE (Sensor)
339 HID_USAGE_SENSOR_TYPE_OTHER_CUSTOM, // USAGE (Simple Custom)
340 HID_COLLECTION(Physical),
341
342 //feature reports (xmit/receive)
343 HID_USAGE_PAGE_SENSOR,
344 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
345 HID_LOGICAL_MIN_8(0),
346 HID_LOGICAL_MAX_8(2),
347 HID_REPORT_SIZE(8),
348 HID_REPORT_COUNT(1),
349 HID_COLLECTION(Logical),
350 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
351 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
352 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
353 HID_FEATURE(Data_Arr_Abs),
354 HID_END_COLLECTION,
355 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
356 HID_LOGICAL_MIN_8(0),
357 HID_LOGICAL_MAX_8(5),
358 HID_REPORT_SIZE(8),
359 HID_REPORT_COUNT(1),
360 HID_COLLECTION(Logical),
361 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
362 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
363 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
364 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
365 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
366 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
367 HID_FEATURE(Data_Arr_Abs),
368 HID_END_COLLECTION,
369 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
370 HID_LOGICAL_MIN_8(0),
371 HID_LOGICAL_MAX_8(5),
372 HID_REPORT_SIZE(8),
373 HID_REPORT_COUNT(1),
374 HID_COLLECTION(Logical),
375 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
376 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
377 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
378 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
379 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
380 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
381 HID_FEATURE(Data_Arr_Abs),
382 HID_END_COLLECTION,
383 HID_USAGE_SENSOR_STATE,
384 HID_LOGICAL_MIN_8(0),
385 HID_LOGICAL_MAX_8(6),
386 HID_REPORT_SIZE(8),
387 HID_REPORT_COUNT(1),
388 HID_COLLECTION(Logical),
389 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
390 HID_USAGE_SENSOR_STATE_READY_SEL,
391 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
392 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
393 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
394 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
395 HID_USAGE_SENSOR_STATE_ERROR_SEL,
396 HID_FEATURE(Data_Arr_Abs),
397 HID_END_COLLECTION,
398 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
399 HID_LOGICAL_MIN_8(0),
400 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
401 HID_REPORT_SIZE(32),
402 HID_REPORT_COUNT(1),
403 HID_UNIT_EXPONENT(0),
404 HID_FEATURE(Data_Var_Abs),
405 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_CUSTOM,
406 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
407 HID_LOGICAL_MIN_8(0),
408 HID_LOGICAL_MAX_16(0xFF,0xFF),
409 HID_REPORT_SIZE(16),
410 HID_REPORT_COUNT(1),
411 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
412 HID_FEATURE(Data_Var_Abs),
413 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_CUSTOM,HID_USAGE_SENSOR_DATA_MOD_MAX),
414 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
415 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
416 HID_REPORT_SIZE(16),
417 HID_REPORT_COUNT(1),
418 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
419 HID_FEATURE(Data_Var_Abs),
420 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_CUSTOM,HID_USAGE_SENSOR_DATA_MOD_MIN),
421 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
422 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
423 HID_REPORT_SIZE(16),
424 HID_REPORT_COUNT(1),
425 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
426 HID_FEATURE(Data_Var_Abs),
427
428 //input reports (transmit)
429 HID_USAGE_PAGE_SENSOR,
430 HID_USAGE_SENSOR_STATE,
431 HID_LOGICAL_MIN_8(0),
432 HID_LOGICAL_MAX_8(6),
433 HID_REPORT_SIZE(8),
434 HID_REPORT_COUNT(1),
435 HID_COLLECTION(Logical),
436 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
437 HID_USAGE_SENSOR_STATE_READY_SEL,
438 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
439 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
440 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
441 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
442 HID_USAGE_SENSOR_STATE_ERROR_SEL,
443 HID_INPUT(Data_Arr_Abs),
444 HID_END_COLLECTION,
445 HID_USAGE_SENSOR_EVENT,
446 HID_LOGICAL_MIN_8(0),
447 HID_LOGICAL_MAX_8(5),
448 HID_REPORT_SIZE(8),
449 HID_REPORT_COUNT(1),
450 HID_COLLECTION(Logical),
451 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
452 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
453 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
454 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
455 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
456 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
457 HID_INPUT(Data_Arr_Abs),
458 HID_END_COLLECTION,
459 HID_USAGE_SENSOR_DATA_CUSTOM_USAGE,
460 HID_LOGICAL_MIN_8(0),
461 HID_LOGICAL_MAX_16(0xFF,0xFF),
462 HID_REPORT_SIZE(16),
463 HID_REPORT_COUNT(1),
464 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_TYPE_MOTION_SPEEDOMETER
465 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_1,
466 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
467 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
468 HID_REPORT_SIZE(16),
469 HID_REPORT_COUNT(1),
470 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
471 HID_INPUT(Data_Var_Abs), // = HID_USAGE_SENSOR_DATA_MOTION_SPEED value
472
473 HID_END_COLLECTION
474 };
475
476
477 /**
478 * Full custom sensor example with feature.
479 */
480 const unsigned char cus4_report_descriptor[] = {
481 HID_USAGE_PAGE_SENSOR, // USAGE_PAGE (Sensor)
482 HID_USAGE_SENSOR_TYPE_OTHER_CUSTOM, // USAGE (Simple Custom)
483 HID_COLLECTION(Application),
484
485 //feature reports (xmit/receive)
486 HID_USAGE_PAGE_SENSOR,
487 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
488 HID_LOGICAL_MIN_8(0),
489 HID_LOGICAL_MAX_8(2),
490 HID_REPORT_SIZE(8),
491 HID_REPORT_COUNT(1),
492 HID_COLLECTION(Logical),
493 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
494 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
495 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
496 HID_FEATURE(Data_Arr_Abs),
497 HID_END_COLLECTION,
498 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
499 HID_LOGICAL_MIN_8(0),
500 HID_LOGICAL_MAX_8(5),
501 HID_REPORT_SIZE(8),
502 HID_REPORT_COUNT(1),
503 HID_COLLECTION(Logical),
504 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
505 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
506 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
507 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
508 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
509 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
510 HID_FEATURE(Data_Arr_Abs),
511 HID_END_COLLECTION,
512 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
513 HID_LOGICAL_MIN_8(0),
514 HID_LOGICAL_MAX_8(5),
515 HID_REPORT_SIZE(8),
516 HID_REPORT_COUNT(1),
517 HID_COLLECTION(Logical),
518 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
519 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
520 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
521 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
522 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
523 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
524 HID_FEATURE(Data_Arr_Abs),
525 HID_END_COLLECTION,
526 HID_USAGE_SENSOR_STATE,
527 HID_LOGICAL_MIN_8(0),
528 HID_LOGICAL_MAX_8(6),
529 HID_REPORT_SIZE(8),
530 HID_REPORT_COUNT(1),
531 HID_COLLECTION(Logical),
532 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
533 HID_USAGE_SENSOR_STATE_READY_SEL,
534 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
535 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
536 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
537 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
538 HID_USAGE_SENSOR_STATE_ERROR_SEL,
539 HID_FEATURE(Data_Arr_Abs),
540 HID_END_COLLECTION,
541 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
542 HID_LOGICAL_MIN_8(0),
543 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
544 HID_REPORT_SIZE(32),
545 HID_REPORT_COUNT(1),
546 HID_UNIT_EXPONENT(0),
547 HID_FEATURE(Data_Var_Abs),
548 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_CUSTOM,
549 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
550 HID_LOGICAL_MIN_8(0),
551 HID_LOGICAL_MAX_16(0xFF,0xFF),
552 HID_REPORT_SIZE(16),
553 HID_REPORT_COUNT(1),
554 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
555 HID_FEATURE(Data_Var_Abs),
556 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_CUSTOM,HID_USAGE_SENSOR_DATA_MOD_MAX),
557 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
558 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
559 HID_REPORT_SIZE(16),
560 HID_REPORT_COUNT(1),
561 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
562 HID_FEATURE(Data_Var_Abs),
563 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_CUSTOM,HID_USAGE_SENSOR_DATA_MOD_MIN),
564 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
565 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
566 HID_REPORT_SIZE(16),
567 HID_REPORT_COUNT(1),
568 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
569 HID_FEATURE(Data_Var_Abs),
570
571 //input reports (transmit)
572 HID_USAGE_PAGE_SENSOR,
573 HID_USAGE_SENSOR_STATE,
574 HID_LOGICAL_MIN_8(0),
575 HID_LOGICAL_MAX_8(6),
576 HID_REPORT_SIZE(8),
577 HID_REPORT_COUNT(1),
578 HID_COLLECTION(Logical),
579 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
580 HID_USAGE_SENSOR_STATE_READY_SEL,
581 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
582 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
583 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
584 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
585 HID_USAGE_SENSOR_STATE_ERROR_SEL,
586 HID_INPUT(Data_Arr_Abs),
587 HID_END_COLLECTION,
588 HID_USAGE_SENSOR_EVENT,
589 HID_LOGICAL_MIN_8(0),
590 HID_LOGICAL_MAX_8(5),
591 HID_REPORT_SIZE(8),
592 HID_REPORT_COUNT(1),
593 HID_COLLECTION(Logical),
594 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
595 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
596 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
597 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
598 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
599 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
600 HID_INPUT(Data_Arr_Abs),
601 HID_END_COLLECTION,
602 HID_USAGE_SENSOR_DATA_CUSTOM_USAGE,
603 HID_LOGICAL_MIN_8(0),
604 HID_LOGICAL_MAX_16(0xFF,0xFF),
605 HID_REPORT_SIZE(16),
606 HID_REPORT_COUNT(1),
607 HID_INPUT(Data_Var_Abs),
608 HID_USAGE_SENSOR_DATA_CUSTOM_BOOLEAN_ARRAY,
609 HID_LOGICAL_MIN_8(0),
610 HID_LOGICAL_MAX_16(0xFF,0xFF),
611 HID_REPORT_SIZE(16),
612 HID_REPORT_COUNT(1),
613 HID_INPUT(Data_Var_Abs),
614 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_1,
615 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
616 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
617 HID_REPORT_SIZE(16),
618 HID_REPORT_COUNT(1),
619 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
620 HID_INPUT(Data_Var_Abs),
621 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_2,
622 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
623 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
624 HID_REPORT_SIZE(16),
625 HID_REPORT_COUNT(1),
626 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
627 HID_INPUT(Data_Var_Abs),
628 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_3,
629 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
630 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
631 HID_REPORT_SIZE(16),
632 HID_REPORT_COUNT(1),
633 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
634 HID_INPUT(Data_Var_Abs),
635 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_4,
636 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
637 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
638 HID_REPORT_SIZE(16),
639 HID_REPORT_COUNT(1),
640 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
641 HID_INPUT(Data_Var_Abs),
642 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_5,
643 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
644 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
645 HID_REPORT_SIZE(16),
646 HID_REPORT_COUNT(1),
647 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
648 HID_INPUT(Data_Var_Abs),
649 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_6,
650 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
651 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
652 HID_REPORT_SIZE(16),
653 HID_REPORT_COUNT(1),
654 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
655 HID_INPUT(Data_Var_Abs),
656
657 #if 1 //define vendor-specific (non-spec) custom datafields
658 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_7,
659 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
660 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
661 HID_REPORT_SIZE(16),
662 HID_REPORT_COUNT(1),
663 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
664 HID_INPUT(Data_Var_Abs),
665 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_8,
666 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
667 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
668 HID_REPORT_SIZE(16),
669 HID_REPORT_COUNT(1),
670 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
671 HID_INPUT(Data_Var_Abs),
672 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_9,
673 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
674 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
675 HID_REPORT_SIZE(16),
676 HID_REPORT_COUNT(1),
677 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
678 HID_INPUT(Data_Var_Abs),
679 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_10,
680 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
681 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
682 HID_REPORT_SIZE(16),
683 HID_REPORT_COUNT(1),
684 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
685 HID_INPUT(Data_Var_Abs),
686 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_11,
687 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
688 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
689 HID_REPORT_SIZE(16),
690 HID_REPORT_COUNT(1),
691 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
692 HID_INPUT(Data_Var_Abs),
693 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_12,
694 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
695 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
696 HID_REPORT_SIZE(16),
697 HID_REPORT_COUNT(1),
698 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
699 HID_INPUT(Data_Var_Abs),
700 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_13,
701 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
702 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
703 HID_REPORT_SIZE(16),
704 HID_REPORT_COUNT(1),
705 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
706 HID_INPUT(Data_Var_Abs),
707 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_14,
708 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
709 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
710 HID_REPORT_SIZE(16),
711 HID_REPORT_COUNT(1),
712 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
713 HID_INPUT(Data_Var_Abs),
714 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_15,
715 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
716 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
717 HID_REPORT_SIZE(16),
718 HID_REPORT_COUNT(1),
719 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
720 HID_INPUT(Data_Var_Abs),
721 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_16,
722 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
723 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
724 HID_REPORT_SIZE(16),
725 HID_REPORT_COUNT(1),
726 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
727 HID_INPUT(Data_Var_Abs),
728 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_17,
729 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
730 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
731 HID_REPORT_SIZE(16),
732 HID_REPORT_COUNT(1),
733 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
734 HID_INPUT(Data_Var_Abs),
735 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_18,
736 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
737 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
738 HID_REPORT_SIZE(16),
739 HID_REPORT_COUNT(1),
740 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
741 HID_INPUT(Data_Var_Abs),
742 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_19,
743 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
744 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
745 HID_REPORT_SIZE(16),
746 HID_REPORT_COUNT(1),
747 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
748 HID_INPUT(Data_Var_Abs),
749 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_20,
750 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
751 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
752 HID_REPORT_SIZE(16),
753 HID_REPORT_COUNT(1),
754 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
755 HID_INPUT(Data_Var_Abs),
756 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_21,
757 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
758 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
759 HID_REPORT_SIZE(16),
760 HID_REPORT_COUNT(1),
761 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
762 HID_INPUT(Data_Var_Abs),
763 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_22,
764 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
765 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
766 HID_REPORT_SIZE(16),
767 HID_REPORT_COUNT(1),
768 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
769 HID_INPUT(Data_Var_Abs),
770 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_23,
771 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
772 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
773 HID_REPORT_SIZE(16),
774 HID_REPORT_COUNT(1),
775 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
776 HID_INPUT(Data_Var_Abs),
777 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_24,
778 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
779 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
780 HID_REPORT_SIZE(16),
781 HID_REPORT_COUNT(1),
782 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
783 HID_INPUT(Data_Var_Abs),
784 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_25,
785 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
786 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
787 HID_REPORT_SIZE(16),
788 HID_REPORT_COUNT(1),
789 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
790 HID_INPUT(Data_Var_Abs),
791 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_26,
792 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
793 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
794 HID_REPORT_SIZE(16),
795 HID_REPORT_COUNT(1),
796 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
797 HID_INPUT(Data_Var_Abs),
798 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_27,
799 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
800 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
801 HID_REPORT_SIZE(16),
802 HID_REPORT_COUNT(1),
803 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
804 HID_INPUT(Data_Var_Abs),
805 HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_28,
806 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
807 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
808 HID_REPORT_SIZE(16),
809 HID_REPORT_COUNT(1),
810 HID_UNIT_EXPONENT(0x0E), // scale unit to provide 2 digits past the decimal point
811 HID_INPUT(Data_Var_Abs),
812 #endif
813 HID_END_COLLECTION
814 };
815
816
817 /**
818 * Human presence sensor example.
819 */
820 const unsigned char pres_report_descriptor[] = {
821 HID_USAGE_PAGE_SENSOR,
822 HID_USAGE_SENSOR_TYPE_BIOMETRIC_PRESENCE,
823 HID_COLLECTION(Physical),
824
825 //feature reports (xmit/receive)
826 HID_USAGE_PAGE_SENSOR,
827 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
828 HID_LOGICAL_MIN_8(0),
829 HID_LOGICAL_MAX_8(2),
830 HID_REPORT_SIZE(8),
831 HID_REPORT_COUNT(1),
832 HID_COLLECTION(Logical),
833 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
834 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
835 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
836 HID_FEATURE(Data_Arr_Abs),
837 HID_END_COLLECTION,
838 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
839 HID_LOGICAL_MIN_8(0),
840 HID_LOGICAL_MAX_8(5),
841 HID_REPORT_SIZE(8),
842 HID_REPORT_COUNT(1),
843 HID_COLLECTION(Logical),
844 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
845 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
846 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
847 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
848 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
849 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
850 HID_FEATURE(Data_Arr_Abs),
851 HID_END_COLLECTION,
852 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
853 HID_LOGICAL_MIN_8(0),
854 HID_LOGICAL_MAX_8(5),
855 HID_REPORT_SIZE(8),
856 HID_REPORT_COUNT(1),
857 HID_COLLECTION(Logical),
858 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
859 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
860 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
861 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
862 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
863 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
864 HID_FEATURE(Data_Arr_Abs),
865 HID_END_COLLECTION,
866 HID_USAGE_SENSOR_STATE,
867 HID_LOGICAL_MIN_8(0),
868 HID_LOGICAL_MAX_8(6),
869 HID_REPORT_SIZE(8),
870 HID_REPORT_COUNT(1),
871 HID_COLLECTION(Logical),
872 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
873 HID_USAGE_SENSOR_STATE_READY_SEL,
874 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
875 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
876 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
877 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
878 HID_USAGE_SENSOR_STATE_ERROR_SEL,
879 HID_FEATURE(Data_Arr_Abs),
880 HID_END_COLLECTION,
881 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
882 HID_LOGICAL_MIN_8(0),
883 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
884 HID_REPORT_SIZE(32),
885 HID_REPORT_COUNT(1),
886 HID_UNIT_EXPONENT(0),
887 HID_FEATURE(Data_Var_Abs),
888
889 //input reports (transmit)
890 HID_USAGE_PAGE_SENSOR,
891 HID_USAGE_SENSOR_STATE,
892 HID_LOGICAL_MIN_8(0),
893 HID_LOGICAL_MAX_8(6),
894 HID_REPORT_SIZE(8),
895 HID_REPORT_COUNT(1),
896 HID_COLLECTION(Logical),
897 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
898 HID_USAGE_SENSOR_STATE_READY_SEL,
899 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
900 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
901 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
902 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
903 HID_USAGE_SENSOR_STATE_ERROR_SEL,
904 HID_INPUT(Data_Arr_Abs),
905 HID_END_COLLECTION,
906 HID_USAGE_SENSOR_EVENT,
907 HID_LOGICAL_MIN_8(0),
908 HID_LOGICAL_MAX_8(5),
909 HID_REPORT_SIZE(8),
910 HID_REPORT_COUNT(1),
911 HID_COLLECTION(Logical),
912 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
913 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
914 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
915 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
916 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
917 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
918 HID_INPUT(Data_Arr_Abs),
919 HID_END_COLLECTION,
920 HID_USAGE_SENSOR_DATA_BIOMETRIC_HUMAN_PRESENCE,
921 HID_LOGICAL_MIN_8(0), // False
922 HID_LOGICAL_MAX_8(1), // True
923 HID_REPORT_SIZE(8),
924 HID_REPORT_COUNT(1),
925 HID_INPUT(Data_Var_Abs),
926
927 HID_END_COLLECTION
928 };
929
930
931 /**
932 * Proximity sensor example.
933 */
934 const unsigned char prox_report_descriptor[] = {
935 HID_USAGE_PAGE_SENSOR,
936 HID_USAGE_SENSOR_TYPE_BIOMETRIC_PROXIMITY,
937 HID_COLLECTION(Physical),
938
939 //feature reports (xmit/receive)
940 HID_USAGE_PAGE_SENSOR,
941 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
942 HID_LOGICAL_MIN_8(0),
943 HID_LOGICAL_MAX_8(2),
944 HID_REPORT_SIZE(8),
945 HID_REPORT_COUNT(1),
946 HID_COLLECTION(Logical),
947 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
948 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
949 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
950 HID_FEATURE(Data_Arr_Abs),
951 HID_END_COLLECTION,
952 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
953 HID_LOGICAL_MIN_8(0),
954 HID_LOGICAL_MAX_8(5),
955 HID_REPORT_SIZE(8),
956 HID_REPORT_COUNT(1),
957 HID_COLLECTION(Logical),
958 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
959 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
960 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
961 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
962 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
963 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
964 HID_FEATURE(Data_Arr_Abs),
965 HID_END_COLLECTION,
966 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
967 HID_LOGICAL_MIN_8(0),
968 HID_LOGICAL_MAX_8(5),
969 HID_REPORT_SIZE(8),
970 HID_REPORT_COUNT(1),
971 HID_COLLECTION(Logical),
972 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
973 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
974 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
975 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
976 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
977 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
978 HID_FEATURE(Data_Arr_Abs),
979 HID_END_COLLECTION,
980 HID_USAGE_SENSOR_STATE,
981 HID_LOGICAL_MIN_8(0),
982 HID_LOGICAL_MAX_8(6),
983 HID_REPORT_SIZE(8),
984 HID_REPORT_COUNT(1),
985 HID_COLLECTION(Logical),
986 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
987 HID_USAGE_SENSOR_STATE_READY_SEL,
988 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
989 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
990 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
991 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
992 HID_USAGE_SENSOR_STATE_ERROR_SEL,
993 HID_FEATURE(Data_Arr_Abs),
994 HID_END_COLLECTION,
995 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
996 HID_LOGICAL_MIN_8(0),
997 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
998 HID_REPORT_SIZE(32),
999 HID_REPORT_COUNT(1),
1000 HID_UNIT_EXPONENT(0),
1001 HID_FEATURE(Data_Var_Abs),
1002 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_BIOMETRIC_HUMAN_PROXIMITY_RANGE,
1003 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
1004 HID_LOGICAL_MIN_8(0),
1005 HID_LOGICAL_MAX_16(0xFF,0xFF),
1006 HID_REPORT_SIZE(16),
1007 HID_REPORT_COUNT(1),
1008 HID_UNIT_EXPONENT(0x0D), // scale default unit "meter" to "centimeter"
1009 // to provide 2 digits past decimal point
1010 HID_FEATURE(Data_Var_Abs),
1011 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_BIOMETRIC_HUMAN_PROXIMITY_RANGE,
1012 HID_USAGE_SENSOR_DATA_MOD_MAX),
1013 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1014 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1015 HID_REPORT_SIZE(16),
1016 HID_REPORT_COUNT(1),
1017 HID_UNIT_EXPONENT(0x0D), // scale default unit "meter" to "centimeter"
1018 // to provide 2 digits past decimal point
1019 HID_FEATURE(Data_Var_Abs),
1020 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_BIOMETRIC_HUMAN_PROXIMITY_RANGE,
1021 HID_USAGE_SENSOR_DATA_MOD_MIN),
1022 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1023 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1024 HID_REPORT_SIZE(16),
1025 HID_REPORT_COUNT(1),
1026 HID_UNIT_EXPONENT(0x0D), // scale default unit "meter" to "centimeter"
1027 // to provide 2 digits past decimal point
1028 HID_FEATURE(Data_Var_Abs),
1029
1030 //input reports (transmit)
1031 HID_USAGE_PAGE_SENSOR,
1032 HID_USAGE_SENSOR_STATE,
1033 HID_LOGICAL_MIN_8(0),
1034 HID_LOGICAL_MAX_8(6),
1035 HID_REPORT_SIZE(8),
1036 HID_REPORT_COUNT(1),
1037 HID_COLLECTION(Logical),
1038 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1039 HID_USAGE_SENSOR_STATE_READY_SEL,
1040 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1041 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1042 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1043 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1044 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1045 HID_INPUT(Data_Arr_Abs),
1046 HID_END_COLLECTION,
1047 HID_USAGE_SENSOR_EVENT,
1048 HID_LOGICAL_MIN_8(0),
1049 HID_LOGICAL_MAX_8(5),
1050 HID_REPORT_SIZE(8),
1051 HID_REPORT_COUNT(1),
1052 HID_COLLECTION(Logical),
1053 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
1054 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
1055 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
1056 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
1057 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
1058 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
1059 HID_INPUT(Data_Arr_Abs),
1060 HID_END_COLLECTION,
1061 HID_USAGE_SENSOR_DATA_BIOMETRIC_HUMAN_PROXIMITY_OUT_OF_RANGE,
1062 HID_LOGICAL_MIN_8(0), // False
1063 HID_LOGICAL_MAX_8(1), // True
1064 HID_REPORT_SIZE(8),
1065 HID_REPORT_COUNT(1),
1066 HID_INPUT(Data_Var_Abs),
1067 HID_USAGE_SENSOR_DATA_BIOMETRIC_HUMAN_PROXIMITY_RANGE,
1068 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1069 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1070 HID_REPORT_SIZE(16),
1071 HID_REPORT_COUNT(1),
1072 HID_UNIT_EXPONENT(0x0D), // scale default unit "meter" to "centimeter"
1073 // to provide 2 digits past decimal point
1074 HID_INPUT(Data_Var_Abs),
1075
1076 HID_END_COLLECTION
1077 };
1078
1079
1080 /**
1081 * Barometer sensor example.
1082 */
1083 const unsigned char bar_report_descriptor[] = {
1084 HID_USAGE_PAGE_SENSOR,
1085 HID_USAGE_SENSOR_TYPE_ENVIRONMENTAL_ATMOSPHERIC_PRESSURE,
1086 HID_COLLECTION(Physical),
1087
1088 //feature reports (xmit/receive)
1089 HID_USAGE_PAGE_SENSOR,
1090 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
1091 HID_LOGICAL_MIN_8(0),
1092 HID_LOGICAL_MAX_8(2),
1093 HID_REPORT_SIZE(8),
1094 HID_REPORT_COUNT(1),
1095 HID_COLLECTION(Logical),
1096 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
1097 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
1098 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
1099 HID_FEATURE(Data_Arr_Abs),
1100 HID_END_COLLECTION,
1101 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
1102 HID_LOGICAL_MIN_8(0),
1103 HID_LOGICAL_MAX_8(5),
1104 HID_REPORT_SIZE(8),
1105 HID_REPORT_COUNT(1),
1106 HID_COLLECTION(Logical),
1107 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
1108 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
1109 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
1110 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
1111 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
1112 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
1113 HID_FEATURE(Data_Arr_Abs),
1114 HID_END_COLLECTION,
1115 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
1116 HID_LOGICAL_MIN_8(0),
1117 HID_LOGICAL_MAX_8(5),
1118 HID_REPORT_SIZE(8),
1119 HID_REPORT_COUNT(1),
1120 HID_COLLECTION(Logical),
1121 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
1122 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
1123 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
1124 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
1125 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
1126 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
1127 HID_FEATURE(Data_Arr_Abs),
1128 HID_END_COLLECTION,
1129 HID_USAGE_SENSOR_STATE,
1130 HID_LOGICAL_MIN_8(0),
1131 HID_LOGICAL_MAX_8(6),
1132 HID_REPORT_SIZE(8),
1133 HID_REPORT_COUNT(1),
1134 HID_COLLECTION(Logical),
1135 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1136 HID_USAGE_SENSOR_STATE_READY_SEL,
1137 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1138 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1139 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1140 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1141 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1142 HID_FEATURE(Data_Arr_Abs),
1143 HID_END_COLLECTION,
1144 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
1145 HID_LOGICAL_MIN_8(0),
1146 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
1147 HID_REPORT_SIZE(32),
1148 HID_REPORT_COUNT(1),
1149 HID_UNIT_EXPONENT(0),
1150 HID_FEATURE(Data_Var_Abs),
1151 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_ATMOSPHERIC_PRESSURE,
1152 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
1153 HID_LOGICAL_MIN_8(0),
1154 HID_LOGICAL_MAX_16(0xFF,0xFF),
1155 HID_REPORT_SIZE(16),
1156 HID_REPORT_COUNT(1),
1157 HID_UNIT_EXPONENT(0x0E), // scale default unit "Bar" to provide 2 digits past the decimal point
1158 HID_FEATURE(Data_Var_Abs),
1159 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_ATMOSPHERIC_PRESSURE,
1160 HID_USAGE_SENSOR_DATA_MOD_MAX),
1161 HID_LOGICAL_MIN_8(0),
1162 HID_LOGICAL_MAX_16(0xFF,0xFF),
1163 HID_REPORT_SIZE(16),
1164 HID_REPORT_COUNT(1),
1165 HID_UNIT_EXPONENT(0x0E), // scale default unit "Bar" to provide 2 digits past the decimal point
1166 HID_FEATURE(Data_Var_Abs),
1167 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_ATMOSPHERIC_PRESSURE,
1168 HID_USAGE_SENSOR_DATA_MOD_MIN),
1169 HID_LOGICAL_MIN_8(0),
1170 HID_LOGICAL_MAX_16(0xFF,0xFF),
1171 HID_REPORT_SIZE(16),
1172 HID_REPORT_COUNT(1),
1173 HID_UNIT_EXPONENT(0x0E), // scale default unit "Bar" to provide 2 digits past the decimal point
1174 HID_FEATURE(Data_Var_Abs),
1175
1176 //input reports (transmit)
1177 HID_USAGE_PAGE_SENSOR,
1178 HID_USAGE_SENSOR_STATE,
1179 HID_LOGICAL_MIN_8(0),
1180 HID_LOGICAL_MAX_8(6),
1181 HID_REPORT_SIZE(8),
1182 HID_REPORT_COUNT(1),
1183 HID_COLLECTION(Logical),
1184 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1185 HID_USAGE_SENSOR_STATE_READY_SEL,
1186 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1187 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1188 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1189 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1190 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1191 HID_INPUT(Data_Arr_Abs),
1192 HID_END_COLLECTION,
1193 HID_USAGE_SENSOR_EVENT,
1194 HID_LOGICAL_MIN_8(0),
1195 HID_LOGICAL_MAX_8(5),
1196 HID_REPORT_SIZE(8),
1197 HID_REPORT_COUNT(1),
1198 HID_COLLECTION(Logical),
1199 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
1200 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
1201 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
1202 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
1203 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
1204 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
1205 HID_INPUT(Data_Arr_Abs),
1206 HID_END_COLLECTION,
1207 HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_ATMOSPHERIC_PRESSURE,
1208 HID_LOGICAL_MIN_8(0),
1209 HID_LOGICAL_MAX_16(0xFF,0xFF),
1210 HID_REPORT_SIZE(16),
1211 HID_REPORT_COUNT(1),
1212 HID_UNIT_EXPONENT(0x0E), // scale default unit "Bar" to provide 2 digits past the decimal point
1213 HID_INPUT(Data_Var_Abs),
1214
1215 HID_END_COLLECTION
1216 };
1217
1218
1219 /**
1220 * Humidity sensor example.
1221 */
1222 const unsigned char humi_report_descriptor[] = {
1223 HID_USAGE_PAGE_SENSOR,
1224 HID_USAGE_SENSOR_TYPE_ENVIRONMENTAL_HUMIDITY,
1225 HID_COLLECTION(Physical),
1226
1227 //feature reports (xmit/receive)
1228 HID_USAGE_PAGE_SENSOR,
1229 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
1230 HID_LOGICAL_MIN_8(0),
1231 HID_LOGICAL_MAX_8(2),
1232 HID_REPORT_SIZE(8),
1233 HID_REPORT_COUNT(1),
1234 HID_COLLECTION(Logical),
1235 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
1236 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
1237 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
1238 HID_FEATURE(Data_Arr_Abs),
1239 HID_END_COLLECTION,
1240 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
1241 HID_LOGICAL_MIN_8(0),
1242 HID_LOGICAL_MAX_8(5),
1243 HID_REPORT_SIZE(8),
1244 HID_REPORT_COUNT(1),
1245 HID_COLLECTION(Logical),
1246 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
1247 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
1248 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
1249 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
1250 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
1251 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
1252 HID_FEATURE(Data_Arr_Abs),
1253 HID_END_COLLECTION,
1254 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
1255 HID_LOGICAL_MIN_8(0),
1256 HID_LOGICAL_MAX_8(5),
1257 HID_REPORT_SIZE(8),
1258 HID_REPORT_COUNT(1),
1259 HID_COLLECTION(Logical),
1260 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
1261 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
1262 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
1263 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
1264 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
1265 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
1266 HID_FEATURE(Data_Arr_Abs),
1267 HID_END_COLLECTION,
1268 HID_USAGE_SENSOR_STATE,
1269 HID_LOGICAL_MIN_8(0),
1270 HID_LOGICAL_MAX_8(6),
1271 HID_REPORT_SIZE(8),
1272 HID_REPORT_COUNT(1),
1273 HID_COLLECTION(Logical),
1274 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1275 HID_USAGE_SENSOR_STATE_READY_SEL,
1276 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1277 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1278 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1279 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1280 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1281 HID_FEATURE(Data_Arr_Abs),
1282 HID_END_COLLECTION,
1283 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
1284 HID_LOGICAL_MIN_8(0),
1285 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
1286 HID_REPORT_SIZE(32),
1287 HID_REPORT_COUNT(1),
1288 HID_UNIT_EXPONENT(0),
1289 HID_FEATURE(Data_Var_Abs),
1290 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_RELATIVE_HUMIDITY,
1291 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
1292 HID_LOGICAL_MIN_8(0),
1293 HID_LOGICAL_MAX_16(0x10,0x27), // 10000 = 0.00 to 100.00 percent with 2 digits past decimal point
1294 HID_REPORT_SIZE(16),
1295 HID_REPORT_COUNT(1),
1296 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past the decimal point
1297 HID_FEATURE(Data_Var_Abs),
1298 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_RELATIVE_HUMIDITY,
1299 HID_USAGE_SENSOR_DATA_MOD_MAX),
1300 HID_LOGICAL_MIN_8(0),
1301 HID_LOGICAL_MAX_16(0x10,0x27), // 10000 = 0.00 to 100.00 percent with 2 digits past decimal point
1302 HID_REPORT_SIZE(16),
1303 HID_REPORT_COUNT(1),
1304 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past the decimal point
1305 HID_FEATURE(Data_Var_Abs),
1306 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_RELATIVE_HUMIDITY,
1307 HID_USAGE_SENSOR_DATA_MOD_MIN),
1308 HID_LOGICAL_MIN_8(0),
1309 HID_LOGICAL_MAX_16(0x10,0x27), // 10000 = 0.00 to 100.00 percent with 2 digits past decimal point
1310 HID_REPORT_SIZE(16),
1311 HID_REPORT_COUNT(1),
1312 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past the decimal point
1313 HID_FEATURE(Data_Var_Abs),
1314
1315 //input reports (transmit)
1316 HID_USAGE_PAGE_SENSOR,
1317 HID_USAGE_SENSOR_STATE,
1318 HID_LOGICAL_MIN_8(0),
1319 HID_LOGICAL_MAX_8(6),
1320 HID_REPORT_SIZE(8),
1321 HID_REPORT_COUNT(1),
1322 HID_COLLECTION(Logical),
1323 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1324 HID_USAGE_SENSOR_STATE_READY_SEL,
1325 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1326 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1327 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1328 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1329 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1330 HID_INPUT(Data_Arr_Abs),
1331 HID_END_COLLECTION,
1332 HID_USAGE_SENSOR_EVENT,
1333 HID_LOGICAL_MIN_8(0),
1334 HID_LOGICAL_MAX_8(5),
1335 HID_REPORT_SIZE(8),
1336 HID_REPORT_COUNT(1),
1337 HID_COLLECTION(Logical),
1338 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
1339 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
1340 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
1341 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
1342 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
1343 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
1344 HID_INPUT(Data_Arr_Abs),
1345 HID_END_COLLECTION,
1346 HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_RELATIVE_HUMIDITY,
1347 HID_LOGICAL_MIN_8(0),
1348 HID_LOGICAL_MAX_16(0x10,0x27), // 10000 = 0.00 to 100.00 percent with 2 digits past decimal point
1349 HID_REPORT_SIZE(16),
1350 HID_REPORT_COUNT(1),
1351 HID_UNIT_EXPONENT(0x0E), // scale default unit "percent"
1352 // to provide 2 digits past the decimal point
1353 HID_INPUT(Data_Var_Abs),
1354
1355 HID_END_COLLECTION
1356 };
1357
1358
1359 /**
1360 * Temperature sensor example.
1361 */
1362 const unsigned char temp_report_descriptor[] = {
1363 HID_USAGE_PAGE_SENSOR,
1364 HID_USAGE_SENSOR_TYPE_ENVIRONMENTAL_TEMPERATURE,
1365 HID_COLLECTION(Physical),
1366
1367 //feature reports (xmit/receive)
1368 HID_USAGE_PAGE_SENSOR,
1369 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
1370 HID_LOGICAL_MIN_8(0),
1371 HID_LOGICAL_MAX_8(2),
1372 HID_REPORT_SIZE(8),
1373 HID_REPORT_COUNT(1),
1374 HID_COLLECTION(Logical),
1375 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
1376 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
1377 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
1378 HID_FEATURE(Data_Arr_Abs),
1379 HID_END_COLLECTION,
1380 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
1381 HID_LOGICAL_MIN_8(0),
1382 HID_LOGICAL_MAX_8(5),
1383 HID_REPORT_SIZE(8),
1384 HID_REPORT_COUNT(1),
1385 HID_COLLECTION(Logical),
1386 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
1387 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
1388 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
1389 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
1390 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
1391 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
1392 HID_FEATURE(Data_Arr_Abs),
1393 HID_END_COLLECTION,
1394 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
1395 HID_LOGICAL_MIN_8(0),
1396 HID_LOGICAL_MAX_8(5),
1397 HID_REPORT_SIZE(8),
1398 HID_REPORT_COUNT(1),
1399 HID_COLLECTION(Logical),
1400 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
1401 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
1402 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
1403 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
1404 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
1405 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
1406 HID_FEATURE(Data_Arr_Abs),
1407 HID_END_COLLECTION,
1408 HID_USAGE_SENSOR_STATE,
1409 HID_LOGICAL_MIN_8(0),
1410 HID_LOGICAL_MAX_8(6),
1411 HID_REPORT_SIZE(8),
1412 HID_REPORT_COUNT(1),
1413 HID_COLLECTION(Logical),
1414 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1415 HID_USAGE_SENSOR_STATE_READY_SEL,
1416 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1417 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1418 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1419 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1420 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1421 HID_FEATURE(Data_Arr_Abs),
1422 HID_END_COLLECTION,
1423 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
1424 HID_LOGICAL_MIN_8(0),
1425 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
1426 HID_REPORT_SIZE(32),
1427 HID_REPORT_COUNT(1),
1428 HID_UNIT_EXPONENT(0),
1429 HID_FEATURE(Data_Var_Abs),
1430 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE,
1431 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
1432 HID_LOGICAL_MIN_8(0),
1433 HID_LOGICAL_MAX_16(0xFF,0xFF),
1434 HID_REPORT_SIZE(16),
1435 HID_REPORT_COUNT(1),
1436 HID_UNIT_EXPONENT(0x0E), // scale default unit "Celsius"
1437 // to provide 2 digits past the decimal point
1438 HID_FEATURE(Data_Var_Abs),
1439 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE,
1440 HID_USAGE_SENSOR_DATA_MOD_MAX),
1441 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1442 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1443 HID_REPORT_SIZE(16),
1444 HID_REPORT_COUNT(1),
1445 HID_UNIT_EXPONENT(0x0E), // scale default unit "Celsius"
1446 // to provide 2 digits past the decimal point
1447 HID_FEATURE(Data_Var_Abs),
1448 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE,
1449 HID_USAGE_SENSOR_DATA_MOD_MIN),
1450 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1451 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1452 HID_REPORT_SIZE(16),
1453 HID_REPORT_COUNT(1),
1454 HID_UNIT_EXPONENT(0x0E), // scale default unit "Celsius"
1455 // to provide 2 digits past the decimal point
1456 HID_FEATURE(Data_Var_Abs),
1457
1458 //input reports (transmit)
1459 HID_USAGE_PAGE_SENSOR,
1460 HID_USAGE_SENSOR_STATE,
1461 HID_LOGICAL_MIN_8(0),
1462 HID_LOGICAL_MAX_8(6),
1463 HID_REPORT_SIZE(8),
1464 HID_REPORT_COUNT(1),
1465 HID_COLLECTION(Logical),
1466 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1467 HID_USAGE_SENSOR_STATE_READY_SEL,
1468 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1469 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1470 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1471 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1472 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1473 HID_INPUT(Data_Arr_Abs),
1474 HID_END_COLLECTION,
1475 HID_USAGE_SENSOR_EVENT,
1476 HID_LOGICAL_MIN_8(0),
1477 HID_LOGICAL_MAX_8(16),
1478 HID_REPORT_SIZE(8),
1479 HID_REPORT_COUNT(1),
1480 HID_COLLECTION(Logical),
1481 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
1482 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
1483 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
1484 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
1485 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
1486 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
1487 HID_INPUT(Data_Arr_Abs),
1488 HID_END_COLLECTION,
1489 HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE,
1490 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1491 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1492 HID_REPORT_SIZE(16),
1493 HID_REPORT_COUNT(1),
1494 HID_UNIT_EXPONENT(0x0E), // scale default unit "Celsius"
1495 // to provide 2 digits past the decimal point
1496 HID_INPUT(Data_Var_Abs),
1497
1498 HID_END_COLLECTION
1499 };
1500
1501
1502 /**
1503 * Ambient light sensor example.
1504 */
1505 const unsigned char als_report_descriptor[] = {
1506 HID_USAGE_PAGE_SENSOR, // USAGE_PAGE (Sensor)
1507 HID_USAGE_SENSOR_TYPE_LIGHT_AMBIENTLIGHT, // USAGE (AmbientLight)
1508 HID_COLLECTION(Physical),
1509
1510 //feature reports (xmit/receive)
1511 HID_USAGE_PAGE_SENSOR,
1512 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
1513 HID_LOGICAL_MIN_8(0),
1514 HID_LOGICAL_MAX_8(2),
1515 HID_REPORT_SIZE(8),
1516 HID_REPORT_COUNT(1),
1517 HID_COLLECTION(Logical),
1518 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
1519 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
1520 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
1521 HID_FEATURE(Data_Arr_Abs),
1522 HID_END_COLLECTION,
1523 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
1524 HID_LOGICAL_MIN_8(0),
1525 HID_LOGICAL_MAX_8(5),
1526 HID_REPORT_SIZE(8),
1527 HID_REPORT_COUNT(1),
1528 HID_COLLECTION(Logical),
1529 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
1530 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
1531 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
1532 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
1533 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
1534 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
1535 HID_FEATURE(Data_Arr_Abs),
1536 HID_END_COLLECTION,
1537 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
1538 HID_LOGICAL_MIN_8(0),
1539 HID_LOGICAL_MAX_8(5),
1540 HID_REPORT_SIZE(8),
1541 HID_REPORT_COUNT(1),
1542 HID_COLLECTION(Logical),
1543 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
1544 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
1545 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
1546 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
1547 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
1548 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
1549 HID_FEATURE(Data_Arr_Abs),
1550 HID_END_COLLECTION,
1551 HID_USAGE_SENSOR_STATE,
1552 HID_LOGICAL_MIN_8(0),
1553 HID_LOGICAL_MAX_8(6),
1554 HID_REPORT_SIZE(8),
1555 HID_REPORT_COUNT(1),
1556 HID_COLLECTION(Logical),
1557 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1558 HID_USAGE_SENSOR_STATE_READY_SEL,
1559 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1560 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1561 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1562 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1563 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1564 HID_FEATURE(Data_Arr_Abs),
1565 HID_END_COLLECTION,
1566 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
1567 HID_LOGICAL_MIN_8(0),
1568 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
1569 HID_REPORT_SIZE(32),
1570 HID_REPORT_COUNT(1),
1571 HID_UNIT_EXPONENT(0),
1572 HID_FEATURE(Data_Var_Abs),
1573 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_LIGHT_ILLUMINANCE,
1574 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_REL_PCT),
1575 HID_LOGICAL_MIN_8(0),
1576 HID_LOGICAL_MAX_16(0x10,0x27), // 10000 = 0.00 to 100.00 percent with 2 digits past decimal point
1577 HID_REPORT_SIZE(16),
1578 HID_REPORT_COUNT(1),
1579 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
1580 HID_FEATURE(Data_Var_Abs),
1581 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_LIGHT_ILLUMINANCE,HID_USAGE_SENSOR_DATA_MOD_MAX),
1582 HID_LOGICAL_MIN_8(0),
1583 HID_LOGICAL_MAX_16(0xFF,0xFF),
1584 HID_REPORT_SIZE(16),
1585 HID_REPORT_COUNT(1),
1586 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
1587 HID_FEATURE(Data_Var_Abs),
1588 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_LIGHT_ILLUMINANCE,HID_USAGE_SENSOR_DATA_MOD_MIN),
1589 HID_LOGICAL_MIN_8(0),
1590 HID_LOGICAL_MAX_16(0xFF,0xFF),
1591 HID_REPORT_SIZE(16),
1592 HID_REPORT_COUNT(1),
1593 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
1594 HID_FEATURE(Data_Var_Abs),
1595
1596 //add this definition if required by the specific application
1597 HID_USAGE_SENSOR_PROPERTY_RESPONSE_CURVE,
1598 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1599 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1600 HID_REPORT_SIZE(16),
1601 HID_REPORT_COUNT(10), //as required for n pair of values
1602 HID_UNIT_EXPONENT(0x0), // scale default unit to provide 0 digits past the decimal point
1603 HID_FEATURE(Data_Var_Abs),
1604
1605 //input reports (transmit)
1606 HID_USAGE_PAGE_SENSOR,
1607 HID_USAGE_SENSOR_STATE,
1608 HID_LOGICAL_MIN_8(0),
1609 HID_LOGICAL_MAX_8(6),
1610 HID_REPORT_SIZE(8),
1611 HID_REPORT_COUNT(1),
1612 HID_COLLECTION(Logical),
1613 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1614 HID_USAGE_SENSOR_STATE_READY_SEL,
1615 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1616 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1617 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1618 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1619 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1620 HID_INPUT(Data_Arr_Abs),
1621 HID_END_COLLECTION,
1622 HID_USAGE_SENSOR_EVENT,
1623 HID_LOGICAL_MIN_8(0),
1624 HID_LOGICAL_MAX_8(5),
1625 HID_REPORT_SIZE(8),
1626 HID_REPORT_COUNT(1),
1627 HID_COLLECTION(Logical),
1628 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
1629 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
1630 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
1631 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
1632 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
1633 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
1634 HID_INPUT(Data_Arr_Abs),
1635 HID_END_COLLECTION,
1636 HID_USAGE_SENSOR_DATA_LIGHT_ILLUMINANCE,
1637 HID_LOGICAL_MIN_8(0),
1638 HID_LOGICAL_MAX_16(0xFF,0xFF),
1639 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
1640 HID_REPORT_SIZE(16),
1641 HID_REPORT_COUNT(1),
1642 HID_INPUT(Data_Var_Abs),
1643 HID_USAGE_SENSOR_DATA_LIGHT_COLOR_TEMPERATURE,
1644 HID_LOGICAL_MIN_8(0),
1645 HID_LOGICAL_MAX_16(0xFF,0xFF),
1646 HID_UNIT_EXPONENT(0),
1647 HID_REPORT_SIZE(16),
1648 HID_REPORT_COUNT(1),
1649 HID_INPUT(Data_Var_Abs),
1650 HID_USAGE_SENSOR_DATA_LIGHT_CHROMATICITY_X,
1651 HID_LOGICAL_MIN_8(0),
1652 HID_LOGICAL_MAX_16(0xFF,0xFF),
1653 HID_UNIT_EXPONENT(0x0C), // scale default unit to provide 4 digits past decimal point
1654 HID_REPORT_SIZE(16),
1655 HID_REPORT_COUNT(1),
1656 HID_INPUT(Data_Var_Abs),
1657 HID_USAGE_SENSOR_DATA_LIGHT_CHROMATICITY_Y,
1658 HID_LOGICAL_MIN_8(0),
1659 HID_LOGICAL_MAX_16(0xFF,0xFF),
1660 HID_UNIT_EXPONENT(0x0C), // scale default unit to provide 4 digits past decimal point
1661 HID_REPORT_SIZE(16),
1662 HID_REPORT_COUNT(1),
1663 HID_INPUT(Data_Var_Abs),
1664
1665 HID_END_COLLECTION
1666 };
1667
1668
1669 /**
1670 * 3D accelerometer sensor example.
1671 */
1672 const unsigned char accel3_report_descriptor[] = {
1673 HID_USAGE_PAGE_SENSOR,
1674 HID_USAGE_SENSOR_TYPE_MOTION_ACCELEROMETER_3D,
1675 HID_COLLECTION(Physical),
1676
1677 //feature reports (xmit/receive)
1678 HID_USAGE_PAGE_SENSOR,
1679 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
1680 HID_LOGICAL_MIN_8(0),
1681 HID_LOGICAL_MAX_8(2),
1682 HID_REPORT_SIZE(8),
1683 HID_REPORT_COUNT(1),
1684 HID_COLLECTION(Logical),
1685 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
1686 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
1687 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
1688 HID_FEATURE(Data_Arr_Abs),
1689 HID_END_COLLECTION,
1690 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
1691 HID_LOGICAL_MIN_8(0),
1692 HID_LOGICAL_MAX_8(5),
1693 HID_REPORT_SIZE(8),
1694 HID_REPORT_COUNT(1),
1695 HID_COLLECTION(Logical),
1696 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
1697 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
1698 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
1699 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
1700 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
1701 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
1702 HID_FEATURE(Data_Arr_Abs),
1703 HID_END_COLLECTION,
1704 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
1705 HID_LOGICAL_MIN_8(0),
1706 HID_LOGICAL_MAX_8(5),
1707 HID_REPORT_SIZE(8),
1708 HID_REPORT_COUNT(1),
1709 HID_COLLECTION(Logical),
1710 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
1711 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
1712 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
1713 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
1714 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
1715 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
1716 HID_FEATURE(Data_Arr_Abs),
1717 HID_END_COLLECTION,
1718 HID_USAGE_SENSOR_STATE,
1719 HID_LOGICAL_MIN_8(0),
1720 HID_LOGICAL_MAX_8(6),
1721 HID_REPORT_SIZE(8),
1722 HID_REPORT_COUNT(1),
1723 HID_COLLECTION(Logical),
1724 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1725 HID_USAGE_SENSOR_STATE_READY_SEL,
1726 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1727 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1728 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1729 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1730 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1731 HID_FEATURE(Data_Arr_Abs),
1732 HID_END_COLLECTION,
1733 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
1734 HID_LOGICAL_MIN_8(0),
1735 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
1736 HID_REPORT_SIZE(32),
1737 HID_REPORT_COUNT(1),
1738 HID_UNIT_EXPONENT(0),
1739 HID_FEATURE(Data_Var_Abs),
1740
1741 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION,
1742 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
1743 HID_LOGICAL_MIN_8(0),
1744 HID_LOGICAL_MAX_16(0xFF,0xFF),
1745 HID_REPORT_SIZE(16),
1746 HID_REPORT_COUNT(1),
1747 HID_UNIT_EXPONENT(0x0E), // scale default unit Gs to centi-Gs
1748 // to provide 2 digits past Gs decimal point
1749 HID_FEATURE(Data_Var_Abs),
1750
1751 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION,HID_USAGE_SENSOR_DATA_MOD_MAX),
1752 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1753 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1754 HID_REPORT_SIZE(16),
1755 HID_REPORT_COUNT(1),
1756 HID_UNIT_EXPONENT(0x0E), // scale default unit Gs to centi-Gs
1757 // to provide 2 digits past Gs decimal point
1758 HID_FEATURE(Data_Var_Abs),
1759
1760 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION,HID_USAGE_SENSOR_DATA_MOD_MIN),
1761 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1762 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1763 HID_REPORT_SIZE(16),
1764 HID_REPORT_COUNT(1),
1765 HID_UNIT_EXPONENT(0x0E), // scale default unit Gs to centi-Gs
1766 // to provide 2 digits past Gs decimal point
1767 HID_FEATURE(Data_Var_Abs),
1768
1769 //input reports (transmit)
1770 HID_USAGE_PAGE_SENSOR,
1771 HID_USAGE_SENSOR_STATE,
1772 HID_LOGICAL_MIN_8(0),
1773 HID_LOGICAL_MAX_8(6),
1774 HID_REPORT_SIZE(8),
1775 HID_REPORT_COUNT(1),
1776 HID_COLLECTION(Logical),
1777 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1778 HID_USAGE_SENSOR_STATE_READY_SEL,
1779 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1780 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1781 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1782 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1783 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1784 HID_INPUT(Data_Arr_Abs),
1785 HID_END_COLLECTION,
1786 HID_USAGE_SENSOR_EVENT,
1787 HID_LOGICAL_MIN_8(0),
1788 HID_LOGICAL_MAX_8(5),
1789 HID_REPORT_SIZE(8),
1790 HID_REPORT_COUNT(1),
1791 HID_COLLECTION(Logical),
1792 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
1793 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
1794 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
1795 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
1796 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
1797 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
1798 HID_INPUT(Data_Arr_Abs),
1799 HID_END_COLLECTION,
1800 HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_X_AXIS,
1801 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1802 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1803 HID_REPORT_SIZE(16),
1804 HID_REPORT_COUNT(1),
1805 HID_UNIT_EXPONENT(0x0E), // scale default unit Gs to centi-Gs
1806 // to provide 2 digits past Gs decimal point
1807 HID_INPUT(Data_Var_Abs),
1808 HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_Y_AXIS,
1809 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1810 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1811 HID_REPORT_SIZE(16),
1812 HID_REPORT_COUNT(1),
1813 HID_UNIT_EXPONENT(0x0E), // scale default unit Gs to centi-Gs
1814 // to provide 2 digits past Gs decimal point
1815 HID_INPUT(Data_Var_Abs),
1816 HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_Z_AXIS,
1817 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1818 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1819 HID_REPORT_SIZE(16),
1820 HID_REPORT_COUNT(1),
1821 HID_UNIT_EXPONENT(0x0E), // scale default unit Gs to centi-Gs
1822 // to provide 2 digits past Gs decimal point
1823 HID_INPUT(Data_Var_Abs),
1824
1825 //include the following datafield if required to support the �shake� event
1826 HID_USAGE_SENSOR_DATA_MOTION_STATE,
1827 HID_LOGICAL_MIN_8(0), // False = Still
1828 HID_LOGICAL_MAX_8(1), // True = In Motion
1829 HID_REPORT_SIZE(8),
1830 HID_REPORT_COUNT(1),
1831 HID_INPUT(Data_Var_Abs),
1832
1833 HID_END_COLLECTION
1834 };
1835
1836
1837 /**
1838 * 3D gyroscope sensor example.
1839 */
1840 const unsigned char gyro3_report_descriptor[] = {
1841 HID_USAGE_PAGE_SENSOR,
1842 HID_USAGE_SENSOR_TYPE_MOTION_GYROMETER_3D,
1843 HID_COLLECTION(Physical),
1844
1845 //feature reports (xmit/receive)
1846 HID_USAGE_PAGE_SENSOR,
1847 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
1848 HID_LOGICAL_MIN_8(0),
1849 HID_LOGICAL_MAX_8(2),
1850 HID_REPORT_SIZE(8),
1851 HID_REPORT_COUNT(1),
1852 HID_COLLECTION(Logical),
1853 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
1854 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
1855 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
1856 HID_FEATURE(Data_Arr_Abs),
1857 HID_END_COLLECTION,
1858 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
1859 HID_LOGICAL_MIN_8(0),
1860 HID_LOGICAL_MAX_8(5),
1861 HID_REPORT_SIZE(8),
1862 HID_REPORT_COUNT(1),
1863 HID_COLLECTION(Logical),
1864 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
1865 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
1866 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
1867 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
1868 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
1869 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
1870 HID_FEATURE(Data_Arr_Abs),
1871 HID_END_COLLECTION,
1872 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
1873 HID_LOGICAL_MIN_8(0),
1874 HID_LOGICAL_MAX_8(5),
1875 HID_REPORT_SIZE(8),
1876 HID_REPORT_COUNT(1),
1877 HID_COLLECTION(Logical),
1878 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
1879 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
1880 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
1881 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
1882 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
1883 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
1884 HID_FEATURE(Data_Arr_Abs),
1885 HID_END_COLLECTION,
1886 HID_USAGE_SENSOR_STATE,
1887 HID_LOGICAL_MIN_8(0),
1888 HID_LOGICAL_MAX_8(6),
1889 HID_REPORT_SIZE(8),
1890 HID_REPORT_COUNT(1),
1891 HID_COLLECTION(Logical),
1892 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1893 HID_USAGE_SENSOR_STATE_READY_SEL,
1894 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1895 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1896 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1897 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1898 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1899 HID_FEATURE(Data_Arr_Abs),
1900 HID_END_COLLECTION,
1901 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
1902 HID_LOGICAL_MIN_8(0),
1903 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
1904 HID_REPORT_SIZE(32),
1905 HID_REPORT_COUNT(1),
1906 HID_UNIT_EXPONENT(0),
1907 HID_FEATURE(Data_Var_Abs),
1908 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_MOTION_ANGULAR_VELOCITY,
1909 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
1910 HID_LOGICAL_MIN_8(0),
1911 HID_LOGICAL_MAX_16(0xFF,0xFF),
1912 HID_REPORT_SIZE(16),
1913 HID_REPORT_COUNT(1),
1914 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
1915 HID_FEATURE(Data_Var_Abs),
1916 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_MOTION_ANGULAR_VELOCITY,
1917 HID_USAGE_SENSOR_DATA_MOD_MAX),
1918 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1919 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1920 HID_REPORT_SIZE(16),
1921 HID_REPORT_COUNT(1),
1922 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
1923 HID_FEATURE(Data_Var_Abs),
1924 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_MOTION_ANGULAR_VELOCITY,
1925 HID_USAGE_SENSOR_DATA_MOD_MIN),
1926 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1927 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1928 HID_REPORT_SIZE(16),
1929 HID_REPORT_COUNT(1),
1930 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
1931 HID_FEATURE(Data_Var_Abs),
1932
1933 //input reports (transmit)
1934 HID_USAGE_PAGE_SENSOR,
1935 HID_USAGE_SENSOR_STATE,
1936 HID_LOGICAL_MIN_8(0),
1937 HID_LOGICAL_MAX_8(6),
1938 HID_REPORT_SIZE(8),
1939 HID_REPORT_COUNT(1),
1940 HID_COLLECTION(Logical),
1941 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
1942 HID_USAGE_SENSOR_STATE_READY_SEL,
1943 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
1944 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
1945 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
1946 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
1947 HID_USAGE_SENSOR_STATE_ERROR_SEL,
1948 HID_INPUT(Data_Arr_Abs),
1949 HID_END_COLLECTION,
1950 HID_USAGE_SENSOR_EVENT,
1951 HID_LOGICAL_MIN_8(0),
1952 HID_LOGICAL_MAX_8(5),
1953 HID_REPORT_SIZE(8),
1954 HID_REPORT_COUNT(1),
1955 HID_COLLECTION(Logical),
1956 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
1957 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
1958 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
1959 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
1960 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
1961 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
1962 HID_INPUT(Data_Arr_Abs),
1963 HID_END_COLLECTION,
1964 HID_USAGE_SENSOR_DATA_MOTION_ANGULAR_VELOCITY_X_AXIS,
1965 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1966 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1967 HID_REPORT_SIZE(16),
1968 HID_REPORT_COUNT(1),
1969 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
1970 HID_INPUT(Data_Var_Abs),
1971 HID_USAGE_SENSOR_DATA_MOTION_ANGULAR_VELOCITY_Y_AXIS,
1972 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1973 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1974 HID_REPORT_SIZE(16),
1975 HID_REPORT_COUNT(1),
1976 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
1977 HID_INPUT(Data_Var_Abs),
1978 HID_USAGE_SENSOR_DATA_MOTION_ANGULAR_VELOCITY_Z_AXIS,
1979 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
1980 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
1981 HID_REPORT_SIZE(16),
1982 HID_REPORT_COUNT(1),
1983 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
1984 HID_INPUT(Data_Var_Abs),
1985
1986 HID_END_COLLECTION
1987 };
1988
1989
1990 /**
1991 * 3D compass sensor example.
1992 */
1993 const unsigned char comp3_report_descriptor[] = {
1994 HID_USAGE_PAGE_SENSOR,
1995 HID_USAGE_SENSOR_TYPE_ORIENTATION_COMPASS_3D,
1996 HID_COLLECTION(Physical),
1997
1998 //feature reports (xmit/receive)
1999 HID_USAGE_PAGE_SENSOR,
2000 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
2001 HID_LOGICAL_MIN_8(0),
2002 HID_LOGICAL_MAX_8(2),
2003 HID_REPORT_SIZE(8),
2004 HID_REPORT_COUNT(1),
2005 HID_COLLECTION(Logical),
2006 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
2007 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
2008 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
2009 HID_FEATURE(Data_Arr_Abs),
2010 HID_END_COLLECTION,
2011 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
2012 HID_LOGICAL_MIN_8(0),
2013 HID_LOGICAL_MAX_8(5),
2014 HID_REPORT_SIZE(8),
2015 HID_REPORT_COUNT(1),
2016 HID_COLLECTION(Logical),
2017 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
2018 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
2019 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
2020 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
2021 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
2022 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
2023 HID_FEATURE(Data_Arr_Abs),
2024 HID_END_COLLECTION,
2025 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
2026 HID_LOGICAL_MIN_8(0),
2027 HID_LOGICAL_MAX_8(5),
2028 HID_REPORT_SIZE(8),
2029 HID_REPORT_COUNT(1),
2030 HID_COLLECTION(Logical),
2031 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
2032 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
2033 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
2034 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
2035 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
2036 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
2037 HID_FEATURE(Data_Arr_Abs),
2038 HID_END_COLLECTION,
2039 HID_USAGE_SENSOR_STATE,
2040 HID_LOGICAL_MIN_8(0),
2041 HID_LOGICAL_MAX_8(6),
2042 HID_REPORT_SIZE(8),
2043 HID_REPORT_COUNT(1),
2044 HID_COLLECTION(Logical),
2045 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
2046 HID_USAGE_SENSOR_STATE_READY_SEL,
2047 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
2048 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
2049 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
2050 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
2051 HID_USAGE_SENSOR_STATE_ERROR_SEL,
2052 HID_FEATURE(Data_Arr_Abs),
2053 HID_END_COLLECTION,
2054 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
2055 HID_LOGICAL_MIN_8(0),
2056 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
2057 HID_REPORT_SIZE(32),
2058 HID_REPORT_COUNT(1),
2059 HID_UNIT_EXPONENT(0),
2060 HID_FEATURE(Data_Var_Abs),
2061 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETIC_HEADING,
2062 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
2063 HID_LOGICAL_MIN_8(0),
2064 HID_LOGICAL_MAX_16(0xFF,0xFF),
2065 HID_REPORT_SIZE(16),
2066 HID_REPORT_COUNT(1),
2067 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
2068 HID_FEATURE(Data_Var_Abs),
2069 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETIC_HEADING,
2070 HID_USAGE_SENSOR_DATA_MOD_MAX),
2071 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2072 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2073 HID_REPORT_SIZE(16),
2074 HID_REPORT_COUNT(1),
2075 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
2076 HID_FEATURE(Data_Var_Abs),
2077 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETIC_HEADING,
2078 HID_USAGE_SENSOR_DATA_MOD_MIN),
2079 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2080 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2081 HID_REPORT_SIZE(16),
2082 HID_REPORT_COUNT(1),
2083 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
2084 HID_FEATURE(Data_Var_Abs),
2085 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETIC_FLUX,
2086 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
2087 HID_LOGICAL_MIN_8(0),
2088 HID_LOGICAL_MAX_16(0xFF,0xFF),
2089 HID_REPORT_SIZE(16),
2090 HID_REPORT_COUNT(1),
2091 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
2092 HID_FEATURE(Data_Var_Abs),
2093 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETIC_FLUX,
2094 HID_USAGE_SENSOR_DATA_MOD_MAX),
2095 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2096 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2097 HID_REPORT_SIZE(16),
2098 HID_REPORT_COUNT(1),
2099 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
2100 HID_FEATURE(Data_Var_Abs),
2101 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETIC_FLUX,
2102 HID_USAGE_SENSOR_DATA_MOD_MIN),
2103 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2104 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2105 HID_REPORT_SIZE(16),
2106 HID_REPORT_COUNT(1),
2107 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
2108 HID_FEATURE(Data_Var_Abs),
2109
2110 //input reports (transmit)
2111 HID_USAGE_PAGE_SENSOR,
2112 HID_USAGE_SENSOR_STATE,
2113 HID_LOGICAL_MIN_8(0),
2114 HID_LOGICAL_MAX_8(6),
2115 HID_REPORT_SIZE(8),
2116 HID_REPORT_COUNT(1),
2117 HID_COLLECTION(Logical),
2118 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
2119 HID_USAGE_SENSOR_STATE_READY_SEL,
2120 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
2121 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
2122 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
2123 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
2124 HID_USAGE_SENSOR_STATE_ERROR_SEL,
2125 HID_INPUT(Data_Arr_Abs),
2126 HID_END_COLLECTION,
2127 HID_USAGE_SENSOR_EVENT,
2128 HID_LOGICAL_MIN_8(0),
2129 HID_LOGICAL_MAX_8(5),
2130 HID_REPORT_SIZE(8),
2131 HID_REPORT_COUNT(1),
2132 HID_COLLECTION(Logical),
2133 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
2134 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
2135 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
2136 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
2137 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
2138 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
2139 HID_INPUT(Data_Arr_Abs),
2140 HID_END_COLLECTION,
2141 HID_USAGE_SENSOR_DATA_ORIENTATION_COMPENSATED_MAGNETIC_NORTH,
2142 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2143 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2144 HID_REPORT_SIZE(16),
2145 HID_REPORT_COUNT(1),
2146 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
2147 HID_INPUT(Data_Var_Abs),
2148 HID_USAGE_SENSOR_DATA_ORIENTATION_COMPENSATED_TRUE_NORTH,
2149 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2150 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2151 HID_REPORT_SIZE(16),
2152 HID_REPORT_COUNT(1),
2153 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
2154 HID_INPUT(Data_Var_Abs),
2155 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETIC_NORTH,
2156 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2157 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2158 HID_REPORT_SIZE(16),
2159 HID_REPORT_COUNT(1),
2160 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
2161 HID_INPUT(Data_Var_Abs),
2162 HID_USAGE_SENSOR_DATA_ORIENTATION_TRUE_NORTH,
2163 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2164 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2165 HID_REPORT_SIZE(16),
2166 HID_REPORT_COUNT(1),
2167 HID_UNIT_EXPONENT(0x0F), // scale default unit to provide 1 digit past decimal point
2168 HID_INPUT(Data_Var_Abs),
2169 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETIC_FLUX_X_AXIS,
2170 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2171 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2172 HID_REPORT_SIZE(16),
2173 HID_REPORT_COUNT(1),
2174 HID_UNIT_EXPONENT(0x0D), // scale default unit to "milliGauss"
2175 // to provide 3 digits past decimal point
2176 HID_INPUT(Data_Var_Abs),
2177 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETIC_FLUX_Y_AXIS,
2178 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2179 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2180 HID_REPORT_SIZE(16),
2181 HID_REPORT_COUNT(1),
2182 HID_UNIT_EXPONENT(0x0D), // scale default unit to "milliGauss"
2183 // to provide 3 digits past decimal point
2184 HID_INPUT(Data_Var_Abs),
2185 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETIC_FLUX_Z_AXIS,
2186 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2187 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2188 HID_REPORT_SIZE(16),
2189 HID_REPORT_COUNT(1),
2190 HID_UNIT_EXPONENT(0x0D), // scale default unit to "milliGauss"
2191 // to provide 3 digits past decimal point
2192 HID_INPUT(Data_Var_Abs),
2193 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY,
2194 HID_LOGICAL_MIN_8(0),
2195 HID_LOGICAL_MAX_8(2),
2196 HID_REPORT_SIZE(8),
2197 HID_REPORT_COUNT(1),
2198 HID_COLLECTION(Logical),
2199 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY_LOW,
2200 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY_MEDIUM,
2201 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY_HIGH,
2202 HID_INPUT(Data_Arr_Abs),
2203 HID_END_COLLECTION,
2204
2205 HID_END_COLLECTION
2206 };
2207
2208
2209 /**
2210 * 3D inclinomater example.
2211 */
2212 const unsigned char inc3_report_descriptor[] = {
2213 HID_USAGE_PAGE_SENSOR,
2214 HID_USAGE_SENSOR_TYPE_ORIENTATION_INCLINOMETER_3D,
2215 HID_COLLECTION(Physical),
2216
2217 //feature reports (xmit/receive)
2218 HID_USAGE_PAGE_SENSOR,
2219 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
2220 HID_LOGICAL_MIN_8(0),
2221 HID_LOGICAL_MAX_8(2),
2222 HID_REPORT_SIZE(8),
2223 HID_REPORT_COUNT(1),
2224 HID_COLLECTION(Logical),
2225 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
2226 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
2227 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
2228 HID_FEATURE(Data_Arr_Abs),
2229 HID_END_COLLECTION,
2230 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
2231 HID_LOGICAL_MIN_8(0),
2232 HID_LOGICAL_MAX_8(5),
2233 HID_REPORT_SIZE(8),
2234 HID_REPORT_COUNT(1),
2235 HID_COLLECTION(Logical),
2236 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
2237 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
2238 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
2239 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
2240 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
2241 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
2242 HID_FEATURE(Data_Arr_Abs),
2243 HID_END_COLLECTION,
2244 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
2245 HID_LOGICAL_MIN_8(0),
2246 HID_LOGICAL_MAX_8(5),
2247 HID_REPORT_SIZE(8),
2248 HID_REPORT_COUNT(1),
2249 HID_COLLECTION(Logical),
2250 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
2251 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
2252 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
2253 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
2254 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
2255 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
2256 HID_FEATURE(Data_Arr_Abs),
2257 HID_END_COLLECTION,
2258 HID_USAGE_SENSOR_STATE,
2259 HID_LOGICAL_MIN_8(0),
2260 HID_LOGICAL_MAX_8(6),
2261 HID_REPORT_SIZE(8),
2262 HID_REPORT_COUNT(1),
2263 HID_COLLECTION(Logical),
2264 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
2265 HID_USAGE_SENSOR_STATE_READY_SEL,
2266 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
2267 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
2268 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
2269 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
2270 HID_USAGE_SENSOR_STATE_ERROR_SEL,
2271 HID_FEATURE(Data_Arr_Abs),
2272 HID_END_COLLECTION,
2273 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
2274 HID_LOGICAL_MIN_8(0),
2275 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
2276 HID_REPORT_SIZE(32),
2277 HID_REPORT_COUNT(1),
2278 HID_UNIT_EXPONENT(0),
2279 HID_FEATURE(Data_Var_Abs),
2280 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_TILT,
2281 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
2282 HID_LOGICAL_MIN_8(0),
2283 HID_LOGICAL_MAX_16(0xFF,0xFF),
2284 HID_REPORT_SIZE(16),
2285 HID_REPORT_COUNT(1),
2286 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
2287 HID_FEATURE(Data_Var_Abs),
2288 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_TILT,HID_USAGE_SENSOR_DATA_MOD_MAX),
2289 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2290 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2291 HID_REPORT_SIZE(16),
2292 HID_REPORT_COUNT(1),
2293 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
2294 HID_FEATURE(Data_Var_Abs),
2295 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_TILT,HID_USAGE_SENSOR_DATA_MOD_MIN),
2296 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2297 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2298 HID_REPORT_SIZE(16),
2299 HID_REPORT_COUNT(1),
2300 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
2301 HID_FEATURE(Data_Var_Abs),
2302
2303 //input reports (transmit)
2304 HID_USAGE_PAGE_SENSOR,
2305 HID_USAGE_SENSOR_STATE,
2306 HID_LOGICAL_MIN_8(0),
2307 HID_LOGICAL_MAX_8(6),
2308 HID_REPORT_SIZE(8),
2309 HID_REPORT_COUNT(1),
2310 HID_COLLECTION(Logical),
2311 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
2312 HID_USAGE_SENSOR_STATE_READY_SEL,
2313 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
2314 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
2315 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
2316 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
2317 HID_USAGE_SENSOR_STATE_ERROR_SEL,
2318 HID_INPUT(Data_Arr_Abs),
2319 HID_END_COLLECTION,
2320 HID_USAGE_SENSOR_EVENT,
2321 HID_LOGICAL_MIN_8(0),
2322 HID_LOGICAL_MAX_8(5),
2323 HID_REPORT_SIZE(8),
2324 HID_REPORT_COUNT(1),
2325 HID_COLLECTION(Logical),
2326 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
2327 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
2328 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
2329 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
2330 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
2331 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
2332 HID_INPUT(Data_Arr_Abs),
2333 HID_END_COLLECTION,
2334 HID_USAGE_SENSOR_DATA_ORIENTATION_TILT_X,
2335 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2336 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2337 HID_REPORT_SIZE(16),
2338 HID_REPORT_COUNT(1),
2339 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
2340 HID_INPUT(Data_Var_Abs),
2341 HID_USAGE_SENSOR_DATA_ORIENTATION_TILT_Y,
2342 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2343 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2344 HID_REPORT_SIZE(16),
2345 HID_REPORT_COUNT(1),
2346 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
2347 HID_INPUT(Data_Var_Abs),
2348 HID_USAGE_SENSOR_DATA_ORIENTATION_TILT_Z,
2349 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2350 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2351 HID_REPORT_SIZE(16),
2352 HID_REPORT_COUNT(1),
2353 HID_UNIT_EXPONENT(0x0E), // scale default unit to provide 2 digits past decimal point
2354 HID_INPUT(Data_Var_Abs),
2355 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY,
2356 HID_LOGICAL_MIN_8(0),
2357 HID_LOGICAL_MAX_8(2),
2358 HID_REPORT_SIZE(8),
2359 HID_REPORT_COUNT(1),
2360 HID_COLLECTION(Logical),
2361 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY_LOW,
2362 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY_MEDIUM,
2363 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY_HIGH,
2364 HID_INPUT(Data_Arr_Abs),
2365 HID_END_COLLECTION,
2366
2367 HID_END_COLLECTION
2368 };
2369
2370
2371 /**
2372 * Device orientation sensor example. Note this maps to rotation vector sensor in android.
2373 */
2374 const unsigned char devor_report_descriptor[] = {
2375 HID_USAGE_PAGE_SENSOR,
2376 HID_USAGE_SENSOR_TYPE_ORIENTATION_DEVICE_ORIENTATION,
2377 HID_COLLECTION(Physical),
2378
2379 //feature reports (xmit/receive)
2380 HID_USAGE_PAGE_SENSOR,
2381 HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE, // NAry
2382 HID_LOGICAL_MIN_8(0),
2383 HID_LOGICAL_MAX_8(2),
2384 HID_REPORT_SIZE(8),
2385 HID_REPORT_COUNT(1),
2386 HID_COLLECTION(Logical),
2387 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL,
2388 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
2389 HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
2390 HID_FEATURE(Data_Arr_Abs),
2391 HID_END_COLLECTION,
2392 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
2393 HID_LOGICAL_MIN_8(0),
2394 HID_LOGICAL_MAX_8(5),
2395 HID_REPORT_SIZE(8),
2396 HID_REPORT_COUNT(1),
2397 HID_COLLECTION(Logical),
2398 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
2399 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
2400 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_SEL,
2401 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SEL,
2402 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_SEL,
2403 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE_SEL,
2404 HID_FEATURE(Data_Arr_Abs),
2405 HID_END_COLLECTION,
2406 HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
2407 HID_LOGICAL_MIN_8(0),
2408 HID_LOGICAL_MAX_8(5),
2409 HID_REPORT_SIZE(8),
2410 HID_REPORT_COUNT(1),
2411 HID_COLLECTION(Logical),
2412 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
2413 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
2414 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
2415 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_SEL,
2416 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SEL,
2417 HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
2418 HID_FEATURE(Data_Arr_Abs),
2419 HID_END_COLLECTION,
2420 HID_USAGE_SENSOR_STATE,
2421 HID_LOGICAL_MIN_8(0),
2422 HID_LOGICAL_MAX_8(6),
2423 HID_REPORT_SIZE(8),
2424 HID_REPORT_COUNT(1),
2425 HID_COLLECTION(Logical),
2426 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
2427 HID_USAGE_SENSOR_STATE_READY_SEL,
2428 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
2429 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
2430 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
2431 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
2432 HID_USAGE_SENSOR_STATE_ERROR_SEL,
2433 HID_FEATURE(Data_Arr_Abs),
2434 HID_END_COLLECTION,
2435 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
2436 HID_LOGICAL_MIN_8(0),
2437 HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
2438 HID_REPORT_SIZE(32),
2439 HID_REPORT_COUNT(1),
2440 HID_UNIT_EXPONENT(0),
2441 HID_FEATURE(Data_Var_Abs),
2442 HID_USAGE_SENSOR_PROPERTY_CHANGE_SENSITIVITY_ABS,
2443 HID_LOGICAL_MIN_8(0),
2444 HID_LOGICAL_MAX_16(0xFF,0xFF),
2445 HID_REPORT_SIZE(16),
2446 HID_REPORT_COUNT(1),
2447 HID_UNIT_EXPONENT(0x0E), // scale default unit "meter" to provide 2 digits past the decimal point
2448 HID_FEATURE(Data_Var_Abs),
2449 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_QUATERNION,
2450 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
2451 HID_LOGICAL_MIN_8(0),
2452 HID_LOGICAL_MAX_16(0xFF,0xFF),
2453 HID_REPORT_SIZE(16),
2454 HID_REPORT_COUNT(1),
2455 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_QUATERNION,
2456 HID_USAGE_SENSOR_DATA_MOD_MAX),
2457 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2458 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2459 HID_REPORT_SIZE(16),
2460 HID_REPORT_COUNT(1),
2461 HID_UNIT_EXPONENT(0x01),
2462 HID_FEATURE(Data_Var_Abs),
2463 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_QUATERNION,
2464 HID_USAGE_SENSOR_DATA_MOD_MIN),
2465 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2466 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2467 HID_REPORT_SIZE(16),
2468 HID_REPORT_COUNT(1),
2469 HID_UNIT_EXPONENT(0x01),
2470 HID_FEATURE(Data_Var_Abs),
2471
2472 //include this if the values are calculated in firmware
2473 //otherwise, the driver will calculate these values from the Quaternion
2474 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_ROTATION_MATRIX,
2475 HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
2476 HID_LOGICAL_MIN_8(0),
2477 HID_LOGICAL_MAX_16(0xFF,0xFF),
2478 HID_REPORT_SIZE(16),
2479 HID_REPORT_COUNT(1),
2480 HID_UNIT_EXPONENT(0x0E),
2481 HID_FEATURE(Data_Var_Abs),
2482 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_ROTATION_MATRIX,
2483 HID_USAGE_SENSOR_DATA_MOD_MAX),
2484 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2485 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2486 HID_REPORT_SIZE(16),
2487 HID_REPORT_COUNT(1),
2488 HID_UNIT_EXPONENT(0x0E),
2489 HID_FEATURE(Data_Var_Abs),
2490 HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_ORIENTATION_ROTATION_MATRIX,
2491 HID_USAGE_SENSOR_DATA_MOD_MIN),
2492 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2493 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2494 HID_REPORT_SIZE(16),
2495 HID_REPORT_COUNT(1),
2496 HID_UNIT_EXPONENT(0x0E),
2497 HID_FEATURE(Data_Var_Abs),
2498
2499 //input reports (transmit)
2500 HID_USAGE_PAGE_SENSOR,
2501 HID_USAGE_SENSOR_STATE,
2502 HID_LOGICAL_MIN_8(0),
2503 HID_LOGICAL_MAX_8(6),
2504 HID_REPORT_SIZE(8),
2505 HID_REPORT_COUNT(1),
2506 HID_COLLECTION(Logical),
2507 HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
2508 HID_USAGE_SENSOR_STATE_READY_SEL,
2509 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
2510 HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
2511 HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
2512 HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
2513 HID_USAGE_SENSOR_STATE_ERROR_SEL,
2514 HID_INPUT(Data_Arr_Abs),
2515 HID_END_COLLECTION,
2516 HID_USAGE_SENSOR_EVENT,
2517 HID_LOGICAL_MIN_8(0),
2518 HID_LOGICAL_MAX_8(5),
2519 HID_REPORT_SIZE(8),
2520 HID_REPORT_COUNT(1),
2521 HID_COLLECTION(Logical),
2522 HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
2523 HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
2524 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
2525 HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
2526 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
2527 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
2528 HID_INPUT(Data_Arr_Abs),
2529 HID_END_COLLECTION,
2530 HID_USAGE_SENSOR_DATA_ORIENTATION_QUATERNION,
2531 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2532 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2533 HID_REPORT_SIZE(16),
2534 HID_REPORT_COUNT(4),
2535 HID_UNIT_EXPONENT(0x0E),
2536 HID_INPUT(Data_Arr_Abs),
2537
2538 //include this if the values are calculated in firmware
2539 //otherwise, the driver will calculate these values from the Quaternion
2540 HID_USAGE_SENSOR_DATA_ORIENTATION_ROTATION_MATRIX,
2541 HID_LOGICAL_MIN_16(0x01,0x80), // LOGICAL_MINIMUM (-32767)
2542 HID_LOGICAL_MAX_16(0xFF,0x7F), // LOGICAL_MAXIMUM (32767)
2543 HID_REPORT_SIZE(16),
2544 HID_REPORT_COUNT(9),
2545 HID_UNIT_EXPONENT(0x0F),
2546 HID_INPUT(Data_Arr_Abs),
2547
2548 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY,
2549 HID_LOGICAL_MIN_8(0),
2550 HID_LOGICAL_MAX_8(2),
2551 HID_REPORT_SIZE(8),
2552 HID_REPORT_COUNT(1),
2553 HID_COLLECTION(Logical),
2554 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY_LOW,
2555 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY_MEDIUM,
2556 HID_USAGE_SENSOR_DATA_ORIENTATION_MAGNETOMETER_ACCURACY_HIGH,
2557 HID_INPUT(Data_Arr_Abs),
2558 HID_END_COLLECTION,
2559
2560 HID_END_COLLECTION
2561 };
2562 } // annoymous namespace
2563
2564 /**
2565 * Global test vector entry.
2566 */
2567 #define TEST_DESCRIPTOR(name) \
2568 { name ## _report_descriptor, sizeof(name ## _report_descriptor), #name }
2569
2570 const TestHidDescriptor gDescriptorArray[] = {
2571 TEST_DESCRIPTOR(accel3),
2572 TEST_DESCRIPTOR(col1),
2573 TEST_DESCRIPTOR(col2),
2574 TEST_DESCRIPTOR(col3),
2575 TEST_DESCRIPTOR(cus1),
2576 TEST_DESCRIPTOR(cus2),
2577 TEST_DESCRIPTOR(cus3),
2578 TEST_DESCRIPTOR(cus4),
2579 TEST_DESCRIPTOR(pres),
2580 TEST_DESCRIPTOR(prox),
2581 TEST_DESCRIPTOR(bar),
2582 TEST_DESCRIPTOR(humi),
2583 TEST_DESCRIPTOR(temp),
2584 TEST_DESCRIPTOR(als),
2585 TEST_DESCRIPTOR(gyro3),
2586 TEST_DESCRIPTOR(comp3),
2587 TEST_DESCRIPTOR(inc3),
2588 TEST_DESCRIPTOR(devor),
2589 {nullptr, 0, nullptr} //sentinel
2590 };
2591 #undef TEST_DESCRIPTOR
2592
findTestDescriptor(const char * name)2593 const TestHidDescriptor *findTestDescriptor(const char *name) {
2594 if (name == nullptr) {
2595 return nullptr;
2596 }
2597
2598 for (const TestHidDescriptor *p = gDescriptorArray; ; ++p) {
2599 if (p->data == nullptr || p->len == 0) {
2600 break;
2601 }
2602 if (strcmp(p->name, name) == 0) {
2603 return p;
2604 }
2605 }
2606 return nullptr;
2607 }
2608