IOHIDHIDDeviceElementsDescriptor.h   [plain text]


//
//  IOHIDHIDDeviceElementsDescriptor.h
//  IOHIDFamily
//
//  Created by yg on 8/13/18.
//

#ifndef IOHIDHIDDeviceElementsDescriptor_h
#define IOHIDHIDDeviceElementsDescriptor_h

//--------------------------------------------------------------------------------
// Decoded Application Collection
//--------------------------------------------------------------------------------

#define HIDDeviceElements \
0x06, 0x00, 0xFF,            /* (GLOBAL) USAGE_PAGE         0xFF00 Vendor-defined  */\
0x09, 0x80,                  /* (LOCAL)  USAGE              0xFF000080   */\
0xA1, 0x01,                  /* (MAIN)   COLLECTION         0x01 Application (Usage=0xFF000080: Page=Vendor-defined, Usage=, Type=) */\
0x85, 0x01,                  /*   (GLOBAL) REPORT_ID          0x01 (1)    */\
0x19, 0x10,                  /*   (LOCAL)  USAGE_MINIMUM      0xFF000010     */\
0x29, 0x17,                  /*   (LOCAL)  USAGE_MAXIMUM      0xFF000017     */\
0x95, 0x01,                  /*   (GLOBAL) REPORT_COUNT       0x01 (1) Number of fields     */\
0x75, 0x08,                  /*   (GLOBAL) REPORT_SIZE        0x08 (8) Number of bits per field     */\
0xB1, 0x00,                  /*   (MAIN)   FEATURE            0x00000000 (1 field x 8 bits) 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap    */\
0x85, 0x02,                  /*   (GLOBAL) REPORT_ID          0x02 (2)    */\
0x19, 0x20,                  /*   (LOCAL)  USAGE_MINIMUM      0xFF000020     */\
0x29, 0x27,                  /*   (LOCAL)  USAGE_MAXIMUM      0xFF000027     */\
0x91, 0x00,                  /*   (MAIN)   OUTPUT             0x00000000 (1 field x 8 bits) 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap    */\
0x85, 0x03,                  /*   (GLOBAL) REPORT_ID          0x03 (3)    */\
0x19, 0x30,                  /*   (LOCAL)  USAGE_MINIMUM      0xFF000030     */\
0x29, 0x37,                  /*   (LOCAL)  USAGE_MAXIMUM      0xFF000037     */\
0x81, 0x00,                  /*   (MAIN)   INPUT              0x00000000 (1 field x 8 bits) 0=Data 0=Array 0=Absolute 0=Ignored 0=Ignored 0=PrefState 0=NoNull    */\
0x85, 0x04,                  /*   (GLOBAL) REPORT_ID          0x04 (4)    */\
0x95, 0x08,                  /*   (GLOBAL) REPORT_COUNT       0x08 (8) Number of fields     */\
0x75, 0x01,                  /*   (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field     */\
0x19, 0x40,                  /*   (LOCAL)  USAGE_MINIMUM      0xFF000040     */\
0x29, 0x47,                  /*   (LOCAL)  USAGE_MAXIMUM      0xFF000047     */\
0xB1, 0x02,                  /*   (MAIN)   FEATURE            0x00000002 (8 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap    */\
0x85, 0x05,                  /*   (GLOBAL) REPORT_ID          0x05 (5)    */\
0x19, 0x50,                  /*   (LOCAL)  USAGE_MINIMUM      0xFF000050     */\
0x29, 0x57,                  /*   (LOCAL)  USAGE_MAXIMUM      0xFF000057     */\
0x91, 0x02,                  /*   (MAIN)   OUTPUT             0x00000002 (8 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap    */\
0x85, 0x06,                  /*   (GLOBAL) REPORT_ID          0x06 (6)    */\
0x19, 0x60,                  /*   (LOCAL)  USAGE_MINIMUM      0xFF000060     */\
0x29, 0x67,                  /*   (LOCAL)  USAGE_MAXIMUM      0xFF000067     */\
0x81, 0x02,                  /*   (MAIN)   INPUT              0x00000002 (8 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap    */\
0xC0,                        /* (MAIN)   END_COLLECTION     Application */\


