Skip to content

Commit

Permalink
Add TorqueSpeedControlMessage struct and its methods
Browse files Browse the repository at this point in the history
  • Loading branch information
yorickdewid committed Feb 10, 2024
1 parent c4e7520 commit 1520f38
Showing 1 changed file with 47 additions and 0 deletions.
47 changes: 47 additions & 0 deletions src/spn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,50 @@ impl core::fmt::Display for EngineControllerMessage {
write!(f, "EngineControllerMessage")
}
}

#[allow(dead_code)]
pub struct TorqueSpeedControlMessage {
/// Override control mode - SPN 695
override_control_mode: Option<crate::decode::OverrideControlMode>,
/// Requested speed control conditions - SPN 696
speed_control_condition: Option<crate::decode::RequestedSpeedControlCondition>,
/// Override control mode priority - SPN 897
control_mode_priority: Option<crate::decode::OverrideControlModePriority>,
/// Requested speed or speed limit - SPN 898
speed: Option<u16>,
/// Requested torque or torque limit - SPN 518
torque: Option<u8>,
}

impl TorqueSpeedControlMessage {
pub fn from_pdu(pdu: &[u8]) -> Self {
Self {
override_control_mode: crate::decode::spn695(pdu[0]),
speed_control_condition: None, // TODO: Add SPN 696
control_mode_priority: None, // TODO: Add SPN 897
speed: rpm::dec(&pdu[1..3]),
torque: if pdu[3] != 0xff { Some(pdu[3]) } else { None },
}
}

pub fn to_pdu(&self) -> [u8; 8] {
let override_control_mode = match self.override_control_mode {
Some(crate::decode::OverrideControlMode::OverrideDisabled) => 0b00,
Some(crate::decode::OverrideControlMode::SpeedControl) => 0b01,
Some(crate::decode::OverrideControlMode::TorqueControl) => 0b10,
Some(crate::decode::OverrideControlMode::SpeedTorqueLimitControl) => 0b11,
None => 0b00,
};

[
override_control_mode,
self.speed.map_or(0xff, |speed| rpm::enc(speed)[0]),
self.speed.map_or(0xff, |speed| rpm::enc(speed)[1]),
self.torque.unwrap_or(0xff),
0xff,
0xff,
0xff,
0xff,
]
}
}

0 comments on commit 1520f38

Please sign in to comment.