Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mantognini/92fd36818985934a3f1610266bd22971 to your computer and use it in GitHub Desktop.
Save mantognini/92fd36818985934a3f1610266bd22971 to your computer and use it in GitHub Desktop.
Explore USB HID HUT
IOHIDElementRef element = ...
switch (IOHIDElementGetUsagePage(element)) {
case kHIDPage_Undefined: sf::err() << "Page of element: kHIDPage_Undefined" << std::endl; break;
case kHIDPage_GenericDesktop:
sf::err() << "Page of element: kHIDPage_GenericDesktop" << std::endl;
switch (IOHIDElementGetUsage(element)) {
case kHIDUsage_GD_Pointer: sf::err() << " Usage of element: kHIDUsage_GD_Pointer" << std::endl; break;
case kHIDUsage_GD_Mouse: sf::err() << " Usage of element: kHIDUsage_GD_Mouse" << std::endl; break;
/* 0x03 Reserved */
case kHIDUsage_GD_Joystick: sf::err() << " Usage of element: kHIDUsage_GD_Joystick" << std::endl; break;
case kHIDUsage_GD_GamePad: sf::err() << " Usage of element: kHIDUsage_GD_GamePad" << std::endl; break;
case kHIDUsage_GD_Keyboard: sf::err() << " Usage of element: kHIDUsage_GD_Keyboard" << std::endl; break;
case kHIDUsage_GD_Keypad: sf::err() << " Usage of element: kHIDUsage_GD_Keypad" << std::endl; break;
case kHIDUsage_GD_MultiAxisController: sf::err() << " Usage of element: kHIDUsage_GD_MultiAxisController" << std::endl; break;
case kHIDUsage_GD_TabletPCSystemControls: sf::err() << " Usage of element: kHIDUsage_GD_TabletPCSystemControls" << std::endl; break;
case kHIDUsage_GD_AssistiveControl: sf::err() << " Usage of element: kHIDUsage_GD_AssistiveControl" << std::endl; break;
/* 0x0B - 0x2F Reserved */
case kHIDUsage_GD_X: sf::err() << " Usage of element: kHIDUsage_GD_X" << std::endl; break;
case kHIDUsage_GD_Y: sf::err() << " Usage of element: kHIDUsage_GD_Y" << std::endl; break;
case kHIDUsage_GD_Z: sf::err() << " Usage of element: kHIDUsage_GD_Z" << std::endl; break;
case kHIDUsage_GD_Rx: sf::err() << " Usage of element: kHIDUsage_GD_Rx" << std::endl; break;
case kHIDUsage_GD_Ry: sf::err() << " Usage of element: kHIDUsage_GD_Ry" << std::endl; break;
case kHIDUsage_GD_Rz: sf::err() << " Usage of element: kHIDUsage_GD_Rz" << std::endl; break;
case kHIDUsage_GD_Slider: sf::err() << " Usage of element: kHIDUsage_GD_Slider" << std::endl; break;
case kHIDUsage_GD_Dial: sf::err() << " Usage of element: kHIDUsage_GD_Dial" << std::endl; break;
case kHIDUsage_GD_Wheel: sf::err() << " Usage of element: kHIDUsage_GD_Wheel" << std::endl; break;
case kHIDUsage_GD_Hatswitch: sf::err() << " Usage of element: kHIDUsage_GD_Hatswitch" << std::endl; break;
case kHIDUsage_GD_CountedBuffer: sf::err() << " Usage of element: kHIDUsage_GD_CountedBuffer" << std::endl; break;
case kHIDUsage_GD_ByteCount: sf::err() << " Usage of element: kHIDUsage_GD_ByteCount" << std::endl; break;
case kHIDUsage_GD_MotionWakeup: sf::err() << " Usage of element: kHIDUsage_GD_MotionWakeup" << std::endl; break;
case kHIDUsage_GD_Start: sf::err() << " Usage of element: kHIDUsage_GD_Start" << std::endl; break;
case kHIDUsage_GD_Select: sf::err() << " Usage of element: kHIDUsage_GD_Select" << std::endl; break;
/* 0x3F Reserved */
case kHIDUsage_GD_Vx: sf::err() << " Usage of element: kHIDUsage_GD_Vx" << std::endl; break;
case kHIDUsage_GD_Vy: sf::err() << " Usage of element: kHIDUsage_GD_Vy" << std::endl; break;
case kHIDUsage_GD_Vz: sf::err() << " Usage of element: kHIDUsage_GD_Vz" << std::endl; break;
case kHIDUsage_GD_Vbrx: sf::err() << " Usage of element: kHIDUsage_GD_Vbrx" << std::endl; break;
case kHIDUsage_GD_Vbry: sf::err() << " Usage of element: kHIDUsage_GD_Vbry" << std::endl; break;
case kHIDUsage_GD_Vbrz: sf::err() << " Usage of element: kHIDUsage_GD_Vbrz" << std::endl; break;
case kHIDUsage_GD_Vno: sf::err() << " Usage of element: kHIDUsage_GD_Vno" << std::endl; break;
/* 0x47 - 0x7F Reserved */
case kHIDUsage_GD_SystemControl: sf::err() << " Usage of element: kHIDUsage_GD_SystemControl" << std::endl; break;
case kHIDUsage_GD_SystemPowerDown: sf::err() << " Usage of element: kHIDUsage_GD_SystemPowerDown" << std::endl; break;
case kHIDUsage_GD_SystemSleep: sf::err() << " Usage of element: kHIDUsage_GD_SystemSleep" << std::endl; break;
case kHIDUsage_GD_SystemWakeUp: sf::err() << " Usage of element: kHIDUsage_GD_SystemWakeUp" << std::endl; break;
case kHIDUsage_GD_SystemContextMenu: sf::err() << " Usage of element: kHIDUsage_GD_SystemContextMenu" << std::endl; break;
case kHIDUsage_GD_SystemMainMenu: sf::err() << " Usage of element: kHIDUsage_GD_SystemMainMenu" << std::endl; break;
case kHIDUsage_GD_SystemAppMenu: sf::err() << " Usage of element: kHIDUsage_GD_SystemAppMenu" << std::endl; break;
case kHIDUsage_GD_SystemMenuHelp: sf::err() << " Usage of element: kHIDUsage_GD_SystemMenuHelp" << std::endl; break;
case kHIDUsage_GD_SystemMenuExit: sf::err() << " Usage of element: kHIDUsage_GD_SystemMenuExit" << std::endl; break;
case kHIDUsage_GD_SystemMenuSelect: sf::err() << " Usage of element: kHIDUsage_GD_SystemMenuSelect" << std::endl; break;
// case kHIDUsage_GD_SystemMenu: sf::err() << " Usage of element: kHIDUsage_GD_SystemMenu" << std::endl; break;
case kHIDUsage_GD_SystemMenuRight: sf::err() << " Usage of element: kHIDUsage_GD_SystemMenuRight" << std::endl; break;
case kHIDUsage_GD_SystemMenuLeft: sf::err() << " Usage of element: kHIDUsage_GD_SystemMenuLeft" << std::endl; break;
case kHIDUsage_GD_SystemMenuUp: sf::err() << " Usage of element: kHIDUsage_GD_SystemMenuUp" << std::endl; break;
case kHIDUsage_GD_SystemMenuDown: sf::err() << " Usage of element: kHIDUsage_GD_SystemMenuDown" << std::endl; break;
/* 0x8E - 0x8F Reserved */
case kHIDUsage_GD_DPadUp: sf::err() << " Usage of element: kHIDUsage_GD_DPadUp" << std::endl; break;
case kHIDUsage_GD_DPadDown: sf::err() << " Usage of element: kHIDUsage_GD_DPadDown" << std::endl; break;
case kHIDUsage_GD_DPadRight: sf::err() << " Usage of element: kHIDUsage_GD_DPadRight" << std::endl; break;
case kHIDUsage_GD_DPadLeft: sf::err() << " Usage of element: kHIDUsage_GD_DPadLeft" << std::endl; break;
/* 0x94 - 0xFFFF Reserved */
case kHIDUsage_GD_Reserved: sf::err() << " Usage of element: kHIDUsage_GD_Reserved" << std::endl; break;
}
break;
case kHIDPage_Simulation: sf::err() << "Page of element: kHIDPage_Simulation" << std::endl; break;
case kHIDPage_VR: sf::err() << "Page of element: kHIDPage_VR" << std::endl; break;
case kHIDPage_Sport: sf::err() << "Page of element: kHIDPage_Sport" << std::endl; break;
case kHIDPage_Game: sf::err() << "Page of element: kHIDPage_Game" << std::endl; break;
case kHIDPage_GenericDeviceControls: sf::err() << "Page of element: kHIDPage_GenericDeviceControls" << std::endl; break;
case kHIDPage_KeyboardOrKeypad: sf::err() << "Page of element: kHIDPage_KeyboardOrKeypad" << std::endl; break;
case kHIDPage_LEDs: sf::err() << "Page of element: kHIDPage_LEDs" << std::endl; break;
case kHIDPage_Button: sf::err() << "Page of element: kHIDPage_Button" << std::endl; break;
case kHIDPage_Ordinal: sf::err() << "Page of element: kHIDPage_Ordinal" << std::endl; break;
case kHIDPage_Telephony: sf::err() << "Page of element: kHIDPage_Telephony" << std::endl; break;
case kHIDPage_Consumer: sf::err() << "Page of element: kHIDPage_Consumer" << std::endl; break;
case kHIDPage_Digitizer: sf::err() << "Page of element: kHIDPage_Digitizer" << std::endl; break;
/* Reserved 0x0E */
case kHIDPage_PID: sf::err() << "Page of element: kHIDPage_PID" << std::endl; break;
case kHIDPage_Unicode: sf::err() << "Page of element: kHIDPage_Unicode" << std::endl; break;
/* Reserved 0x11 - 0x13 */
case kHIDPage_AlphanumericDisplay: sf::err() << "Page of element: kHIDPage_AlphanumericDisplay" << std::endl; break;
/* Reserved 0x15 - 0x1F */
case kHIDPage_Sensor: sf::err() << "Page of element: kHIDPage_Sensor" << std::endl; break;
/* Reserved 0x21 - 0x7f */
case kHIDPage_Monitor: sf::err() << "Page of element: kHIDPage_Monitor" << std::endl; break;
case kHIDPage_MonitorEnumerated: sf::err() << "Page of element: kHIDPage_MonitorEnumerated" << std::endl; break;
case kHIDPage_MonitorVirtual: sf::err() << "Page of element: kHIDPage_MonitorVirtual" << std::endl; break;
case kHIDPage_MonitorReserved: sf::err() << "Page of element: kHIDPage_MonitorReserved" << std::endl; break;
/* Power 0x84 - 0x87 USB Device Class Definition for Power Devices */
case kHIDPage_PowerDevice: sf::err() << "Page of element: kHIDPage_PowerDevice" << std::endl; break;
case kHIDPage_BatterySystem: sf::err() << "Page of element: kHIDPage_BatterySystem" << std::endl; break;
case kHIDPage_PowerReserved: sf::err() << "Page of element: kHIDPage_PowerReserved" << std::endl; break;
case kHIDPage_PowerReserved2: sf::err() << "Page of element: kHIDPage_PowerReserved2" << std::endl; break;
/* Reserved 0x88 - 0x8B */
case kHIDPage_BarCodeScanner: sf::err() << "Page of element: kHIDPage_BarCodeScanner" << std::endl; break;
case kHIDPage_WeighingDevice: sf::err() << "Page of element: kHIDPage_WeighingDevice" << std::endl; break;
// case kHIDPage_Scale: sf::err() << "Page of element: kHIDPage_Scale" << std::endl; break;
case kHIDPage_MagneticStripeReader: sf::err() << "Page of element: kHIDPage_MagneticStripeReader" << std::endl; break;
/* ReservedPointofSalepages 0x8F */
case kHIDPage_CameraControl: sf::err() << "Page of element: kHIDPage_CameraControl" << std::endl; break;
case kHIDPage_Arcade: sf::err() << "Page of element: kHIDPage_Arcade" << std::endl; break;
/* Reserved 0x92 - 0xFEFF */
/* VendorDefined 0xFF00 - 0xFFFF */
// default: sf::err() << "Page of element: (reserved) 0x" << std::hex << IOHIDElementGetUsagePage(element) << std::dec << std::endl; break;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment