Skip to content

Commit

Permalink
add full hid usage for Digitizer Page (0x0D), move thing around a bit.
Browse files Browse the repository at this point in the history
  • Loading branch information
hathach committed Feb 7, 2025
1 parent cd0ca48 commit a232644
Show file tree
Hide file tree
Showing 2 changed files with 187 additions and 57 deletions.
240 changes: 185 additions & 55 deletions src/class/hid/hid.h
Original file line number Diff line number Diff line change
Expand Up @@ -763,6 +763,21 @@ enum {

//--------------------------------------------------------------------+
// Usage Table
/* Usage Types Data
Sel Selector Array
SV Static Value Constant, Variable, Absolute
SF Static Flag Constant, Variable, Absolute
DV Dynamic Value Constant, Variable, Absolute
DF Dynamic Flag Constant, Variable, Absolute
*/
/* Usage Types Collection
NAry Named Array Logical
CA Collection Application Application
CL Collection Logical Logical
CP Collection Physical Physical
US Usage Switch Logical
UM Usage Modifier Logical
*/
//--------------------------------------------------------------------+

/// HID Usage Table - Table 1: Usage Page Summary
Expand All @@ -782,10 +797,14 @@ enum {
HID_USAGE_PAGE_DIGITIZER = 0x0d,
HID_USAGE_PAGE_PID = 0x0f,
HID_USAGE_PAGE_UNICODE = 0x10,
HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14,
HID_USAGE_PAGE_IN_RANGE = 0x32,
HID_USAGE_PAGE_MEDICAL = 0x40,
HID_USAGE_PAGE_TIP_SWITCH = 0x42,
HID_USAGE_PAGE_SOC = 0x11,
HID_USAGE_PAGE_EYE_AND_HEAD_TRACKERS = 0x12,
// 0x13 is reserved
HID_USAGE_PAGE_AUXILIARY_DISPLAY = 0x14,
// 0x15 - 0x1f is reserved
HID_USAGE_PAGE_SENSORS = 0x20,
// 0x21 - 0x3f is reserved
HID_USAGE_PAGE_MEDICAL_INSTRUMENT = 0x40,
HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION = 0x59,
HID_USAGE_PAGE_MONITOR = 0x80, // 0x80 - 0x83
HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87
Expand Down Expand Up @@ -871,16 +890,6 @@ enum {
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7
};

/// HID Usage Table: Digitizer Page (0x0D)
enum {
// Touch Screen.
HID_USAGE_DIGITIZER_TOUCH_SCREEN = 0x04,

// Stylus Pen.
HID_USAGE_DIGITIZER_STYLUS = 0x20,
};


/// HID Usage Table: Consumer Page (0x0C)
/// Only contains controls that supported by Windows (whole list is too long)
enum {
Expand Down Expand Up @@ -939,48 +948,125 @@ enum {
HID_USAGE_CONSUMER_AC_PAN = 0x0238,
};

/// HID Usage Table - Lighting And Illumination Page (0x59)
enum {
HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01,
HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02,
HID_USAGE_LIGHTING_LAMP_COUNT = 0x03,
HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04,
HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05,
HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06,
HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07,
HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08,
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20,
HID_USAGE_LIGHTING_LAMP_ID = 0x21,
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22,
HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23,
HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24,
HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25,
HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26,
HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27,
HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28,
HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29,
HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A,
HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B,
HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C,
HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D,
HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50,
HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51,
HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52,
HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53,
HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54,
HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55,
HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60,
HID_USAGE_LIGHTING_LAMP_ID_START = 0x61,
HID_USAGE_LIGHTING_LAMP_ID_END = 0x62,
HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70,
HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71,
};

/// HID Usage Table: FIDO Alliance Page (0xF1D0)
/// HID Usage Table: Digitizer Page (0x0D)
enum {
HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection
HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report
HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report
HID_USAGE_DIGITIZER_UNDEFINED = 0x00,
HID_USAGE_DIGITIZER_DIGITIZER = 0x01, // CA
HID_USAGE_DIGITIZER_PEN = 0x02, // CA
HID_USAGE_DIGITIZER_LIGHT_PEN = 0x03, // CA
HID_USAGE_DIGITIZER_TOUCH_SCREEN = 0x04, // CA
HID_USAGE_DIGITIZER_TOUCH_PAD = 0x05, // CA
HID_USAGE_DIGITIZER_WHITEBOARD = 0x06, // CA
HID_USAGE_DIGITIZER_COORDINATE_MEASURING_MACHINE = 0x07, // CA
HID_USAGE_DIGITIZER_3D_DIGITIZER = 0x08, // CA
HID_USAGE_DIGITIZER_STEREO_PLOTTER = 0x09, // CA
HID_USAGE_DIGITIZER_ARTICULATED_ARM = 0x0A, // CA
HID_USAGE_DIGITIZER_ARMATURE = 0x0B, // CA
HID_USAGE_DIGITIZER_MULTIPLE_POINT_DIGITIZER = 0x0C, // CA
HID_USAGE_DIGITIZER_FREE_SPACE_WAND = 0x0D, // CA
HID_USAGE_DIGITIZER_DEVICE_CONFIGURATION = 0x0E, // CA
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_DIGITIZER = 0x0F, // CA
// Reserved (0x10 - 0x1F)
HID_USAGE_DIGITIZER_STYLUS = 0x20, // CA/CL
HID_USAGE_DIGITIZER_PUCK = 0x21, // CL
HID_USAGE_DIGITIZER_FINGER = 0x22, // CL
HID_USAGE_DIGITIZER_DEVICE_SETTINGS = 0x23, // CL
HID_USAGE_DIGITIZER_CHARACTER_GESTURE = 0x24, // CL
// Reserved (0x25 - 0x2F)
HID_USAGE_DIGITIZER_TIP_PRESSURE = 0x30, // DV
HID_USAGE_DIGITIZER_BARREL_PRESSURE = 0x31, // DV
HID_USAGE_DIGITIZER_IN_RANGE = 0x32, // MC
HID_USAGE_DIGITIZER_TOUCH = 0x33, // MC
HID_USAGE_DIGITIZER_UNTOUCH = 0x34, // OSC
HID_USAGE_DIGITIZER_TAP = 0x35, // OSC
HID_USAGE_DIGITIZER_QUALITY = 0x36, // DV
HID_USAGE_DIGITIZER_DATA_VALID = 0x37, // MC
HID_USAGE_DIGITIZER_TRANSDUCER_INDEX = 0x38, // DV
HID_USAGE_DIGITIZER_TABLET_FUNCTION_KEYS = 0x39, // CL
HID_USAGE_DIGITIZER_PROGRAM_CHANGE_KEYS = 0x3A, // CL
HID_USAGE_DIGITIZER_BATTERY_STRENGTH = 0x3B, // DV
HID_USAGE_DIGITIZER_INVERT = 0x3C, // MC
HID_USAGE_DIGITIZER_X_TILT = 0x3D, // DV
HID_USAGE_DIGITIZER_Y_TILT = 0x3E, // DV
HID_USAGE_DIGITIZER_AZIMUTH = 0x3F, // DV
HID_USAGE_DIGITIZER_ALTITUDE = 0x40, // DV
HID_USAGE_DIGITIZER_TWIST = 0x41, // DV
HID_USAGE_DIGITIZER_TIP_SWITCH = 0x42, // MC
HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH = 0x43, // MC
HID_USAGE_DIGITIZER_BARREL_SWITCH = 0x44, // MC
HID_USAGE_DIGITIZER_ERASER = 0x45, // MC
HID_USAGE_DIGITIZER_TABLET_PICK = 0x46, // MC
HID_USAGE_DIGITIZER_TOUCH_VALID = 0x47, // MC
HID_USAGE_DIGITIZER_WIDTH = 0x48, // DV
HID_USAGE_DIGITIZER_HEIGHT = 0x49, // DV
// Reserved (0x4A - 0x50)
HID_USAGE_DIGITIZER_CONTACT_IDENTIFIER = 0x51, // DV
HID_USAGE_DIGITIZER_DEVICE_MODE = 0x52, // DV
HID_USAGE_DIGITIZER_DEVICE_IDENTIFIER = 0x53, // DV/SV
HID_USAGE_DIGITIZER_CONTACT_COUNT = 0x54, // DV
HID_USAGE_DIGITIZER_CONTACT_COUNT_MAXIMUM = 0x55, // SV
HID_USAGE_DIGITIZER_SCAN_TIME = 0x56, // DV
HID_USAGE_DIGITIZER_SURFACE_SWITCH = 0x57, // DF
HID_USAGE_DIGITIZER_BUTTON_SWITCH = 0x58, // DF
HID_USAGE_DIGITIZER_PAD_TYPE = 0x59, // SF
HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_NUMBER = 0x5B, // SV
HID_USAGE_DIGITIZER_PREFERRED_COLOR = 0x5C, // DV
HID_USAGE_DIGITIZER_PREFERRED_COLOR_LOCKED = 0x5D, // MC
HID_USAGE_DIGITIZER_PREFERRED_LINE_WIDTH = 0x5E, // DV
HID_USAGE_DIGITIZER_PREFERRED_LINE_WIDTH_LOCKED = 0x5F, // MC
HID_USAGE_DIGITIZER_LATENCY_MODE = 0x60, // DF
HID_USAGE_DIGITIZER_GESTURE_CHARACTER_QUALITY = 0x61, // DV
HID_USAGE_DIGITIZER_CHARACTER_GESTURE_DATA_LENGTH = 0x62, // DV
HID_USAGE_DIGITIZER_CHARACTER_GESTURE_DATA = 0x63, // DV
HID_USAGE_DIGITIZER_GESTURE_CHARACTER_ENCODING = 0x64, // NAry
HID_USAGE_DIGITIZER_UTF8_CHARACTER_GESTURE_ENCODING = 0x65, // Sel
HID_USAGE_DIGITIZER_UTF16_LE_CHARACTER_GESTURE_ENCODING = 0x66, // Sel
HID_USAGE_DIGITIZER_UTF16_BE_CHARACTER_GESTURE_ENCODING = 0x67, // Sel
HID_USAGE_DIGITIZER_UTF32_LE_CHARACTER_GESTURE_ENCODING = 0x68, // Sel
HID_USAGE_DIGITIZER_UTF32_BE_CHARACTER_GESTURE_ENCODING = 0x69, // Sel
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_VENDOR_ID = 0x6A, // SV
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_VERSION = 0x6B, // SV
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_FRAME_DATA = 0x6C, // DV
HID_USAGE_DIGITIZER_GESTURE_CHARACTER_ENABLE = 0x6D, // DF
HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_NUMBER_PART2 = 0x6E, // SV
HID_USAGE_DIGITIZER_NO_PREFERRED_COLOR = 0x6F, // DF
HID_USAGE_DIGITIZER_PREFERRED_LINE_STYLE = 0x70, // NAry
HID_USAGE_DIGITIZER_PREFERRED_LINE_STYLE_LOCKED = 0x71, // MC
HID_USAGE_DIGITIZER_INK = 0x72, // Sel
HID_USAGE_DIGITIZER_PENCIL = 0x73, // Sel
HID_USAGE_DIGITIZER_HIGHLIGHTER = 0x74, // Sel
HID_USAGE_DIGITIZER_CHISEL_MARKER = 0x75, // Sel
HID_USAGE_DIGITIZER_BRUSH = 0x76, // Sel
HID_USAGE_DIGITIZER_NO_PREFERENCE = 0x77, // Sel
// Reserved (0x78 - 0x7F)
HID_USAGE_DIGITIZER_DIGITIZER_DIAGNOSTIC = 0x80, // CL
HID_USAGE_DIGITIZER_DIGITIZER_ERROR = 0x81, // NAry
HID_USAGE_DIGITIZER_ERR_NORMAL_STATUS = 0x82, // Sel
HID_USAGE_DIGITIZER_ERR_TRANSDUCERS_EXCEEDED = 0x83, // Sel
HID_USAGE_DIGITIZER_ERR_FULL_TRANS_FEATURES_UNAVAILABLE = 0x84, // Sel
HID_USAGE_DIGITIZER_ERR_CHARGE_LOW = 0x85, // Sel
// Reserved (0x86 - 0x8F)
HID_USAGE_DIGITIZER_TRANSDUCER_SOFTWARE_INFO = 0x90, // CL
HID_USAGE_DIGITIZER_TRANSDUCER_VENDOR_ID = 0x91, // SV
HID_USAGE_DIGITIZER_TRANSDUCER_PRODUCT_ID = 0x92, // SV
HID_USAGE_DIGITIZER_DEVICE_SUPPORTED_PROTOCOLS = 0x93, // NAry/CL
HID_USAGE_DIGITIZER_TRANSDUCER_SUPPORTED_PROTOCOLS = 0x94, // NAry/CL
HID_USAGE_DIGITIZER_NO_PROTOCOL = 0x95, // Sel
HID_USAGE_DIGITIZER_WACOM_AES_PROTOCOL = 0x96, // Sel
HID_USAGE_DIGITIZER_USI_PROTOCOL = 0x97, // Sel
HID_USAGE_DIGITIZER_MICROSOFT_PEN_PROTOCOL = 0x98, // Sel
// Reserved (0x99 - 0x9F)
HID_USAGE_DIGITIZER_SUPPORTED_REPORT_RATES = 0xA0, // SV/CL
HID_USAGE_DIGITIZER_REPORT_RATE = 0xA1, // DV
HID_USAGE_DIGITIZER_TRANSDUCER_CONNECTED = 0xA2, // SF
HID_USAGE_DIGITIZER_SWITCH_DISABLED = 0xA3, // Sel
HID_USAGE_DIGITIZER_SWITCH_UNIMPLEMENTED = 0xA4, // Sel
HID_USAGE_DIGITIZER_TRANSDUCER_SWITCHES = 0xA5, // CL
HID_USAGE_DIGITIZER_TRANSDUCER_INDEX_SELECTOR = 0xA6, // DV
// Reserved (0xA7 - 0xAF)
HID_USAGE_DIGITIZER_BUTTON_PRESS_THRESHOLD = 0xB0, // DV

// Reserved (0xB1 - 0xFFFF)
};

/// HID Usage Table: Physical Input Device Page (0x0F)
Expand Down Expand Up @@ -1093,6 +1179,50 @@ enum {
HID_USAGE_PID_RAM_POOL_AVAILABLE = 0xac,
};

/// HID Usage Table - Lighting And Illumination Page (0x59)
enum {
HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01,
HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02,
HID_USAGE_LIGHTING_LAMP_COUNT = 0x03,
HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04,
HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05,
HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06,
HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07,
HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08,
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20,
HID_USAGE_LIGHTING_LAMP_ID = 0x21,
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22,
HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23,
HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24,
HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25,
HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26,
HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27,
HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28,
HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29,
HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A,
HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B,
HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C,
HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D,
HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50,
HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51,
HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52,
HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53,
HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54,
HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55,
HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60,
HID_USAGE_LIGHTING_LAMP_ID_START = 0x61,
HID_USAGE_LIGHTING_LAMP_ID_END = 0x62,
HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70,
HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71,
};

/// HID Usage Table: FIDO Alliance Page (0xF1D0)
enum {
HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection
HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report
HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report
};

/*--------------------------------------------------------------------
* ASCII to KEYCODE Conversion
* Expand to array of [128][2] (shift, keycode)
Expand Down
4 changes: 2 additions & 2 deletions src/class/hid/hid_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -273,8 +273,8 @@ void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, u
__VA_ARGS__ \
HID_USAGE ( HID_USAGE_DIGITIZER_STYLUS ) , \
HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) , \
HID_USAGE_PAGE ( HID_USAGE_PAGE_TIP_SWITCH ) , \
HID_USAGE_PAGE ( HID_USAGE_PAGE_IN_RANGE ) , \
HID_USAGE_PAGE ( HID_USAGE_DIGITIZER_TIP_SWITCH ) , \
HID_USAGE_PAGE ( HID_USAGE_DIGITIZER_IN_RANGE ) , \
HID_LOGICAL_MIN ( 0 ), \
HID_LOGICAL_MAX ( 1 ), \
HID_REPORT_SIZE ( 1 ), \
Expand Down

0 comments on commit a232644

Please sign in to comment.