//--------------------------------------------------------------------------------
// Vendor-defined HIDDeviceElementsFeatureReport 01 (Device <-> Host)
//--------------------------------------------------------------------------------

typedef struct __attribute__((packed))
{
    uint8_t  reportId;                                 // Report ID = 0x01 (1)
    
    // Field:   1
    // Width:   8
    // Count:   1
    // Flags:   00000000: 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
    // Globals: PAGE:FF00 LMIN:0 LMAX:0 PMIN:0 PMAX:0 UEXP:0 UNIT:0 RSIZ:8 RID:01 RCNT:1
    // Locals:  USAG:0 UMIN:FF000010 UMAX:FF000017 DIDX:0 DMIN:0 DMAX:0 SIDX:0 SMIN:0 SMAX:0
    // Usages:  FF000010 FF000011 FF000012 FF000013 FF000014 FF000015 FF000016 FF000017
    // Coll:
    // Access:  Read/Write
    // Type:    Array
    // Page 0xFF00: Vendor-defined
    uint8_t  VEN_VendorDefined;                        // Value = 0 to 0
} HIDDeviceElementsFeatureReport01;


//--------------------------------------------------------------------------------
// Vendor-defined HIDDeviceElementsFeatureReport 04 (Device <-> Host)
//--------------------------------------------------------------------------------

typedef struct __attribute__((packed))
{
    uint8_t  reportId;                                 // Report ID = 0x04 (4)
    
    // Field:   2
    // Width:   1
    // Count:   8
    // Flags:   00000002: 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
    // Globals: PAGE:FF00 LMIN:0 LMAX:0 PMIN:0 PMAX:0 UEXP:0 UNIT:0 RSIZ:1 RID:04 RCNT:8
    // Locals:  USAG:0 UMIN:FF000040 UMAX:FF000047 DIDX:0 DMIN:0 DMAX:0 SIDX:0 SMIN:0 SMAX:0
    // Usages:  FF000040 FF000041 FF000042 FF000043 FF000044 FF000045 FF000046 FF000047
    // Coll:
    // Access:  Read/Write
    // Type:    Variable
    // Page 0xFF00: Vendor-defined
    uint8_t  VEN_VendorDefined0040 : 1;                // Usage 0xFF000040: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0041 : 1;                // Usage 0xFF000041: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0042 : 1;                // Usage 0xFF000042: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0043 : 1;                // Usage 0xFF000043: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0044 : 1;                // Usage 0xFF000044: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0045 : 1;                // Usage 0xFF000045: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0046 : 1;                // Usage 0xFF000046: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0047 : 1;                // Usage 0xFF000047: , Value = 0 to 0
} HIDDeviceElementsFeatureReport04;


//--------------------------------------------------------------------------------
// Vendor-defined HIDDeviceElementsInputReport 03 (Device --> Host)
//--------------------------------------------------------------------------------

typedef struct __attribute__((packed))
{
    uint8_t  reportId;                                 // Report ID = 0x03 (3)
    
    // Field:   1
    // Width:   8
    // Count:   1
    // Flags:   00000000: 0=Data 0=Array 0=Absolute 0=Ignored 0=Ignored 0=PrefState 0=NoNull
    // Globals: PAGE:FF00 LMIN:0 LMAX:0 PMIN:0 PMAX:0 UEXP:0 UNIT:0 RSIZ:8 RID:03 RCNT:1
    // Locals:  USAG:0 UMIN:FF000030 UMAX:FF000037 DIDX:0 DMIN:0 DMAX:0 SIDX:0 SMIN:0 SMAX:0
    // Usages:  FF000030 FF000031 FF000032 FF000033 FF000034 FF000035 FF000036 FF000037
    // Coll:
    // Access:  Read/Write
    // Type:    Array
    // Page 0xFF00: Vendor-defined
    uint8_t  VEN_VendorDefined;                        // Value = 0 to 0
} HIDDeviceElementsInputReport03;


//--------------------------------------------------------------------------------
// Vendor-defined HIDDeviceElementsInputReport 06 (Device --> Host)
//--------------------------------------------------------------------------------

