1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3#[repr(u8)]
4pub enum CommandCode {
5 Page = 0x00,
7 Operation = 0x01,
8 OnOffConfig = 0x02,
9 ClearFaults = 0x03,
10 Phase = 0x04,
11 PagePlusWrite = 0x05,
12 PagePlusRead = 0x06,
13 ZoneConfig = 0x07,
14 ZoneActive = 0x08,
15
16 WriteProtect = 0x10,
18 StoreDefaultAll = 0x11,
19 RestoreDefaultAll = 0x12,
20 StoreDefaultCode = 0x13,
21 RestoreDefaultCode = 0x14,
22 StoreUserAll = 0x15,
23 RestoreUserAll = 0x16,
24 StoreUserCode = 0x17,
25 RestoreUserCode = 0x18,
26 Capability = 0x19,
27 Query = 0x1A,
28 SmbalertMask = 0x1B,
29
30 VoutMode = 0x20,
32 VoutCommand = 0x21,
33 VoutTrim = 0x22,
34 VoutCalOffset = 0x23,
35 VoutMax = 0x24,
36 VoutMarginHigh = 0x25,
37 VoutMarginLow = 0x26,
38 VoutTransitionRate = 0x27,
39 VoutDroop = 0x28,
40 VoutScaleLoop = 0x29,
41 VoutScaleMonitor = 0x2A,
42 VoutMin = 0x2B,
43
44 Coefficients = 0x30,
46 PoutMax = 0x31,
47 MaxDuty = 0x32,
48 FrequencySwitch = 0x33,
49 PowerMode = 0x34,
50 VinOn = 0x35,
51 VinOff = 0x36,
52 Interleave = 0x37,
53 IoutCalGain = 0x38,
54 IoutCalOffset = 0x39,
55
56 FanConfig12 = 0x3A,
58 FanCommand1 = 0x3B,
59 FanCommand2 = 0x3C,
60 FanConfig34 = 0x3D,
61 FanCommand3 = 0x3E,
62 FanCommand4 = 0x3F,
63
64 VoutOvFaultLimit = 0x40,
66 VoutOvFaultResponse = 0x41,
67 VoutOvWarnLimit = 0x42,
68 VoutUvWarnLimit = 0x43,
69 VoutUvFaultLimit = 0x44,
70 VoutUvFaultResponse = 0x45,
71
72 IoutOcFaultLimit = 0x46,
74 IoutOcFaultResponse = 0x47,
75 IoutOcLvFaultLimit = 0x48,
76 IoutOcLvFaultResponse = 0x49,
77 IoutOcWarnLimit = 0x4A,
78 IoutUcFaultLimit = 0x4B,
79 IoutUcFaultResponse = 0x4C,
80
81 OtFaultLimit = 0x4F,
83 OtFaultResponse = 0x50,
84 OtWarnLimit = 0x51,
85
86 UtWarnLimit = 0x52,
88 UtFaultLimit = 0x53,
89 UtFaultResponse = 0x54,
90
91 VinOvFaultLimit = 0x55,
93 VinOvFaultResponse = 0x56,
94 VinOvWarnLimit = 0x57,
95 VinUvWarnLimit = 0x58,
96 VinUvFaultLimit = 0x59,
97 VinUvFaultResponse = 0x5A,
98
99 IinOcFaultLimit = 0x5B,
101 IinOcFaultResponse = 0x5C,
102 IinOcWarnLimit = 0x5D,
103
104 PowerGoodOn = 0x5E,
106 PowerGoodOff = 0x5F,
107
108 TonDelay = 0x60,
110 TonRise = 0x61,
111 TonMaxFaultLimit = 0x62,
112 TonMaxFaultResponse = 0x63,
113 ToffDelay = 0x64,
114 ToffFall = 0x65,
115 ToffMaxWarnLimit = 0x66,
116
117 PoutOpFaultLimit = 0x68,
119 PoutOpFaultResponse = 0x69,
120 PoutOpWarnLimit = 0x6A,
121 PinOpWarnLimit = 0x6B,
122
123 StatusByte = 0x78,
125 StatusWord = 0x79,
126 StatusVout = 0x7A,
127 StatusIout = 0x7B,
128 StatusInput = 0x7C,
129 StatusTemperature = 0x7D,
130 StatusCml = 0x7E,
131 StatusOther = 0x7F,
132 StatusMfrSpecific = 0x80,
133 StatusFans12 = 0x81,
134 StatusFans34 = 0x82,
135
136 ReadKwhIn = 0x83,
138 ReadKwhOut = 0x84,
139 ReadKwhConfig = 0x85,
140
141 ReadEin = 0x86,
143 ReadEout = 0x87,
144
145 ReadVin = 0x88,
147 ReadIin = 0x89,
148 ReadVcap = 0x8A,
149 ReadVout = 0x8B,
150 ReadIout = 0x8C,
151 ReadTemperature1 = 0x8D,
152 ReadTemperature2 = 0x8E,
153 ReadTemperature3 = 0x8F,
154 ReadFanSpeed1 = 0x90,
155 ReadFanSpeed2 = 0x91,
156 ReadFanSpeed3 = 0x92,
157 ReadFanSpeed4 = 0x93,
158 ReadDutyCycle = 0x94,
159 ReadFrequency = 0x95,
160 ReadPout = 0x96,
161 ReadPin = 0x97,
162
163 PmbusRevision = 0x98,
165 MfrId = 0x99,
166 MfrModel = 0x9A,
167 MfrRevision = 0x9B,
168 MfrLocation = 0x9C,
169 MfrDate = 0x9D,
170 MfrSerial = 0x9E,
171 AppProfileSupport = 0x9F,
172
173 MfrVinMin = 0xA0,
175 MfrVinMax = 0xA1,
176 MfrIinMax = 0xA2,
177 MfrPinMax = 0xA3,
178 MfrVoutMin = 0xA4,
179 MfrVoutMax = 0xA5,
180 MfrIoutMax = 0xA6,
181 MfrPoutMax = 0xA7,
182 MfrTambientMax = 0xA8,
183 MfrTambientMin = 0xA9,
184 MfrEfficiencyLl = 0xAA,
185 MfrEfficiencyHl = 0xAB,
186 MfrPinAccuracy = 0xAC,
187 IcDeviceId = 0xAD,
188 IcDeviceRev = 0xAE,
189
190 UserData00 = 0xB0,
192 UserData01 = 0xB1,
193 UserData02 = 0xB2,
194 UserData03 = 0xB3,
195 UserData04 = 0xB4,
196 UserData05 = 0xB5,
197 UserData06 = 0xB6,
198 UserData07 = 0xB7,
199 UserData08 = 0xB8,
200 UserData09 = 0xB9,
201 UserData10 = 0xBA,
202 UserData11 = 0xBB,
203 UserData12 = 0xBC,
204 UserData13 = 0xBD,
205 UserData14 = 0xBE,
206 UserData15 = 0xBF,
207
208 MfrMaxTemp1 = 0xC0,
210 MfrMaxTemp2 = 0xC1,
211 MfrMaxTemp3 = 0xC2,
212
213 MfrSpecificCommandExt = 0xFE,
215 PmbusCommandExt = 0xFF,
216}
217
218impl CommandCode {
219 pub fn code(self) -> u8 {
221 self as u8
222 }
223}
224
225impl From<CommandCode> for u8 {
226 fn from(cmd: CommandCode) -> u8 {
227 cmd as u8
228 }
229}
230
231#[cfg(test)]
232mod tests {
233 use super::*;
234
235 #[test]
236 fn command_code_values() {
237 assert_eq!(CommandCode::Page.code(), 0x00);
238 assert_eq!(CommandCode::ClearFaults.code(), 0x03);
239 assert_eq!(CommandCode::VoutMode.code(), 0x20);
240 assert_eq!(CommandCode::StatusWord.code(), 0x79);
241 assert_eq!(CommandCode::ReadVin.code(), 0x88);
242 assert_eq!(CommandCode::ReadVout.code(), 0x8B);
243 assert_eq!(CommandCode::MfrId.code(), 0x99);
244 assert_eq!(CommandCode::UserData00.code(), 0xB0);
245 assert_eq!(CommandCode::UserData15.code(), 0xBF);
246 assert_eq!(CommandCode::PmbusCommandExt.code(), 0xFF);
247 }
248
249 #[test]
250 fn from_u8() {
251 let code: u8 = CommandCode::ReadPout.into();
252 assert_eq!(code, 0x96);
253 }
254}