#[derive(Clone, Copy, PartialEq, PartialOrd, Ord, Eq, Hash, Debug, Default)]
#[non_exhaustive]
#[repr(u16)]
pub enum HapticsUsage {
#[default]
Undefined,
SimpleHapticController,
Reserved02_0F(u16),
WaveformList = 16,
DurationList,
Reserved12_1F(u16),
AutoTrigger = 32,
ManualTrigger,
AutoTriggerAssociatedControl,
Intensity,
RepeatCount,
RetriggerPeriod,
WaveformVendorPage,
WaveformVendorID,
WaveformCutoffTime,
Reserved29_1000(u16),
WaveformNone = 4097,
WaveformStop,
WaveformClick,
WaveformBuzzContinuous,
WaveformRumbleContinuous,
WaveformPress,
WaveformRelease,
WaveformHover,
WaveformSuccess,
WaveformError,
WaveformInkContinuous,
WaveformPencilContinuous,
WaveformMarkerContinuous,
WaveformChiselMarkerContinuous,
WaveformBrushContinuous,
WaveformEraserContinuous,
WaveformSparkleContinuous,
Reserved1012_2000(u16),
ReservedforVendorWaveforms2001_2FFF(u16) = 8193,
Reserved3000_FFFF(u16) = 12288,
}
impl<T> From<T> for HapticsUsage
where
T: TryInto<u16>,
{
fn from(value: T) -> Self {
let value = value.try_into().unwrap_or(0);
match value {
0 => Self::Undefined,
1 => Self::SimpleHapticController,
2..16 => Self::Reserved02_0F(value),
16 => Self::WaveformList,
17 => Self::DurationList,
18..32 => Self::Reserved12_1F(value),
32 => Self::AutoTrigger,
33 => Self::ManualTrigger,
34 => Self::AutoTriggerAssociatedControl,
35 => Self::Intensity,
36 => Self::RepeatCount,
37 => Self::RetriggerPeriod,
38 => Self::WaveformVendorPage,
39 => Self::WaveformVendorID,
40 => Self::WaveformCutoffTime,
41..4097 => Self::Reserved29_1000(value),
4097 => Self::WaveformNone,
4098 => Self::WaveformStop,
4099 => Self::WaveformClick,
4100 => Self::WaveformBuzzContinuous,
4101 => Self::WaveformRumbleContinuous,
4102 => Self::WaveformPress,
4103 => Self::WaveformRelease,
4104 => Self::WaveformHover,
4105 => Self::WaveformSuccess,
4106 => Self::WaveformError,
4107 => Self::WaveformInkContinuous,
4108 => Self::WaveformPencilContinuous,
4109 => Self::WaveformMarkerContinuous,
4110 => Self::WaveformChiselMarkerContinuous,
4111 => Self::WaveformBrushContinuous,
4112 => Self::WaveformEraserContinuous,
4113 => Self::WaveformSparkleContinuous,
4114..8193 => Self::Reserved1012_2000(value),
8193..12288 => Self::ReservedforVendorWaveforms2001_2FFF(value),
12288..=65535 => Self::Reserved3000_FFFF(value),
}
}
}