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!!
622 lines
46 KiB
C
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;
|
|
|