1
0
Files
surface-dial-linux/notes/descriptor.c
Daniel Prilik e6fa6845fe haptics!
https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/radial-controller-protocol-implementation

With a little bit of trial and error (and a crash-course in how the heck
HID even works), I figured out how to get the dial to provide haptic
feedback!

Along the way, I also learned that you can take advantage of the
(incorrectly named) Resolution Multiplier field to customize how many
"steps" the dial should have, offloading the work to the device itself!

Very cool!!
2020-10-30 19:59:23 -04:00

622 lines
46 KiB
C

// generated by https://github.com/abend0c1/hidrdd
//--------------------------------------------------------------------------------
// Decoded Application Collection
//--------------------------------------------------------------------------------
/*
05 01 (GLOBAL) USAGE_PAGE 0x0001 Generic Desktop Page
09 0E (LOCAL) USAGE 0x0001000E System Multi-axis Controller (Application Collection)
A1 01 (MAIN) COLLECTION 0x01 Application (Usage=0x0001000E: Page=Generic Desktop Page, Usage=System Multi-axis Controller, Type=Application Collection)
85 01 (GLOBAL) REPORT_ID 0x01 (1)
05 0D (GLOBAL) USAGE_PAGE 0x000D Digitizer Device Page
09 21 (LOCAL) USAGE 0x000D0021 Puck (Logical Collection)
A1 02 (MAIN) COLLECTION 0x02 Logical (Usage=0x000D0021: Page=Digitizer Device Page, Usage=Puck, Type=Logical Collection)
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) <-- Info: Consider replacing 15 00 with 14
25 01 (GLOBAL) LOGICAL_MAXIMUM 0x01 (1)
75 01 (GLOBAL) REPORT_SIZE 0x01 (1) Number of bits per field
95 01 (GLOBAL) REPORT_COUNT 0x01 (1) Number of fields
A1 00 (MAIN) COLLECTION 0x00 Physical (Usage=0x0: Page=, Usage=, Type=) <-- Error: COLLECTION must be preceded by a known USAGE <-- Warning: USAGE type should be CP (Physical Collection)
05 09 (GLOBAL) USAGE_PAGE 0x0009 Button Page
09 01 (LOCAL) USAGE 0x00090001 Button 1 Primary/trigger (Selector, On/Off Control, Momentary Control, or One Shot Control)
81 02 (MAIN) INPUT 0x00000002 (1 field x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
05 0D (GLOBAL) USAGE_PAGE 0x000D Digitizer Device Page
09 33 (LOCAL) USAGE 0x000D0033 Touch (Momentary Control)
81 02 (MAIN) INPUT 0x00000002 (1 field x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
95 06 (GLOBAL) REPORT_COUNT 0x06 (6) Number of fields
81 03 (MAIN) INPUT 0x00000003 (6 fields x 1 bit) 1=Constant 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
A1 02 (MAIN) COLLECTION 0x02 Logical (Usage=0x0: Page=, Usage=, Type=) <-- Error: COLLECTION must be preceded by a known USAGE <-- Warning: USAGE type should be CL (Logical Collection)
05 01 (GLOBAL) USAGE_PAGE 0x0001 Generic Desktop Page
09 37 (LOCAL) USAGE 0x00010037 Dial (Dynamic Value)
16 0180 (GLOBAL) LOGICAL_MINIMUM 0x8001 (-32767)
26 FF7F (GLOBAL) LOGICAL_MAXIMUM 0x7FFF (32767)
75 10 (GLOBAL) REPORT_SIZE 0x10 (16) Number of bits per field
95 01 (GLOBAL) REPORT_COUNT 0x01 (1) Number of fields
81 06 (MAIN) INPUT 0x00000006 (1 field x 16 bits) 0=Data 1=Variable 1=Relative 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
35 00 (GLOBAL) PHYSICAL_MINIMUM 0x00 (0) <-- Info: Consider replacing 35 00 with 34
46 100E (GLOBAL) PHYSICAL_MAXIMUM 0x0E10 (3600)
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) <-- Info: Consider replacing 15 00 with 14
26 100E (GLOBAL) LOGICAL_MAXIMUM 0x0E10 (3600)
09 48 (LOCAL) USAGE 0x00010048 Resolution Multiplier (Dynamic Value)
B1 02 (MAIN) FEATURE 0x00000002 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
45 00 (GLOBAL) PHYSICAL_MAXIMUM 0x00 (0) <-- Info: Consider replacing 45 00 with 44
C0 (MAIN) END_COLLECTION Logical
55 0E (GLOBAL) UNIT_EXPONENT 0x0E (Unit Value x 10⁻²)
65 11 (GLOBAL) UNIT 0x11 Distance in metres [1 cm units] (1=System=SI Linear, 1=Length=Centimetre)
46 0000 (GLOBAL) PHYSICAL_MAXIMUM 0x0000 (0) <-- Redundant: PHYSICAL_MAXIMUM is already 0 <-- Info: Consider replacing 46 0000 with 44
26 0000 (GLOBAL) LOGICAL_MAXIMUM 0x0000 (0) <-- Info: Consider replacing 26 0000 with 24
09 30 (LOCAL) USAGE 0x00010030 X (Dynamic Value)
81 42 (MAIN) INPUT 0x00000042 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 1=Null 0=NonVolatile 0=Bitmap
09 31 (LOCAL) USAGE 0x00010031 Y (Dynamic Value)
46 0000 (GLOBAL) PHYSICAL_MAXIMUM 0x0000 (0) <-- Redundant: PHYSICAL_MAXIMUM is already 0 <-- Info: Consider replacing 46 0000 with 44
26 0000 (GLOBAL) LOGICAL_MAXIMUM 0x0000 (0) <-- Redundant: LOGICAL_MAXIMUM is already 0 <-- Info: Consider replacing 26 0000 with 24
81 42 (MAIN) INPUT 0x00000042 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 1=Null 0=NonVolatile 0=Bitmap
05 0D (GLOBAL) USAGE_PAGE 0x000D Digitizer Device Page
09 48 (LOCAL) USAGE 0x000D0048 Width (Dynamic Value)
15 3A (GLOBAL) LOGICAL_MINIMUM 0x3A (58)
25 3A (GLOBAL) LOGICAL_MAXIMUM 0x3A (58)
75 08 (GLOBAL) REPORT_SIZE 0x08 (8) Number of bits per field
55 0F (GLOBAL) UNIT_EXPONENT 0x0F (Unit Value x 10⁻¹)
35 3A (GLOBAL) PHYSICAL_MINIMUM 0x3A (58)
45 3A (GLOBAL) PHYSICAL_MAXIMUM 0x3A (58)
81 03 (MAIN) INPUT 0x00000003 (1 field x 8 bits) 1=Constant 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
55 00 (GLOBAL) UNIT_EXPONENT 0x00 (Unit Value x 10⁰) <-- Info: Consider replacing 55 00 with 54
65 00 (GLOBAL) UNIT 0x00 No unit (0=None) <-- Info: Consider replacing 65 00 with 64
35 00 (GLOBAL) PHYSICAL_MINIMUM 0x00 (0) <-- Info: Consider replacing 35 00 with 34
45 00 (GLOBAL) PHYSICAL_MAXIMUM 0x00 (0) <-- Info: Consider replacing 45 00 with 44
05 0E (GLOBAL) USAGE_PAGE 0x000E Haptics Page
09 01 (LOCAL) USAGE 0x000E0001 Simple Haptic Controller (Application or Logical Collection)
A1 02 (MAIN) COLLECTION 0x02 Logical (Usage=0x000E0001: Page=Haptics Page, Usage=Simple Haptic Controller, Type=Application or Logical Collection)
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) <-- Info: Consider replacing 15 00 with 14
26 FF00 (GLOBAL) LOGICAL_MAXIMUM 0x00FF (255)
09 24 (LOCAL) USAGE 0x000E0024 Repeat Count (Dynamic Value)
B1 42 (MAIN) FEATURE 0x00000042 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 1=Null 0=NonVolatile 0=Bitmap
09 24 (LOCAL) USAGE 0x000E0024 Repeat Count (Dynamic Value)
91 42 (MAIN) OUTPUT 0x00000042 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 1=Null 0=NonVolatile 0=Bitmap
15 01 (GLOBAL) LOGICAL_MINIMUM 0x01 (1)
25 07 (GLOBAL) LOGICAL_MAXIMUM 0x07 (7)
09 20 (LOCAL) USAGE 0x000E0020 Auto Trigger (Dynamic Value)
B1 42 (MAIN) FEATURE 0x00000042 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 1=Null 0=NonVolatile 0=Bitmap
09 21 (LOCAL) USAGE 0x000E0021 Manual Trigger (Dynamic Value)
91 42 (MAIN) OUTPUT 0x00000042 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 1=Null 0=NonVolatile 0=Bitmap
25 0A (GLOBAL) LOGICAL_MAXIMUM 0x0A (10)
09 28 (LOCAL) USAGE 0x000E0028 Waveform Cutoff Time (Static Value)
B1 42 (MAIN) FEATURE 0x00000042 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 1=Null 0=NonVolatile 0=Bitmap
75 10 (GLOBAL) REPORT_SIZE 0x10 (16) Number of bits per field
26 D007 (GLOBAL) LOGICAL_MAXIMUM 0x07D0 (2000)
09 25 (LOCAL) USAGE 0x000E0025 Retrigger Period (Dynamic Value)
B1 42 (MAIN) FEATURE 0x00000042 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 1=Null 0=NonVolatile 0=Bitmap
09 25 (LOCAL) USAGE 0x000E0025 Retrigger Period (Dynamic Value)
91 42 (MAIN) OUTPUT 0x00000042 (1 field x 16 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 1=Null 0=NonVolatile 0=Bitmap
85 02 (GLOBAL) REPORT_ID 0x02 (2)
75 20 (GLOBAL) REPORT_SIZE 0x20 (32) Number of bits per field
17 37000100 (GLOBAL) LOGICAL_MINIMUM 0x00010037 (65591)
27 37000100 (GLOBAL) LOGICAL_MAXIMUM 0x00010037 (65591)
09 22 (LOCAL) USAGE 0x000E0022 Auto Trigger Associated Control (Static Value)
B1 02 (MAIN) FEATURE 0x00000002 (1 field x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
09 11 (LOCAL) USAGE 0x000E0011 Duration List (Named Array Collection)
A1 02 (MAIN) COLLECTION 0x02 Logical (Usage=0x000E0011: Page=Haptics Page, Usage=Duration List, Type=Named Array Collection) <-- Warning: USAGE type should be CL (Logical Collection)
05 0A (GLOBAL) USAGE_PAGE 0x000A Ordinal Page
95 03 (GLOBAL) REPORT_COUNT 0x03 (3) Number of fields
09 03 (LOCAL) USAGE 0x000A0003 Instance 3 (Usage Modifier Collection)
09 04 (LOCAL) USAGE 0x000A0004 Instance 4 (Usage Modifier Collection)
09 05 (LOCAL) USAGE 0x000A0005 Instance 5 (Usage Modifier Collection)
75 08 (GLOBAL) REPORT_SIZE 0x08 (8) Number of bits per field
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) <-- Info: Consider replacing 15 00 with 14
25 FF (GLOBAL) LOGICAL_MAXIMUM 0xFF (-1)
B1 02 (MAIN) FEATURE 0x00000002 (3 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap <-- Error: LOGICAL_MAXIMUM (-1) is less than LOGICAL_MINIMUM (0)
C0 (MAIN) END_COLLECTION Logical
05 0E (GLOBAL) USAGE_PAGE 0x000E Haptics Page
09 10 (LOCAL) USAGE 0x000E0010 Waveform List (Named Array Collection)
A1 02 (MAIN) COLLECTION 0x02 Logical (Usage=0x000E0010: Page=Haptics Page, Usage=Waveform List, Type=Named Array Collection) <-- Warning: USAGE type should be CL (Logical Collection)
05 0A (GLOBAL) USAGE_PAGE 0x000A Ordinal Page
95 01 (GLOBAL) REPORT_COUNT 0x01 (1) Number of fields
15 03 (GLOBAL) LOGICAL_MINIMUM 0x03 (3)
25 03 (GLOBAL) LOGICAL_MAXIMUM 0x03 (3)
36 0310 (GLOBAL) PHYSICAL_MINIMUM 0x1003 (4099)
46 0310 (GLOBAL) PHYSICAL_MAXIMUM 0x1003 (4099)
09 03 (LOCAL) USAGE 0x000A0003 Instance 3 (Usage Modifier Collection)
B1 02 (MAIN) FEATURE 0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
15 04 (GLOBAL) LOGICAL_MINIMUM 0x04 (4)
25 04 (GLOBAL) LOGICAL_MAXIMUM 0x04 (4)
36 0410 (GLOBAL) PHYSICAL_MINIMUM 0x1004 (4100)
46 0410 (GLOBAL) PHYSICAL_MAXIMUM 0x1004 (4100)
09 04 (LOCAL) USAGE 0x000A0004 Instance 4 (Usage Modifier Collection)
B1 02 (MAIN) FEATURE 0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
15 05 (GLOBAL) LOGICAL_MINIMUM 0x05 (5)
25 05 (GLOBAL) LOGICAL_MAXIMUM 0x05 (5)
36 0410 (GLOBAL) PHYSICAL_MINIMUM 0x1004 (4100) <-- Redundant: PHYSICAL_MINIMUM is already 4100
46 0410 (GLOBAL) PHYSICAL_MAXIMUM 0x1004 (4100) <-- Redundant: PHYSICAL_MAXIMUM is already 4100
09 05 (LOCAL) USAGE 0x000A0005 Instance 5 (Usage Modifier Collection)
B1 02 (MAIN) FEATURE 0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
35 00 (GLOBAL) PHYSICAL_MINIMUM 0x00 (0) <-- Info: Consider replacing 35 00 with 34
45 00 (GLOBAL) PHYSICAL_MAXIMUM 0x00 (0) <-- Info: Consider replacing 45 00 with 44
C0 (MAIN) END_COLLECTION Logical
C0 (MAIN) END_COLLECTION Logical
C0 (MAIN) END_COLLECTION Physical
C0 (MAIN) END_COLLECTION Logical
C0 (MAIN) END_COLLECTION Application
*/
//--------------------------------------------------------------------------------
// Generic Desktop Page featureReport 01 (Device <-> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x01 (1)
// Collection: CA:SystemMulti-axisController CL:Puck CP: CL:
uint16_t GD_SystemMultiaxisControllerPuckResolutionMultiplier; // Usage 0x00010048: Resolution Multiplier, Value = 0 to 3600, Physical = Value
// Collection: CA:SystemMulti-axisController CL:Puck CP: CL:SimpleHapticController
uint8_t HAP_SystemMultiaxisControllerPuckSimpleHapticControllerRepeatCount; // Usage 0x000E0024: Repeat Count, Value = 0 to 255
uint8_t HAP_SystemMultiaxisControllerPuckSimpleHapticControllerAutoTrigger; // Usage 0x000E0020: Auto Trigger, Value = 1 to 7
uint8_t HAP_SystemMultiaxisControllerPuckSimpleHapticControllerWaveformCutoffTime; // Usage 0x000E0028: Waveform Cutoff Time, Value = 1 to 10
uint16_t HAP_SystemMultiaxisControllerPuckSimpleHapticControllerRetriggerPeriod; // Usage 0x000E0025: Retrigger Period, Value = 1 to 2000
} featureReport01_t;
//--------------------------------------------------------------------------------
// Haptics Page featureReport 02 (Device <-> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x02 (2)
// Collection: CA:SystemMulti-axisController CL:Puck CP: CL:SimpleHapticController
uint32_t HAP_SystemMultiaxisControllerPuckSimpleHapticControllerAutoTriggerAssociatedControl; // Usage 0x000E0022: Auto Trigger Associated Control, Value = 65591 to 65591
// Collection: CA:SystemMulti-axisController CL:Puck CP: CL:SimpleHapticController CL:DurationList
uint8_t ORD_SystemMultiaxisControllerPuckSimpleHapticControllerDurationListInstance3; // Usage 0x000A0003: Instance 3, Value = 0 to -1
uint8_t ORD_SystemMultiaxisControllerPuckSimpleHapticControllerDurationListInstance4; // Usage 0x000A0004: Instance 4, Value = 0 to -1
uint8_t ORD_SystemMultiaxisControllerPuckSimpleHapticControllerDurationListInstance5; // Usage 0x000A0005: Instance 5, Value = 0 to -1
// Collection: CA:SystemMulti-axisController CL:Puck CP: CL:SimpleHapticController CL:WaveformList
uint8_t ORD_SystemMultiaxisControllerPuckSimpleHapticControllerWaveformListInstance3; // Usage 0x000A0003: Instance 3, Value = 3 to 3, Physical = ((Value - 3) x 0 / 0 + 4099)
uint8_t ORD_SystemMultiaxisControllerPuckSimpleHapticControllerWaveformListInstance4; // Usage 0x000A0004: Instance 4, Value = 4 to 4, Physical = ((Value - 4) x 0 / 0 + 4100)
uint8_t ORD_SystemMultiaxisControllerPuckSimpleHapticControllerWaveformListInstance5; // Usage 0x000A0005: Instance 5, Value = 5 to 5, Physical = ((Value - 5) x 0 / 0 + 4100)
} featureReport02_t;
//--------------------------------------------------------------------------------
// Button Page inputReport 01 (Device --> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x01 (1)
// Collection: CA:SystemMulti-axisController CL:Puck CP:
uint8_t BTN_SystemMultiaxisControllerPuckButton1 : 1; // Usage 0x00090001: Button 1 Primary/trigger, Value = 0 to 1
uint8_t DIG_SystemMultiaxisControllerPuckTouch : 1; // Usage 0x000D0033: Touch, Value = 0 to 1
uint8_t : 1; // Pad
uint8_t : 1; // Pad
uint8_t : 1; // Pad
uint8_t : 1; // Pad
uint8_t : 1; // Pad
uint8_t : 1; // Pad
// Collection: CA:SystemMulti-axisController CL:Puck CP: CL:
int16_t GD_SystemMultiaxisControllerPuckDial; // Usage 0x00010037: Dial, Value = -32767 to 32767
// Collection: CA:SystemMulti-axisController CL:Puck CP:
uint16_t GD_SystemMultiaxisControllerPuckX; // Usage 0x00010030: X, Value = 0 to 0, Physical = Value x 0 / 0 in 10⁻⁴ m units
uint16_t GD_SystemMultiaxisControllerPuckY; // Usage 0x00010031: Y, Value = 0 to 0, Physical = Value x 0 / 0 in 10⁻⁴ m units
uint8_t DIG_SystemMultiaxisControllerPuckWidth; // Usage 0x000D0048: Width, Value = 58 to 58, Physical = ((Value - 58) x 0 / 0 + 58) in 10⁻³ m units
} inputReport01_t;
//--------------------------------------------------------------------------------
// Haptics Page outputReport 01 (Device <-- Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x01 (1)
// Collection: CA:SystemMulti-axisController CL:Puck CP: CL:SimpleHapticController
uint8_t HAP_SystemMultiaxisControllerPuckSimpleHapticControllerRepeatCount; // Usage 0x000E0024: Repeat Count, Value = 0 to 255
uint8_t HAP_SystemMultiaxisControllerPuckSimpleHapticControllerManualTrigger; // Usage 0x000E0021: Manual Trigger, Value = 1 to 7
uint16_t HAP_SystemMultiaxisControllerPuckSimpleHapticControllerRetriggerPeriod; // Usage 0x000E0025: Retrigger Period, Value = 1 to 2000
} outputReport01_t;
//--------------------------------------------------------------------------------
// Decoded Application Collection
//--------------------------------------------------------------------------------
/*
06 07FF (GLOBAL) USAGE_PAGE 0xFF07 Vendor-defined
09 70 (LOCAL) USAGE 0xFF070070 <-- Warning: Undocumented usage (document it by inserting 0070 into file FF07.conf) <-- Error: Usage Modifier COLLECTION item (A1 06) expected for USAGE 0x000A0005 Instance 5 (Usage Modifier Collection)
A1 01 (MAIN) COLLECTION 0x01 Application (Usage=0xFF070070: Page=Vendor-defined, Usage=, Type=) <-- Error: COLLECTION must be preceded by a known USAGE
85 30 (GLOBAL) REPORT_ID 0x30 (48) '0'
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) <-- Info: Consider replacing 15 00 with 14
25 FF (GLOBAL) LOGICAL_MAXIMUM 0xFF (-1)
95 01 (GLOBAL) REPORT_COUNT 0x01 (1) Number of fields <-- Redundant: REPORT_COUNT is already 1
75 08 (GLOBAL) REPORT_SIZE 0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
09 00 (LOCAL) USAGE 0xFF070000 <-- Info: Consider replacing 09 00 with 08
91 02 (MAIN) OUTPUT 0x00000002 (1 field x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap <-- Error: LOGICAL_MAXIMUM (-1) is less than LOGICAL_MINIMUM (0)
C0 (MAIN) END_COLLECTION Application
*/
//--------------------------------------------------------------------------------
// Vendor-defined outputReport 30 (Device <-- Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x30 (48) '0'
// Collection: CA:
uint8_t VEN_0000; // Usage 0xFF070000: , Value = 0 to -1
} outputReport30_t;
//--------------------------------------------------------------------------------
// Decoded Application Collection
//--------------------------------------------------------------------------------
/*
09 71 (LOCAL) USAGE 0xFF070071 <-- Warning: Undocumented usage (document it by inserting 0071 into file FF07.conf)
A1 01 (MAIN) COLLECTION 0x01 Application (Usage=0xFF070071: Page=Vendor-defined, Usage=, Type=) <-- Error: COLLECTION must be preceded by a known USAGE
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
25 FF (GLOBAL) LOGICAL_MAXIMUM 0xFF (-1) <-- Redundant: LOGICAL_MAXIMUM is already -1
75 08 (GLOBAL) REPORT_SIZE 0x08 (8) Number of bits per field <-- Redundant: REPORT_SIZE is already 8
95 48 (GLOBAL) REPORT_COUNT 0x48 (72) Number of fields
85 2A (GLOBAL) REPORT_ID 0x2A (42)
09 C6 (LOCAL) USAGE 0xFF0700C6 <-- Warning: Undocumented usage (document it by inserting 00C6 into file FF07.conf)
82 0201 (MAIN) INPUT 0x00000102 (72 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer <-- Error: LOGICAL_MAXIMUM (-1) is less than LOGICAL_MINIMUM (0)
09 C7 (LOCAL) USAGE 0xFF0700C7 <-- Warning: Undocumented usage (document it by inserting 00C7 into file FF07.conf)
92 0201 (MAIN) OUTPUT 0x00000102 (72 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer <-- Error: LOGICAL_MAXIMUM (-1) is less than LOGICAL_MINIMUM (0)
95 34 (GLOBAL) REPORT_COUNT 0x34 (52) Number of fields
09 C8 (LOCAL) USAGE 0xFF0700C8 <-- Warning: Undocumented usage (document it by inserting 00C8 into file FF07.conf)
B2 0301 (MAIN) FEATURE 0x00000103 (52 fields x 8 bits) 1=Constant 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer
85 2B (GLOBAL) REPORT_ID 0x2B (43)
09 C9 (LOCAL) USAGE 0xFF0700C9 <-- Warning: Undocumented usage (document it by inserting 00C9 into file FF07.conf)
82 0201 (MAIN) INPUT 0x00000102 (52 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer <-- Error: LOGICAL_MAXIMUM (-1) is less than LOGICAL_MINIMUM (0)
09 CA (LOCAL) USAGE 0xFF0700CA <-- Warning: Undocumented usage (document it by inserting 00CA into file FF07.conf)
92 0201 (MAIN) OUTPUT 0x00000102 (52 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer <-- Error: LOGICAL_MAXIMUM (-1) is less than LOGICAL_MINIMUM (0)
09 CB (LOCAL) USAGE 0xFF0700CB <-- Warning: Undocumented usage (document it by inserting 00CB into file FF07.conf)
B2 0201 (MAIN) FEATURE 0x00000102 (52 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 1=Buffer <-- Error: LOGICAL_MAXIMUM (-1) is less than LOGICAL_MINIMUM (0)
17 00000080 (GLOBAL) LOGICAL_MINIMUM 0x80000000 (-2147483648)
27 FFFFFF7F (GLOBAL) LOGICAL_MAXIMUM 0x7FFFFFFF (2147483647)
75 20 (GLOBAL) REPORT_SIZE 0x20 (32) Number of bits per field
95 04 (GLOBAL) REPORT_COUNT 0x04 (4) Number of fields
85 2C (GLOBAL) REPORT_ID 0x2C (44)
19 CC (LOCAL) USAGE_MINIMUM 0xFF0700CC <-- Warning: Undocumented usage (document it by inserting 00CC into file FF07.conf)
29 CF (LOCAL) USAGE_MAXIMUM 0xFF0700CF <-- Warning: Undocumented usage (document it by inserting 00CF into file FF07.conf)
81 02 (MAIN) INPUT 0x00000002 (4 fields x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
95 04 (GLOBAL) REPORT_COUNT 0x04 (4) Number of fields <-- Redundant: REPORT_COUNT is already 4
85 2D (GLOBAL) REPORT_ID 0x2D (45)
19 D8 (LOCAL) USAGE_MINIMUM 0xFF0700D8 <-- Warning: Undocumented usage (document it by inserting 00D8 into file FF07.conf)
29 DB (LOCAL) USAGE_MAXIMUM 0xFF0700DB <-- Warning: Undocumented usage (document it by inserting 00DB into file FF07.conf)
81 02 (MAIN) INPUT 0x00000002 (4 fields x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
95 04 (GLOBAL) REPORT_COUNT 0x04 (4) Number of fields <-- Redundant: REPORT_COUNT is already 4
19 DC (LOCAL) USAGE_MINIMUM 0xFF0700DC <-- Warning: Undocumented usage (document it by inserting 00DC into file FF07.conf)
29 DF (LOCAL) USAGE_MAXIMUM 0xFF0700DF <-- Warning: Undocumented usage (document it by inserting 00DF into file FF07.conf)
91 02 (MAIN) OUTPUT 0x00000002 (4 fields x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
19 E0 (LOCAL) USAGE_MINIMUM 0xFF0700E0 <-- Warning: Undocumented usage (document it by inserting 00E0 into file FF07.conf)
29 E3 (LOCAL) USAGE_MAXIMUM 0xFF0700E3 <-- Warning: Undocumented usage (document it by inserting 00E3 into file FF07.conf)
B1 02 (MAIN) FEATURE 0x00000002 (4 fields x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
85 2E (GLOBAL) REPORT_ID 0x2E (46)
19 E4 (LOCAL) USAGE_MINIMUM 0xFF0700E4 <-- Warning: Undocumented usage (document it by inserting 00E4 into file FF07.conf)
29 E7 (LOCAL) USAGE_MAXIMUM 0xFF0700E7 <-- Warning: Undocumented usage (document it by inserting 00E7 into file FF07.conf)
81 02 (MAIN) INPUT 0x00000002 (4 fields x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
19 E8 (LOCAL) USAGE_MINIMUM 0xFF0700E8 <-- Warning: Undocumented usage (document it by inserting 00E8 into file FF07.conf)
29 EB (LOCAL) USAGE_MAXIMUM 0xFF0700EB <-- Warning: Undocumented usage (document it by inserting 00EB into file FF07.conf)
91 02 (MAIN) OUTPUT 0x00000002 (4 fields x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
95 0B (GLOBAL) REPORT_COUNT 0x0B (11) Number of fields
19 EC (LOCAL) USAGE_MINIMUM 0xFF0700EC <-- Warning: Undocumented usage (document it by inserting 00EC into file FF07.conf)
29 EF (LOCAL) USAGE_MAXIMUM 0xFF0700EF <-- Warning: Undocumented usage (document it by inserting 00EF into file FF07.conf)
B1 02 (MAIN) FEATURE 0x00000002 (11 fields x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
95 04 (GLOBAL) REPORT_COUNT 0x04 (4) Number of fields
85 2F (GLOBAL) REPORT_ID 0x2F (47)
19 F0 (LOCAL) USAGE_MINIMUM 0xFF0700F0 <-- Warning: Undocumented usage (document it by inserting 00F0 into file FF07.conf)
29 F3 (LOCAL) USAGE_MAXIMUM 0xFF0700F3 <-- Warning: Undocumented usage (document it by inserting 00F3 into file FF07.conf)
81 02 (MAIN) INPUT 0x00000002 (4 fields x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
19 F4 (LOCAL) USAGE_MINIMUM 0xFF0700F4 <-- Warning: Undocumented usage (document it by inserting 00F4 into file FF07.conf)
29 F7 (LOCAL) USAGE_MAXIMUM 0xFF0700F7 <-- Warning: Undocumented usage (document it by inserting 00F7 into file FF07.conf)
91 02 (MAIN) OUTPUT 0x00000002 (4 fields x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
19 F8 (LOCAL) USAGE_MINIMUM 0xFF0700F8 <-- Warning: Undocumented usage (document it by inserting 00F8 into file FF07.conf)
29 FB (LOCAL) USAGE_MAXIMUM 0xFF0700FB <-- Warning: Undocumented usage (document it by inserting 00FB into file FF07.conf)
B1 02 (MAIN) FEATURE 0x00000002 (4 fields x 32 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
C0 (MAIN) END_COLLECTION Application
*/
//--------------------------------------------------------------------------------
// Vendor-defined featureReport 2A (Device <-> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2A (42)
// Collection: CA:
uint8_t VEN_00C8[52]; // Usage 0xFF0700C8: , Value = 0 to -1
} featureReport2A_t;
//--------------------------------------------------------------------------------
// Vendor-defined featureReport 2B (Device <-> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2B (43)
// Collection: CA:
uint8_t VEN_00CB[52]; // Usage 0xFF0700CB: , Value = 0 to -1
} featureReport2B_t;
//--------------------------------------------------------------------------------
// Vendor-defined featureReport 2D (Device <-> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2D (45)
// Collection: CA:
int32_t VEN_00E0; // Usage 0xFF0700E0: , Value = -2147483648 to 2147483647
int32_t VEN_00E1; // Usage 0xFF0700E1: , Value = -2147483648 to 2147483647
int32_t VEN_00E2; // Usage 0xFF0700E2: , Value = -2147483648 to 2147483647
int32_t VEN_00E3; // Usage 0xFF0700E3: , Value = -2147483648 to 2147483647
} featureReport2D_t;
//--------------------------------------------------------------------------------
// Vendor-defined featureReport 2E (Device <-> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2E (46)
// Collection: CA:
int32_t VEN_00EC; // Usage 0xFF0700EC: , Value = -2147483648 to 2147483647
int32_t VEN_00ED; // Usage 0xFF0700ED: , Value = -2147483648 to 2147483647
int32_t VEN_00EE; // Usage 0xFF0700EE: , Value = -2147483648 to 2147483647
int32_t VEN_00EF[8]; // Usage 0xFF0700EF: , Value = -2147483648 to 2147483647
} featureReport2E_t;
//--------------------------------------------------------------------------------
// Vendor-defined featureReport 2F (Device <-> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2F (47)
// Collection: CA:
int32_t VEN_00F8; // Usage 0xFF0700F8: , Value = -2147483648 to 2147483647
int32_t VEN_00F9; // Usage 0xFF0700F9: , Value = -2147483648 to 2147483647
int32_t VEN_00FA; // Usage 0xFF0700FA: , Value = -2147483648 to 2147483647
int32_t VEN_00FB; // Usage 0xFF0700FB: , Value = -2147483648 to 2147483647
} featureReport2F_t;
//--------------------------------------------------------------------------------
// Vendor-defined inputReport 2A (Device --> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2A (42)
// Collection: CA:
uint8_t VEN_00C6[72]; // Usage 0xFF0700C6: , Value = 0 to -1
} inputReport2A_t;
//--------------------------------------------------------------------------------
// Vendor-defined inputReport 2B (Device --> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2B (43)
// Collection: CA:
uint8_t VEN_00C9[52]; // Usage 0xFF0700C9: , Value = 0 to -1
} inputReport2B_t;
//--------------------------------------------------------------------------------
// Vendor-defined inputReport 2C (Device --> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2C (44)
// Collection: CA:
int32_t VEN_00CC; // Usage 0xFF0700CC: , Value = -2147483648 to 2147483647
int32_t VEN_00CD; // Usage 0xFF0700CD: , Value = -2147483648 to 2147483647
int32_t VEN_00CE; // Usage 0xFF0700CE: , Value = -2147483648 to 2147483647
int32_t VEN_00CF; // Usage 0xFF0700CF: , Value = -2147483648 to 2147483647
} inputReport2C_t;
//--------------------------------------------------------------------------------
// Vendor-defined inputReport 2D (Device --> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2D (45)
// Collection: CA:
int32_t VEN_00D8; // Usage 0xFF0700D8: , Value = -2147483648 to 2147483647
int32_t VEN_00D9; // Usage 0xFF0700D9: , Value = -2147483648 to 2147483647
int32_t VEN_00DA; // Usage 0xFF0700DA: , Value = -2147483648 to 2147483647
int32_t VEN_00DB; // Usage 0xFF0700DB: , Value = -2147483648 to 2147483647
} inputReport2D_t;
//--------------------------------------------------------------------------------
// Vendor-defined inputReport 2E (Device --> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2E (46)
// Collection: CA:
int32_t VEN_00E4; // Usage 0xFF0700E4: , Value = -2147483648 to 2147483647
int32_t VEN_00E5; // Usage 0xFF0700E5: , Value = -2147483648 to 2147483647
int32_t VEN_00E6; // Usage 0xFF0700E6: , Value = -2147483648 to 2147483647
int32_t VEN_00E7; // Usage 0xFF0700E7: , Value = -2147483648 to 2147483647
} inputReport2E_t;
//--------------------------------------------------------------------------------
// Vendor-defined inputReport 2F (Device --> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2F (47)
// Collection: CA:
int32_t VEN_00F0; // Usage 0xFF0700F0: , Value = -2147483648 to 2147483647
int32_t VEN_00F1; // Usage 0xFF0700F1: , Value = -2147483648 to 2147483647
int32_t VEN_00F2; // Usage 0xFF0700F2: , Value = -2147483648 to 2147483647
int32_t VEN_00F3; // Usage 0xFF0700F3: , Value = -2147483648 to 2147483647
} inputReport2F_t;
//--------------------------------------------------------------------------------
// Vendor-defined outputReport 2A (Device <-- Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2A (42)
// Collection: CA:
uint8_t VEN_00C7[72]; // Usage 0xFF0700C7: , Value = 0 to -1
} outputReport2A_t;
//--------------------------------------------------------------------------------
// Vendor-defined outputReport 2B (Device <-- Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2B (43)
// Collection: CA:
uint8_t VEN_00CA[52]; // Usage 0xFF0700CA: , Value = 0 to -1
} outputReport2B_t;
//--------------------------------------------------------------------------------
// Vendor-defined outputReport 2D (Device <-- Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2D (45)
// Collection: CA:
int32_t VEN_00DC; // Usage 0xFF0700DC: , Value = -2147483648 to 2147483647
int32_t VEN_00DD; // Usage 0xFF0700DD: , Value = -2147483648 to 2147483647
int32_t VEN_00DE; // Usage 0xFF0700DE: , Value = -2147483648 to 2147483647
int32_t VEN_00DF; // Usage 0xFF0700DF: , Value = -2147483648 to 2147483647
} outputReport2D_t;
//--------------------------------------------------------------------------------
// Vendor-defined outputReport 2E (Device <-- Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2E (46)
// Collection: CA:
int32_t VEN_00E8; // Usage 0xFF0700E8: , Value = -2147483648 to 2147483647
int32_t VEN_00E9; // Usage 0xFF0700E9: , Value = -2147483648 to 2147483647
int32_t VEN_00EA; // Usage 0xFF0700EA: , Value = -2147483648 to 2147483647
int32_t VEN_00EB; // Usage 0xFF0700EB: , Value = -2147483648 to 2147483647
} outputReport2E_t;
//--------------------------------------------------------------------------------
// Vendor-defined outputReport 2F (Device <-- Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x2F (47)
// Collection: CA:
int32_t VEN_00F4; // Usage 0xFF0700F4: , Value = -2147483648 to 2147483647
int32_t VEN_00F5; // Usage 0xFF0700F5: , Value = -2147483648 to 2147483647
int32_t VEN_00F6; // Usage 0xFF0700F6: , Value = -2147483648 to 2147483647
int32_t VEN_00F7; // Usage 0xFF0700F7: , Value = -2147483648 to 2147483647
} outputReport2F_t;
//--------------------------------------------------------------------------------
// Decoded Application Collection
//--------------------------------------------------------------------------------
/*
05 01 (GLOBAL) USAGE_PAGE 0x0001 Generic Desktop Page
09 80 (LOCAL) USAGE 0x00010080 System Control (Application Collection)
A1 01 (MAIN) COLLECTION 0x01 Application (Usage=0x00010080: Page=Generic Desktop Page, Usage=System Control, Type=Application Collection)
85 32 (GLOBAL) REPORT_ID 0x32 (50) '2'
09 82 (LOCAL) USAGE 0x00010082 System Sleep (One Shot Control)
09 83 (LOCAL) USAGE 0x00010083 System Wake Up (One Shot Control)
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) <-- Info: Consider replacing 15 00 with 14
25 01 (GLOBAL) LOGICAL_MAXIMUM 0x01 (1)
95 02 (GLOBAL) REPORT_COUNT 0x02 (2) Number of fields
75 01 (GLOBAL) REPORT_SIZE 0x01 (1) Number of bits per field
81 02 (MAIN) INPUT 0x00000002 (2 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
95 06 (GLOBAL) REPORT_COUNT 0x06 (6) Number of fields
81 03 (MAIN) INPUT 0x00000003 (6 fields x 1 bit) 1=Constant 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
C0 (MAIN) END_COLLECTION Application
*/
//--------------------------------------------------------------------------------
// Generic Desktop Page inputReport 32 (Device --> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x32 (50) '2'
// Collection: CA:SystemControl
uint8_t GD_SystemControlSystemSleep : 1; // Usage 0x00010082: System Sleep, Value = 0 to 1
uint8_t GD_SystemControlSystemWakeUp : 1; // Usage 0x00010083: System Wake Up, Value = 0 to 1
uint8_t : 1; // Pad
uint8_t : 1; // Pad
uint8_t : 1; // Pad
uint8_t : 1; // Pad
uint8_t : 1; // Pad
uint8_t : 1; // Pad
} inputReport32_t;
//--------------------------------------------------------------------------------
// Decoded Application Collection
//--------------------------------------------------------------------------------
/*
09 72 (LOCAL) USAGE 0x00010072 <-- Warning: Undocumented usage (document it by inserting 0072 into file 0001.conf)
A1 01 (MAIN) COLLECTION 0x01 Application (Usage=0x00010072: Page=Generic Desktop Page, Usage=, Type=) <-- Error: COLLECTION must be preceded by a known USAGE <-- Warning: USAGE type should be CA (Application Collection)
85 31 (GLOBAL) REPORT_ID 0x31 (49) '1'
95 0A (GLOBAL) REPORT_COUNT 0x0A (10) Number of fields
75 08 (GLOBAL) REPORT_SIZE 0x08 (8) Number of bits per field
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) <-- Redundant: LOGICAL_MINIMUM is already 0 <-- Info: Consider replacing 15 00 with 14
25 FF (GLOBAL) LOGICAL_MAXIMUM 0xFF (-1)
09 C6 (LOCAL) USAGE 0x000100C6 Wireless Radio Button (On/Off Control)
81 02 (MAIN) INPUT 0x00000002 (10 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap <-- Error: LOGICAL_MAXIMUM (-1) is less than LOGICAL_MINIMUM (0)
09 C7 (LOCAL) USAGE 0x000100C7 Wireless Radio LED (On/Off Control)
91 02 (MAIN) OUTPUT 0x00000002 (10 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap <-- Error: LOGICAL_MAXIMUM (-1) is less than LOGICAL_MINIMUM (0)
C0 (MAIN) END_COLLECTION Application
*/
//--------------------------------------------------------------------------------
// Generic Desktop Page inputReport 31 (Device --> Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x31 (49) '1'
// Collection: CA:
uint8_t GD_WirelessRadioButton[10]; // Usage 0x000100C6: Wireless Radio Button, Value = 0 to -1
} inputReport31_t;
//--------------------------------------------------------------------------------
// Generic Desktop Page outputReport 31 (Device <-- Host)
//--------------------------------------------------------------------------------
typedef struct
{
uint8_t reportId; // Report ID = 0x31 (49) '1'
// Collection: CA:
uint8_t GD_WirelessRadioLed[10]; // Usage 0x000100C7: Wireless Radio LED, Value = 0 to -1
} outputReport31_t;