Add get_dtc_info

This commit is contained in:
Robert Sammelson 2023-05-13 19:50:05 -04:00
parent 4139dcea60
commit 4d08a680d1
No known key found for this signature in database
GPG key ID: 92F1F04EDB06B9E9
2 changed files with 37 additions and 0 deletions

View file

@ -5,6 +5,7 @@ fn main() {
let mut device = obd2::Obd2::default();
println!("VIN: {:?}", device.get_vin());
println!("DTC Info: {:#?}", device.get_dtc_info());
let dtcs = device.get_dtcs();
println!("DTCs: {:?}", dtcs);

View file

@ -121,6 +121,32 @@ impl Obd2 {
Ok(String::from_utf8(result)?)
}
pub fn get_dtc_info(&mut self) -> Result<Vec<DtcsInfo>> {
let result = self.obd_command(0x01, 0x01)?;
result
.iter()
.map(|response| {
if response.len() == 4 {
Ok(DtcsInfo {
malfunction_indicator_light: (response[0] & 0x80) == 0x80,
dtc_count: response[0] & 0x7f,
common_test_availability: ((response[1] & 0xf0) >> 1)
| (response[1] & 0x07),
is_compression_engine: (response[1] & 0x08) == 0x08,
specific_test_availability: ((response[3] as u16) << 8)
| (response[2] as u16),
})
} else {
Err(Error::Other(format!(
"get_dtc_info: expected length 4, got {}",
response.len()
)))
}
})
.collect()
}
pub fn get_dtcs(&mut self) -> Result<Vec<Vec<Dtc>>> {
let result = self.obd_mode_command(0x03)?;
result
@ -156,6 +182,16 @@ impl Obd2 {
}
}
#[allow(dead_code)]
#[derive(Debug)]
pub struct DtcsInfo {
malfunction_indicator_light: bool,
dtc_count: u8,
common_test_availability: u8,
is_compression_engine: bool,
specific_test_availability: u16,
}
#[derive(Debug)]
pub enum Dtc {
Powertrain(u16),