1 #ifndef DEVICES_USB_HID_H
    2 #define DEVICES_USB_HID_H
    3 /*
    4 **	$VER: usb_hid.h 2.0 (15.12.07)
    5 **
    6 **	usb definitions include file
    7 **
    8 **	(C) Copyright 2002-2007 Chris Hodges
    9 **	    All Rights Reserved
   10 */
   11 
   12 #include <exec/types.h>
   13 
   14 #if defined(__GNUC__)
   15 # pragma pack(1)
   16 #endif
   17 
   18 /* Usb Hid Requests */
   19 #define UHR_GET_REPORT        0x01
   20 #define UHR_GET_IDLE          0x02
   21 #define UHR_GET_PROTOCOL      0x03
   22 #define UHR_SET_REPORT        0x09
   23 #define UHR_SET_IDLE          0x0a
   24 #define UHR_SET_PROTOCOL      0x0b
   25 
   26 /* HID class specific descriptors */
   27 #define UDT_HID               0x21
   28 #define UDT_REPORT            0x22
   29 #define UDT_PHYSICAL          0x23
   30 
   31 /* Hid Subclasses */
   32 #define HID_NO_SUBCLASS       0x00
   33 #define HID_BOOT_SUBCLASS     0x01
   34 
   35 /* Hid Proto if HID_BOOT_SUBCLASS */
   36 #define HID_PROTO_KEYBOARD    0x01
   37 #define HID_PROTO_MOUSE       0x02
   38 
   39 /* Hid Proto values for UHR_SET_PROTOCOL */
   40 #define HID_PROTO_BOOT        0x00
   41 #define HID_PROTO_REPORT      0x01
   42 
   43 /* Usb Class Specific Descriptor: HID Descriptor */
   44 
   45 struct UsbHidDesc
   46 {
   47     UBYTE bLength;             /* total size of the HID descriptor */
   48     UBYTE bDescriptorType;     /* Descriptor Type, value UDT_HID for HID */
   49     UWORD bcdHID;              /* the HID Class Spec release */
   50     UBYTE bCountryCode;        /* country code of the localized hardware. */
   51     UBYTE bNumDescriptors;     /* number of class descriptors (>=1) */
   52     UBYTE bDescType;           /* type of class descriptor */
   53     UBYTE wDescLength;         /* (WORD!) total size of the Report descriptor */
   54     UBYTE wPad0;
   55 };
   56 
   57 /* HID Report Item stuff */
   58 
   59 #define REPORT_LONGITEM       0xfe
   60 #define REPORT_ISIZE_0        0x00
   61 #define REPORT_ISIZE_1        0x01
   62 #define REPORT_ISIZE_2        0x02
   63 #define REPORT_ISIZE_4        0x03
   64 #define REPORT_ISIZE_MASK     0x03
   65 
   66 #define REPORT_ITYPE_MAIN     0x00
   67 #define REPORT_ITYPE_GLOBAL   0x04
   68 #define REPORT_ITYPE_LOCAL    0x08
   69 #define REPORT_ITYPE_MASK     0x0c
   70 
   71 #define REPORT_ITAG_MASK      0xf0
   72 
   73 /* main items */
   74 #define REPORT_MAIN_INPUT     0x80
   75 #define REPORT_MAIN_OUTPUT    0x90
   76 #define REPORT_MAIN_COLLECT   0xa0
   77 #define REPORT_MAIN_FEATURE   0xb0
   78 #define REPORT_MAIN_ENDCOLL   0xc0
   79 
   80 /* global items */
   81 #define REPORT_GLOB_USAGE     0x00
   82 #define REPORT_GLOB_LOGMIN    0x10
   83 #define REPORT_GLOB_LOGMAX    0x20
   84 #define REPORT_GLOB_PHYMIN    0x30
   85 #define REPORT_GLOB_PHYMAX    0x40
   86 #define REPORT_GLOB_UNITEXP   0x50
   87 #define REPORT_GLOB_UNIT      0x60
   88 #define REPORT_GLOB_RPSIZE    0x70
   89 #define REPORT_GLOB_RPID      0x80
   90 #define REPORT_GLOB_RPCOUNT   0x90
   91 #define REPORT_GLOB_PUSH      0xa0
   92 #define REPORT_GLOB_POP       0xb0
   93 
   94 /* local items */
   95 #define REPORT_LOCL_USAGE     0x00
   96 #define REPORT_LOCL_USEMIN    0x10
   97 #define REPORT_LOCL_USEMAX    0x20
   98 #define REPORT_LOCL_DESIDX    0x30
   99 #define REPORT_LOCL_DESMIN    0x40
  100 #define REPORT_LOCL_DESMAX    0x50
  101 #define REPORT_LOCL_STRIDX    0x70
  102 #define REPORT_LOCL_STRMIN    0x80
  103 #define REPORT_LOCL_STRMAX    0x90
  104 #define REPORT_LOCL_DELIM     0xa0
  105 
  106 /* Unit data definitons */
  107 
  108 #define RP_UNIT_NONE          0x0
  109 
  110 /* System units (nibble 0) */
  111 #define RP_UNIT_SILINEAR      0x1
  112 #define RP_UNIT_SIROTATION    0x2
  113 #define RP_UNIT_ENGLINEAR     0x3
  114 #define RP_UNIT ENGROTATION   0x4
  115 
  116 /* Length units (nibble 1) */
  117 #define RP_UNIT_CM            0x1
  118 #define RP_UNIT_RAD           0x2
  119 #define RP_UNIT_INCH          0x3
  120 #define RP_UNIT_DEG           0x4
  121 
  122 /* Mass units (nibble 2) */
  123 #define RP_UNIT_GRAM1         0x1
  124 #define RP_UNIT_GRAM2         0x2
  125 #define RP_UNIT_SLUG1         0x3
  126 #define RP_UNIT_SLUG2         0x4
  127 
  128 /* Time units (nibble 3) */
  129 #define RP_UNIT_SECS1         0x1
  130 #define RP_UNIT_SECS2         0x2
  131 #define RP_UNIT_SECS3         0x3
  132 #define RP_UNIT_SECS4         0x4
  133 
  134 /* Temperature units (nibble 4) */
  135 #define RP_UNIT_KELVIN1       0x1
  136 #define RP_UNIT_KELVIN2       0x2
  137 #define RP_UNIT_FAHRENHEIT1   0x3
  138 #define RP_UNIT_FAHRENHEIT2   0x4
  139 
  140 /* Current units (nibble 5)   */
  141 #define RP_UNIT_AMPERE1       0x1
  142 #define RP_UNIT_AMPERE2       0x2
  143 #define RP_UNIT_AMPERE3       0x3
  144 #define RP_UNIT_AMPERE4       0x4
  145 
  146 /* Lumious intensity units (nibble 6) */
  147 #define RP_UNIT_CANDELA1      0x1
  148 #define RP_UNIT_CANDELA2      0x2
  149 #define RP_UNIT_CANDELA3      0x3
  150 #define RP_UNIT_CANDELA4      0x4
  151 
  152 
  153 /* Data for input/output/feature main items */
  154 
  155 #define RPF_MAIN_CONST        0x0001 /* !DATA */
  156 #define RPF_MAIN_VARIABLE     0x0002 /* !ARRAY */
  157 #define RPF_MAIN_RELATIVE     0x0004 /* !ABSOLUTE */
  158 #define RPF_MAIN_WRAP         0x0008 /* !NOWRAP */
  159 #define RPF_MAIN_NONLINEAR    0x0010 /* !LINEAR */
  160 #define RPF_MAIN_NOPREF       0x0020 /* !PREFERRED */
  161 #define RPF_MAIN_NULLSTATE    0x0040 /* !NO NULL POS */
  162 #define RPF_MAIN_VOLATILE     0x0080 /* !NON VOLATILE (only output/feature) */
  163 #define RPF_MAIN_BUFBYTES     0x0100 /* !BITFIELD */
  164 
  165 /* Data for collection main items */
  166 
  167 #define RP_COLL_PHYSICAL      0x00 /* group of axes */
  168 #define RP_COLL_APP           0x01 /* mouse, keyboard */
  169 #define RP_COLL_LOGICAL       0x02 /* interrelated data */
  170 #define RP_COLL_REPORT        0x03 /* Collection around a report */
  171 #define RP_COLL_NAMEDARRAY    0x04 /* Named Array, array of selector usages */
  172 #define RP_COLL_USAGESWITCH   0x05 /* Usage Switch */
  173 #define RP_COLL_USAGEMODIFIER 0x06 /* Usage Modifier */
  174 
  175 /* Usage Page IDs */
  176 
  177 #define RP_PAGE_GENERIC       0x01
  178 #define RP_PAGE_SIMCTRLS      0x02
  179 #define RP_PAGE_VRCTRLS       0x03
  180 #define RP_PAGE_SPORTCTRLS    0x04
  181 #define RP_PAGE_GAMECTRLS     0x05
  182 #define RP_PAGE_KEYBOARD      0x07
  183 #define RP_PAGE_LEDS          0x08
  184 #define RP_PAGE_BUTTON        0x09
  185 #define RP_PAGE_ORDINAL       0x0a
  186 #define RP_PAGE_TELEPHONY     0x0b
  187 #define RP_PAGE_CONSUMER      0x0c
  188 #define RP_PAGE_DIGITIZER     0x0d
  189 #define RP_PAGE_PID           0x0f
  190 #define RP_PAGE_UNICODE       0x10
  191 #define RP_PAGE_ALPHADISP     0x14
  192 #define RP_PAGE_MONITOR       0x80
  193 #define RP_PAGE_MONITORENUM   0x81
  194 #define RP_PAGE_MONITORVESA   0x82
  195 #define RP_PAGE_POWER         0x84
  196 #define RP_PAGE_CAMERACTRL    0x90
  197 #define RP_PAGE_ARCADE        0x91
  198 
  199 #if defined(__GNUC__)
  200 # pragma pack()
  201 #endif
  202 
  203 #endif /* DEVICES_USB_HID_H */