1use crate::common::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 EngineeringUnits {
876 pub fn as_str(&self) -> &'static str {
879 match self {
880 Self::MetersPerSecondPerSecond => "m/s²",
881 Self::SquareMeters => "m²",
882 Self::SquareCentimeters => "cm²",
883 Self::SquareFeet => "ft²",
884 Self::SquareInches => "in²",
885 Self::Currency1 => "$",
886 Self::Milliamperes => "mA",
887 Self::Amperes => "A",
888 Self::AmperesPerMeter => "A/m",
889 Self::AmperesPerSquareMeter => "A/m²",
890 Self::AmpereSquareMeters => "Am²",
891 Self::Farads => "F",
892 Self::Henrys => "H",
893 Self::Ohms => "Ω",
894 Self::OhmMeters => "Ωm",
895 Self::Milliohms => "mΩ",
896 Self::Kilohms => "kΩ",
897 Self::Megohms => "MΩ",
898 Self::Siemens => "S",
899 Self::SiemensPerMeter => "S/m",
900 Self::Teslas => "T",
901 Self::Volts => "V",
902 Self::Millivolts => "mV",
903 Self::Kilovolts => "kV",
904 Self::Megavolts => "MV",
905 Self::VoltAmperes => "VA",
906 Self::KilovoltAmperes => "kVA",
907 Self::MegavoltAmperes => "MVA",
908 Self::VoltAmperesReactive => "var",
909 Self::KilovoltAmperesReactive => "kvar",
910 Self::MegavoltAmperesReactive => "Mvar",
911 Self::DegreesPhase => "°P",
912 Self::PowerFactor => "pf",
913 Self::Webers => "Wb",
914 Self::Joules => "J",
915 Self::Kilojoules => "kJ",
916 Self::KilojoulesPerKilogram => "kJ/kg",
917 Self::Megajoules => "MJ",
918 Self::WattHours => "Wh",
919 Self::KilowattHours => "kWh",
920 Self::MegawattHours => "MWh",
921 Self::Btus => "btu",
922 Self::KiloBtus => "kbtu",
923 Self::MegaBtus => "Mbtu",
924 Self::Therms => "thrm",
925 Self::TonHours => "th",
926 Self::JoulesPerKilogramDryAir => "J/kg",
927 Self::KilojoulesPerKilogramDryAir => "kJ/kg",
928 Self::MegajoulesPerKilogramDryAir => "MJ/kg",
929 Self::BtusPerPoundDryAir => "b/lb",
930 Self::BtusPerPound => "b/lb",
931 Self::JoulesPerDegreeKelvin => "J/K",
932 Self::KilojoulesPerDegreeKelvin => "kJ/K",
933 Self::MegajoulesPerDegreeKelvin => "MJ/K",
934 Self::Newton => "N",
935 Self::CyclesPerHour => "c/h",
936 Self::CyclesPerMinute => "c/m",
937 Self::Hertz => "Hz",
938 Self::Kilohertz => "kHz",
939 Self::Megahertz => "MHz",
940 Self::PerHour => "h⁻¹",
941 Self::GramsOfWaterPerKilogramDryAir => "g/kg",
942 Self::PercentRelativeHumidity => "%rh",
943 Self::Milliliters => "mm",
944 Self::Centimeters => "cm",
945 Self::Meters => "m",
946 Self::Inches => "inch",
947 Self::Feet => "feet",
948 Self::Candelas => "cd",
949 Self::CandelasPerSquareMeter => "cd/m²",
950 Self::WattsPerSquareFoot => "W/f²",
951 Self::WattsPerSquareMeter => "W/m²",
952 Self::Lumens => "lum",
953 Self::Luxes => "lux",
954 Self::FootCandles => "ftcd",
955 Self::Kilograms => "kg",
956 Self::PoundsMass => "lb",
957 Self::Tons => "t",
958 Self::GramsPerSecond => "g/s",
959 Self::GramsPerMinute => "g/m",
960 Self::KilogramsPerSecond => "kg/s",
961 Self::KilogramsPerMinute => "kg/m",
962 Self::KilogramsPerHour => "kg/h",
963 Self::PoundsMassPerSecond => "lb/s",
964 Self::PoundsMassPerMinute => "lb/m",
965 Self::PoundsMassPerHour => "lb/h",
966 Self::TonsPerHour => "t/h",
967 Self::Milliwatts => "mW",
968 Self::Watts => "W",
969 Self::Kilowatts => "kW",
970 Self::Megawatts => "MW",
971 Self::BtusPerHour => "bt/h",
972 Self::Horsepower => "hp",
973 Self::TonsRefrigeration => "tr",
974 Self::Pascals => "Pa",
975 Self::Hectopascals => "hPa",
976 Self::Kilopascals => "kPa",
977 Self::Millibars => "mBar",
978 Self::Bars => "Bar",
979 Self::PoundsForcePerSquareInch => "psi",
980 Self::CentimetersOfWater => "cmw",
981 Self::InchesOfWater => "inwc",
982 Self::MillimetersOfMercury => "mmHg",
983 Self::CentimetersOfMercury => "cmHg",
984 Self::InchesOfMercury => "inHg",
985 Self::DegreesCelsius => "°C",
986 Self::DegreesKelvin => "K",
987 Self::DegreesKelvinPerHour => "K/h",
988 Self::DegreesKelvinPerMinute => "K/m",
989 Self::DegreesFahrenheit => "°F",
990 Self::DegreeDaysCelsius => "°dyC",
991 Self::DegreeDaysFahrenheit => "°dyF",
992 Self::DeltaDegreesFahrenheit => "Δ°F",
993 Self::Years => "year",
994 Self::Months => "mnth",
995 Self::Weeks => "week",
996 Self::Days => "day",
997 Self::Hours => "hour",
998 Self::Minutes => "min",
999 Self::Seconds => "sec",
1000 Self::HundredthsSeconds => "s⁻²",
1001 Self::Milliseconds => "ms",
1002 Self::NewtonMeters => "Nm",
1003 Self::MillimetersPerSecond => "mm/s",
1004 Self::MillimetersPerMinute => "mm/m",
1005 Self::MetersPerSecond => "m/s",
1006 Self::MetersPerMinute => "m/m",
1007 Self::MetersPerHour => "m/h",
1008 Self::KilometersPerHour => "km/h",
1009 Self::FeetPerSecond => "ft/s",
1010 Self::FeetPerMinute => "fpm",
1011 Self::MilesPerHour => "mph",
1012 Self::CubicFeet => "ft³",
1013 Self::CubicMeters => "m³",
1014 Self::ImperialGallons => "gall",
1015 Self::Liters => "l",
1016 Self::UsGallons => "USg",
1017 Self::CubicFeetPerSecond => "cfs",
1018 Self::CubicFeetPerMinute => "cfm",
1019 Self::CubicFeetPerHour => "cfh",
1020 Self::CubicMetersPerSecond => "m³/s",
1021 Self::CubicMetersPerMinute => "m³/m",
1022 Self::CubicMetersPerHour => "m³/h",
1023 Self::ImperialGallonsPerMinute => "igpm",
1024 Self::LitersPerSecond => "l/s",
1025 Self::LitersPerMinute => "l/m",
1026 Self::LitersPerHour => "l/h",
1027 Self::UsGallonsPerMinute => "gpm",
1028 Self::DegreesAngular => "deg",
1029 Self::DegreesCelsiusPerHour => "°C/h",
1030 Self::DegreesCelsiusPerMinute => "°C/m",
1031 Self::DegreesFahrenheitPerHour => "°F/h",
1032 Self::DegreesFahrenheitPerMinute => "°F/m",
1033 Self::JouleSeconds => "Js",
1034 Self::KilogramsPerCubicMeter => "kg/m³",
1035 Self::KwHoursPerSquareMeter => "kWhm",
1036 Self::KwHoursPerSquareFoot => "kWhf",
1037 Self::NoUnits => "",
1038 Self::NewtonSeconds => "Ns",
1039 Self::NewtonsPerMeter => "N/m",
1040 Self::PartsPerMillion => "ppm",
1041 Self::PartsPerBillion => "ppb",
1042 Self::Percent => "%",
1043 Self::PercentObscurationPerFoot => "%/ft",
1044 Self::PercentObscurationPerMeter => "%/m",
1045 Self::PercentPerSecond => "%/s",
1046 Self::PerMinute => "pm",
1047 Self::PerSecond => "ps",
1048 Self::PsiPerDegreeFahrenheit => "psiF",
1049 Self::Radians => "rad",
1050 Self::RadiansPerSecond => "rd/s",
1051 Self::RevolutionsPerMinute => "rpm",
1052 Self::SquareMetersPerNewton => "m²/N",
1053 Self::WattsPerMeterPerDegreeKelvin => "WmK",
1054 Self::WattsPerSquareMeterDegreeKelvin => "Wm²K",
1055 _x => {
1056 ""
1058 }
1059 }
1060 }
1061}
1062
1063impl TryFrom<u32> for EngineeringUnits {
1064 type Error = u32;
1065
1066 fn try_from(value: u32) -> Result<Self, Self::Error> {
1067 match value {
1068 166 => Ok(Self::MetersPerSecondPerSecond),
1069 0 => Ok(Self::SquareMeters),
1070 116 => Ok(Self::SquareCentimeters),
1071 1 => Ok(Self::SquareFeet),
1072 115 => Ok(Self::SquareInches),
1073 105 => Ok(Self::Currency1),
1074 106 => Ok(Self::Currency2),
1075 107 => Ok(Self::Currency3),
1076 108 => Ok(Self::Currency4),
1077 109 => Ok(Self::Currency5),
1078 110 => Ok(Self::Currency6),
1079 111 => Ok(Self::Currency7),
1080 112 => Ok(Self::Currency8),
1081 113 => Ok(Self::Currency9),
1082 114 => Ok(Self::Currency10),
1083 2 => Ok(Self::Milliamperes),
1084 3 => Ok(Self::Amperes),
1085 167 => Ok(Self::AmperesPerMeter),
1086 168 => Ok(Self::AmperesPerSquareMeter),
1087 169 => Ok(Self::AmpereSquareMeters),
1088 199 => Ok(Self::Decibels),
1089 200 => Ok(Self::DecibelsMillivolt),
1090 201 => Ok(Self::DecibelsVolt),
1091 170 => Ok(Self::Farads),
1092 171 => Ok(Self::Henrys),
1093 4 => Ok(Self::Ohms),
1094 172 => Ok(Self::OhmMeters),
1095 145 => Ok(Self::Milliohms),
1096 122 => Ok(Self::Kilohms),
1097 123 => Ok(Self::Megohms),
1098 190 => Ok(Self::Microsiemens),
1099 202 => Ok(Self::Millisiemens),
1100 173 => Ok(Self::Siemens),
1101 174 => Ok(Self::SiemensPerMeter),
1102 175 => Ok(Self::Teslas),
1103 5 => Ok(Self::Volts),
1104 124 => Ok(Self::Millivolts),
1105 6 => Ok(Self::Kilovolts),
1106 7 => Ok(Self::Megavolts),
1107 8 => Ok(Self::VoltAmperes),
1108 9 => Ok(Self::KilovoltAmperes),
1109 10 => Ok(Self::MegavoltAmperes),
1110 11 => Ok(Self::VoltAmperesReactive),
1111 12 => Ok(Self::KilovoltAmperesReactive),
1112 13 => Ok(Self::MegavoltAmperesReactive),
1113 176 => Ok(Self::VoltsPerDegreeKelvin),
1114 177 => Ok(Self::VoltsPerMeter),
1115 14 => Ok(Self::DegreesPhase),
1116 15 => Ok(Self::PowerFactor),
1117 178 => Ok(Self::Webers),
1118 16 => Ok(Self::Joules),
1119 17 => Ok(Self::Kilojoules),
1120 125 => Ok(Self::KilojoulesPerKilogram),
1121 126 => Ok(Self::Megajoules),
1122 18 => Ok(Self::WattHours),
1123 19 => Ok(Self::KilowattHours),
1124 146 => Ok(Self::MegawattHours),
1125 203 => Ok(Self::WattHoursReactive),
1126 204 => Ok(Self::KilowattHoursReactive),
1127 205 => Ok(Self::MegawattHoursReactive),
1128 20 => Ok(Self::Btus),
1129 147 => Ok(Self::KiloBtus),
1130 148 => Ok(Self::MegaBtus),
1131 21 => Ok(Self::Therms),
1132 22 => Ok(Self::TonHours),
1133 23 => Ok(Self::JoulesPerKilogramDryAir),
1134 149 => Ok(Self::KilojoulesPerKilogramDryAir),
1135 150 => Ok(Self::MegajoulesPerKilogramDryAir),
1136 24 => Ok(Self::BtusPerPoundDryAir),
1137 117 => Ok(Self::BtusPerPound),
1138 127 => Ok(Self::JoulesPerDegreeKelvin),
1139 151 => Ok(Self::KilojoulesPerDegreeKelvin),
1140 152 => Ok(Self::MegajoulesPerDegreeKelvin),
1141 128 => Ok(Self::JoulesPerKilogramDegreeKelvin),
1142 153 => Ok(Self::Newton),
1143 25 => Ok(Self::CyclesPerHour),
1144 26 => Ok(Self::CyclesPerMinute),
1145 27 => Ok(Self::Hertz),
1146 129 => Ok(Self::Kilohertz),
1147 130 => Ok(Self::Megahertz),
1148 131 => Ok(Self::PerHour),
1149 28 => Ok(Self::GramsOfWaterPerKilogramDryAir),
1150 29 => Ok(Self::PercentRelativeHumidity),
1151 194 => Ok(Self::Micrometers),
1152 30 => Ok(Self::Millimeters),
1153 118 => Ok(Self::Centimeters),
1154 193 => Ok(Self::Kilometers),
1155 31 => Ok(Self::Meters),
1156 32 => Ok(Self::Inches),
1157 33 => Ok(Self::Feet),
1158 179 => Ok(Self::Candelas),
1159 180 => Ok(Self::CandelasPerSquareMeter),
1160 34 => Ok(Self::WattsPerSquareFoot),
1161 35 => Ok(Self::WattsPerSquareMeter),
1162 36 => Ok(Self::Lumens),
1163 37 => Ok(Self::Luxes),
1164 38 => Ok(Self::FootCandles),
1165 196 => Ok(Self::Milligrams),
1166 195 => Ok(Self::Grams),
1167 39 => Ok(Self::Kilograms),
1168 40 => Ok(Self::PoundsMass),
1169 41 => Ok(Self::Tons),
1170 154 => Ok(Self::GramsPerSecond),
1171 155 => Ok(Self::GramsPerMinute),
1172 42 => Ok(Self::KilogramsPerSecond),
1173 43 => Ok(Self::KilogramsPerMinute),
1174 44 => Ok(Self::KilogramsPerHour),
1175 119 => Ok(Self::PoundsMassPerSecond),
1176 45 => Ok(Self::PoundsMassPerMinute),
1177 46 => Ok(Self::PoundsMassPerHour),
1178 156 => Ok(Self::TonsPerHour),
1179 132 => Ok(Self::Milliwatts),
1180 47 => Ok(Self::Watts),
1181 48 => Ok(Self::Kilowatts),
1182 49 => Ok(Self::Megawatts),
1183 50 => Ok(Self::BtusPerHour),
1184 157 => Ok(Self::KiloBtusPerHour),
1185 51 => Ok(Self::Horsepower),
1186 52 => Ok(Self::TonsRefrigeration),
1187 53 => Ok(Self::Pascals),
1188 133 => Ok(Self::Hectopascals),
1189 54 => Ok(Self::Kilopascals),
1190 134 => Ok(Self::Millibars),
1191 55 => Ok(Self::Bars),
1192 56 => Ok(Self::PoundsForcePerSquareInch),
1193 206 => Ok(Self::MillimetersOfWater),
1194 57 => Ok(Self::CentimetersOfWater),
1195 58 => Ok(Self::InchesOfWater),
1196 59 => Ok(Self::MillimetersOfMercury),
1197 60 => Ok(Self::CentimetersOfMercury),
1198 61 => Ok(Self::InchesOfMercury),
1199 62 => Ok(Self::DegreesCelsius),
1200 63 => Ok(Self::DegreesKelvin),
1201 181 => Ok(Self::DegreesKelvinPerHour),
1202 182 => Ok(Self::DegreesKelvinPerMinute),
1203 64 => Ok(Self::DegreesFahrenheit),
1204 65 => Ok(Self::DegreeDaysCelsius),
1205 66 => Ok(Self::DegreeDaysFahrenheit),
1206 120 => Ok(Self::DeltaDegreesFahrenheit),
1207 121 => Ok(Self::DeltaDegreesKelvin),
1208 67 => Ok(Self::Years),
1209 68 => Ok(Self::Months),
1210 69 => Ok(Self::Weeks),
1211 70 => Ok(Self::Days),
1212 71 => Ok(Self::Hours),
1213 72 => Ok(Self::Minutes),
1214 73 => Ok(Self::Seconds),
1215 158 => Ok(Self::HundredthsSeconds),
1216 159 => Ok(Self::Milliseconds),
1217 160 => Ok(Self::NewtonMeters),
1218 161 => Ok(Self::MillimetersPerSecond),
1219 162 => Ok(Self::MillimetersPerMinute),
1220 74 => Ok(Self::MetersPerSecond),
1221 163 => Ok(Self::MetersPerMinute),
1222 164 => Ok(Self::MetersPerHour),
1223 75 => Ok(Self::KilometersPerHour),
1224 76 => Ok(Self::FeetPerSecond),
1225 77 => Ok(Self::FeetPerMinute),
1226 78 => Ok(Self::MilesPerHour),
1227 79 => Ok(Self::CubicFeet),
1228 80 => Ok(Self::CubicMeters),
1229 81 => Ok(Self::ImperialGallons),
1230 197 => Ok(Self::Milliliters),
1231 82 => Ok(Self::Liters),
1232 83 => Ok(Self::UsGallons),
1233 142 => Ok(Self::CubicFeetPerSecond),
1234 84 => Ok(Self::CubicFeetPerMinute),
1235 191 => Ok(Self::CubicFeetPerHour),
1236 85 => Ok(Self::CubicMetersPerSecond),
1237 165 => Ok(Self::CubicMetersPerMinute),
1238 135 => Ok(Self::CubicMetersPerHour),
1239 86 => Ok(Self::ImperialGallonsPerMinute),
1240 198 => Ok(Self::MillilitersPerSecond),
1241 87 => Ok(Self::LitersPerSecond),
1242 88 => Ok(Self::LitersPerMinute),
1243 136 => Ok(Self::LitersPerHour),
1244 89 => Ok(Self::UsGallonsPerMinute),
1245 192 => Ok(Self::UsGallonsPerHour),
1246 90 => Ok(Self::DegreesAngular),
1247 91 => Ok(Self::DegreesCelsiusPerHour),
1248 92 => Ok(Self::DegreesCelsiusPerMinute),
1249 93 => Ok(Self::DegreesFahrenheitPerHour),
1250 94 => Ok(Self::DegreesFahrenheitPerMinute),
1251 183 => Ok(Self::JouleSeconds),
1252 186 => Ok(Self::KilogramsPerCubicMeter),
1253 137 => Ok(Self::KwHoursPerSquareMeter),
1254 138 => Ok(Self::KwHoursPerSquareFoot),
1255 139 => Ok(Self::MegajoulesPerSquareMeter),
1256 140 => Ok(Self::MegajoulesPerSquareFoot),
1257 95 => Ok(Self::NoUnits),
1258 187 => Ok(Self::NewtonSeconds),
1259 188 => Ok(Self::NewtonsPerMeter),
1260 96 => Ok(Self::PartsPerMillion),
1261 97 => Ok(Self::PartsPerBillion),
1262 98 => Ok(Self::Percent),
1263 143 => Ok(Self::PercentObscurationPerFoot),
1264 144 => Ok(Self::PercentObscurationPerMeter),
1265 99 => Ok(Self::PercentPerSecond),
1266 100 => Ok(Self::PerMinute),
1267 101 => Ok(Self::PerSecond),
1268 102 => Ok(Self::PsiPerDegreeFahrenheit),
1269 103 => Ok(Self::Radians),
1270 184 => Ok(Self::RadiansPerSecond),
1271 104 => Ok(Self::RevolutionsPerMinute),
1272 185 => Ok(Self::SquareMetersPerNewton),
1273 189 => Ok(Self::WattsPerMeterPerDegreeKelvin),
1274 141 => Ok(Self::WattsPerSquareMeterDegreeKelvin),
1275 207 => Ok(Self::PerMille),
1276 208 => Ok(Self::GramsPerGram),
1277 209 => Ok(Self::KilogramsPerKilogram),
1278 210 => Ok(Self::GramsPerKilogram),
1279 211 => Ok(Self::MilligramsPerGram),
1280 212 => Ok(Self::MilligramsPerKilogram),
1281 213 => Ok(Self::GramsPerMilliliter),
1282 214 => Ok(Self::GramsPerLiter),
1283 215 => Ok(Self::MilligramsPerLiter),
1284 216 => Ok(Self::MicrogramsPerLiter),
1285 217 => Ok(Self::GramsPerCubicMeter),
1286 218 => Ok(Self::MilligramsPerCubicMeter),
1287 219 => Ok(Self::MicrogramsPerCubicMeter),
1288 220 => Ok(Self::NanogramsPerCubicMeter),
1289 221 => Ok(Self::GramsPerCubicCentimeter),
1290 222 => Ok(Self::Becquerels),
1291 223 => Ok(Self::Kilobecquerels),
1292 224 => Ok(Self::Megabecquerels),
1293 225 => Ok(Self::Gray),
1294 226 => Ok(Self::Milligray),
1295 227 => Ok(Self::Microgray),
1296 228 => Ok(Self::Sieverts),
1297 229 => Ok(Self::Millisieverts),
1298 230 => Ok(Self::Microsieverts),
1299 231 => Ok(Self::MicrosievertsPerHour),
1300 232 => Ok(Self::DecibelsA),
1301 233 => Ok(Self::NephelometricTurbidityUnit),
1302 234 => Ok(Self::Ph),
1303 235 => Ok(Self::GramsPerSquareMeter),
1304 236 => Ok(Self::MinutesPerDegreeKelvin),
1305 237 => Ok(Self::OhmMeterSquaredPerMeter),
1306 238 => Ok(Self::AmpereSeconds),
1307 239 => Ok(Self::VoltAmpereHours),
1308 240 => Ok(Self::KilovoltAmpereHours),
1309 241 => Ok(Self::MegavoltAmpereHours),
1310 242 => Ok(Self::VoltAmpereHoursReactive),
1311 243 => Ok(Self::KilovoltAmpereHoursReactive),
1312 244 => Ok(Self::MegavoltAmpereHoursReactive),
1313 245 => Ok(Self::VoltSquareHours),
1314 246 => Ok(Self::AmpereSquareHours),
1315 247 => Ok(Self::JoulePerHours),
1316 248 => Ok(Self::CubicFeetPerDay),
1317 249 => Ok(Self::CubicMetersPerDay),
1318 250 => Ok(Self::WattHoursPerCubicMeter),
1319 251 => Ok(Self::JoulesPerCubicMeter),
1320 252 => Ok(Self::MolePercent),
1321 253 => Ok(Self::PascalSeconds),
1322 254 => Ok(Self::MillionStandardCubicFeetPerMinute),
1323 255 => Ok(Self::ReservedRangeMax),
1324 256 => Ok(Self::ProprietaryRangeMin),
1325 47807 => Ok(Self::ProprietaryRangeMax),
1326 47808 => Ok(Self::StandardCubicFeetPerDay),
1327 47809 => Ok(Self::MillionStandardCubicFeetPerDay),
1328 47810 => Ok(Self::ThousandCubicFeetPerDay),
1329 47811 => Ok(Self::ThousandStandardCubicFeetPerDay),
1330 47812 => Ok(Self::PoundsMassPerDay),
1331 47814 => Ok(Self::Millirems),
1332 47815 => Ok(Self::MilliremsPerHour),
1333 49999 => Ok(Self::ReservedRangeMax2),
1334 50000 => Ok(Self::ProprietaryRangeMin2),
1335 65535 => Ok(Self::ProprietaryRangeMax2),
1336 _ => Err(value),
1337 }
1338 }
1339}
1340
1341#[repr(u8)]
1342pub enum LogBufferResultFlags {
1343 FirstItem = 0b1000_0000,
1344 LastItem = 0b0100_0000,
1345 MoreItems = 0b0010_0000,
1346}
1347
1348#[repr(u8)]
1349pub enum StatusFlags {
1350 InAlarm = 0b1000_0000,
1351 Fault = 0b0100_0000,
1352 Overridden = 0b0010_0000,
1353 OutOfService = 0b0001_0000,
1354}
1355
1356#[derive(Debug, Clone, Default)]
1357#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1358#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1359pub struct Status {
1360 pub inner: u8,
1361}
1362
1363impl Status {
1364 pub fn new(inner: u8) -> Self {
1365 Self { inner }
1366 }
1367
1368 pub const fn in_alarm(&self) -> bool {
1369 self.inner & StatusFlags::InAlarm as u8 == StatusFlags::InAlarm as u8
1370 }
1371
1372 pub const fn fault(&self) -> bool {
1373 self.inner & StatusFlags::Fault as u8 == StatusFlags::Fault as u8
1374 }
1375
1376 pub const fn overridden(&self) -> bool {
1377 self.inner & StatusFlags::Overridden as u8 == StatusFlags::Overridden as u8
1378 }
1379
1380 pub const fn out_of_service(&self) -> bool {
1381 self.inner & StatusFlags::OutOfService as u8 == StatusFlags::OutOfService as u8
1382 }
1383}
1384
1385#[derive(Debug, Clone, Default)]
1386#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1387#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1388pub struct LogBufferResult {
1389 pub inner: u8,
1390}
1391
1392impl LogBufferResult {
1393 pub fn new(inner: u8) -> Self {
1394 Self { inner }
1395 }
1396
1397 pub const fn first_item(&self) -> bool {
1398 self.inner & LogBufferResultFlags::FirstItem as u8 == LogBufferResultFlags::FirstItem as u8
1399 }
1400
1401 pub const fn last_item(&self) -> bool {
1402 self.inner & LogBufferResultFlags::LastItem as u8 == LogBufferResultFlags::LastItem as u8
1403 }
1404
1405 pub const fn more_items(&self) -> bool {
1406 self.inner & LogBufferResultFlags::MoreItems as u8 == LogBufferResultFlags::MoreItems as u8
1407 }
1408}
1409
1410#[derive(Debug, Clone)]
1411#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1412#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1413pub enum LogStatus {
1414 LogDisabled = 0,
1415 BufferPurged = 1,
1416 LogInterrupted = 2,
1417}
1418
1419#[derive(Debug, Clone)]
1420#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1421#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1422pub enum AcknowledgmentFilter {
1423 All = 0,
1424 Acked = 1,
1425 NotAcked = 2,
1426}
1427
1428#[derive(Debug, Clone)]
1429#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1430#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1431#[repr(u32)]
1432pub enum EventState {
1433 Normal = 0,
1434 Fault = 1,
1435 OffNormal = 2,
1436 HighLimit = 3,
1437 LowLimit = 4,
1438}
1439
1440impl TryFrom<u32> for EventState {
1441 type Error = u32;
1442
1443 fn try_from(value: u32) -> Result<Self, Self::Error> {
1444 match value {
1445 0 => Ok(Self::Normal),
1446 1 => Ok(Self::Fault),
1447 2 => Ok(Self::OffNormal),
1448 3 => Ok(Self::HighLimit),
1449 4 => Ok(Self::LowLimit),
1450 x => Err(x),
1451 }
1452 }
1453}
1454
1455#[derive(Debug, Clone)]
1456#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1457#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1458#[repr(u32)]
1459pub enum NotifyType {
1460 Alarm = 0,
1461 Event = 1,
1462 AckNotification = 2,
1463}
1464
1465impl TryFrom<u32> for NotifyType {
1466 type Error = u32;
1467
1468 fn try_from(value: u32) -> Result<Self, Self::Error> {
1469 match value {
1470 0 => Ok(Self::Alarm),
1471 1 => Ok(Self::Event),
1472 2 => Ok(Self::AckNotification),
1473 x => Err(x),
1474 }
1475 }
1476}
1477
1478#[derive(Debug, Clone)]
1479#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1480#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1481#[repr(u32)]
1482pub enum LoggingType {
1483 Polled = 0,
1484 Cov = 1,
1485 Triggered = 2,
1486}
1487
1488impl TryFrom<u32> for LoggingType {
1489 type Error = u32;
1490
1491 fn try_from(value: u32) -> Result<Self, Self::Error> {
1492 match value {
1493 0 => Ok(Self::Polled),
1494 1 => Ok(Self::Cov),
1495 2 => Ok(Self::Triggered),
1496 x => Err(x),
1497 }
1498 }
1499}
1500
1501#[derive(Debug, Clone)]
1502#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1503#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1504pub enum SelectionLogic {
1505 And = 0,
1506 Or = 1,
1507 All = 2,
1508}
1509
1510#[derive(Debug, Clone)]
1511#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1512#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1513pub enum RelationSpecifier {
1514 Equal = 0,
1515 NotEqual = 1,
1516 LessThan = 2,
1517 GreaterThan = 3,
1518 LessThanOrEqual = 4,
1519 GreaterThanOrEqual = 5,
1520}
1521
1522#[derive(Debug, Clone)]
1523#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1524#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1525pub enum CommunicationEnableDisable {
1526 Enable = 0,
1527 Disable = 1,
1528 DisableInitiation = 2,
1529}
1530
1531#[derive(Debug, Clone)]
1532#[cfg_attr(feature = "defmt", derive(defmt::Format))]
1533#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1534pub enum MessagePriority {
1535 Normal = 0,
1536 Urgent = 1,
1537 CriticalEquipment = 2,
1538 LifeSafety = 3,
1539}
1540
1541