1use super::error::Error;
2
3pub const BACNET_MAX_OBJECT: u32 = 0x3FF;
4pub const BACNET_INSTANCE_BITS: u32 = 22;
5pub const BACNET_MAX_INSTANCE: u32 = 0x3FFFFF;
6pub const MAX_BITSTRING_BYTES: u32 = 15;
7pub const BACNET_ARRAY_ALL: u32 = 0xFFFFFFFF;
8pub const BACNET_NO_PRIORITY: u32 = 0;
9pub const BACNET_MIN_PRIORITY: u32 = 1;
10pub const BACNET_MAX_PRIORITY: u32 = 16;
11
12#[derive(Debug, Clone)]
29#[cfg_attr(feature = "defmt", derive(defmt::Format))]
30#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
31#[repr(u32)]
32pub enum Segmentation {
33 Both = 0,
34 Transmit = 1,
35 Receive = 2,
36 None = 3,
37 Max = 4,
38}
39
40impl TryFrom<u32> for Segmentation {
41 type Error = Error;
42
43 fn try_from(value: u32) -> Result<Self, Self::Error> {
44 match value {
45 0 => Ok(Self::Both),
46 1 => Ok(Self::Transmit),
47 2 => Ok(Self::Receive),
48 3 => Ok(Self::None),
49 4 => Ok(Self::Max),
50 _ => Err(Error::InvalidValue("invalid segmentation value")),
51 }
52 }
53}
54
55#[derive(Debug, Clone)]
56#[cfg_attr(feature = "defmt", derive(defmt::Format))]
57#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
58#[repr(u32)]
59pub enum Binary {
60 Off = 0,
61 On = 1,
62}
63
64impl TryFrom<u32> for Binary {
65 type Error = u32;
66
67 fn try_from(value: u32) -> Result<Self, Self::Error> {
68 match value {
69 0 => Ok(Self::Off),
70 1 => Ok(Self::On),
71 x => Err(x),
72 }
73 }
74}
75
76#[derive(Debug, Clone)]
77#[cfg_attr(feature = "defmt", derive(defmt::Format))]
78#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
79#[repr(u16)]
80pub enum ErrorClass {
81 Device = 0,
82 Object = 1,
83 Property = 2,
84 Resources = 3,
85 Security = 4,
86 Services = 5,
87 Vt = 6,
88 Communication = 7,
89 Proprietary(u16),
91}
92
93impl TryFrom<u32> for ErrorClass {
94 type Error = u32;
95
96 fn try_from(value: u32) -> Result<Self, Self::Error> {
97 match value {
98 0 => Ok(Self::Device),
99 1 => Ok(Self::Object),
100 2 => Ok(Self::Property),
101 3 => Ok(Self::Resources),
102 4 => Ok(Self::Security),
103 5 => Ok(Self::Services),
104 6 => Ok(Self::Vt),
105 7 => Ok(Self::Communication),
106 x if x > 63 => Ok(Self::Proprietary(x as u16)),
108 x => Err(x),
109 }
110 }
111}
112
113#[derive(Debug, Clone)]
114#[cfg_attr(feature = "defmt", derive(defmt::Format))]
115#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
116#[repr(u16)]
117pub enum ErrorCode {
118 Other = 0,
120
121 DeviceBusy = 3,
123 ConfigurationInProgress = 2,
124 OperationalProblem = 25,
125
126 DynamicCreationNotSupported = 4,
128 NoObjectsOfSpecifiedType = 17,
129 ObjectDeletionNotPermitted = 23,
130 ObjectIdentifierAlreadyExists = 24,
131 ReadAccessDenied = 27,
132 UnknownObject = 31,
133 UnsupportedObjectType = 36,
134
135 CharacterSetNotSupported = 41,
137 DatatypeNotSupported = 47,
138 InconsistentSelectionCriterion = 8,
139 InvalidArrayIndex = 42,
140 InvalidDataType = 9,
141 NotCovProperty = 44,
142 OptionalFunctionalityNotSupported = 45,
143 PropertyIsNotAnArray = 50,
144 UnknownProperty = 32,
146 ValueOutOfRange = 37,
147 WriteAccessDenied = 40,
148
149 NoSpaceForObject = 18,
151 NoSpaceToAddListElement = 19,
152 NoSpaceToWriteProperty = 20,
153
154 AuthenticationFailed = 1,
156 IncompatibleSecurityLevels = 6,
158 InvalidOperatorName = 12,
159 KeyGenerationError = 15,
160 PasswordFailure = 26,
161 SecurityNotSupported = 28,
162 Timeout = 30,
163
164 CovSubscriptionFailed = 43,
167 DuplicateName = 48,
168 DuplicateObjectId = 49,
169 FileAccessDenied = 5,
170 InconsistentParameters = 7,
171 InvalidConfigurationData = 46,
172 InvalidFileAccessMethod = 10,
173 InvalidFileStartPosition = 11,
174 InvalidParameterDataType = 13,
175 InvalidTimeStamp = 14,
176 MissingRequiredParameter = 16,
177 PropertyIsNotAList = 22,
179 ServiceRequestDenied = 29,
180
181 UnknownVtClass = 34,
183 UnknownVtSession = 35,
184 NoVtSessionsAvailable = 21,
185 VtSessionAlreadyClosed = 38,
186 VtSessionTerminationFailure = 39,
187
188 Reserved1 = 33,
190 AbortBufferOverflow = 51,
192 AbortInvalidApduInThisState = 52,
193 AbortPreemptedByHigherPriorityTask = 53,
194 AbortSegmentationNotSupported = 54,
195 AbortProprietary = 55,
196 AbortOther = 56,
197 InvalidTag = 57,
198 NetworkDown = 58,
199 RejectBufferOverflow = 59,
200 RejectInconsistentParameters = 60,
201 RejectInvalidParameterDataType = 61,
202 RejectInvalidTag = 62,
203 RejectMissingRequiredParameter = 63,
204 RejectParameterOutOfRange = 64,
205 RejectTooManyArguments = 65,
206 RejectUndefinedEnumeration = 66,
207 RejectUnrecognizedService = 67,
208 RejectProprietary = 68,
209 RejectOther = 69,
210 UnknownDevice = 70,
211 UnknownRoute = 71,
212 ValueNotInitialized = 72,
213 InvalidEventState = 73,
214 NoAlarmConfigured = 74,
215 LogBufferFull = 75,
216 LoggedValuePurged = 76,
217 NoPropertySpecified = 77,
218 NotConfiguredForTriggeredLogging = 78,
219 UnknownSubscription = 79,
220 ParameterOutOfRange = 80,
221 ListElementNotFound = 81,
222 Busy = 82,
223 CommunicationDisabled = 83,
224 Success = 84,
225 AccessDenied = 85,
226 BadDestinationAddress = 86,
227 BadDestinationDeviceId = 87,
228 BadSignature = 88,
229 BadSourceAddress = 89,
230 BadTimestamp = 90,
231 CannotUseKey = 91,
232 CannotVerifyMessageId = 92,
233 CorrectKeyRevision = 93,
234 DestinationDeviceIdRequired = 94,
235 DuplicateMessage = 95,
236 EncryptionNotConfigured = 96,
237 EncryptionRequired = 97,
238 IncorrectKey = 98,
239 InvalidKeyData = 99,
240 KeyUpdateInProgress = 100,
241 MalformedMessage = 101,
242 NotKeyServer = 102,
243 SecurityNotConfigured = 103,
244 SourceSecurityRequired = 104,
245 TooManyKeys = 105,
246 UnknownAuthenticationType = 106,
247 UnknownKey = 107,
248 UnknownKeyRevision = 108,
249 UnknownSourceMessage = 109,
250 NotRouterToDnet = 110,
251 RouterBusy = 111,
252 UnknownNetworkMessage = 112,
253 MessageTooLong = 113,
254 SecurityError = 114,
255 AddressingError = 115,
256 WriteBdtFailed = 116,
257 ReadBdtFailed = 117,
258 RegisterForeignDeviceFailed = 118,
259 ReadFdtFailed = 119,
260 DeleteFdtEntryFailed = 120,
261 DistributeBroadcastFailed = 121,
262 UnknownFileSize = 122,
263 AbortApduTooLong = 123,
264 AbortApplicationExceededReplyTime = 124,
265 AbortOutOfResources = 125,
266 AbortTsmTimeout = 126,
267 AbortWindowSizeOutOfRange = 127,
268 FileFull = 128,
269 InconsistentConfiguration = 129,
270 InconsistentObjectType = 130,
271 InternalError = 131,
272 NotConfigured = 132,
273 OutOfMemory = 133,
274 ValueTooLong = 134,
275 AbortInsufficientSecurity = 135,
276 AbortSecurityError = 136,
277 DuplicateEntry = 137,
278 InvalidValueInThisState = 138,
279 InvalidOperationInThisState = 139,
280 ListItemNotNumbered = 140,
281 ListItemNotTimestamped = 141,
282 InvalidDataEncoding = 142,
283 BvlcFunctionUnknown = 143,
284 BvlcProprietaryFunctionUnknown = 144,
285 HeaderEncodingError = 145,
286 HeaderNotUnderstood = 146,
287 MessageIncomplete = 147,
288 NotABacnetScHub = 148,
289 PayloadExpected = 149,
290 UnexpectedData = 150,
291 NodeDuplicateVmac = 151,
292 HttpUnexpectedResponseCode = 152,
293 HttpNoUpgrade = 153,
294 HttpResourceNotLocal = 154,
295 HttpProxyAuthenticationFailed = 155,
296 HttpResponseTimeout = 156,
297 HttpResponseSyntaxError = 157,
298 HttpResponseValueError = 158,
299 HttpResponseMissingHeader = 159,
300 HttpWebsocketHeaderError = 160,
301 HttpUpgradeRequired = 161,
302 HttpUpgradeError = 162,
303 HttpTemporaryUnavailable = 163,
304 HttpNotAServer = 164,
305 HttpError = 165,
306 WebsocketSchemeNotSupported = 166,
307 WebsocketUnknownControlMessage = 167,
308 WebsocketCloseError = 168,
309 WebsocketClosedByPeer = 169,
310 WebsocketEndpointLeaves = 170,
311 WebsocketProtocolError = 171,
312 WebsocketDataNotAccepted = 172,
313 WebsocketClosedAbnormally = 173,
314 WebsocketDataInconsistent = 174,
315 WebsocketDataAgainstPolicy = 175,
316 WebsocketFrameTooLong = 176,
317 WebsocketExtensionMissing = 177,
318 WebsocketRequestUnavailable = 178,
319 WebsocketError = 179,
320 TlsClientCertificateError = 180,
321 TlsServerCertificateError = 181,
322 TlsClientAuthenticationFailed = 182,
323 TlsServerAuthenticationFailed = 183,
324 TlsClientCertificateExpired = 184,
325 TlsServerCertificateExpired = 185,
326 TlsClientCertificateRevoked = 186,
327 TlsServerCertificateRevoked = 187,
328 TlsError = 188,
329 DnsUnavailable = 189,
330 DnsNameResolutionFailed = 190,
331 DnsResolverFailure = 191,
332 DnsError = 192,
333 TcpConnectTimeout = 193,
334 TcpConnectionRefused = 194,
335 TcpClosedByLocal = 195,
336 TcpClosedOther = 196,
337 TcpError = 197,
338 IpAddressNotReachable = 198,
339 IpError = 199,
340 CertificateExpired = 200,
341 CertificateInvalid = 201,
342 CertificateMalformed = 202,
343 CertificateRevoked = 203,
344 UnknownSecurityKey = 204,
345 ReferencedPortInError = 205,
346 Proprietary(u16),
348}
349
350impl TryFrom<u32> for ErrorCode {
351 type Error = u32;
352
353 fn try_from(value: u32) -> Result<Self, Self::Error> {
354 match value {
355 0 => Ok(Self::Other),
356 3 => Ok(Self::DeviceBusy),
357 2 => Ok(Self::ConfigurationInProgress),
358 25 => Ok(Self::OperationalProblem),
359 4 => Ok(Self::DynamicCreationNotSupported),
360 17 => Ok(Self::NoObjectsOfSpecifiedType),
361 23 => Ok(Self::ObjectDeletionNotPermitted),
362 24 => Ok(Self::ObjectIdentifierAlreadyExists),
363 27 => Ok(Self::ReadAccessDenied),
364 31 => Ok(Self::UnknownObject),
365 36 => Ok(Self::UnsupportedObjectType),
366 41 => Ok(Self::CharacterSetNotSupported),
367 47 => Ok(Self::DatatypeNotSupported),
368 8 => Ok(Self::InconsistentSelectionCriterion),
369 42 => Ok(Self::InvalidArrayIndex),
370 9 => Ok(Self::InvalidDataType),
371 44 => Ok(Self::NotCovProperty),
372 45 => Ok(Self::OptionalFunctionalityNotSupported),
373 50 => Ok(Self::PropertyIsNotAnArray),
374 32 => Ok(Self::UnknownProperty),
375 37 => Ok(Self::ValueOutOfRange),
376 40 => Ok(Self::WriteAccessDenied),
377 18 => Ok(Self::NoSpaceForObject),
378 19 => Ok(Self::NoSpaceToAddListElement),
379 20 => Ok(Self::NoSpaceToWriteProperty),
380 1 => Ok(Self::AuthenticationFailed),
381 6 => Ok(Self::IncompatibleSecurityLevels),
382 12 => Ok(Self::InvalidOperatorName),
383 15 => Ok(Self::KeyGenerationError),
384 26 => Ok(Self::PasswordFailure),
385 28 => Ok(Self::SecurityNotSupported),
386 30 => Ok(Self::Timeout),
387 43 => Ok(Self::CovSubscriptionFailed),
388 48 => Ok(Self::DuplicateName),
389 49 => Ok(Self::DuplicateObjectId),
390 5 => Ok(Self::FileAccessDenied),
391 7 => Ok(Self::InconsistentParameters),
392 46 => Ok(Self::InvalidConfigurationData),
393 10 => Ok(Self::InvalidFileAccessMethod),
394 11 => Ok(Self::InvalidFileStartPosition),
395 13 => Ok(Self::InvalidParameterDataType),
396 14 => Ok(Self::InvalidTimeStamp),
397 16 => Ok(Self::MissingRequiredParameter),
398 22 => Ok(Self::PropertyIsNotAList),
399 29 => Ok(Self::ServiceRequestDenied),
400 34 => Ok(Self::UnknownVtClass),
401 35 => Ok(Self::UnknownVtSession),
402 21 => Ok(Self::NoVtSessionsAvailable),
403 38 => Ok(Self::VtSessionAlreadyClosed),
404 39 => Ok(Self::VtSessionTerminationFailure),
405 33 => Ok(Self::Reserved1),
406 51 => Ok(Self::AbortBufferOverflow),
407 52 => Ok(Self::AbortInvalidApduInThisState),
408 53 => Ok(Self::AbortPreemptedByHigherPriorityTask),
409 54 => Ok(Self::AbortSegmentationNotSupported),
410 55 => Ok(Self::AbortProprietary),
411 56 => Ok(Self::AbortOther),
412 57 => Ok(Self::InvalidTag),
413 58 => Ok(Self::NetworkDown),
414 59 => Ok(Self::RejectBufferOverflow),
415 60 => Ok(Self::RejectInconsistentParameters),
416 61 => Ok(Self::RejectInvalidParameterDataType),
417 62 => Ok(Self::RejectInvalidTag),
418 63 => Ok(Self::RejectMissingRequiredParameter),
419 64 => Ok(Self::RejectParameterOutOfRange),
420 65 => Ok(Self::RejectTooManyArguments),
421 66 => Ok(Self::RejectUndefinedEnumeration),
422 67 => Ok(Self::RejectUnrecognizedService),
423 68 => Ok(Self::RejectProprietary),
424 69 => Ok(Self::RejectOther),
425 70 => Ok(Self::UnknownDevice),
426 71 => Ok(Self::UnknownRoute),
427 72 => Ok(Self::ValueNotInitialized),
428 73 => Ok(Self::InvalidEventState),
429 74 => Ok(Self::NoAlarmConfigured),
430 75 => Ok(Self::LogBufferFull),
431 76 => Ok(Self::LoggedValuePurged),
432 77 => Ok(Self::NoPropertySpecified),
433 78 => Ok(Self::NotConfiguredForTriggeredLogging),
434 79 => Ok(Self::UnknownSubscription),
435 80 => Ok(Self::ParameterOutOfRange),
436 81 => Ok(Self::ListElementNotFound),
437 82 => Ok(Self::Busy),
438 83 => Ok(Self::CommunicationDisabled),
439 84 => Ok(Self::Success),
440 85 => Ok(Self::AccessDenied),
441 86 => Ok(Self::BadDestinationAddress),
442 87 => Ok(Self::BadDestinationDeviceId),
443 88 => Ok(Self::BadSignature),
444 89 => Ok(Self::BadSourceAddress),
445 90 => Ok(Self::BadTimestamp),
446 91 => Ok(Self::CannotUseKey),
447 92 => Ok(Self::CannotVerifyMessageId),
448 93 => Ok(Self::CorrectKeyRevision),
449 94 => Ok(Self::DestinationDeviceIdRequired),
450 95 => Ok(Self::DuplicateMessage),
451 96 => Ok(Self::EncryptionNotConfigured),
452 97 => Ok(Self::EncryptionRequired),
453 98 => Ok(Self::IncorrectKey),
454 99 => Ok(Self::InvalidKeyData),
455 100 => Ok(Self::KeyUpdateInProgress),
456 101 => Ok(Self::MalformedMessage),
457 102 => Ok(Self::NotKeyServer),
458 103 => Ok(Self::SecurityNotConfigured),
459 104 => Ok(Self::SourceSecurityRequired),
460 105 => Ok(Self::TooManyKeys),
461 106 => Ok(Self::UnknownAuthenticationType),
462 107 => Ok(Self::UnknownKey),
463 108 => Ok(Self::UnknownKeyRevision),
464 109 => Ok(Self::UnknownSourceMessage),
465 110 => Ok(Self::NotRouterToDnet),
466 111 => Ok(Self::RouterBusy),
467 112 => Ok(Self::UnknownNetworkMessage),
468 113 => Ok(Self::MessageTooLong),
469 114 => Ok(Self::SecurityError),
470 115 => Ok(Self::AddressingError),
471 116 => Ok(Self::WriteBdtFailed),
472 117 => Ok(Self::ReadBdtFailed),
473 118 => Ok(Self::RegisterForeignDeviceFailed),
474 119 => Ok(Self::ReadFdtFailed),
475 120 => Ok(Self::DeleteFdtEntryFailed),
476 121 => Ok(Self::DistributeBroadcastFailed),
477 122 => Ok(Self::UnknownFileSize),
478 123 => Ok(Self::AbortApduTooLong),
479 124 => Ok(Self::AbortApplicationExceededReplyTime),
480 125 => Ok(Self::AbortOutOfResources),
481 126 => Ok(Self::AbortTsmTimeout),
482 127 => Ok(Self::AbortWindowSizeOutOfRange),
483 128 => Ok(Self::FileFull),
484 129 => Ok(Self::InconsistentConfiguration),
485 130 => Ok(Self::InconsistentObjectType),
486 131 => Ok(Self::InternalError),
487 132 => Ok(Self::NotConfigured),
488 133 => Ok(Self::OutOfMemory),
489 134 => Ok(Self::ValueTooLong),
490 135 => Ok(Self::AbortInsufficientSecurity),
491 136 => Ok(Self::AbortSecurityError),
492 137 => Ok(Self::DuplicateEntry),
493 138 => Ok(Self::InvalidValueInThisState),
494 139 => Ok(Self::InvalidOperationInThisState),
495 140 => Ok(Self::ListItemNotNumbered),
496 141 => Ok(Self::ListItemNotTimestamped),
497 142 => Ok(Self::InvalidDataEncoding),
498 143 => Ok(Self::BvlcFunctionUnknown),
499 144 => Ok(Self::BvlcProprietaryFunctionUnknown),
500 145 => Ok(Self::HeaderEncodingError),
501 146 => Ok(Self::HeaderNotUnderstood),
502 147 => Ok(Self::MessageIncomplete),
503 148 => Ok(Self::NotABacnetScHub),
504 149 => Ok(Self::PayloadExpected),
505 150 => Ok(Self::UnexpectedData),
506 151 => Ok(Self::NodeDuplicateVmac),
507 152 => Ok(Self::HttpUnexpectedResponseCode),
508 153 => Ok(Self::HttpNoUpgrade),
509 154 => Ok(Self::HttpResourceNotLocal),
510 155 => Ok(Self::HttpProxyAuthenticationFailed),
511 156 => Ok(Self::HttpResponseTimeout),
512 157 => Ok(Self::HttpResponseSyntaxError),
513 158 => Ok(Self::HttpResponseValueError),
514 159 => Ok(Self::HttpResponseMissingHeader),
515 160 => Ok(Self::HttpWebsocketHeaderError),
516 161 => Ok(Self::HttpUpgradeRequired),
517 162 => Ok(Self::HttpUpgradeError),
518 163 => Ok(Self::HttpTemporaryUnavailable),
519 164 => Ok(Self::HttpNotAServer),
520 165 => Ok(Self::HttpError),
521 166 => Ok(Self::WebsocketSchemeNotSupported),
522 167 => Ok(Self::WebsocketUnknownControlMessage),
523 168 => Ok(Self::WebsocketCloseError),
524 169 => Ok(Self::WebsocketClosedByPeer),
525 170 => Ok(Self::WebsocketEndpointLeaves),
526 171 => Ok(Self::WebsocketProtocolError),
527 172 => Ok(Self::WebsocketDataNotAccepted),
528 173 => Ok(Self::WebsocketClosedAbnormally),
529 174 => Ok(Self::WebsocketDataInconsistent),
530 175 => Ok(Self::WebsocketDataAgainstPolicy),
531 176 => Ok(Self::WebsocketFrameTooLong),
532 177 => Ok(Self::WebsocketExtensionMissing),
533 178 => Ok(Self::WebsocketRequestUnavailable),
534 179 => Ok(Self::WebsocketError),
535 180 => Ok(Self::TlsClientCertificateError),
536 181 => Ok(Self::TlsServerCertificateError),
537 182 => Ok(Self::TlsClientAuthenticationFailed),
538 183 => Ok(Self::TlsServerAuthenticationFailed),
539 184 => Ok(Self::TlsClientCertificateExpired),
540 185 => Ok(Self::TlsServerCertificateExpired),
541 186 => Ok(Self::TlsClientCertificateRevoked),
542 187 => Ok(Self::TlsServerCertificateRevoked),
543 188 => Ok(Self::TlsError),
544 189 => Ok(Self::DnsUnavailable),
545 190 => Ok(Self::DnsNameResolutionFailed),
546 191 => Ok(Self::DnsResolverFailure),
547 192 => Ok(Self::DnsError),
548 193 => Ok(Self::TcpConnectTimeout),
549 194 => Ok(Self::TcpConnectionRefused),
550 195 => Ok(Self::TcpClosedByLocal),
551 196 => Ok(Self::TcpClosedOther),
552 197 => Ok(Self::TcpError),
553 198 => Ok(Self::IpAddressNotReachable),
554 199 => Ok(Self::IpError),
555 200 => Ok(Self::CertificateExpired),
556 201 => Ok(Self::CertificateInvalid),
557 202 => Ok(Self::CertificateMalformed),
558 203 => Ok(Self::CertificateRevoked),
559 204 => Ok(Self::UnknownSecurityKey),
560 205 => Ok(Self::ReferencedPortInError),
561 x if x > 255 => Ok(Self::Proprietary(x as u16)),
562 x => Err(x),
563 }
564 }
565}
566
567#[derive(Debug, Clone)]
568#[cfg_attr(feature = "defmt", derive(defmt::Format))]
569#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
570#[repr(u16)]
571pub enum EngineeringUnits {
572 MetersPerSecondPerSecond = 166,
575 SquareMeters = 0,
577 SquareCentimeters = 116,
578 SquareFeet = 1,
579 SquareInches = 115,
580 Currency1 = 105,
582 Currency2 = 106,
583 Currency3 = 107,
584 Currency4 = 108,
585 Currency5 = 109,
586 Currency6 = 110,
587 Currency7 = 111,
588 Currency8 = 112,
589 Currency9 = 113,
590 Currency10 = 114,
591 Milliamperes = 2,
593 Amperes = 3,
594 AmperesPerMeter = 167,
595 AmperesPerSquareMeter = 168,
596 AmpereSquareMeters = 169,
597 Decibels = 199,
598 DecibelsMillivolt = 200,
599 DecibelsVolt = 201,
600 Farads = 170,
601 Henrys = 171,
602 Ohms = 4,
603 OhmMeters = 172,
604 Milliohms = 145,
605 Kilohms = 122,
606 Megohms = 123,
607 Microsiemens = 190,
608 Millisiemens = 202,
609 Siemens = 173, SiemensPerMeter = 174,
611 Teslas = 175,
612 Volts = 5,
613 Millivolts = 124,
614 Kilovolts = 6,
615 Megavolts = 7,
616 VoltAmperes = 8,
617 KilovoltAmperes = 9,
618 MegavoltAmperes = 10,
619 VoltAmperesReactive = 11,
620 KilovoltAmperesReactive = 12,
621 MegavoltAmperesReactive = 13,
622 VoltsPerDegreeKelvin = 176,
623 VoltsPerMeter = 177,
624 DegreesPhase = 14,
625 PowerFactor = 15,
626 Webers = 178,
627 Joules = 16,
629 Kilojoules = 17,
630 KilojoulesPerKilogram = 125,
631 Megajoules = 126,
632 WattHours = 18,
633 KilowattHours = 19,
634 MegawattHours = 146,
635 WattHoursReactive = 203,
636 KilowattHoursReactive = 204,
637 MegawattHoursReactive = 205,
638 Btus = 20,
639 KiloBtus = 147,
640 MegaBtus = 148,
641 Therms = 21,
642 TonHours = 22,
643 JoulesPerKilogramDryAir = 23,
645 KilojoulesPerKilogramDryAir = 149,
646 MegajoulesPerKilogramDryAir = 150,
647 BtusPerPoundDryAir = 24,
648 BtusPerPound = 117,
649 JoulesPerDegreeKelvin = 127,
651 KilojoulesPerDegreeKelvin = 151,
652 MegajoulesPerDegreeKelvin = 152,
653 JoulesPerKilogramDegreeKelvin = 128,
654 Newton = 153,
656 CyclesPerHour = 25,
658 CyclesPerMinute = 26,
659 Hertz = 27,
660 Kilohertz = 129,
661 Megahertz = 130,
662 PerHour = 131,
663 GramsOfWaterPerKilogramDryAir = 28,
665 PercentRelativeHumidity = 29,
666 Micrometers = 194,
668 Millimeters = 30,
669 Centimeters = 118,
670 Kilometers = 193,
671 Meters = 31,
672 Inches = 32,
673 Feet = 33,
674 Candelas = 179,
676 CandelasPerSquareMeter = 180,
677 WattsPerSquareFoot = 34,
678 WattsPerSquareMeter = 35,
679 Lumens = 36,
680 Luxes = 37,
681 FootCandles = 38,
682 Milligrams = 196,
684 Grams = 195,
685 Kilograms = 39,
686 PoundsMass = 40,
687 Tons = 41,
688 GramsPerSecond = 154,
690 GramsPerMinute = 155,
691 KilogramsPerSecond = 42,
692 KilogramsPerMinute = 43,
693 KilogramsPerHour = 44,
694 PoundsMassPerSecond = 119,
695 PoundsMassPerMinute = 45,
696 PoundsMassPerHour = 46,
697 TonsPerHour = 156,
698 Milliwatts = 132,
700 Watts = 47,
701 Kilowatts = 48,
702 Megawatts = 49,
703 BtusPerHour = 50,
704 KiloBtusPerHour = 157,
705 Horsepower = 51,
706 TonsRefrigeration = 52,
707 Pascals = 53,
709 Hectopascals = 133,
710 Kilopascals = 54,
711 Millibars = 134,
712 Bars = 55,
713 PoundsForcePerSquareInch = 56,
714 MillimetersOfWater = 206,
715 CentimetersOfWater = 57,
716 InchesOfWater = 58,
717 MillimetersOfMercury = 59,
718 CentimetersOfMercury = 60,
719 InchesOfMercury = 61,
720 DegreesCelsius = 62,
722 DegreesKelvin = 63,
723 DegreesKelvinPerHour = 181,
724 DegreesKelvinPerMinute = 182,
725 DegreesFahrenheit = 64,
726 DegreeDaysCelsius = 65,
727 DegreeDaysFahrenheit = 66,
728 DeltaDegreesFahrenheit = 120,
729 DeltaDegreesKelvin = 121,
730 Years = 67,
732 Months = 68,
733 Weeks = 69,
734 Days = 70,
735 Hours = 71,
736 Minutes = 72,
737 Seconds = 73,
738 HundredthsSeconds = 158,
739 Milliseconds = 159,
740 NewtonMeters = 160,
742 MillimetersPerSecond = 161,
744 MillimetersPerMinute = 162,
745 MetersPerSecond = 74,
746 MetersPerMinute = 163,
747 MetersPerHour = 164,
748 KilometersPerHour = 75,
749 FeetPerSecond = 76,
750 FeetPerMinute = 77,
751 MilesPerHour = 78,
752 CubicFeet = 79,
754 CubicMeters = 80,
755 ImperialGallons = 81,
756 Milliliters = 197,
757 Liters = 82,
758 UsGallons = 83,
759 CubicFeetPerSecond = 142,
761 CubicFeetPerMinute = 84,
762 CubicFeetPerHour = 191,
763 CubicMetersPerSecond = 85,
764 CubicMetersPerMinute = 165,
765 CubicMetersPerHour = 135,
766 ImperialGallonsPerMinute = 86,
767 MillilitersPerSecond = 198,
768 LitersPerSecond = 87,
769 LitersPerMinute = 88,
770 LitersPerHour = 136,
771 UsGallonsPerMinute = 89,
772 UsGallonsPerHour = 192,
773 DegreesAngular = 90,
775 DegreesCelsiusPerHour = 91,
776 DegreesCelsiusPerMinute = 92,
777 DegreesFahrenheitPerHour = 93,
778 DegreesFahrenheitPerMinute = 94,
779 JouleSeconds = 183,
780 KilogramsPerCubicMeter = 186,
781 KwHoursPerSquareMeter = 137,
782 KwHoursPerSquareFoot = 138,
783 MegajoulesPerSquareMeter = 139,
784 MegajoulesPerSquareFoot = 140,
785 NoUnits = 95,
786 NewtonSeconds = 187,
787 NewtonsPerMeter = 188,
788 PartsPerMillion = 96,
789 PartsPerBillion = 97,
790 Percent = 98,
791 PercentObscurationPerFoot = 143,
792 PercentObscurationPerMeter = 144,
793 PercentPerSecond = 99,
794 PerMinute = 100,
795 PerSecond = 101,
796 PsiPerDegreeFahrenheit = 102,
797 Radians = 103,
798 RadiansPerSecond = 184,
799 RevolutionsPerMinute = 104,
800 SquareMetersPerNewton = 185,
801 WattsPerMeterPerDegreeKelvin = 189,
802 WattsPerSquareMeterDegreeKelvin = 141,
803 PerMille = 207,
804 GramsPerGram = 208,
805 KilogramsPerKilogram = 209,
806 GramsPerKilogram = 210,
807 MilligramsPerGram = 211,
808 MilligramsPerKilogram = 212,
809 GramsPerMilliliter = 213,
810 GramsPerLiter = 214,
811 MilligramsPerLiter = 215,
812 MicrogramsPerLiter = 216,
813 GramsPerCubicMeter = 217,
814 MilligramsPerCubicMeter = 218,
815 MicrogramsPerCubicMeter = 219,
816 NanogramsPerCubicMeter = 220,
817 GramsPerCubicCentimeter = 221,
818 Becquerels = 222,
819 Kilobecquerels = 223,
820 Megabecquerels = 224,
821 Gray = 225,
822 Milligray = 226,
823 Microgray = 227,
824 Sieverts = 228,
825 Millisieverts = 229,
826 Microsieverts = 230,
827 MicrosievertsPerHour = 231,
828 DecibelsA = 232,
829 NephelometricTurbidityUnit = 233,
830 Ph = 234,
831 GramsPerSquareMeter = 235,
832 MinutesPerDegreeKelvin = 236,
833 OhmMeterSquaredPerMeter = 237,
834 AmpereSeconds = 238,
835 VoltAmpereHours = 239,
836 KilovoltAmpereHours = 240,
837 MegavoltAmpereHours = 241,
838 VoltAmpereHoursReactive = 242,
839 KilovoltAmpereHoursReactive = 243,
840 MegavoltAmpereHoursReactive = 244,
841 VoltSquareHours = 245,
842 AmpereSquareHours = 246,
843 JoulePerHours = 247,
844 CubicFeetPerDay = 248,
845 CubicMetersPerDay = 249,
846 WattHoursPerCubicMeter = 250,
847 JoulesPerCubicMeter = 251,
848 MolePercent = 252,
849 PascalSeconds = 253,
850 MillionStandardCubicFeetPerMinute = 254,
851 ReservedRangeMax = 255,
852 ProprietaryRangeMin = 256,
855 ProprietaryRangeMax = 47807,
856 StandardCubicFeetPerDay = 47808,
858 MillionStandardCubicFeetPerDay = 47809,
859 ThousandCubicFeetPerDay = 47810,
860 ThousandStandardCubicFeetPerDay = 47811,
861 PoundsMassPerDay = 47812,
862 Millirems = 47814,
864 MilliremsPerHour = 47815,
865 ReservedRangeMax2 = 49999,
866 ProprietaryRangeMin2 = 50000,
867 ProprietaryRangeMax2 = 65535,
873}
874
875impl TryFrom<u32> for EngineeringUnits {
876 type Error = u32;
877
878 fn try_from(value: u32) -> Result<Self, Self::Error> {
879 match value {
880 166 => Ok(Self::MetersPerSecondPerSecond),
881 0 => Ok(Self::SquareMeters),
882 116 => Ok(Self::SquareCentimeters),
883 1 => Ok(Self::SquareFeet),
884 115 => Ok(Self::SquareInches),
885 105 => Ok(Self::Currency1),
886 106 => Ok(Self::Currency2),
887 107 => Ok(Self::Currency3),
888 108 => Ok(Self::Currency4),
889 109 => Ok(Self::Currency5),
890 110 => Ok(Self::Currency6),
891 111 => Ok(Self::Currency7),
892 112 => Ok(Self::Currency8),
893 113 => Ok(Self::Currency9),
894 114 => Ok(Self::Currency10),
895 2 => Ok(Self::Milliamperes),
896 3 => Ok(Self::Amperes),
897 167 => Ok(Self::AmperesPerMeter),
898 168 => Ok(Self::AmperesPerSquareMeter),
899 169 => Ok(Self::AmpereSquareMeters),
900 199 => Ok(Self::Decibels),
901 200 => Ok(Self::DecibelsMillivolt),
902 201 => Ok(Self::DecibelsVolt),
903 170 => Ok(Self::Farads),
904 171 => Ok(Self::Henrys),
905 4 => Ok(Self::Ohms),
906 172 => Ok(Self::OhmMeters),
907 145 => Ok(Self::Milliohms),
908 122 => Ok(Self::Kilohms),
909 123 => Ok(Self::Megohms),
910 190 => Ok(Self::Microsiemens),
911 202 => Ok(Self::Millisiemens),
912 173 => Ok(Self::Siemens),
913 174 => Ok(Self::SiemensPerMeter),
914 175 => Ok(Self::Teslas),
915 5 => Ok(Self::Volts),
916 124 => Ok(Self::Millivolts),
917 6 => Ok(Self::Kilovolts),
918 7 => Ok(Self::Megavolts),
919 8 => Ok(Self::VoltAmperes),
920 9 => Ok(Self::KilovoltAmperes),
921 10 => Ok(Self::MegavoltAmperes),
922 11 => Ok(Self::VoltAmperesReactive),
923 12 => Ok(Self::KilovoltAmperesReactive),
924 13 => Ok(Self::MegavoltAmperesReactive),
925 176 => Ok(Self::VoltsPerDegreeKelvin),
926 177 => Ok(Self::VoltsPerMeter),
927 14 => Ok(Self::DegreesPhase),
928 15 => Ok(Self::PowerFactor),
929 178 => Ok(Self::Webers),
930 16 => Ok(Self::Joules),
931 17 => Ok(Self::Kilojoules),
932 125 => Ok(Self::KilojoulesPerKilogram),
933 126 => Ok(Self::Megajoules),
934 18 => Ok(Self::WattHours),
935 19 => Ok(Self::KilowattHours),
936 146 => Ok(Self::MegawattHours),
937 203 => Ok(Self::WattHoursReactive),
938 204 => Ok(Self::KilowattHoursReactive),
939 205 => Ok(Self::MegawattHoursReactive),
940 20 => Ok(Self::Btus),
941 147 => Ok(Self::KiloBtus),
942 148 => Ok(Self::MegaBtus),
943 21 => Ok(Self::Therms),
944 22 => Ok(Self::TonHours),
945 23 => Ok(Self::JoulesPerKilogramDryAir),
946 149 => Ok(Self::KilojoulesPerKilogramDryAir),
947 150 => Ok(Self::MegajoulesPerKilogramDryAir),
948 24 => Ok(Self::BtusPerPoundDryAir),
949 117 => Ok(Self::BtusPerPound),
950 127 => Ok(Self::JoulesPerDegreeKelvin),
951 151 => Ok(Self::KilojoulesPerDegreeKelvin),
952 152 => Ok(Self::MegajoulesPerDegreeKelvin),
953 128 => Ok(Self::JoulesPerKilogramDegreeKelvin),
954 153 => Ok(Self::Newton),
955 25 => Ok(Self::CyclesPerHour),
956 26 => Ok(Self::CyclesPerMinute),
957 27 => Ok(Self::Hertz),
958 129 => Ok(Self::Kilohertz),
959 130 => Ok(Self::Megahertz),
960 131 => Ok(Self::PerHour),
961 28 => Ok(Self::GramsOfWaterPerKilogramDryAir),
962 29 => Ok(Self::PercentRelativeHumidity),
963 194 => Ok(Self::Micrometers),
964 30 => Ok(Self::Millimeters),
965 118 => Ok(Self::Centimeters),
966 193 => Ok(Self::Kilometers),
967 31 => Ok(Self::Meters),
968 32 => Ok(Self::Inches),
969 33 => Ok(Self::Feet),
970 179 => Ok(Self::Candelas),
971 180 => Ok(Self::CandelasPerSquareMeter),
972 34 => Ok(Self::WattsPerSquareFoot),
973 35 => Ok(Self::WattsPerSquareMeter),
974 36 => Ok(Self::Lumens),
975 37 => Ok(Self::Luxes),
976 38 => Ok(Self::FootCandles),
977 196 => Ok(Self::Milligrams),
978 195 => Ok(Self::Grams),
979 39 => Ok(Self::Kilograms),
980 40 => Ok(Self::PoundsMass),
981 41 => Ok(Self::Tons),
982 154 => Ok(Self::GramsPerSecond),
983 155 => Ok(Self::GramsPerMinute),
984 42 => Ok(Self::KilogramsPerSecond),
985 43 => Ok(Self::KilogramsPerMinute),
986 44 => Ok(Self::KilogramsPerHour),
987 119 => Ok(Self::PoundsMassPerSecond),
988 45 => Ok(Self::PoundsMassPerMinute),
989 46 => Ok(Self::PoundsMassPerHour),
990 156 => Ok(Self::TonsPerHour),
991 132 => Ok(Self::Milliwatts),
992 47 => Ok(Self::Watts),
993 48 => Ok(Self::Kilowatts),
994 49 => Ok(Self::Megawatts),
995 50 => Ok(Self::BtusPerHour),
996 157 => Ok(Self::KiloBtusPerHour),
997 51 => Ok(Self::Horsepower),
998 52 => Ok(Self::TonsRefrigeration),
999 53 => Ok(Self::Pascals),
1000 133 => Ok(Self::Hectopascals),
1001 54 => Ok(Self::Kilopascals),
1002 134 => Ok(Self::Millibars),
1003 55 => Ok(Self::Bars),
1004 56 => Ok(Self::PoundsForcePerSquareInch),
1005 206 => Ok(Self::MillimetersOfWater),
1006 57 => Ok(Self::CentimetersOfWater),
1007 58 => Ok(Self::InchesOfWater),
1008 59 => Ok(Self::MillimetersOfMercury),
1009 60 => Ok(Self::CentimetersOfMercury),
1010 61 => Ok(Self::InchesOfMercury),
1011 62 => Ok(Self::DegreesCelsius),
1012 63 => Ok(Self::DegreesKelvin),
1013 181 => Ok(Self::DegreesKelvinPerHour),
1014 182 => Ok(Self::DegreesKelvinPerMinute),
1015 64 => Ok(Self::DegreesFahrenheit),
1016 65 => Ok(Self::DegreeDaysCelsius),
1017 66 => Ok(Self::DegreeDaysFahrenheit),
1018 120 => Ok(Self::DeltaDegreesFahrenheit),
1019 121 => Ok(Self::DeltaDegreesKelvin),
1020 67 => Ok(Self::Years),
1021 68 => Ok(Self::Months),
1022 69 => Ok(Self::Weeks),
1023 70 => Ok(Self::Days),
1024 71 => Ok(Self::Hours),
1025 72 => Ok(Self::Minutes),
1026 73 => Ok(Self::Seconds),
1027 158 => Ok(Self::HundredthsSeconds),
1028 159 => Ok(Self::Milliseconds),
1029 160 => Ok(Self::NewtonMeters),
1030 161 => Ok(Self::MillimetersPerSecond),
1031 162 => Ok(Self::MillimetersPerMinute),
1032 74 => Ok(Self::MetersPerSecond),
1033 163 => Ok(Self::MetersPerMinute),
1034 164 => Ok(Self::MetersPerHour),
1035 75 => Ok(Self::KilometersPerHour),
1036 76 => Ok(Self::FeetPerSecond),
1037 77 => Ok(Self::FeetPerMinute),
1038 78 => Ok(Self::MilesPerHour),
1039 79 => Ok(Self::CubicFeet),
1040 80 => Ok(Self::CubicMeters),
1041 81 => Ok(Self::ImperialGallons),
1042 197 => Ok(Self::Milliliters),
1043 82 => Ok(Self::Liters),
1044 83 => Ok(Self::UsGallons),
1045 142 => Ok(Self::CubicFeetPerSecond),
1046 84 => Ok(Self::CubicFeetPerMinute),
1047 191 => Ok(Self::CubicFeetPerHour),
1048 85 => Ok(Self::CubicMetersPerSecond),
1049 165 => Ok(Self::CubicMetersPerMinute),
1050 135 => Ok(Self::CubicMetersPerHour),
1051 86 => Ok(Self::ImperialGallonsPerMinute),
1052 198 => Ok(Self::MillilitersPerSecond),
1053 87 => Ok(Self::LitersPerSecond),
1054 88 => Ok(Self::LitersPerMinute),
1055 136 => Ok(Self::LitersPerHour),
1056 89 => Ok(Self::UsGallonsPerMinute),
1057 192 => Ok(Self::UsGallonsPerHour),
1058 90 => Ok(Self::DegreesAngular),
1059 91 => Ok(Self::DegreesCelsiusPerHour),
1060 92 => Ok(Self::DegreesCelsiusPerMinute),
1061 93 => Ok(Self::DegreesFahrenheitPerHour),
1062 94 => Ok(Self::DegreesFahrenheitPerMinute),
1063 183 => Ok(Self::JouleSeconds),
1064 186 => Ok(Self::KilogramsPerCubicMeter),
1065 137 => Ok(Self::KwHoursPerSquareMeter),
1066 138 => Ok(Self::KwHoursPerSquareFoot),
1067 139 => Ok(Self::MegajoulesPerSquareMeter),
1068 140 => Ok(Self::MegajoulesPerSquareFoot),
1069 95 => Ok(Self::NoUnits),
1070 187 => Ok(Self::NewtonSeconds),
1071 188 => Ok(Self::NewtonsPerMeter),
1072 96 => Ok(Self::PartsPerMillion),
1073 97 => Ok(Self::PartsPerBillion),
1074 98 => Ok(Self::Percent),
1075 143 => Ok(Self::PercentObscurationPerFoot),
1076 144 => Ok(Self::PercentObscurationPerMeter),
1077 99 => Ok(Self::PercentPerSecond),
1078 100 => Ok(Self::PerMinute),
1079 101 => Ok(Self::PerSecond),
1080 102 => Ok(Self::PsiPerDegreeFahrenheit),
1081 103 => Ok(Self::Radians),
1082 184 => Ok(Self::RadiansPerSecond),
1083 104 => Ok(Self::RevolutionsPerMinute),
1084 185 => Ok(Self::SquareMetersPerNewton),
1085 189 => Ok(Self::WattsPerMeterPerDegreeKelvin),
1086 141 => Ok(Self::WattsPerSquareMeterDegreeKelvin),
1087 207 => Ok(Self::PerMille),
1088 208 => Ok(Self::GramsPerGram),
1089 209 => Ok(Self::KilogramsPerKilogram),
1090 210 => Ok(Self::GramsPerKilogram),
1091 211 => Ok(Self::MilligramsPerGram),
1092 212 => Ok(Self::MilligramsPerKilogram),
1093 213 => Ok(Self::GramsPerMilliliter),
1094 214 => Ok(Self::GramsPerLiter),
1095 215 => Ok(Self::MilligramsPerLiter),
1096 216 => Ok(Self::MicrogramsPerLiter),
1097 217 => Ok(Self::GramsPerCubicMeter),
1098 218 => Ok(Self::MilligramsPerCubicMeter),
1099 219 => Ok(Self::MicrogramsPerCubicMeter),
1100 220 => Ok(Self::NanogramsPerCubicMeter),
1101 221 => Ok(Self::GramsPerCubicCentimeter),
1102 222 => Ok(Self::Becquerels),
1103 223 => Ok(Self::Kilobecquerels),
1104 224 => Ok(Self::Megabecquerels),
1105 225 => Ok(Self::Gray),
1106 226 => Ok(Self::Milligray),
1107 227 => Ok(Self::Microgray),
1108 228 => Ok(Self::Sieverts),
1109 229 => Ok(Self::Millisieverts),
1110 230 => Ok(Self::Microsieverts),
1111 231 => Ok(Self::MicrosievertsPerHour),
1112 232 => Ok(Self::DecibelsA),
1113 233 => Ok(Self::NephelometricTurbidityUnit),
1114 234 => Ok(Self::Ph),
1115 235 => Ok(Self::GramsPerSquareMeter),
1116 236 => Ok(Self::MinutesPerDegreeKelvin),
1117 237 => Ok(Self::OhmMeterSquaredPerMeter),
1118 238 => Ok(Self::AmpereSeconds),
1119 239 => Ok(Self::VoltAmpereHours),
1120 240 => Ok(Self::KilovoltAmpereHours),
1121 241 => Ok(Self::MegavoltAmpereHours),
1122 242 => Ok(Self::VoltAmpereHoursReactive),
1123 243 => Ok(Self::KilovoltAmpereHoursReactive),
1124 244 => Ok(Self::MegavoltAmpereHoursReactive),
1125 245 => Ok(Self::VoltSquareHours),
1126 246 => Ok(Self::AmpereSquareHours),
1127 247 => Ok(Self::JoulePerHours),
1128 248 => Ok(Self::CubicFeetPerDay),
1129 249 => Ok(Self::CubicMetersPerDay),
1130 250 => Ok(Self::WattHoursPerCubicMeter),
1131 251 => Ok(Self::JoulesPerCubicMeter),
1132 252 => Ok(Self::MolePercent),
1133 253 => Ok(Self::PascalSeconds),
1134 254 => Ok(Self::MillionStandardCubicFeetPerMinute),
1135 255 => Ok(Self::ReservedRangeMax),
1136 256 => Ok(Self::ProprietaryRangeMin),
1137 47807 => Ok(Self::ProprietaryRangeMax),
1138 47808 => Ok(Self::StandardCubicFeetPerDay),
1139 47809 => Ok(Self::MillionStandardCubicFeetPerDay),
1140 47810 => Ok(Self::ThousandCubicFeetPerDay),
1141 47811 => Ok(Self::ThousandStandardCubicFeetPerDay),
1142 47812 => Ok(Self::PoundsMassPerDay),
1143 47814 => Ok(Self::Millirems),
1144 47815 => Ok(Self::MilliremsPerHour),
1145 49999 => Ok(Self::ReservedRangeMax2),
1146 50000 => Ok(Self::ProprietaryRangeMin2),
1147 65535 => Ok(Self::ProprietaryRangeMax2),
1148 _ => Err(value),
1149 }
1150 }
1151}
1152
1153#[repr(u8)]
1154pub enum LogBufferResultFlags {
1155 FirstItem = 0b1000_0000,
1156 LastItem = 0b0100_0000,
1157 MoreItems = 0b0010_0000,
1158}
1159
1160#[repr(u8)]
1161pub enum StatusFlags {
1162 InAlarm = 0b1000_0000,
1163 Fault = 0b0100_0000,
1164 Overridden = 0b0010_0000,
1165 OutOfService = 0b0001_0000,
1166}
1167
1168#[derive(Debug, Clone, Default)]
1169#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1170#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1171pub struct Status {
1172 pub inner: u8,
1173}
1174
1175impl Status {
1176 pub fn new(inner: u8) -> Self {
1177 Self { inner }
1178 }
1179
1180 pub const fn in_alarm(&self) -> bool {
1181 self.inner & StatusFlags::InAlarm as u8 == StatusFlags::InAlarm as u8
1182 }
1183
1184 pub const fn fault(&self) -> bool {
1185 self.inner & StatusFlags::Fault as u8 == StatusFlags::Fault as u8
1186 }
1187
1188 pub const fn overridden(&self) -> bool {
1189 self.inner & StatusFlags::Overridden as u8 == StatusFlags::Overridden as u8
1190 }
1191
1192 pub const fn out_of_service(&self) -> bool {
1193 self.inner & StatusFlags::OutOfService as u8 == StatusFlags::OutOfService as u8
1194 }
1195}
1196
1197#[derive(Debug, Clone, Default)]
1198#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1199#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1200pub struct LogBufferResult {
1201 pub inner: u8,
1202}
1203
1204impl LogBufferResult {
1205 pub fn new(inner: u8) -> Self {
1206 Self { inner }
1207 }
1208
1209 pub const fn first_item(&self) -> bool {
1210 self.inner & LogBufferResultFlags::FirstItem as u8 == LogBufferResultFlags::FirstItem as u8
1211 }
1212
1213 pub const fn last_item(&self) -> bool {
1214 self.inner & LogBufferResultFlags::LastItem as u8 == LogBufferResultFlags::LastItem as u8
1215 }
1216
1217 pub const fn more_items(&self) -> bool {
1218 self.inner & LogBufferResultFlags::MoreItems as u8 == LogBufferResultFlags::MoreItems as u8
1219 }
1220}
1221
1222#[derive(Debug, Clone)]
1223#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1224#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1225pub enum LogStatus {
1226 LogDisabled = 0,
1227 BufferPurged = 1,
1228 LogInterrupted = 2,
1229}
1230
1231#[derive(Debug, Clone)]
1232#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1233#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1234pub enum AcknowledgmentFilter {
1235 All = 0,
1236 Acked = 1,
1237 NotAcked = 2,
1238}
1239
1240#[derive(Debug, Clone)]
1241#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1242#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1243#[repr(u32)]
1244pub enum EventState {
1245 Normal = 0,
1246 Fault = 1,
1247 OffNormal = 2,
1248 HighLimit = 3,
1249 LowLimit = 4,
1250}
1251
1252impl TryFrom<u32> for EventState {
1253 type Error = u32;
1254
1255 fn try_from(value: u32) -> Result<Self, Self::Error> {
1256 match value {
1257 0 => Ok(Self::Normal),
1258 1 => Ok(Self::Fault),
1259 2 => Ok(Self::OffNormal),
1260 3 => Ok(Self::HighLimit),
1261 4 => Ok(Self::LowLimit),
1262 x => Err(x),
1263 }
1264 }
1265}
1266
1267#[derive(Debug, Clone)]
1268#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1269#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1270#[repr(u32)]
1271pub enum NotifyType {
1272 Alarm = 0,
1273 Event = 1,
1274 AckNotification = 2,
1275}
1276
1277impl TryFrom<u32> for NotifyType {
1278 type Error = u32;
1279
1280 fn try_from(value: u32) -> Result<Self, Self::Error> {
1281 match value {
1282 0 => Ok(Self::Alarm),
1283 1 => Ok(Self::Event),
1284 2 => Ok(Self::AckNotification),
1285 x => Err(x),
1286 }
1287 }
1288}
1289
1290#[derive(Debug, Clone)]
1291#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1292#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1293#[repr(u32)]
1294pub enum LoggingType {
1295 Polled = 0,
1296 Cov = 1,
1297 Triggered = 2,
1298}
1299
1300impl TryFrom<u32> for LoggingType {
1301 type Error = u32;
1302
1303 fn try_from(value: u32) -> Result<Self, Self::Error> {
1304 match value {
1305 0 => Ok(Self::Polled),
1306 1 => Ok(Self::Cov),
1307 2 => Ok(Self::Triggered),
1308 x => Err(x),
1309 }
1310 }
1311}
1312
1313#[derive(Debug, Clone)]
1314#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1315#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1316pub enum SelectionLogic {
1317 And = 0,
1318 Or = 1,
1319 All = 2,
1320}
1321
1322#[derive(Debug, Clone)]
1323#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1324#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1325pub enum RelationSpecifier {
1326 Equal = 0,
1327 NotEqual = 1,
1328 LessThan = 2,
1329 GreaterThan = 3,
1330 LessThanOrEqual = 4,
1331 GreaterThanOrEqual = 5,
1332}
1333
1334#[derive(Debug, Clone)]
1335#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1336#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1337pub enum CommunicationEnableDisable {
1338 Enable = 0,
1339 Disable = 1,
1340 DisableInitiation = 2,
1341}
1342
1343#[derive(Debug, Clone)]
1344#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1345#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1346pub enum MessagePriority {
1347 Normal = 0,
1348 Urgent = 1,
1349 CriticalEquipment = 2,
1350 LifeSafety = 3,
1351}
1352
1353