669 lines
20 KiB
Rust
669 lines
20 KiB
Rust
pub struct UsageCollection {
|
|
pub pages:&'static [UsagePage],
|
|
}
|
|
impl UsageCollection {
|
|
pub fn get(&self, id:u16) -> Option<&'static UsagePage>
|
|
{
|
|
for page in self.pages {
|
|
if page.id == id {
|
|
return Some(page);
|
|
}
|
|
}
|
|
None
|
|
}
|
|
}
|
|
|
|
pub struct UsagePage {
|
|
pub id:u16,
|
|
pub name:&'static str,
|
|
|
|
pub usages:&'static [Usage],
|
|
}
|
|
impl UsagePage {
|
|
pub fn get(&self, id:u16) -> Option<&'static Usage>
|
|
{
|
|
for usage in self.usages {
|
|
if usage.id == id {
|
|
return Some(usage);
|
|
}
|
|
}
|
|
None
|
|
}
|
|
}
|
|
|
|
pub struct Usage {
|
|
pub id:u16,
|
|
pub usage_type:UsageType,
|
|
pub name:&'static str,
|
|
}
|
|
|
|
pub enum UsageType {
|
|
Any,
|
|
Physical,
|
|
Application,
|
|
Value,
|
|
Toggle,
|
|
Button,
|
|
}
|
|
|
|
pub const USAGES :UsageCollection = UsageCollection {
|
|
pages:&[
|
|
UsagePage {
|
|
id:0x0001,
|
|
name:"Generic Desktop",
|
|
usages:&[
|
|
Usage {
|
|
id:0x0001,
|
|
usage_type:UsageType::Physical,
|
|
name:"Pointer",
|
|
},
|
|
Usage {
|
|
id:0x0002,
|
|
usage_type:UsageType::Application,
|
|
name:"Mouse",
|
|
},
|
|
Usage {
|
|
id:0x0004,
|
|
usage_type:UsageType::Application,
|
|
name:"Joystick",
|
|
},
|
|
Usage {
|
|
id:0x0005,
|
|
usage_type:UsageType::Application,
|
|
name:"Gamepad",
|
|
},
|
|
Usage {
|
|
id:0x0006,
|
|
usage_type:UsageType::Application,
|
|
name:"Keyboard",
|
|
},
|
|
Usage {
|
|
id:0x0007,
|
|
usage_type:UsageType::Application,
|
|
name:"Keypad",
|
|
},
|
|
Usage {
|
|
id:0x0008,
|
|
usage_type:UsageType::Application,
|
|
name:"Multi-axis Controller",
|
|
},
|
|
Usage {
|
|
id:0x0009,
|
|
usage_type:UsageType::Application,
|
|
name:"Tablet PC",
|
|
},
|
|
Usage {
|
|
id:0x000E,
|
|
usage_type:UsageType::Application,
|
|
name:"Spatial Controller",
|
|
},
|
|
|
|
Usage {
|
|
id:0x0030,
|
|
usage_type:UsageType::Value,
|
|
name:"X",
|
|
},
|
|
Usage {
|
|
id:0x0031,
|
|
usage_type:UsageType::Value,
|
|
name:"Y",
|
|
},
|
|
Usage {
|
|
id:0x0032,
|
|
usage_type:UsageType::Value,
|
|
name:"Z",
|
|
},
|
|
Usage {
|
|
id:0x0033,
|
|
usage_type:UsageType::Value,
|
|
name:"Rx",
|
|
},
|
|
Usage {
|
|
id:0x0034,
|
|
usage_type:UsageType::Value,
|
|
name:"Ry",
|
|
},
|
|
Usage {
|
|
id:0x0035,
|
|
usage_type:UsageType::Value,
|
|
name:"Rz",
|
|
},
|
|
Usage {
|
|
id:0x0036,
|
|
usage_type:UsageType::Value,
|
|
name:"Slider",
|
|
},
|
|
Usage {
|
|
id:0x0037,
|
|
usage_type:UsageType::Value,
|
|
name:"Dial",
|
|
},
|
|
Usage {
|
|
id:0x0038,
|
|
usage_type:UsageType::Value,
|
|
name:"Wheel",
|
|
},
|
|
Usage {
|
|
id:0x0039,
|
|
usage_type:UsageType::Value,
|
|
name:"Hat Switch",
|
|
},
|
|
Usage {
|
|
id:0x003D,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Start",
|
|
},
|
|
Usage {
|
|
id:0x003E,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Select",
|
|
},
|
|
Usage {
|
|
id:0x0040,
|
|
usage_type:UsageType::Value,
|
|
name:"Vx",
|
|
},
|
|
Usage {
|
|
id:0x0041,
|
|
usage_type:UsageType::Value,
|
|
name:"Vy",
|
|
},
|
|
Usage {
|
|
id:0x0042,
|
|
usage_type:UsageType::Value,
|
|
name:"Vz",
|
|
},
|
|
Usage {
|
|
id:0x0043,
|
|
usage_type:UsageType::Value,
|
|
name:"Vbx",
|
|
},
|
|
Usage {
|
|
id:0x0044,
|
|
usage_type:UsageType::Value,
|
|
name:"Vby",
|
|
},
|
|
Usage {
|
|
id:0x0045,
|
|
usage_type:UsageType::Value,
|
|
name:"Vbz",
|
|
},
|
|
Usage {
|
|
id:0x0046,
|
|
usage_type:UsageType::Value,
|
|
name:"Vno",
|
|
},
|
|
Usage {
|
|
id:0x0048,
|
|
usage_type:UsageType::Value,
|
|
name:"Resolution Multiplier",
|
|
},
|
|
Usage {
|
|
id:0x0049,
|
|
usage_type:UsageType::Value,
|
|
name:"Qx",
|
|
},
|
|
Usage {
|
|
id:0x004A,
|
|
usage_type:UsageType::Value,
|
|
name:"Qy",
|
|
},
|
|
Usage {
|
|
id:0x004B,
|
|
usage_type:UsageType::Value,
|
|
name:"Qz",
|
|
},
|
|
Usage {
|
|
id:0x004C,
|
|
usage_type:UsageType::Value,
|
|
name:"Qw",
|
|
},
|
|
Usage {
|
|
id:0x0090,
|
|
usage_type:UsageType::Toggle,
|
|
name:"D-pad Up",
|
|
},
|
|
Usage {
|
|
id:0x0091,
|
|
usage_type:UsageType::Toggle,
|
|
name:"D-pad Down",
|
|
},
|
|
Usage {
|
|
id:0x0092,
|
|
usage_type:UsageType::Toggle,
|
|
name:"D-pad Right",
|
|
},
|
|
Usage {
|
|
id:0x0093,
|
|
usage_type:UsageType::Toggle,
|
|
name:"D-pad Left",
|
|
},
|
|
],
|
|
},
|
|
|
|
UsagePage {
|
|
id:0x0002,
|
|
name:"Simulation Controls",
|
|
usages:&[
|
|
Usage {
|
|
id:0x0001,
|
|
usage_type:UsageType::Application,
|
|
name:"Flight Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x0002,
|
|
usage_type:UsageType::Application,
|
|
name:"Automobile Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x0003,
|
|
usage_type:UsageType::Application,
|
|
name:"Tank Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x0004,
|
|
usage_type:UsageType::Application,
|
|
name:"Spaceship Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x0005,
|
|
usage_type:UsageType::Application,
|
|
name:"Submarine Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x0006,
|
|
usage_type:UsageType::Application,
|
|
name:"Sailing Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x0007,
|
|
usage_type:UsageType::Application,
|
|
name:"Motorcycle Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x0008,
|
|
usage_type:UsageType::Application,
|
|
name:"Sports Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x0009,
|
|
usage_type:UsageType::Application,
|
|
name:"Airplane Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x000A,
|
|
usage_type:UsageType::Application,
|
|
name:"Helicopter Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x000B,
|
|
usage_type:UsageType::Application,
|
|
name:"Magic Carpet Simulation Device",
|
|
},
|
|
Usage {
|
|
id:0x000C,
|
|
usage_type:UsageType::Application,
|
|
name:"Bicycle Simulation Device",
|
|
},
|
|
|
|
Usage {
|
|
id:0x0020,
|
|
usage_type:UsageType::Application,
|
|
name:"Flight Control Stick",
|
|
},
|
|
Usage {
|
|
id:0x0021,
|
|
usage_type:UsageType::Application,
|
|
name:"Flight Stick",
|
|
},
|
|
Usage {
|
|
id:0x0022,
|
|
usage_type:UsageType::Physical,
|
|
name:"Cyclic Control",
|
|
},
|
|
Usage {
|
|
id:0x0023,
|
|
usage_type:UsageType::Physical,
|
|
name:"Cyclic Trim",
|
|
},
|
|
Usage {
|
|
id:0x0034,
|
|
usage_type:UsageType::Application,
|
|
name:"Flight Yoke",
|
|
},
|
|
Usage {
|
|
id:0x0025,
|
|
usage_type:UsageType::Physical,
|
|
name:"Track Control",
|
|
},
|
|
|
|
Usage {
|
|
id:0x00B0,
|
|
usage_type:UsageType::Value,
|
|
name:"Aileron",
|
|
},
|
|
Usage {
|
|
id:0x00B1,
|
|
usage_type:UsageType::Value,
|
|
name:"Aileron Trim",
|
|
},
|
|
Usage {
|
|
id:0x00B2,
|
|
usage_type:UsageType::Value,
|
|
name:"Anti-Torque Control",
|
|
},
|
|
Usage {
|
|
id:0x00B3,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Autopilot",
|
|
},
|
|
Usage {
|
|
id:0x00B4,
|
|
usage_type:UsageType::Button,
|
|
name:"Chaff Release",
|
|
},
|
|
Usage {
|
|
id:0x00B5,
|
|
usage_type:UsageType::Value,
|
|
name:"Collective Control",
|
|
},
|
|
Usage {
|
|
id:0x00B6,
|
|
usage_type:UsageType::Value,
|
|
name:"Drive Brake",
|
|
},
|
|
Usage {
|
|
id:0x00B7,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Electronic Countermeasures",
|
|
},
|
|
Usage {
|
|
id:0x00B8,
|
|
usage_type:UsageType::Value,
|
|
name:"Elevator",
|
|
},
|
|
Usage {
|
|
id:0x00B9,
|
|
usage_type:UsageType::Value,
|
|
name:"Elevator Trim",
|
|
},
|
|
Usage {
|
|
id:0x00BA,
|
|
usage_type:UsageType::Value,
|
|
name:"Rudder",
|
|
},
|
|
Usage {
|
|
id:0x00BB,
|
|
usage_type:UsageType::Value,
|
|
name:"Throttle",
|
|
},
|
|
Usage {
|
|
id:0x00BC,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Flight Communications",
|
|
},
|
|
Usage {
|
|
id:0x00BD,
|
|
usage_type:UsageType::Button,
|
|
name:"Flare Release",
|
|
},
|
|
Usage {
|
|
id:0x00BE,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Landing Gear",
|
|
},
|
|
Usage {
|
|
id:0x00BF,
|
|
usage_type:UsageType::Value,
|
|
name:"Toe Brake",
|
|
},
|
|
Usage {
|
|
id:0x00C0,
|
|
usage_type:UsageType::Button,
|
|
name:"Trigger",
|
|
},
|
|
Usage {
|
|
id:0x00C1,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Weapons Arm",
|
|
},
|
|
Usage {
|
|
id:0x00C2,
|
|
usage_type:UsageType::Button,
|
|
name:"Weapons Select",
|
|
},
|
|
Usage {
|
|
id:0x00C3,
|
|
usage_type:UsageType::Value,
|
|
name:"Wing Flags",
|
|
},
|
|
Usage {
|
|
id:0x00C4,
|
|
usage_type:UsageType::Value,
|
|
name:"Accelerator",
|
|
},
|
|
Usage {
|
|
id:0x00C5,
|
|
usage_type:UsageType::Value,
|
|
name:"Brake",
|
|
},
|
|
Usage {
|
|
id:0x00C6,
|
|
usage_type:UsageType::Value,
|
|
name:"Clutch",
|
|
},
|
|
Usage {
|
|
id:0x00C7,
|
|
usage_type:UsageType::Value,
|
|
name:"Steering",
|
|
},
|
|
Usage {
|
|
id:0x00C9,
|
|
usage_type:UsageType::Value,
|
|
name:"Turret Direction",
|
|
},
|
|
Usage {
|
|
id:0x00CA,
|
|
usage_type:UsageType::Value,
|
|
name:"Turret Elevation",
|
|
},
|
|
Usage {
|
|
id:0x00CB,
|
|
usage_type:UsageType::Value,
|
|
name:"Dive Plane",
|
|
},
|
|
Usage {
|
|
id:0x00CC,
|
|
usage_type:UsageType::Value,
|
|
name:"Ballast",
|
|
},
|
|
Usage {
|
|
id:0x00CD,
|
|
usage_type:UsageType::Value,
|
|
name:"Bicycle Crank",
|
|
},
|
|
Usage {
|
|
id:0x00CE,
|
|
usage_type:UsageType::Value,
|
|
name:"Handle Bars",
|
|
},
|
|
Usage {
|
|
id:0x00CF,
|
|
usage_type:UsageType::Value,
|
|
name:"Front Brake",
|
|
},
|
|
Usage {
|
|
id:0x00D0,
|
|
usage_type:UsageType::Value,
|
|
name:"Rear Brake",
|
|
},
|
|
],
|
|
},
|
|
|
|
UsagePage {
|
|
id:0x0003,
|
|
name:"Virtual Reality Controls",
|
|
usages:&[
|
|
Usage {
|
|
id:0x0005,
|
|
usage_type:UsageType::Physical,
|
|
name:"Head Tracker",
|
|
},
|
|
],
|
|
},
|
|
|
|
UsagePage {
|
|
id:0x0007,
|
|
name:"Keyboard",
|
|
usages:&[ ],
|
|
},
|
|
|
|
UsagePage {
|
|
id:0x0008,
|
|
name:"LED",
|
|
usages:&[
|
|
Usage {
|
|
id:0x0001,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Num Lock",
|
|
},
|
|
Usage {
|
|
id:0x0002,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Caps Lock",
|
|
},
|
|
Usage {
|
|
id:0x0003,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Scroll Lock",
|
|
},
|
|
Usage {
|
|
id:0x0004,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Compose",
|
|
},
|
|
Usage {
|
|
id:0x0005,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Kana",
|
|
},
|
|
Usage {
|
|
id:0x0006,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Power",
|
|
},
|
|
Usage {
|
|
id:0x0007,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Shift",
|
|
},
|
|
Usage {
|
|
id:0x0008,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Do Not Disturb",
|
|
},
|
|
Usage {
|
|
id:0x0009,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Mute",
|
|
},
|
|
Usage {
|
|
id:0x000A,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Tone Enable",
|
|
},
|
|
Usage {
|
|
id:0x000B,
|
|
usage_type:UsageType::Toggle,
|
|
name:"High Cut Filter",
|
|
},
|
|
Usage {
|
|
id:0x000C,
|
|
usage_type:UsageType::Toggle,
|
|
name:"Low Cut Filter",
|
|
},
|
|
],
|
|
},
|
|
|
|
UsagePage {
|
|
id:0x0009,
|
|
name:"Button",
|
|
usages:&[
|
|
Usage {
|
|
id:0x0001,
|
|
usage_type:UsageType::Any,
|
|
name:"Primary",
|
|
},
|
|
Usage {
|
|
id:0x0002,
|
|
usage_type:UsageType::Any,
|
|
name:"Secondary",
|
|
},
|
|
Usage {
|
|
id:0x0003,
|
|
usage_type:UsageType::Any,
|
|
name:"Tertiary",
|
|
},
|
|
],
|
|
},
|
|
|
|
UsagePage {
|
|
id:0x000C,
|
|
name:"Consumer",
|
|
usages:&[
|
|
Usage {
|
|
id:0x0001,
|
|
usage_type:UsageType::Application,
|
|
name:"Consumer Control",
|
|
},
|
|
Usage {
|
|
id:0x0002,
|
|
usage_type:UsageType::Any,
|
|
name:"Numeric Key Pad",
|
|
},
|
|
Usage {
|
|
id:0x0003,
|
|
usage_type:UsageType::Any,
|
|
name:"Programmable Buttons",
|
|
},
|
|
Usage {
|
|
id:0x0004,
|
|
usage_type:UsageType::Application,
|
|
name:"Microphone",
|
|
},
|
|
Usage {
|
|
id:0x0005,
|
|
usage_type:UsageType::Application,
|
|
name:"Headphone",
|
|
},
|
|
],
|
|
},
|
|
|
|
UsagePage {
|
|
id:0x000D,
|
|
name:"Digitizer",
|
|
usages:&[
|
|
Usage {
|
|
id:0x0001,
|
|
usage_type:UsageType::Application,
|
|
name:"Digitizer",
|
|
},
|
|
],
|
|
},
|
|
|
|
/*
|
|
UsagePage {
|
|
id:0x00,
|
|
name:"",
|
|
usages:&[
|
|
Usage {
|
|
id:0x00,
|
|
usage_type:UsageType::,
|
|
name:"",
|
|
},
|
|
],
|
|
},
|
|
*/
|
|
],
|
|
};
|