use num_enum::{IntoPrimitive, TryFromPrimitive};
use crate::Ident;
#[expect(missing_docs)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive, IntoPrimitive)]
#[repr(u16)]
pub enum KnownUsage {
Undefined = 0,
Scales = 0x01,
ScaleDevice = 0x20,
ScaleClass = 0x21,
ScaleClassIMetric = 0x22,
ScaleClassIiMetric = 0x23,
ScaleClassIiiMetric = 0x24,
ScaleClassIiilMetric = 0x25,
ScaleClassIvMetric = 0x26,
ScaleClassIiiEnglish = 0x27,
ScaleClassIiilEnglish = 0x28,
ScaleClassIvEnglish = 0x29,
ScaleClassGeneric = 0x2A,
ScaleAttributeReport = 0x30,
ScaleControlReport = 0x31,
ScaleDataReport = 0x32,
ScaleStatusReport = 0x33,
ScaleWeightLimitReport = 0x34,
ScaleStatisticsReport = 0x35,
DataWeight = 0x40,
DataScaling = 0x41,
WeightUnit = 0x50,
WeightUnitMilligram = 0x51,
WeightUnitGram = 0x52,
WeightUnitKilogram = 0x53,
WeightUnitCarats = 0x54,
WeightUnitTaels = 0x55,
WeightUnitGrains = 0x56,
WeightUnitPennyweights = 0x57,
WeightUnitMetricTon = 0x58,
WeightUnitAvoirTon = 0x59,
WeightUnitTroyOunce = 0x5A,
WeightUnitOunce = 0x5B,
WeightUnitPound = 0x5C,
CalibrationCount = 0x60,
ReZeroCount = 0x61,
ScaleStatus = 0x70,
ScaleStatusFault = 0x71,
ScaleStatusStableAtCenterOfZero = 0x72,
ScaleStatusInMotion = 0x73,
ScaleStatusWeightStable = 0x74,
ScaleStatusUnderZero = 0x75,
ScaleStatusOverWeightLimit = 0x76,
ScaleStatusRequiresCalibration = 0x77,
ScaleStatusRequiresRezeroing = 0x78,
ZeroScale = 0x80,
EnforcedZeroReturn = 0x81,
}
pub type Usage = Ident<KnownUsage, u16>;