diff options
| author | Benjamin Tissoires <bentiss@kernel.org> | 2024-06-27 11:54:17 +0200 |
|---|---|---|
| committer | Benjamin Tissoires <bentiss@kernel.org> | 2024-07-01 14:48:18 +0200 |
| commit | 8a89db51873ca574de45b25fce68103f34266459 (patch) | |
| tree | 950d448761d56272fceb7d76bd76ddcf87d9f6a4 | |
| parent | c79de517a226b86419a5baa867e65e3f8118829f (diff) | |
HID: bpf: Add a HID report composition helper macros
These macros make it slightly easier and more modular to create
a HID report descriptor from scratch. Since they carry the annotation
we don't need to comment it and they cannot get stale.
For comparison, before we had this:
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x95, 0x04, // Report Count (4)
0x75, 0x01, // Report Size (1)
Now we can write this as:
LogicalRange_i8(0, 1)
ReportCount(4)
ReportSize(1)
Because these macros are for creating new report descriptors,
some bits aren't directly exposed. e.g in the example above:
there is a logical range as one macro that sets both min and max.
There is seldom a good use case for skipping either anyway.
These macros will need to be expanded over time.
For Usage Pages and Usage IDs, we use a tool to parse the HUT JSON
(attached to the HUT 1.5 PDF [1]) and generate all #defines for all
usage pages and usages in the form:
#define UsagePage_Foo_Bar
#define Usage_FB_SomeOrOther
Where the FB is simply the acronym based on the capital letters in the
Usage Page name or the first three letters, whichever makes slightly
more sense.
[1] https://usb.org/document-library/hid-usage-tables-15
Link: https://gitlab.freedesktop.org/libevdev/udev-hid-bpf/-/merge_requests/92
Link: https://gitlab.freedesktop.org/libevdev/udev-hid-bpf/-/merge_requests/96
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Link: https://patch.msgid.link/20240627-import-bpf-v1-1-0dbcda4a5b1f@kernel.org
Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
| -rw-r--r-- | drivers/hid/bpf/progs/hid_report_helpers.h | 2960 |
1 files changed, 2960 insertions, 0 deletions
diff --git a/drivers/hid/bpf/progs/hid_report_helpers.h b/drivers/hid/bpf/progs/hid_report_helpers.h new file mode 100644 index 000000000000..0aa1df438eeb --- /dev/null +++ b/drivers/hid/bpf/progs/hid_report_helpers.h @@ -0,0 +1,2960 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* Copyright (c) 2024 Red Hat, Inc + */ + +// THIS FILE IS GENERATED, DO NOT EDIT + +#pragma once + + +/* Macros for composing HID reports. + * + * HID Fields are added manually to the template, please add to it as needed + * for any individual device. The Usage Pages and Usages are generated. + * + * Some macros have a _i8, _i16, or _i32 suffix. Pick the + * right suffix given the passed-in value. + */ + +/* + * This macro behaves like static_assert(), failing to + * compile if its argument is not true. However, it always + * returns 0, which allows using it everywhere an expression + * can be used. + */ +#define must_be(e, msg_) \ +( \ + 0 * (int) sizeof( \ + struct { \ + _Static_assert(e, msg_); \ + int ISO_C_forbids_a_struct_with_no_members; \ + } \ + ) \ +) + +/* Ensure the given value fits within 8/16/32 bits */ +#define i4(v_) (((__u8)(v_) & 0xf) + must_be((v_) >= -0x8 && (v_) <= 0x7, "not a i4")) +#define i8(v_) ((__u8)(v_) + must_be((v_) >= -0x80 && (v_) <= 0xff, "not a i8/u8")) +#define i16(v_) ((__u16)(v_) + must_be((v_) >= -0x8000 && (v_) <= 0xffff, "not a i16/u16")) +#define i32(v_) ((__u32)(v_) + must_be((v_) >= -0x80000000L && (v_) <= 0xffffffffL, \ + "not a i32/u16")) + +/* Split a value across multiple bytes in LE order */ +#define LE16(v_) i16(v_) & 0xff, ((v_) >> 8) & 0xff +#define LE32(v_) i32(v_) & 0xff, ((v_) >> 8) & 0xff, ((v_) >> 16) & 0xff, ((v_) >> 24) & 0xff + +/* Collections require two items in the report descriptor, the start + * of the collection (0xa?) and the EndCollection item (0xc?). + * This macro provides both, use like this: + * + * static const __u8 fixed_rdesc[] = { + * UsagePage_Generic_Desktop + * Usage_GD_Keyboard + * CollectionApplication( ← Open the collection + * ReportId(3) + * LogicalRange_i8(0, 1) + * // other fields + * ) ← End EndCollection + * + * Collections may be nested. + */ +#define Collection(col_, ...) 0xa1, i8(col_), __VA_ARGS__ 0xc0, +#define CollectionPhysical(...) Collection(0x00, __VA_ARGS__) +#define CollectionApplication(...) Collection(0x01, __VA_ARGS__) +#define CollectionLogical(...) Collection(0x02, __VA_ARGS__) + +/* See Collections, this macro provides Push and Pop with + * elements in between + */ +#define PushPop(...) 0xa4, __VA_ARGS__ 0xb4, + +/* Arguments to use in bitwise-or for Input, Output, Feature */ +#define Const 0x1 +#define Var 0x2 +#define Arr 0x0 +#define Abs 0x0 +#define Rel 0x4 + +/* Use like this: Input(Var|Abs) */ +#define Input(i_) 0x081, i8(i_), +#define Output(i_) 0x091, i8(i_), +#define Feature(i_) 0x0b1, i8(i_), + +#define ReportId(id_) 0x85, i8(id_), +#define ReportSize(sz_) 0x75, i8(sz_), +#define ReportCount(cnt_) 0x95, i8(cnt_), + +#define LogicalRange_i8(min_, max_) 0x15, i8(min_), 0x25, i8(max_), +#define LogicalRange_i16(min_, max_) 0x16, LE16(min_), 0x26, LE16(max_), +#define LogicalRange_i32(min_, max_) 0x17, LE32(min_), 0x27, LE32(max_), + +#define PhysicalRange_i8(min_, max_) 0x35, i8(min_), 0x45, i8(max_), +#define PhysicalRange_i16(min_, max_) 0x36, LE16(min_), 0x46, LE16(max_), +#define PhysicalRange_i32(min_, max_) 0x37, LE32(min_), 0x47, LE32(max_), + +#define UsageRange_i8(min_, max_) 0x19, i8(min_), 0x29, i8(max_), +#define UsageRange_i16(min_, max_) 0x1a, LE16(min_), 0x2a, LE16(max_), + +#define UsagePage_i8(p_) 0x05, i8(p_), +#define UsagePage_i16(p_) 0x06, LE16(p_), + +#define Usage_i8(u_) 0x09, i8(u_), +#define Usage_i16(u_) 0x0a, LE16(u_), +#define Usage_i32(u_) 0x0b, LE32(u_), + +#define SILinear 0x1 +#define SIRotation 0x2 +#define EnglishLinear 0x3 +#define EnglishRotation 0x4 +#define cm (SILinear | (0x1 << 4)) +#define rad (SIRotation | (0x1 << 4)) +#define deg (EnglishRotation | (0x1 << 4)) +#define in (EnglishLinear | (0x1 << 4)) +/* Use as Unit(cm) or Unit(rad) or similar. + * This macro currently defaults to exponent 1 only, so no + * cm^2 or others + */ +#define Unit(u_) Unit_i8(u_) +#define Unit_i8(u_) 0x65, i8(u_), +#define Unit_i16(u_) 0x66, i16(u_), +#define Unit_i32(u_) 0x67, i32(u_), + +#define UnitExponent(u_) 0x55, i4(u_), + +/* A macro to generate a vendor-specific padding-only + * report with Report ID 0xac of the given size in bytes. + * The size is inclusive of the 1 byte Report ID prefix. + * + * HID-BPF requires that at least one report has + * the same size as the original report from the device. + * The easy way to ensure that is to add this + * macro as the last element of your CollectionApplication + * other reports can be of any size less than this. + * + * e.g. + * static __u8 fixed_rdesc = [ + * UsagePage_Generic_Desktop + * Usage_GD_Keyboard + * CollectionApplication( + * ... intended rdesc items go here ... + * FixedSizeVendorReport(12) + * ) + * ]; + * + * If the FixedSizeVendorReport is placed outside + * a CollectionApplication it will result in + * an extra useless evdev node being created. + */ +#define FixedSizeVendorReport(bytes_) \ + UsagePage_Vendor(0xffff) \ + Usage_i8(0x01) \ + CollectionPhysical( \ + ReportId(0xac) \ + ReportSize(8) \ + ReportCount((bytes_) - 1) \ + Input(Const) \ + ) + +/* ----- Generated Usage Pages and Usages ------ */ +#define UsagePage_GenericDesktop UsagePage_i8(0x1) +#define UsagePage_SimulationControls UsagePage_i8(0x2) +#define UsagePage_VRControls UsagePage_i8(0x3) +#define UsagePage_SportControls UsagePage_i8(0x4) +#define UsagePage_GameControls UsagePage_i8(0x5) +#define UsagePage_GenericDeviceControls UsagePage_i8(0x6) +#define UsagePage_KeyboardKeypad UsagePage_i8(0x7) +#define UsagePage_LED UsagePage_i8(0x8) +#define UsagePage_Button UsagePage_i8(0x9) +#define UsagePage_Ordinal UsagePage_i8(0xa) +#define UsagePage_TelephonyDevice UsagePage_i8(0xb) +#define UsagePage_Consumer UsagePage_i8(0xc) +#define UsagePage_Digitizers UsagePage_i8(0xd) +#define UsagePage_Haptics UsagePage_i8(0xe) +#define UsagePage_PhysicalInputDevice UsagePage_i8(0xf) +#define UsagePage_Unicode UsagePage_i8(0x10) +#define UsagePage_SoC UsagePage_i8(0x11) +#define UsagePage_EyeandHeadTrackers UsagePage_i8(0x12) +#define UsagePage_AuxiliaryDisplay UsagePage_i8(0x14) +#define UsagePage_Sensors UsagePage_i8(0x20) +#define UsagePage_MedicalInstrument UsagePage_i8(0x40) +#define UsagePage_BrailleDisplay UsagePage_i8(0x41) +#define UsagePage_LightingAndIllumination UsagePage_i8(0x59) +#define UsagePage_Monitor UsagePage_i8(0x80) +#define UsagePage_MonitorEnumerated UsagePage_i8(0x81) +#define UsagePage_VESAVirtualControls UsagePage_i8(0x82) +#define UsagePage_Power UsagePage_i8(0x84) +#define UsagePage_BatterySystem UsagePage_i8(0x85) +#define UsagePage_BarcodeScanner UsagePage_i8(0x8c) +#define UsagePage_Scales UsagePage_i8(0x8d) +#define UsagePage_MagneticStripeReader UsagePage_i8(0x8e) +#define UsagePage_CameraControl UsagePage_i8(0x90) +#define UsagePage_Arcade UsagePage_i8(0x91) +#define UsagePage_FIDOAlliance UsagePage_i16(0xf1d0) +#define UsagePage_Vendor(u_) \ + UsagePage_i16((u_) + must_be(((u_) & 0xff00) == 0xff00, "not a 0xff00 vendor page")) + +#define Usage_GD_Pointer Usage_i8(0x1) +#define Usage_GD_Mouse Usage_i8(0x2) +#define Usage_GD_Joystick Usage_i8(0x4) +#define Usage_GD_Gamepad Usage_i8(0x5) +#define Usage_GD_Keyboard Usage_i8(0x6) +#define Usage_GD_Keypad Usage_i8(0x7) +#define Usage_GD_MultiaxisController Usage_i8(0x8) +#define Usage_GD_TabletPCSystemControls Usage_i8(0x9) +#define Usage_GD_WaterCoolingDevice Usage_i8(0xa) +#define Usage_GD_ComputerChassisDevice Usage_i8(0xb) +#define Usage_GD_WirelessRadioControls Usage_i8(0xc) +#define Usage_GD_PortableDeviceControl Usage_i8(0xd) +#define Usage_GD_SystemMultiAxisController Usage_i8(0xe) +#define Usage_GD_SpatialController Usage_i8(0xf) +#define Usage_GD_AssistiveControl Usage_i8(0x10) +#define Usage_GD_DeviceDock Usage_i8(0x11) +#define Usage_GD_DockableDevice Usage_i8(0x12) +#define Usage_GD_CallStateManagementControl Usage_i8(0x13) +#define Usage_GD_X Usage_i8(0x30) +#define Usage_GD_Y Usage_i8(0x31) +#define Usage_GD_Z Usage_i8(0x32) +#define Usage_GD_Rx Usage_i8(0x33) +#define Usage_GD_Ry Usage_i8(0x34) +#define Usage_GD_Rz Usage_i8(0x35) +#define Usage_GD_Slider Usage_i8(0x36) +#define Usage_GD_Dial Usage_i8(0x37) +#define Usage_GD_Wheel Usage_i8(0x38) +#define Usage_GD_HatSwitch Usage_i8(0x39) +#define Usage_GD_CountedBuffer Usage_i8(0x3a) +#define Usage_GD_ByteCount Usage_i8(0x3b) +#define Usage_GD_MotionWakeup Usage_i8(0x3c) +#define Usage_GD_Start Usage_i8(0x3d) +#define Usage_GD_Select Usage_i8(0x3e) +#define Usage_GD_Vx Usage_i8(0x40) +#define Usage_GD_Vy Usage_i8(0x41) +#define Usage_GD_Vz Usage_i8(0x42) +#define Usage_GD_Vbrx Usage_i8(0x43) +#define Usage_GD_Vbry Usage_i8(0x44) +#define Usage_GD_Vbrz Usage_i8(0x45) +#define Usage_GD_Vno Usage_i8(0x46) +#define Usage_GD_FeatureNotification Usage_i8(0x47) +#define Usage_GD_ResolutionMultiplier Usage_i8(0x48) +#define Usage_GD_Qx Usage_i8(0x49) +#define Usage_GD_Qy Usage_i8(0x4a) +#define Usage_GD_Qz Usage_i8(0x4b) +#define Usage_GD_Qw Usage_i8(0x4c) +#define Usage_GD_SystemControl Usage_i8(0x80) +#define Usage_GD_SystemPowerDown Usage_i8(0x81) +#define Usage_GD_SystemSleep Usage_i8(0x82) +#define Usage_GD_SystemWakeUp Usage_i8(0x83) +#define Usage_GD_SystemContextMenu Usage_i8(0x84) +#define Usage_GD_SystemMainMenu Usage_i8(0x85) +#define Usage_GD_SystemAppMenu Usage_i8(0x86) +#define Usage_GD_SystemMenuHelp Usage_i8(0x87) +#define Usage_GD_SystemMenuExit Usage_i8(0x88) +#define Usage_GD_SystemMenuSelect Usage_i8(0x89) +#define Usage_GD_SystemMenuRight Usage_i8(0x8a) +#define Usage_GD_SystemMenuLeft Usage_i8(0x8b) +#define Usage_GD_SystemMenuUp Usage_i8(0x8c) +#define Usage_GD_SystemMenuDown Usage_i8(0x8d) +#define Usage_GD_SystemColdRestart Usage_i8(0x8e) +#define Usage_GD_SystemWarmRestart Usage_i8(0x8f) +#define Usage_GD_DpadUp Usage_i8(0x90) +#define Usage_GD_DpadDown Usage_i8(0x91) +#define Usage_GD_DpadRight Usage_i8(0x92) +#define Usage_GD_DpadLeft Usage_i8(0x93) +#define Usage_GD_IndexTrigger Usage_i8(0x94) +#define Usage_GD_PalmTrigger Usage_i8(0x95) +#define Usage_GD_Thumbstick Usage_i8(0x96) +#define Usage_GD_SystemFunctionShift Usage_i8(0x97) +#define Usage_GD_SystemFunctionShiftLock Usage_i8(0x98) +#define Usage_GD_SystemFunctionShiftLockIndicator Usage_i8(0x99) +#define Usage_GD_SystemDismissNotification Usage_i8(0x9a) +#define Usage_GD_SystemDoNotDisturb Usage_i8(0x9b) +#define Usage_GD_SystemDock Usage_i8(0xa0) +#define Usage_GD_SystemUndock Usage_i8(0xa1) +#define Usage_GD_SystemSetup Usage_i8(0xa2) +#define Usage_GD_SystemBreak Usage_i8(0xa3) +#define Usage_GD_SystemDebuggerBreak Usage_i8(0xa4) +#define Usage_GD_ApplicationBreak Usage_i8(0xa5) +#define Usage_GD_ApplicationDebuggerBreak Usage_i8(0xa6) +#define Usage_GD_SystemSpeakerMute Usage_i8(0xa7) +#define Usage_GD_SystemHibernate Usage_i8(0xa8) +#define Usage_GD_SystemMicrophoneMute Usage_i8(0xa9) +#define Usage_GD_SystemDisplayInvert Usage_i8(0xb0) +#define Usage_GD_SystemDisplayInternal Usage_i8(0xb1) +#define Usage_GD_SystemDisplayExternal Usage_i8(0xb2) +#define Usage_GD_SystemDisplayBoth Usage_i8(0xb3) +#define Usage_GD_SystemDisplayDual Usage_i8(0xb4) +#define Usage_GD_SystemDisplayToggleIntExtMode Usage_i8(0xb5) +#define Usage_GD_SystemDisplaySwapPrimarySecondary Usage_i8(0xb6) +#define Usage_GD_SystemDisplayToggleLCDAutoscale Usage_i8(0xb7) +#define Usage_GD_SensorZone Usage_i8(0xc0) +#define Usage_GD_RPM Usage_i8(0xc1) +#define Usage_GD_CoolantLevel Usage_i8(0xc2) +#define Usage_GD_CoolantCriticalLevel Usage_i8(0xc3) +#define Usage_GD_CoolantPump Usage_i8(0xc4) +#define Usage_GD_ChassisEnclosure Usage_i8(0xc5) +#define Usage_GD_WirelessRadioButton Usage_i8(0xc6) +#define Usage_GD_WirelessRadioLED Usage_i8(0xc7) +#define Usage_GD_WirelessRadioSliderSwitch Usage_i8(0xc8) +#define Usage_GD_SystemDisplayRotationLockButton Usage_i8(0xc9) +#define Usage_GD_SystemDisplayRotationLockSliderSwitch Usage_i8(0xca) +#define Usage_GD_ControlEnable Usage_i8(0xcb) +#define Usage_GD_DockableDeviceUniqueID Usage_i8(0xd0) +#define Usage_GD_DockableDeviceVendorID Usage_i8(0xd1) +#define Usage_GD_DockableDevicePrimaryUsagePage Usage_i8(0xd2) +#define Usage_GD_DockableDevicePrimaryUsageID Usage_i8(0xd3) +#define Usage_GD_DockableDeviceDockingState Usage_i8(0xd4) +#define Usage_GD_DockableDeviceDisplayOcclusion Usage_i8(0xd5) +#define Usage_GD_DockableDeviceObjectType Usage_i8(0xd6) +#define Usage_GD_CallActiveLED Usage_i8(0xe0) +#define Usage_GD_CallMuteToggle Usage_i8(0xe1) +#define Usage_GD_CallMuteLED Usage_i8(0xe2) +#define Usage_SC_FlightSimulationDevice Usage_i8(0x1) +#define Usage_SC_AutomobileSimulationDevice Usage_i8(0x2) +#define Usage_SC_TankSimulationDevice Usage_i8(0x3) +#define Usage_SC_SpaceshipSimulationDevice Usage_i8(0x4) +#define Usage_SC_SubmarineSimulationDevice Usage_i8(0x5) +#define Usage_SC_SailingSimulationDevice Usage_i8(0x6) +#define Usage_SC_MotorcycleSimulationDevice Usage_i8(0x7) +#define Usage_SC_SportsSimulationDevice Usage_i8(0x8) +#define Usage_SC_AirplaneSimulationDevice Usage_i8(0x9) +#define Usage_SC_HelicopterSimulationDevice Usage_i8(0xa) +#define Usage_SC_MagicCarpetSimulationDevice Usage_i8(0xb) +#define Usage_SC_BicycleSimulationDevice Usage_i8(0xc) +#define Usage_SC_FlightControlStick Usage_i8(0x20) +#define Usage_SC_FlightStick Usage_i8(0x21) +#define Usage_SC_CyclicControl Usage_i8(0x22) +#define Usage_SC_CyclicTrim Usage_i8(0x23) +#define Usage_SC_FlightYoke Usage_i8(0x24) +#define Usage_SC_TrackControl Usage_i8(0x25) +#define Usage_SC_Aileron Usage_i8(0xb0) +#define Usage_SC_AileronTrim Usage_i8(0xb1) +#define Usage_SC_AntiTorqueControl Usage_i8(0xb2) +#define Usage_SC_AutopilotEnable Usage_i8(0xb3) +#define Usage_SC_ChaffRelease Usage_i8(0xb4) +#define Usage_SC_CollectiveControl Usage_i8(0xb5) +#define Usage_SC_DiveBrake Usage_i8(0xb6) +#define Usage_SC_ElectronicCountermeasures Usage_i8(0xb7) +#define Usage_SC_Elevator Usage_i8(0xb8) +#define Usage_SC_ElevatorTrim Usage_i8(0xb9) +#define Usage_SC_Rudder Usage_i8(0xba) +#define Usage_SC_Throttle Usage_i8(0xbb) +#define Usage_SC_FlightCommunications Usage_i8(0xbc) +#define Usage_SC_FlareRelease Usage_i8(0xbd) +#define Usage_SC_LandingGear Usage_i8(0xbe) +#define Usage_SC_ToeBrake Usage_i8(0xbf) +#define Usage_SC_Trigger Usage_i8(0xc0) +#define Usage_SC_WeaponsArm Usage_i8(0xc1) +#define Usage_SC_WeaponsSelect Usage_i8(0xc2) +#define Usage_SC_WingFlaps Usage_i8(0xc3) +#define Usage_SC_Accelerator Usage_i8(0xc4) +#define Usage_SC_Brake Usage_i8(0xc5) +#define Usage_SC_Clutch Usage_i8(0xc6) +#define Usage_SC_Shifter Usage_i8(0xc7) +#define Usage_SC_Steering Usage_i8(0xc8) +#define Usage_SC_TurretDirection Usage_i8(0xc9) +#define Usage_SC_BarrelElevation Usage_i8(0xca) +#define Usage_SC_DivePlane Usage_i8(0xcb) +#define Usage_SC_Ballast Usage_i8(0xcc) +#define Usage_SC_BicycleCrank Usage_i8(0xcd) +#define Usage_SC_HandleBars Usage_i8(0xce) +#define Usage_SC_FrontBrake Usage_i8(0xcf) +#define Usage_SC_RearBrake Usage_i8(0xd0) +#define Usage_VRC_Belt Usage_i8(0x1) +#define Usage_VRC_BodySuit Usage_i8(0x2) +#define Usage_VRC_Flexor Usage_i8(0x3) +#define Usage_VRC_Glove Usage_i8(0x4) +#define Usage_VRC_HeadTracker Usage_i8(0x5) +#define Usage_VRC_HeadMountedDisplay Usage_i8(0x6) +#define Usage_VRC_HandTracker Usage_i8(0x7) +#define Usage_VRC_Oculometer Usage_i8(0x8) +#define Usage_VRC_Vest Usage_i8(0x9) +#define Usage_VRC_AnimatronicDevice Usage_i8(0xa) +#define Usage_VRC_StereoEnable Usage_i8(0x20) +#define Usage_VRC_DisplayEnable Usage_i8(0x21) +#define Usage_SC_BaseballBat Usage_i8(0x1) +#define Usage_SC_GolfClub Usage_i8(0x2) +#define Usage_SC_RowingMachine Usage_i8(0x3) +#define Usage_SC_Treadmill Usage_i8(0x4) +#define Usage_SC_Oar Usage_i8(0x30) +#define Usage_SC_Slope Usage_i8(0x31) +#define Usage_SC_Rate Usage_i8(0x32) +#define Usage_SC_StickSpeed Usage_i8(0x33) +#define Usage_SC_StickFaceAngle Usage_i8(0x34) +#define Usage_SC_StickHeelToe Usage_i8(0x35) +#define Usage_SC_StickFollowThrough Usage_i8(0x36) +#define Usage_SC_StickTempo Usage_i8(0x37) +#define Usage_SC_StickType Usage_i8(0x38) +#define Usage_SC_StickHeight Usage_i8(0x39) +#define Usage_SC_Putter Usage_i8(0x50) +#define Usage_SC_OneIron Usage_i8(0x51) +#define Usage_SC_TwoIron Usage_i8(0x52) +#define Usage_SC_ThreeIron Usage_i8(0x53) +#define Usage_SC_FourIron Usage_i8(0x54) +#define Usage_SC_FiveIron Usage_i8(0x55) +#define Usage_SC_SixIron Usage_i8(0x56) +#define Usage_SC_SevenIron Usage_i8(0x57) +#define Usage_SC_EightIron Usage_i8(0x58) +#define Usage_SC_NineIron Usage_i8(0x59) +#define Usage_SC_One0Iron Usage_i8(0x5a) +#define Usage_SC_One1Iron Usage_i8(0x5b) +#define Usage_SC_SandWedge Usage_i8(0x5c) +#define Usage_SC_LoftWedge Usage_i8(0x5d) +#define Usage_SC_PowerWedge Usage_i8(0x5e) +#define Usage_SC_OneWood Usage_i8(0x5f) +#define Usage_SC_ThreeWood Usage_i8(0x60) +#define Usage_SC_FiveWood Usage_i8(0x61) +#define Usage_SC_SevenWood Usage_i8(0x62) +#define Usage_SC_NineWood Usage_i8(0x63) +#define Usage_GC_ThreeDGameController Usage_i8(0x1) +#define Usage_GC_PinballDevice Usage_i8(0x2) +#define Usage_GC_GunDevice Usage_i8(0x3) +#define Usage_GC_PointofView Usage_i8(0x20) +#define Usage_GC_TurnRightLeft Usage_i8(0x21) +#define Usage_GC_PitchForwardBackward Usage_i8(0x22) +#define Usage_GC_RollRightLeft Usage_i8(0x23) +#define Usage_GC_MoveRightLeft Usage_i8(0x24) +#define Usage_GC_MoveForwardBackward Usage_i8(0x25) +#define Usage_GC_MoveUpDown Usage_i8(0x26) +#define Usage_GC_LeanRightLeft Usage_i8(0x27) +#define Usage_GC_LeanForwardBackward Usage_i8(0x28) +#define Usage_GC_HeightofPOV Usage_i8(0x29) +#define Usage_GC_Flipper Usage_i8(0x2a) +#define Usage_GC_SecondaryFlipper Usage_i8(0x2b) +#define Usage_GC_Bump Usage_i8(0x2c) +#define Usage_GC_NewGame Usage_i8(0x2d) +#define Usage_GC_ShootBall Usage_i8(0x2e) +#define Usage_GC_Player Usage_i8(0x2f) +#define Usage_GC_GunBolt Usage_i8(0x30) +#define Usage_GC_GunClip Usage_i8(0x31) +#define Usage_GC_GunSelector Usage_i8(0x32) +#define Usage_GC_GunSingleShot Usage_i8(0x33) +#define Usage_GC_GunBurst Usage_i8(0x34) +#define Usage_GC_GunAutomatic Usage_i8(0x35) +#define Usage_GC_GunSafety Usage_i8(0x36) +#define Usage_GC_GamepadFireJump Usage_i8(0x37) +#define Usage_GC_GamepadTrigger Usage_i8(0x39) +#define Usage_GC_FormfittingGamepad Usage_i8(0x3a) +#define Usage_GDC_BackgroundNonuserControls Usage_i8(0x1) +#define Usage_GDC_BatteryStrength Usage_i8(0x20) +#define Usage_GDC_WirelessChannel Usage_i8(0x21) +#define Usage_GDC_WirelessID Usage_i8(0x22) +#define Usage_GDC_DiscoverWirelessControl Usage_i8(0x23) +#define Usage_GDC_SecurityCodeCharacterEntered Usage_i8(0x24) +#define Usage_GDC_SecurityCodeCharacterErased Usage_i8(0x25) +#define Usage_GDC_SecurityCodeCleared Usage_i8(0x26) +#define Usage_GDC_SequenceID Usage_i8(0x27) +#define Usage_GDC_SequenceIDReset Usage_i8(0x28) +#define Usage_GDC_RFSignalStrength Usage_i8(0x29) +#define Usage_GDC_SoftwareVersion Usage_i8(0x2a) +#define Usage_GDC_ProtocolVersion Usage_i8(0x2b) +#define Usage_GDC_HardwareVersion Usage_i8(0x2c) +#define Usage_GDC_Major Usage_i8(0x2d) +#define Usage_GDC_Minor Usage_i8(0x2e) +#define Usage_GDC_Revision Usage_i8(0x2f) +#define Usage_GDC_Handedness Usage_i8(0x30) +#define Usage_GDC_EitherHand Usage_i8(0x31) +#define Usage_GDC_LeftHand Usage_i8(0x32) +#define Usage_GDC_RightHand Usage_i8(0x33) +#define Usage_GDC_BothHands Usage_i8(0x34) +#define Usage_GDC_GripPoseOffset Usage_i8(0x40) +#define Usage_GDC_PointerPoseOffset Usage_i8(0x41) +#define Usage_KK_ErrorRollOver Usage_i8(0x1) +#define Usage_KK_POSTFail Usage_i8(0x2) +#define Usage_KK_ErrorUndefined Usage_i8(0x3) +#define Usage_KK_KeyboardA Usage_i8(0x4) +#define Usage_KK_KeyboardB Usage_i8(0x5) +#define Usage_KK_KeyboardC Usage_i8(0x6) +#define Usage_KK_KeyboardD Usage_i8(0x7) +#define Usage_KK_KeyboardE Usage_i8(0x8) +#define Usage_KK_KeyboardF Usage_i8(0x9) +#define Usage_KK_KeyboardG Usage_i8(0xa) +#define Usage_KK_KeyboardH Usage_i8(0xb) +#define Usage_KK_KeyboardI Usage_i8(0xc) +#define Usage_KK_KeyboardJ Usage_i8(0xd) +#define Usage_KK_KeyboardK Usage_i8(0xe) +#define Usage_KK_KeyboardL Usage_i8(0xf) +#define Usage_KK_KeyboardM Usage_i8(0x10) +#define Usage_KK_KeyboardN Usage_i8(0x11) +#define Usage_KK_KeyboardO Usage_i8(0x12) +#define Usage_KK_KeyboardP Usage_i8(0x13) +#define Usage_KK_KeyboardQ Usage_i8(0x14) +#define Usage_KK_KeyboardR Usage_i8(0x15) +#define Usage_KK_KeyboardS Usage_i8(0x16) +#define Usage_KK_KeyboardT Usage_i8(0x17) +#define Usage_KK_KeyboardU Usage_i8(0x18) +#define Usage_KK_KeyboardV Usage_i8(0x19) +#define Usage_KK_KeyboardW Usage_i8(0x1a) +#define Usage_KK_KeyboardX Usage_i8(0x1b) +#define Usage_KK_KeyboardY Usage_i8(0x1c) +#define Usage_KK_KeyboardZ Usage_i8(0x1d) +#define Usage_KK_Keyboard1andBang Usage_i8(0x1e) +#define Usage_KK_Keyboard2andAt Usage_i8(0x1f) +#define Usage_KK_Keyboard3andHash Usage_i8(0x20) +#define Usage_KK_Keyboard4andDollar Usage_i8(0x21) +#define Usage_KK_Keyboard5andPercent Usage_i8(0x22) +#define Usage_KK_Keyboard6andCaret Usage_i8(0x23) +#define Usage_KK_Keyboard7andAmpersand Usage_i8(0x24) +#define Usage_KK_Keyboard8andStar Usage_i8(0x25) +#define Usage_KK_Keyboard9andLeftBracket Usage_i8(0x26) +#define Usage_KK_Keyboard0andRightBracket Usage_i8(0x27) +#define Usage_KK_KeyboardReturnEnter Usage_i8(0x28) +#define Usage_KK_KeyboardEscape Usage_i8(0x29) +#define Usage_KK_KeyboardDelete Usage_i8(0x2a) +#define Usage_KK_KeyboardTab Usage_i8(0x2b) +#define Usage_KK_KeyboardSpacebar Usage_i8(0x2c) +#define Usage_KK_KeyboardDashandUnderscore Usage_i8(0x2d) +#define Usage_KK_KeyboardEqualsandPlus Usage_i8(0x2e) +#define Usage_KK_KeyboardLeftBrace Usage_i8(0x2f) +#define Usage_KK_KeyboardRightBrace Usage_i8(0x30) +#define Usage_KK_KeyboardBackslashandPipe Usage_i8(0x31) +#define Usage_KK_KeyboardNonUSHashandTilde Usage_i8(0x32) +#define Usage_KK_KeyboardSemiColonandColon Usage_i8(0x33) +#define Usage_KK_KeyboardLeftAposandDouble Usage_i8(0x34) +#define Usage_KK_KeyboardGraveAccentandTilde Usage_i8(0x35) +#define Usage_KK_KeyboardCommaandLessThan Usage_i8(0x36) +#define Usage_KK_KeyboardPeriodandGreaterThan Usage_i8(0x37) +#define Usage_KK_KeyboardForwardSlashandQuestionMark Usage_i8(0x38) +#define Usage_KK_KeyboardCapsLock Usage_i8(0x39) +#define Usage_KK_KeyboardF1 Usage_i8(0x3a) +#define Usage_KK_KeyboardF2 Usage_i8(0x3b) +#define Usage_KK_KeyboardF3 Usage_i8(0x3c) +#define Usage_KK_KeyboardF4 Usage_i8(0x3d) +#define Usage_KK_KeyboardF5 Usage_i8(0x3e) +#define Usage_KK_KeyboardF6 Usage_i8(0x3f) +#define Usage_KK_KeyboardF7 Usage_i8(0x40) +#define Usage_KK_KeyboardF8 Usage_i8(0x41) +#define Usage_KK_KeyboardF9 Usage_i8(0x42) +#define Usage_KK_KeyboardF10 Usage_i8(0x43) +#define Usage_KK_KeyboardF11 Usage_i8(0x44) +#define Usage_KK_KeyboardF12 Usage_i8(0x45) +#define Usage_KK_KeyboardPrintScreen Usage_i8(0x46) +#define Usage_KK_KeyboardScrollLock Usage_i8(0x47) +#define Usage_KK_KeyboardPause Usage_i8(0x48) +#define Usage_KK_KeyboardInsert Usage_i8(0x49) +#define Usage_KK_KeyboardHome Usage_i8(0x4a) +#define Usage_KK_KeyboardPageUp Usage_i8(0x4b) +#define Usage_KK_KeyboardDeleteForward Usage_i8(0x4c) +#define Usage_KK_KeyboardEnd Usage_i8(0x4d) +#define Usage_KK_KeyboardPageDown Usage_i8(0x4e) +#define Usage_KK_KeyboardRightArrow Usage_i8(0x4f) +#define Usage_KK_KeyboardLeftArrow Usage_i8(0x50) +#define Usage_KK_KeyboardDownArrow Usage_i8(0x51) +#define Usage_KK_KeyboardUpArrow Usage_i8(0x52) +#define Usage_KK_KeypadNumLockandClear Usage_i8(0x53) +#define Usage_KK_KeypadForwardSlash Usage_i8(0x54) +#define Usage_KK_KeypadStar Usage_i8(0x55) +#define Usage_KK_KeypadDash Usage_i8(0x56) +#define Usage_KK_KeypadPlus Usage_i8(0x57) +#define Usage_KK_KeypadENTER Usage_i8(0x58) +#define Usage_KK_Keypad1andEnd Usage_i8(0x59) +#define Usage_KK_Keypad2andDownArrow Usage_i8(0x5a) +#define Usage_KK_Keypad3andPageDn Usage_i8(0x5b) +#define Usage_KK_Keypad4andLeftArrow Usage_i8(0x5c) +#define Usage_KK_Keypad5 Usage_i8(0x5d) +#define Usage_KK_Keypad6andRightArrow Usage_i8(0x5e) +#define Usage_KK_Keypad7andHome Usage_i8(0x5f) +#define Usage_KK_Keypad8andUpArrow Usage_i8(0x60) +#define Usage_KK_Keypad9andPageUp Usage_i8(0x61) +#define Usage_KK_Keypad0andInsert Usage_i8(0x62) +#define Usage_KK_KeypadPeriodandDelete Usage_i8(0x63) +#define Usage_KK_KeyboardNonUSBackslashandPipe Usage_i8(0x64) +#define Usage_KK_KeyboardApplication Usage_i8(0x65) +#define Usage_KK_KeyboardPower Usage_i8(0x66) +#define Usage_KK_KeypadEquals Usage_i8(0x67) +#define Usage_KK_KeyboardF13 Usage_i8(0x68) +#define Usage_KK_KeyboardF14 Usage_i8(0x69) +#define Usage_KK_KeyboardF15 Usage_i8(0x6a) +#define Usage_KK_KeyboardF16 Usage_i8(0x6b) +#define Usage_KK_KeyboardF17 Usage_i8(0x6c) +#define Usage_KK_KeyboardF18 Usage_i8(0x6d) +#define Usage_KK_KeyboardF19 Usage_i8(0x6e) +#define Usage_KK_KeyboardF20 Usage_i8(0x6f) +#define Usage_KK_KeyboardF21 Usage_i8(0x70) +#define Usage_KK_KeyboardF22 Usage_i8(0x71) +#define Usage_KK_KeyboardF23 Usage_i8(0x72) +#define Usage_KK_KeyboardF24 Usage_i8(0x73) +#define Usage_KK_KeyboardExecute Usage_i8(0x74) +#define Usage_KK_KeyboardHelp Usage_i8(0x75) +#define Usage_KK_KeyboardMenu Usage_i8(0x76) +#define Usage_KK_KeyboardSelect Usage_i8(0x77) +#define Usage_KK_KeyboardStop Usage_i8(0x78) +#define Usage_KK_KeyboardAgain Usage_i8(0x79) +#define Usage_KK_KeyboardUndo Usage_i8(0x7a) +#define Usage_KK_KeyboardCut Usage_i8(0x7b) +#define Usage_KK_KeyboardCopy Usage_i8(0x7c) +#define Usage_KK_KeyboardPaste Usage_i8(0x7d) +#define Usage_KK_KeyboardFind Usage_i8(0x7e) +#define Usage_KK_KeyboardMute Usage_i8(0x7f) +#define Usage_KK_KeyboardVolumeUp Usage_i8(0x80) +#define Usage_KK_KeyboardVolumeDown Usage_i8(0x81) +#define Usage_KK_KeyboardLockingCapsLock Usage_i8(0x82) +#define Usage_KK_KeyboardLockingNumLock Usage_i8(0x83) +#define Usage_KK_KeyboardLockingScrollLock Usage_i8(0x84) +#define Usage_KK_KeypadComma Usage_i8(0x85) +#define Usage_KK_KeypadEqualSign Usage_i8(0x86) +#define Usage_KK_KeyboardInternational1 Usage_i8(0x87) +#define Usage_KK_KeyboardInternational2 Usage_i8(0x88) +#define Usage_KK_KeyboardInternational3 Usage_i8(0x89) +#define Usage_KK_KeyboardInternational4 Usage_i8(0x8a) +#define Usage_KK_KeyboardInternational5 Usage_i8(0x8b) +#define Usage_KK_KeyboardInternational6 Usage_i8(0x8c) +#define Usage_KK_KeyboardInternational7 Usage_i8(0x8d) +#define Usage_KK_KeyboardInternational8 Usage_i8(0x8e) +#define Usage_KK_KeyboardInternational9 Usage_i8(0x8f) +#define Usage_KK_KeyboardLANG1 Usage_i8(0x90) +#define Usage_KK_KeyboardLANG2 Usage_i8(0x91) +#define Usage_KK_KeyboardLANG3 Usage_i8(0x92) +#define Usage_KK_KeyboardLANG4 Usage_i8(0x93) +#define Usage_KK_KeyboardLANG5 Usage_i8(0x94) +#define Usage_KK_KeyboardLANG6 Usage_i8(0x95) +#define Usage_KK_KeyboardLANG7 Usage_i8(0x96) +#define Usage_KK_KeyboardLANG8 Usage_i8(0x97) +#define Usage_KK_KeyboardLANG9 Usage_i8(0x98) +#define Usage_KK_KeyboardAlternateErase Usage_i8(0x99) +#define Usage_KK_KeyboardSysReqAttention Usage_i8(0x9a) +#define Usage_KK_KeyboardCancel Usage_i8(0x9b) +#define Usage_KK_KeyboardClear Usage_i8(0x9c) +#define Usage_KK_KeyboardPrior Usage_i8(0x9d) +#define Usage_KK_KeyboardReturn Usage_i8(0x9e) +#define Usage_KK_KeyboardSeparator Usage_i8(0x9f) +#define Usage_KK_KeyboardOut Usage_i8(0xa0) +#define Usage_KK_KeyboardOper Usage_i8(0xa1) +#define Usage_KK_KeyboardClearAgain Usage_i8(0xa2) +#define Usage_KK_KeyboardCrSelProps Usage_i8(0xa3) +#define Usage_KK_KeyboardExSel Usage_i8(0xa4) +#define Usage_KK_KeypadDouble0 Usage_i8(0xb0) +#define Usage_KK_KeypadTriple0 Usage_i8(0xb1) +#define Usage_KK_ThousandsSeparator Usage_i8(0xb2) +#define Usage_KK_DecimalSeparator Usage_i8(0xb3) +#define Usage_KK_CurrencyUnit Usage_i8(0xb4) +#define Usage_KK_CurrencySubunit Usage_i8(0xb5) +#define Usage_KK_KeypadLeftBracket Usage_i8(0xb6) +#define Usage_KK_KeypadRightBracket Usage_i8(0xb7) +#define Usage_KK_KeypadLeftBrace Usage_i8(0xb8) +#define Usage_KK_KeypadRightBrace Usage_i8(0xb9) +#define Usage_KK_KeypadTab Usage_i8(0xba) +#define Usage_KK_KeypadBackspace Usage_i8(0xbb) +#define Usage_KK_KeypadA Usage_i8(0xbc) +#define Usage_KK_KeypadB Usage_i8(0xbd) +#define Usage_KK_KeypadC Usage_i8(0xbe) +#define Usage_KK_KeypadD Usage_i8(0xbf) +#define Usage_KK_KeypadE Usage_i8(0xc0) +#define Usage_KK_KeypadF Usage_i8(0xc1) +#define Usage_KK_KeypadXOR Usage_i8(0xc2) +#define Usage_KK_KeypadCaret Usage_i8(0xc3) +#define Usage_KK_KeypadPercentage Usage_i8(0xc4) +#define Usage_KK_KeypadLess Usage_i8(0xc5) +#define Usage_KK_KeypadGreater Usage_i8(0xc6) +#define Usage_KK_KeypadAmpersand Usage_i8(0xc7) +#define Usage_KK_KeypadDoubleAmpersand Usage_i8(0xc8) +#define Usage_KK_KeypadBar Usage_i8(0xc9) +#define Usage_KK_KeypadDoubleBar Usage_i8(0xca) +#define Usage_KK_KeypadColon Usage_i8(0xcb) +#define Usage_KK_KeypadHash Usage_i8(0xcc) +#define Usage_KK_KeypadSpace Usage_i8(0xcd) +#define Usage_KK_KeypadAt Usage_i8(0xce) +#define Usage_KK_KeypadBang Usage_i8(0xcf) +#define Usage_KK_KeypadMemoryStore Usage_i8(0xd0) +#define Usage_KK_KeypadMemoryRecall Usage_i8(0xd1) +#define Usage_KK_KeypadMemoryClear Usage_i8(0xd2) +#define Usage_KK_KeypadMemoryAdd Usage_i8(0xd3) +#define Usage_KK_KeypadMemorySubtract Usage_i8(0xd4) +#define Usage_KK_KeypadMemoryMultiply Usage_i8(0xd5) +#define Usage_KK_KeypadMemoryDivide Usage_i8(0xd6) +#define Usage_KK_KeypadPlusMinus Usage_i8(0xd7) +#define Usage_KK_KeypadClear Usage_i8(0xd8) +#define Usage_KK_KeypadClearEntry Usage_i8(0xd9) +#define Usage_KK_KeypadBinary Usage_i8(0xda) +#define Usage_KK_KeypadOctal Usage_i8(0xdb) +#define Usage_KK_KeypadDecimal Usage_i8(0xdc) +#define Usage_KK_KeypadHexadecimal Usage_i8(0xdd) < |
