Skip to content

Commit

Permalink
Refactor code to use PDU_NOT_AVAILABLE constant
Browse files Browse the repository at this point in the history
  • Loading branch information
yorickdewid committed Feb 2, 2024
1 parent c12652d commit 62616ae
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 33 deletions.
48 changes: 25 additions & 23 deletions src/decode.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use crate::PDU_NOT_AVAILABLE;

pub fn spn190(value: &[u8; 2]) -> Option<u16> {
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 {
Expand All @@ -8,23 +10,23 @@ pub fn spn190(value: &[u8; 2]) -> Option<u16> {
}

pub fn spn103(value: &[u8; 2]) -> Option<u16> {
if value != &[0xff, 0xff] {
if value != &[PDU_NOT_AVAILABLE, PDU_NOT_AVAILABLE] {
Some(u16::from_le_bytes(*value) * 4)
} else {
None
}
}

pub fn spn110(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value - 40)
} else {
None
}
}

pub fn spn174(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value - 40)
} else {
None
Expand All @@ -33,7 +35,7 @@ pub fn spn174(value: u8) -> Option<u8> {

// TODO: This is possibly wrong.
pub fn spn157(value: &[u8; 2]) -> Option<u16> {
if value != &[0xff, 0xff] {
if value != &[PDU_NOT_AVAILABLE, PDU_NOT_AVAILABLE] {
Some(u16::from_le_bytes(*value))
} else {
None
Expand All @@ -56,7 +58,7 @@ pub enum EngineStarterMode {
}

pub fn spn1675(value: u8) -> Option<EngineStarterMode> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
let mode = match value & 0b1111 {
0b0000 => EngineStarterMode::StartNotRequested,
0b0001 => EngineStarterMode::StarterActiveGearNotEngaged,
Expand All @@ -79,31 +81,31 @@ pub fn spn1675(value: u8) -> Option<EngineStarterMode> {
}

pub fn spn512(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value - 125)
} else {
None
}
}

pub fn spn513(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value - 125)
} else {
None
}
}

pub fn spn514(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value - 125)
} else {
None
}
}

pub fn spn515(value: &[u8; 2]) -> Option<u16> {
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 {
Expand All @@ -112,23 +114,23 @@ pub fn spn515(value: &[u8; 2]) -> Option<u16> {
}

pub fn spn519(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value)
} else {
None
}
}

pub fn spn975(value: u8) -> Option<f32> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value as f32 * 0.4)
} else {
None
}
}

pub fn spn1127(value: &[u8; 2]) -> Option<u16> {
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 {
Expand All @@ -149,7 +151,7 @@ pub fn spn1130(value: &[u8; 2]) -> Option<u16> {
}

pub fn spn1483(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value)
} else {
None
Expand All @@ -174,7 +176,7 @@ pub enum EngineTorqueMode {
}

pub fn spn899(value: u8) -> Option<EngineTorqueMode> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
let mode = match value & 0b1111 {
0b0000 => EngineTorqueMode::NoRequest,
0b0001 => EngineTorqueMode::AcceleratorPedal,
Expand All @@ -199,63 +201,63 @@ pub fn spn899(value: u8) -> Option<EngineTorqueMode> {
}

pub fn spn959(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some((value as f32 * 0.25) as u8)
} else {
None
}
}

pub fn spn960(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value)
} else {
None
}
}

pub fn spn961(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value)
} else {
None
}
}

pub fn spn963(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value)
} else {
None
}
}

pub fn spn962(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some((value as f32 * 0.25) as u8)
} else {
None
}
}

pub fn spn964(value: u8) -> Option<u16> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value as u16 + 1985)
} else {
None
}
}

pub fn spn1601(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value - 125)
} else {
None
}
}

pub fn spn1602(value: u8) -> Option<u8> {
if value != 0xff {
if value != PDU_NOT_AVAILABLE {
Some(value - 125)
} else {
None
Expand Down
15 changes: 10 additions & 5 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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'*';

Expand Down Expand Up @@ -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,
}
}
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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());
}
Expand Down Expand Up @@ -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());
}
Expand Down
10 changes: 5 additions & 5 deletions src/protocol.rs
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -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],
Expand Down

0 comments on commit 62616ae

Please sign in to comment.