#[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),
}
}
}