typedef struct __attribute__((packed))
{
    uint8_t  reportId;                                 // Report ID = 0x06 (6)
    
    // Field:   2
    // Width:   1
    // Count:   8
    // Flags:   00000002: 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
    // Globals: PAGE:FF00 LMIN:0 LMAX:0 PMIN:0 PMAX:0 UEXP:0 UNIT:0 RSIZ:1 RID:06 RCNT:8
    // Locals:  USAG:0 UMIN:FF000060 UMAX:FF000067 DIDX:0 DMIN:0 DMAX:0 SIDX:0 SMIN:0 SMAX:0
    // Usages:  FF000060 FF000061 FF000062 FF000063 FF000064 FF000065 FF000066 FF000067
    // Coll:
    // Access:  Read/Write
    // Type:    Variable
    // Page 0xFF00: Vendor-defined
    uint8_t  VEN_VendorDefined0060 : 1;                // Usage 0xFF000060: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0061 : 1;                // Usage 0xFF000061: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0062 : 1;                // Usage 0xFF000062: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0063 : 1;                // Usage 0xFF000063: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0064 : 1;                // Usage 0xFF000064: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0065 : 1;                // Usage 0xFF000065: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0066 : 1;                // Usage 0xFF000066: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0067 : 1;                // Usage 0xFF000067: , Value = 0 to 0
} HIDDeviceElementsInputReport06;


//--------------------------------------------------------------------------------
// Vendor-defined HIDDeviceElementsOutputReport 02 (Device <-- Host)
//--------------------------------------------------------------------------------

typedef struct __attribute__((packed))
{
    uint8_t  reportId;                                 // Report ID = 0x02 (2)
    
    // Field:   1
    // Width:   8
    // Count:   1
    // Flags:   00000000: 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
    // Globals: PAGE:FF00 LMIN:0 LMAX:0 PMIN:0 PMAX:0 UEXP:0 UNIT:0 RSIZ:8 RID:02 RCNT:1
    // Locals:  USAG:0 UMIN:FF000020 UMAX:FF000027 DIDX:0 DMIN:0 DMAX:0 SIDX:0 SMIN:0 SMAX:0
    // Usages:  FF000020 FF000021 FF000022 FF000023 FF000024 FF000025 FF000026 FF000027
    // Coll:
    // Access:  Read/Write
    // Type:    Array
    // Page 0xFF00: Vendor-defined
    uint8_t  VEN_VendorDefined;                        // Value = 0 to 0
} HIDDeviceElementsOutputReport02;


//--------------------------------------------------------------------------------
// Vendor-defined HIDDeviceElementsOutputReport 05 (Device <-- Host)
//--------------------------------------------------------------------------------

typedef struct __attribute__((packed))
{
    uint8_t  reportId;                                 // Report ID = 0x05 (5)
    
    // Field:   2
    // Width:   1
    // Count:   8
    // Flags:   00000002: 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
    // Globals: PAGE:FF00 LMIN:0 LMAX:0 PMIN:0 PMAX:0 UEXP:0 UNIT:0 RSIZ:1 RID:05 RCNT:8
    // Locals:  USAG:0 UMIN:FF000050 UMAX:FF000057 DIDX:0 DMIN:0 DMAX:0 SIDX:0 SMIN:0 SMAX:0
    // Usages:  FF000050 FF000051 FF000052 FF000053 FF000054 FF000055 FF000056 FF000057
    // Coll:
    // Access:  Read/Write
    // Type:    Variable
    // Page 0xFF00: Vendor-defined
    uint8_t  VEN_VendorDefined0050 : 1;                // Usage 0xFF000050: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0051 : 1;                // Usage 0xFF000051: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0052 : 1;                // Usage 0xFF000052: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0053 : 1;                // Usage 0xFF000053: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0054 : 1;                // Usage 0xFF000054: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0055 : 1;                // Usage 0xFF000055: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0056 : 1;                // Usage 0xFF000056: , Value = 0 to 0
    uint8_t  VEN_VendorDefined0057 : 1;                // Usage 0xFF000057: , Value = 0 to 0
} HIDDeviceElementsOutputReport05;

#endif /* IOHIDHIDDeviceElementsDescriptor_h */