1use num_enum::{IntoPrimitive, TryFromPrimitive};
4
5use crate::Ident;
6
7#[expect(missing_docs)]
14#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive, IntoPrimitive)]
15#[repr(u16)]
16#[non_exhaustive]
17pub enum KnownUsage {
18 Undefined = 0,
19 IName = 0x01,
20 PresentStatus = 0x02,
21 ChangedStatus = 0x03,
22 Ups = 0x04,
23 PowerSupply = 0x05,
24 BatterySystem = 0x10,
26 BatterySystemId = 0x11,
27 Battery = 0x12,
28 BatteryId = 0x13,
29 Charger = 0x14,
30 ChargerId = 0x15,
31 PowerConverter = 0x16,
32 PowerConverterId = 0x17,
33 OutletSystem = 0x18,
34 OutletSystemId = 0x19,
35 Input = 0x1A,
36 InputId = 0x1B,
37 Output = 0x1C,
38 OutputId = 0x1D,
39 Flow = 0x1E,
40 FlowId = 0x1F,
41 Outlet = 0x20,
42 OutletId = 0x21,
43 Gang = 0x22,
44 GangId = 0x23,
45 PowerSummary = 0x24,
46 PowerSummaryId = 0x25,
47 Voltage = 0x30,
49 Current = 0x31,
50 Frequency = 0x32,
51 ApparentPower = 0x33,
52 ActivePower = 0x34,
53 PercentLoad = 0x35,
54 Temperature = 0x36,
55 Humidity = 0x37,
56 BadCount = 0x38,
57 ConfigVoltage = 0x40,
59 ConfigCurrent = 0x41,
60 ConfigFrequency = 0x42,
61 ConfigApparentPower = 0x43,
62 ConfigActivePower = 0x44,
63 ConfigPercentLoad = 0x45,
64 ConfigTemperature = 0x46,
65 ConfigHumidity = 0x47,
66 SwitchOnControl = 0x50,
68 SwitchOffControl = 0x51,
69 ToggleControl = 0x52,
70 LowVoltageTransfer = 0x53,
71 HighVoltageTransfer = 0x54,
72 DelayBeforeReboot = 0x55,
73 DelayBeforeStartup = 0x56,
74 DelayBeforeShutdown = 0x57,
75 Test = 0x58,
76 ModuleReset = 0x59,
77 AudibleAlarmControl = 0x5A,
78 Present = 0x60,
80 Good = 0x61,
81 InternalFailure = 0x62,
82 VoltageOutOfRange = 0x63,
83 FrequencyOutOfRange = 0x64,
84 Overload = 0x65,
85 OverCharged = 0x66,
86 OverTemperature = 0x67,
87 ShutdownRequested = 0x68,
88 ShutdownImminent = 0x69,
89 SwitchOnOff = 0x6B,
91 Switchable = 0x6C,
92 Used = 0x6D,
93 Boost = 0x6E,
94 Buck = 0x6F,
95 Initialized = 0x70,
96 Tested = 0x71,
97 AwaitingPower = 0x72,
98 CommunicationLost = 0x73,
99 IManufacturer = 0xFD,
101 IProduct = 0xFE,
102 ISerialNumber = 0xFF,
103 }
105
106pub type Usage = Ident<KnownUsage, u16>;