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,
IName = 0x01,
PresentStatus = 0x02,
ChangedStatus = 0x03,
Ups = 0x04,
PowerSupply = 0x05,
BatterySystem = 0x10,
BatterySystemId = 0x11,
Battery = 0x12,
BatteryId = 0x13,
Charger = 0x14,
ChargerId = 0x15,
PowerConverter = 0x16,
PowerConverterId = 0x17,
OutletSystem = 0x18,
OutletSystemId = 0x19,
Input = 0x1A,
InputId = 0x1B,
Output = 0x1C,
OutputId = 0x1D,
Flow = 0x1E,
FlowId = 0x1F,
Outlet = 0x20,
OutletId = 0x21,
Gang = 0x22,
GangId = 0x23,
PowerSummary = 0x24,
PowerSummaryId = 0x25,
Voltage = 0x30,
Current = 0x31,
Frequency = 0x32,
ApparentPower = 0x33,
ActivePower = 0x34,
PercentLoad = 0x35,
Temperature = 0x36,
Humidity = 0x37,
BadCount = 0x38,
ConfigVoltage = 0x40,
ConfigCurrent = 0x41,
ConfigFrequency = 0x42,
ConfigApparentPower = 0x43,
ConfigActivePower = 0x44,
ConfigPercentLoad = 0x45,
ConfigTemperature = 0x46,
ConfigHumidity = 0x47,
SwitchOnControl = 0x50,
SwitchOffControl = 0x51,
ToggleControl = 0x52,
LowVoltageTransfer = 0x53,
HighVoltageTransfer = 0x54,
DelayBeforeReboot = 0x55,
DelayBeforeStartup = 0x56,
DelayBeforeShutdown = 0x57,
Test = 0x58,
ModuleReset = 0x59,
AudibleAlarmControl = 0x5A,
Present = 0x60,
Good = 0x61,
InternalFailure = 0x62,
VoltageOutOfRange = 0x63,
FrequencyOutOfRange = 0x64,
Overload = 0x65,
OverCharged = 0x66,
OverTemperature = 0x67,
ShutdownRequested = 0x68,
ShutdownImminent = 0x69,
SwitchOnOff = 0x6B,
Switchable = 0x6C,
Used = 0x6D,
Boost = 0x6E,
Buck = 0x6F,
Initialized = 0x70,
Tested = 0x71,
AwaitingPower = 0x72,
CommunicationLost = 0x73,
IManufacturer = 0xFD,
IProduct = 0xFE,
ISerialNumber = 0xFF,
}
pub type Usage = Ident<KnownUsage, u16>;