usbhidusage 0.1.3

A general purpose library for working with usb Human Interface Device Descriptors from the HID Usage Tables for Universal Serial Bus (USB) v1.5
Documentation
#[derive(Clone, Copy, PartialEq, PartialOrd, Ord, Eq, Hash, Debug, Default)]
#[non_exhaustive]
#[repr(u16)]
pub enum PhysicalInputDeviceUsage {
    #[default]
    Undefined,
    PhysicalInputDevice,
    Reserved02_1F(u16),
    Normal = 0x20,
    SetEffectReport,
    EffectParameterBlockIndex,
    ParameterBlockOffset,
    ROMFlag,
    EffectType,
    ETConstant_Force,
    ETRamp,
    ETCustom_Force,
    Reserved29_2F(u16),
    ETSquare = 0x30,
    ETSine,
    ETTriangle,
    ETSawtoothUp,
    ETSawtoothDown,
    Reserved35_3F(u16),
    ETSpring = 0x40,
    ETDamper,
    ETInertia,
    ETFriction,
    Reserved44_4F(u16),
    Duration = 0x50,
    SamplePeriod,
    Gain,
    TriggerButton,
    TriggerRepeatInterval,
    AxesEnable,
    DirectionEnable,
    Direction,
    TypeSpecificBlockOffset,
    BlockType,
    SetEnvelopeReport,
    AttackLevel,
    AttackTime,
    FadeLevel,
    FadeTime,
    SetConditionReport,
    Center_PointOffset,
    PositiveCoefficient,
    NegativeCoefficient,
    PositiveSaturation,
    NegativeSaturation,
    DeadBand,
    DownloadForceSample,
    IsochCustom_ForceEnable,
    Custom_ForceDataReport,
    Custom_ForceData,
    Custom_ForceVendorDefinedData,
    SetCustom_ForceReport,
    Custom_ForceDataOffset,
    SampleCount,
    SetPeriodicReport,
    Offset,
    Magnitude,
    Phase,
    Period,
    SetConstant_ForceReport,
    SetRamp_ForceReport,
    RampStart,
    RampEnd,
    EffectOperationReport,
    EffectOperation,
    OpEffectStart,
    OpEffectStartSolo,
    OpEffectStop,
    LoopCount,
    DeviceGainReport,
    DeviceGain,
    ParameterBlockPoolsReport,
    RAMPoolSize,
    ROMPoolSize,
    ROMEffectBlockCount,
    SimultaneousEffectsMax,
    PoolAlignment,
    ParameterBlockMoveReport,
    MoveSource,
    MoveDestination,
    MoveLength,
    EffectParameterBlockLoadReport,
    Reserved8A,
    EffectParameterBlockLoadStatus,
    BlockLoadSuccess,
    BlockLoadFull,
    BlockLoadError,
    BlockHandle,
    EffectParameterBlockFreeReport,
    TypeSpecificBlockHandle,
    PIDStateReport,
    Reserved93,
    EffectPlaying,
    PIDDeviceControlReport,
    PIDDeviceControl,
    DCEnableActuators,
    DCDisableActuators,
    DCStopAllEffects,
    DCReset,
    DCPause,
    DCContinue,
    Reserved9D_9E(u16),
    DevicePaused = 0x9F,
    ActuatorsEnabled,
    ReservedA1_A3(u16),
    SafetySwitch = 0xA4,
    ActuatorOverrideSwitch,
    ActuatorPower,
    StartDelay,
    ParameterBlockSize,
    Device_ManagedPool,
    SharedParameterBlocks,
    CreateNewEffectParameterBlockReport,
    RAMPoolAvailable,
    ReservedAD_FFFF(u16),
}
impl<T> From<T> for PhysicalInputDeviceUsage
where
    T: TryInto<u16>,
{
    fn from(value: T) -> Self {
        let value = value.try_into().unwrap_or(0);
        match value {
            0 => Self::Undefined,
            1 => Self::PhysicalInputDevice,
            2..32 => Self::Reserved02_1F(value),
            32 => Self::Normal,
            33 => Self::SetEffectReport,
            34 => Self::EffectParameterBlockIndex,
            35 => Self::ParameterBlockOffset,
            36 => Self::ROMFlag,
            37 => Self::EffectType,
            38 => Self::ETConstant_Force,
            39 => Self::ETRamp,
            40 => Self::ETCustom_Force,
            41..48 => Self::Reserved29_2F(value),
            48 => Self::ETSquare,
            49 => Self::ETSine,
            50 => Self::ETTriangle,
            51 => Self::ETSawtoothUp,
            52 => Self::ETSawtoothDown,
            53..64 => Self::Reserved35_3F(value),
            64 => Self::ETSpring,
            65 => Self::ETDamper,
            66 => Self::ETInertia,
            67 => Self::ETFriction,
            68..80 => Self::Reserved44_4F(value),
            80 => Self::Duration,
            81 => Self::SamplePeriod,
            82 => Self::Gain,
            83 => Self::TriggerButton,
            84 => Self::TriggerRepeatInterval,
            85 => Self::AxesEnable,
            86 => Self::DirectionEnable,
            87 => Self::Direction,
            88 => Self::TypeSpecificBlockOffset,
            89 => Self::BlockType,
            90 => Self::SetEnvelopeReport,
            91 => Self::AttackLevel,
            92 => Self::AttackTime,
            93 => Self::FadeLevel,
            94 => Self::FadeTime,
            95 => Self::SetConditionReport,
            96 => Self::Center_PointOffset,
            97 => Self::PositiveCoefficient,
            98 => Self::NegativeCoefficient,
            99 => Self::PositiveSaturation,
            100 => Self::NegativeSaturation,
            101 => Self::DeadBand,
            102 => Self::DownloadForceSample,
            103 => Self::IsochCustom_ForceEnable,
            104 => Self::Custom_ForceDataReport,
            105 => Self::Custom_ForceData,
            106 => Self::Custom_ForceVendorDefinedData,
            107 => Self::SetCustom_ForceReport,
            108 => Self::Custom_ForceDataOffset,
            109 => Self::SampleCount,
            110 => Self::SetPeriodicReport,
            111 => Self::Offset,
            112 => Self::Magnitude,
            113 => Self::Phase,
            114 => Self::Period,
            115 => Self::SetConstant_ForceReport,
            116 => Self::SetRamp_ForceReport,
            117 => Self::RampStart,
            118 => Self::RampEnd,
            119 => Self::EffectOperationReport,
            120 => Self::EffectOperation,
            121 => Self::OpEffectStart,
            122 => Self::OpEffectStartSolo,
            123 => Self::OpEffectStop,
            124 => Self::LoopCount,
            125 => Self::DeviceGainReport,
            126 => Self::DeviceGain,
            127 => Self::ParameterBlockPoolsReport,
            128 => Self::RAMPoolSize,
            129 => Self::ROMPoolSize,
            130 => Self::ROMEffectBlockCount,
            131 => Self::SimultaneousEffectsMax,
            132 => Self::PoolAlignment,
            133 => Self::ParameterBlockMoveReport,
            134 => Self::MoveSource,
            135 => Self::MoveDestination,
            136 => Self::MoveLength,
            137 => Self::EffectParameterBlockLoadReport,
            138 => Self::Reserved8A,
            139 => Self::EffectParameterBlockLoadStatus,
            140 => Self::BlockLoadSuccess,
            141 => Self::BlockLoadFull,
            142 => Self::BlockLoadError,
            143 => Self::BlockHandle,
            144 => Self::EffectParameterBlockFreeReport,
            145 => Self::TypeSpecificBlockHandle,
            146 => Self::PIDStateReport,
            147 => Self::Reserved93,
            148 => Self::EffectPlaying,
            149 => Self::PIDDeviceControlReport,
            150 => Self::PIDDeviceControl,
            151 => Self::DCEnableActuators,
            152 => Self::DCDisableActuators,
            153 => Self::DCStopAllEffects,
            154 => Self::DCReset,
            155 => Self::DCPause,
            156 => Self::DCContinue,
            157..159 => Self::Reserved9D_9E(value),
            159 => Self::DevicePaused,
            160 => Self::ActuatorsEnabled,
            161..164 => Self::ReservedA1_A3(value),
            164 => Self::SafetySwitch,
            165 => Self::ActuatorOverrideSwitch,
            166 => Self::ActuatorPower,
            167 => Self::StartDelay,
            168 => Self::ParameterBlockSize,
            169 => Self::Device_ManagedPool,
            170 => Self::SharedParameterBlocks,
            171 => Self::CreateNewEffectParameterBlockReport,
            172 => Self::RAMPoolAvailable,
            173..=65535 => Self::ReservedAD_FFFF(value),
        }
    }
}