From 62616ae1abe5686cbc75ebcd10ee271b49187fd8 Mon Sep 17 00:00:00 2001 From: Yorick de Wid Date: Fri, 2 Feb 2024 19:40:23 +0100 Subject: [PATCH] Refactor code to use PDU_NOT_AVAILABLE constant --- src/decode.rs | 48 +++++++++++++++++++++++++----------------------- src/lib.rs | 15 ++++++++++----- src/protocol.rs | 10 +++++----- 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 5c36457..ba23700 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1,5 +1,7 @@ +use crate::PDU_NOT_AVAILABLE; + pub fn spn190(value: &[u8; 2]) -> Option { - if value != &[0xff, 0xff] { + if value != &[PDU_NOT_AVAILABLE, PDU_NOT_AVAILABLE] { let rpm = (u16::from_le_bytes(*value) as f32 * 0.125) as u16; Some(rpm) } else { @@ -8,7 +10,7 @@ pub fn spn190(value: &[u8; 2]) -> Option { } pub fn spn103(value: &[u8; 2]) -> Option { - if value != &[0xff, 0xff] { + if value != &[PDU_NOT_AVAILABLE, PDU_NOT_AVAILABLE] { Some(u16::from_le_bytes(*value) * 4) } else { None @@ -16,7 +18,7 @@ pub fn spn103(value: &[u8; 2]) -> Option { } pub fn spn110(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value - 40) } else { None @@ -24,7 +26,7 @@ pub fn spn110(value: u8) -> Option { } pub fn spn174(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value - 40) } else { None @@ -33,7 +35,7 @@ pub fn spn174(value: u8) -> Option { // TODO: This is possibly wrong. pub fn spn157(value: &[u8; 2]) -> Option { - if value != &[0xff, 0xff] { + if value != &[PDU_NOT_AVAILABLE, PDU_NOT_AVAILABLE] { Some(u16::from_le_bytes(*value)) } else { None @@ -56,7 +58,7 @@ pub enum EngineStarterMode { } pub fn spn1675(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { let mode = match value & 0b1111 { 0b0000 => EngineStarterMode::StartNotRequested, 0b0001 => EngineStarterMode::StarterActiveGearNotEngaged, @@ -79,7 +81,7 @@ pub fn spn1675(value: u8) -> Option { } pub fn spn512(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value - 125) } else { None @@ -87,7 +89,7 @@ pub fn spn512(value: u8) -> Option { } pub fn spn513(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value - 125) } else { None @@ -95,7 +97,7 @@ pub fn spn513(value: u8) -> Option { } pub fn spn514(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value - 125) } else { None @@ -103,7 +105,7 @@ pub fn spn514(value: u8) -> Option { } pub fn spn515(value: &[u8; 2]) -> Option { - if value != &[0xff, 0xff] { + if value != &[PDU_NOT_AVAILABLE, PDU_NOT_AVAILABLE] { let speed = (u16::from_le_bytes(*value) as f32 * 0.125) as u16; Some(speed) } else { @@ -112,7 +114,7 @@ pub fn spn515(value: &[u8; 2]) -> Option { } pub fn spn519(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value) } else { None @@ -120,7 +122,7 @@ pub fn spn519(value: u8) -> Option { } pub fn spn975(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value as f32 * 0.4) } else { None @@ -128,7 +130,7 @@ pub fn spn975(value: u8) -> Option { } pub fn spn1127(value: &[u8; 2]) -> Option { - if value != &[0xff, 0xff] { + if value != &[PDU_NOT_AVAILABLE, PDU_NOT_AVAILABLE] { let pressure = (u16::from_le_bytes(*value) as f32 * 0.125) as u16; Some(pressure) } else { @@ -149,7 +151,7 @@ pub fn spn1130(value: &[u8; 2]) -> Option { } pub fn spn1483(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value) } else { None @@ -174,7 +176,7 @@ pub enum EngineTorqueMode { } pub fn spn899(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { let mode = match value & 0b1111 { 0b0000 => EngineTorqueMode::NoRequest, 0b0001 => EngineTorqueMode::AcceleratorPedal, @@ -199,7 +201,7 @@ pub fn spn899(value: u8) -> Option { } pub fn spn959(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some((value as f32 * 0.25) as u8) } else { None @@ -207,7 +209,7 @@ pub fn spn959(value: u8) -> Option { } pub fn spn960(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value) } else { None @@ -215,7 +217,7 @@ pub fn spn960(value: u8) -> Option { } pub fn spn961(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value) } else { None @@ -223,7 +225,7 @@ pub fn spn961(value: u8) -> Option { } pub fn spn963(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value) } else { None @@ -231,7 +233,7 @@ pub fn spn963(value: u8) -> Option { } pub fn spn962(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some((value as f32 * 0.25) as u8) } else { None @@ -239,7 +241,7 @@ pub fn spn962(value: u8) -> Option { } pub fn spn964(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value as u16 + 1985) } else { None @@ -247,7 +249,7 @@ pub fn spn964(value: u8) -> Option { } pub fn spn1601(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value - 125) } else { None @@ -255,7 +257,7 @@ pub fn spn1601(value: u8) -> Option { } pub fn spn1602(value: u8) -> Option { - if value != 0xff { + if value != PDU_NOT_AVAILABLE { Some(value - 125) } else { None diff --git a/src/lib.rs b/src/lib.rs index cab82ac..ff000c4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,6 +22,11 @@ pub const PGN_MAX_LENGTH: usize = 3; /// Maximum number of bytes in a PDU. pub const PDU_MAX_LENGTH: usize = 8; +/// PDU error byte. +pub const PDU_ERROR: u8 = 0xfe; +/// PDU not available byte. +pub const PDU_NOT_AVAILABLE: u8 = 0xff; + /// ASCII delimiter for variable length fields. pub const FIELD_DELIMITER: u8 = b'*'; @@ -278,7 +283,7 @@ impl Default for FrameBuilder { fn default() -> Self { Self { id: Id::new(0), - pdu: [0xff; PDU_MAX_LENGTH], + pdu: [PDU_NOT_AVAILABLE; PDU_MAX_LENGTH], pdu_length: 0, } } @@ -332,7 +337,7 @@ impl AsMut<[u8]> for FrameBuilder { #[cfg(test)] mod tests { - use crate::{FrameBuilder, Id, IdBuilder, PDUFormat, PDU_MAX_LENGTH, PGN}; + use crate::{FrameBuilder, Id, IdBuilder, PDUFormat, PDU_MAX_LENGTH, PDU_NOT_AVAILABLE, PGN}; #[test] fn id_decode_1() { @@ -452,11 +457,11 @@ mod tests { .sa(0x10) .build(), ) - .copy_from_slice(&[0xff; PDU_MAX_LENGTH]) + .copy_from_slice(&[PDU_NOT_AVAILABLE; PDU_MAX_LENGTH]) .build(); assert_eq!(frame.id(), &Id::new(0xCEE0010)); - assert_eq!(frame.pdu(), &[0xff; PDU_MAX_LENGTH]); + assert_eq!(frame.pdu(), &[PDU_NOT_AVAILABLE; PDU_MAX_LENGTH]); assert_eq!(frame.len(), PDU_MAX_LENGTH); assert!(!frame.is_empty()); } @@ -497,7 +502,7 @@ mod tests { .set_len(8) .build(); - assert_eq!(frame.pdu(), &[0xff; PDU_MAX_LENGTH]); + assert_eq!(frame.pdu(), &[PDU_NOT_AVAILABLE; PDU_MAX_LENGTH]); assert_eq!(frame.len(), PDU_MAX_LENGTH); assert!(!frame.is_empty()); } diff --git a/src/protocol.rs b/src/protocol.rs index 6fb5519..e89c881 100644 --- a/src/protocol.rs +++ b/src/protocol.rs @@ -1,4 +1,4 @@ -use crate::{Frame, FrameBuilder, IdBuilder, Name, PGN}; +use crate::{Frame, FrameBuilder, IdBuilder, Name, PDU_NOT_AVAILABLE, PGN}; /// Create PGN request frame. pub fn request(da: u8, pgn: PGN) -> Frame { @@ -35,10 +35,10 @@ pub fn acknowledgement(sa: u8, pgn: PGN) -> Frame { FrameBuilder::new(id) .copy_from_slice(&[ 0x01, - 0xff, - 0xff, - 0xff, - 0xff, + PDU_NOT_AVAILABLE, + PDU_NOT_AVAILABLE, + PDU_NOT_AVAILABLE, + PDU_NOT_AVAILABLE, pgn_bytes[0], pgn_bytes[1], pgn_bytes[2],