@@ -325,6 +325,29 @@ typedef enum
325325
326326/// @}
327327
328+ //--------------------------------------------------------------------+
329+ // Digitizer Stylus Pen
330+ //--------------------------------------------------------------------+
331+ /** \addtogroup ClassDriver_HID_Stylus Stylus
332+ * @{ */
333+
334+ // Standard Stylus Pen Report.
335+ typedef struct TU_ATTR_PACKED
336+ {
337+ uint8_t attr ; /**< Attribute mask for describing current status of the stylus pen. */
338+ uint16_t x ; /**< Current x position of the mouse. */
339+ uint16_t y ; /**< Current y position of the mouse. */
340+ } hid_stylus_report_t ;
341+
342+ // Standard Stylus Pen Attributes Bitmap.
343+ typedef enum
344+ {
345+ STYLUS_ATTR_TIP_SWITCH = TU_BIT (0 ), ///< Tip switch
346+ STYLUS_ATTR_IN_RANGE = TU_BIT (1 ), ///< In-range bit.
347+ } hid_stylus_attr_bm_t ;
348+
349+ /// @}
350+
328351//--------------------------------------------------------------------+
329352// Keyboard
330353//--------------------------------------------------------------------+
@@ -740,6 +763,21 @@ enum {
740763
741764//--------------------------------------------------------------------+
742765// Usage Table
766+ /* Usage Types Data
767+ Sel Selector Array
768+ SV Static Value Constant, Variable, Absolute
769+ SF Static Flag Constant, Variable, Absolute
770+ DV Dynamic Value Constant, Variable, Absolute
771+ DF Dynamic Flag Constant, Variable, Absolute
772+ */
773+ /* Usage Types Collection
774+ NAry Named Array Logical
775+ CA Collection Application Application
776+ CL Collection Logical Logical
777+ CP Collection Physical Physical
778+ US Usage Switch Logical
779+ UM Usage Modifier Logical
780+ */
743781//--------------------------------------------------------------------+
744782
745783/// HID Usage Table - Table 1: Usage Page Summary
@@ -759,8 +797,14 @@ enum {
759797 HID_USAGE_PAGE_DIGITIZER = 0x0d ,
760798 HID_USAGE_PAGE_PID = 0x0f ,
761799 HID_USAGE_PAGE_UNICODE = 0x10 ,
762- HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14 ,
763- HID_USAGE_PAGE_MEDICAL = 0x40 ,
800+ HID_USAGE_PAGE_SOC = 0x11 ,
801+ HID_USAGE_PAGE_EYE_AND_HEAD_TRACKERS = 0x12 ,
802+ // 0x13 is reserved
803+ HID_USAGE_PAGE_AUXILIARY_DISPLAY = 0x14 ,
804+ // 0x15 - 0x1f is reserved
805+ HID_USAGE_PAGE_SENSORS = 0x20 ,
806+ // 0x21 - 0x3f is reserved
807+ HID_USAGE_PAGE_MEDICAL_INSTRUMENT = 0x40 ,
764808 HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION = 0x59 ,
765809 HID_USAGE_PAGE_MONITOR = 0x80 , // 0x80 - 0x83
766810 HID_USAGE_PAGE_POWER = 0x84 , // 0x084 - 0x87
@@ -846,7 +890,6 @@ enum {
846890 HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7
847891};
848892
849-
850893/// HID Usage Table: Consumer Page (0x0C)
851894/// Only contains controls that supported by Windows (whole list is too long)
852895enum {
@@ -905,48 +948,125 @@ enum {
905948 HID_USAGE_CONSUMER_AC_PAN = 0x0238 ,
906949};
907950
908- /// HID Usage Table - Lighting And Illumination Page (0x59)
909- enum {
910- HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01 ,
911- HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02 ,
912- HID_USAGE_LIGHTING_LAMP_COUNT = 0x03 ,
913- HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04 ,
914- HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05 ,
915- HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06 ,
916- HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07 ,
917- HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08 ,
918- HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20 ,
919- HID_USAGE_LIGHTING_LAMP_ID = 0x21 ,
920- HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22 ,
921- HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23 ,
922- HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24 ,
923- HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25 ,
924- HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26 ,
925- HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27 ,
926- HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28 ,
927- HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29 ,
928- HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A ,
929- HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B ,
930- HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C ,
931- HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D ,
932- HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50 ,
933- HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51 ,
934- HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52 ,
935- HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53 ,
936- HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54 ,
937- HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55 ,
938- HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60 ,
939- HID_USAGE_LIGHTING_LAMP_ID_START = 0x61 ,
940- HID_USAGE_LIGHTING_LAMP_ID_END = 0x62 ,
941- HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70 ,
942- HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71 ,
943- };
944-
945- /// HID Usage Table: FIDO Alliance Page (0xF1D0)
951+ /// HID Usage Table: Digitizer Page (0x0D)
946952enum {
947- HID_USAGE_FIDO_U2FHID = 0x01 , // U2FHID usage for top-level collection
948- HID_USAGE_FIDO_DATA_IN = 0x20 , // Raw IN data report
949- HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report
953+ HID_USAGE_DIGITIZER_UNDEFINED = 0x00 ,
954+ HID_USAGE_DIGITIZER_DIGITIZER = 0x01 , // CA
955+ HID_USAGE_DIGITIZER_PEN = 0x02 , // CA
956+ HID_USAGE_DIGITIZER_LIGHT_PEN = 0x03 , // CA
957+ HID_USAGE_DIGITIZER_TOUCH_SCREEN = 0x04 , // CA
958+ HID_USAGE_DIGITIZER_TOUCH_PAD = 0x05 , // CA
959+ HID_USAGE_DIGITIZER_WHITEBOARD = 0x06 , // CA
960+ HID_USAGE_DIGITIZER_COORDINATE_MEASURING_MACHINE = 0x07 , // CA
961+ HID_USAGE_DIGITIZER_3D_DIGITIZER = 0x08 , // CA
962+ HID_USAGE_DIGITIZER_STEREO_PLOTTER = 0x09 , // CA
963+ HID_USAGE_DIGITIZER_ARTICULATED_ARM = 0x0A , // CA
964+ HID_USAGE_DIGITIZER_ARMATURE = 0x0B , // CA
965+ HID_USAGE_DIGITIZER_MULTIPLE_POINT_DIGITIZER = 0x0C , // CA
966+ HID_USAGE_DIGITIZER_FREE_SPACE_WAND = 0x0D , // CA
967+ HID_USAGE_DIGITIZER_DEVICE_CONFIGURATION = 0x0E , // CA
968+ HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_DIGITIZER = 0x0F , // CA
969+ // Reserved (0x10 - 0x1F)
970+ HID_USAGE_DIGITIZER_STYLUS = 0x20 , // CA/CL
971+ HID_USAGE_DIGITIZER_PUCK = 0x21 , // CL
972+ HID_USAGE_DIGITIZER_FINGER = 0x22 , // CL
973+ HID_USAGE_DIGITIZER_DEVICE_SETTINGS = 0x23 , // CL
974+ HID_USAGE_DIGITIZER_CHARACTER_GESTURE = 0x24 , // CL
975+ // Reserved (0x25 - 0x2F)
976+ HID_USAGE_DIGITIZER_TIP_PRESSURE = 0x30 , // DV
977+ HID_USAGE_DIGITIZER_BARREL_PRESSURE = 0x31 , // DV
978+ HID_USAGE_DIGITIZER_IN_RANGE = 0x32 , // MC
979+ HID_USAGE_DIGITIZER_TOUCH = 0x33 , // MC
980+ HID_USAGE_DIGITIZER_UNTOUCH = 0x34 , // OSC
981+ HID_USAGE_DIGITIZER_TAP = 0x35 , // OSC
982+ HID_USAGE_DIGITIZER_QUALITY = 0x36 , // DV
983+ HID_USAGE_DIGITIZER_DATA_VALID = 0x37 , // MC
984+ HID_USAGE_DIGITIZER_TRANSDUCER_INDEX = 0x38 , // DV
985+ HID_USAGE_DIGITIZER_TABLET_FUNCTION_KEYS = 0x39 , // CL
986+ HID_USAGE_DIGITIZER_PROGRAM_CHANGE_KEYS = 0x3A , // CL
987+ HID_USAGE_DIGITIZER_BATTERY_STRENGTH = 0x3B , // DV
988+ HID_USAGE_DIGITIZER_INVERT = 0x3C , // MC
989+ HID_USAGE_DIGITIZER_X_TILT = 0x3D , // DV
990+ HID_USAGE_DIGITIZER_Y_TILT = 0x3E , // DV
991+ HID_USAGE_DIGITIZER_AZIMUTH = 0x3F , // DV
992+ HID_USAGE_DIGITIZER_ALTITUDE = 0x40 , // DV
993+ HID_USAGE_DIGITIZER_TWIST = 0x41 , // DV
994+ HID_USAGE_DIGITIZER_TIP_SWITCH = 0x42 , // MC
995+ HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH = 0x43 , // MC
996+ HID_USAGE_DIGITIZER_BARREL_SWITCH = 0x44 , // MC
997+ HID_USAGE_DIGITIZER_ERASER = 0x45 , // MC
998+ HID_USAGE_DIGITIZER_TABLET_PICK = 0x46 , // MC
999+ HID_USAGE_DIGITIZER_TOUCH_VALID = 0x47 , // MC
1000+ HID_USAGE_DIGITIZER_WIDTH = 0x48 , // DV
1001+ HID_USAGE_DIGITIZER_HEIGHT = 0x49 , // DV
1002+ // Reserved (0x4A - 0x50)
1003+ HID_USAGE_DIGITIZER_CONTACT_IDENTIFIER = 0x51 , // DV
1004+ HID_USAGE_DIGITIZER_DEVICE_MODE = 0x52 , // DV
1005+ HID_USAGE_DIGITIZER_DEVICE_IDENTIFIER = 0x53 , // DV/SV
1006+ HID_USAGE_DIGITIZER_CONTACT_COUNT = 0x54 , // DV
1007+ HID_USAGE_DIGITIZER_CONTACT_COUNT_MAXIMUM = 0x55 , // SV
1008+ HID_USAGE_DIGITIZER_SCAN_TIME = 0x56 , // DV
1009+ HID_USAGE_DIGITIZER_SURFACE_SWITCH = 0x57 , // DF
1010+ HID_USAGE_DIGITIZER_BUTTON_SWITCH = 0x58 , // DF
1011+ HID_USAGE_DIGITIZER_PAD_TYPE = 0x59 , // SF
1012+ HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_NUMBER = 0x5B , // SV
1013+ HID_USAGE_DIGITIZER_PREFERRED_COLOR = 0x5C , // DV
1014+ HID_USAGE_DIGITIZER_PREFERRED_COLOR_LOCKED = 0x5D , // MC
1015+ HID_USAGE_DIGITIZER_PREFERRED_LINE_WIDTH = 0x5E , // DV
1016+ HID_USAGE_DIGITIZER_PREFERRED_LINE_WIDTH_LOCKED = 0x5F , // MC
1017+ HID_USAGE_DIGITIZER_LATENCY_MODE = 0x60 , // DF
1018+ HID_USAGE_DIGITIZER_GESTURE_CHARACTER_QUALITY = 0x61 , // DV
1019+ HID_USAGE_DIGITIZER_CHARACTER_GESTURE_DATA_LENGTH = 0x62 , // DV
1020+ HID_USAGE_DIGITIZER_CHARACTER_GESTURE_DATA = 0x63 , // DV
1021+ HID_USAGE_DIGITIZER_GESTURE_CHARACTER_ENCODING = 0x64 , // NAry
1022+ HID_USAGE_DIGITIZER_UTF8_CHARACTER_GESTURE_ENCODING = 0x65 , // Sel
1023+ HID_USAGE_DIGITIZER_UTF16_LE_CHARACTER_GESTURE_ENCODING = 0x66 , // Sel
1024+ HID_USAGE_DIGITIZER_UTF16_BE_CHARACTER_GESTURE_ENCODING = 0x67 , // Sel
1025+ HID_USAGE_DIGITIZER_UTF32_LE_CHARACTER_GESTURE_ENCODING = 0x68 , // Sel
1026+ HID_USAGE_DIGITIZER_UTF32_BE_CHARACTER_GESTURE_ENCODING = 0x69 , // Sel
1027+ HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_VENDOR_ID = 0x6A , // SV
1028+ HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_VERSION = 0x6B , // SV
1029+ HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_FRAME_DATA = 0x6C , // DV
1030+ HID_USAGE_DIGITIZER_GESTURE_CHARACTER_ENABLE = 0x6D , // DF
1031+ HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_NUMBER_PART2 = 0x6E , // SV
1032+ HID_USAGE_DIGITIZER_NO_PREFERRED_COLOR = 0x6F , // DF
1033+ HID_USAGE_DIGITIZER_PREFERRED_LINE_STYLE = 0x70 , // NAry
1034+ HID_USAGE_DIGITIZER_PREFERRED_LINE_STYLE_LOCKED = 0x71 , // MC
1035+ HID_USAGE_DIGITIZER_INK = 0x72 , // Sel
1036+ HID_USAGE_DIGITIZER_PENCIL = 0x73 , // Sel
1037+ HID_USAGE_DIGITIZER_HIGHLIGHTER = 0x74 , // Sel
1038+ HID_USAGE_DIGITIZER_CHISEL_MARKER = 0x75 , // Sel
1039+ HID_USAGE_DIGITIZER_BRUSH = 0x76 , // Sel
1040+ HID_USAGE_DIGITIZER_NO_PREFERENCE = 0x77 , // Sel
1041+ // Reserved (0x78 - 0x7F)
1042+ HID_USAGE_DIGITIZER_DIGITIZER_DIAGNOSTIC = 0x80 , // CL
1043+ HID_USAGE_DIGITIZER_DIGITIZER_ERROR = 0x81 , // NAry
1044+ HID_USAGE_DIGITIZER_ERR_NORMAL_STATUS = 0x82 , // Sel
1045+ HID_USAGE_DIGITIZER_ERR_TRANSDUCERS_EXCEEDED = 0x83 , // Sel
1046+ HID_USAGE_DIGITIZER_ERR_FULL_TRANS_FEATURES_UNAVAILABLE = 0x84 , // Sel
1047+ HID_USAGE_DIGITIZER_ERR_CHARGE_LOW = 0x85 , // Sel
1048+ // Reserved (0x86 - 0x8F)
1049+ HID_USAGE_DIGITIZER_TRANSDUCER_SOFTWARE_INFO = 0x90 , // CL
1050+ HID_USAGE_DIGITIZER_TRANSDUCER_VENDOR_ID = 0x91 , // SV
1051+ HID_USAGE_DIGITIZER_TRANSDUCER_PRODUCT_ID = 0x92 , // SV
1052+ HID_USAGE_DIGITIZER_DEVICE_SUPPORTED_PROTOCOLS = 0x93 , // NAry/CL
1053+ HID_USAGE_DIGITIZER_TRANSDUCER_SUPPORTED_PROTOCOLS = 0x94 , // NAry/CL
1054+ HID_USAGE_DIGITIZER_NO_PROTOCOL = 0x95 , // Sel
1055+ HID_USAGE_DIGITIZER_WACOM_AES_PROTOCOL = 0x96 , // Sel
1056+ HID_USAGE_DIGITIZER_USI_PROTOCOL = 0x97 , // Sel
1057+ HID_USAGE_DIGITIZER_MICROSOFT_PEN_PROTOCOL = 0x98 , // Sel
1058+ // Reserved (0x99 - 0x9F)
1059+ HID_USAGE_DIGITIZER_SUPPORTED_REPORT_RATES = 0xA0 , // SV/CL
1060+ HID_USAGE_DIGITIZER_REPORT_RATE = 0xA1 , // DV
1061+ HID_USAGE_DIGITIZER_TRANSDUCER_CONNECTED = 0xA2 , // SF
1062+ HID_USAGE_DIGITIZER_SWITCH_DISABLED = 0xA3 , // Sel
1063+ HID_USAGE_DIGITIZER_SWITCH_UNIMPLEMENTED = 0xA4 , // Sel
1064+ HID_USAGE_DIGITIZER_TRANSDUCER_SWITCHES = 0xA5 , // CL
1065+ HID_USAGE_DIGITIZER_TRANSDUCER_INDEX_SELECTOR = 0xA6 , // DV
1066+ // Reserved (0xA7 - 0xAF)
1067+ HID_USAGE_DIGITIZER_BUTTON_PRESS_THRESHOLD = 0xB0 , // DV
1068+
1069+ // Reserved (0xB1 - 0xFFFF)
9501070};
9511071
9521072/// HID Usage Table: Physical Input Device Page (0x0F)
@@ -1059,6 +1179,50 @@ enum {
10591179 HID_USAGE_PID_RAM_POOL_AVAILABLE = 0xac ,
10601180};
10611181
1182+ /// HID Usage Table - Lighting And Illumination Page (0x59)
1183+ enum {
1184+ HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01 ,
1185+ HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02 ,
1186+ HID_USAGE_LIGHTING_LAMP_COUNT = 0x03 ,
1187+ HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04 ,
1188+ HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05 ,
1189+ HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06 ,
1190+ HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07 ,
1191+ HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08 ,
1192+ HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20 ,
1193+ HID_USAGE_LIGHTING_LAMP_ID = 0x21 ,
1194+ HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22 ,
1195+ HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23 ,
1196+ HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24 ,
1197+ HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25 ,
1198+ HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26 ,
1199+ HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27 ,
1200+ HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28 ,
1201+ HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29 ,
1202+ HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A ,
1203+ HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B ,
1204+ HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C ,
1205+ HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D ,
1206+ HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50 ,
1207+ HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51 ,
1208+ HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52 ,
1209+ HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53 ,
1210+ HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54 ,
1211+ HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55 ,
1212+ HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60 ,
1213+ HID_USAGE_LIGHTING_LAMP_ID_START = 0x61 ,
1214+ HID_USAGE_LIGHTING_LAMP_ID_END = 0x62 ,
1215+ HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70 ,
1216+ HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71 ,
1217+ };
1218+
1219+ /// HID Usage Table: FIDO Alliance Page (0xF1D0)
1220+ enum {
1221+ HID_USAGE_FIDO_U2FHID = 0x01 , // U2FHID usage for top-level collection
1222+ HID_USAGE_FIDO_DATA_IN = 0x20 , // Raw IN data report
1223+ HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report
1224+ };
1225+
10621226/*--------------------------------------------------------------------
10631227 * ASCII to KEYCODE Conversion
10641228 * Expand to array of [128][2] (shift, keycode)
0 commit comments