use crate::{DiagServerResult, DiagnosticServer};
use super::{KWP2000Command, Kwp2000DiagnosticServer};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum ClearDTCRange {
AllPowertrain,
AllChassis,
AllBody,
AllNetwork,
AllDTCs,
SingleDTC(u16),
}
impl From<ClearDTCRange> for u16 {
fn from(x: ClearDTCRange) -> Self {
match x {
ClearDTCRange::AllPowertrain => 0x0000,
ClearDTCRange::AllChassis => 0x4000,
ClearDTCRange::AllBody => 0x8000,
ClearDTCRange::AllNetwork => 0xC000,
ClearDTCRange::AllDTCs => 0xFF00,
ClearDTCRange::SingleDTC(x) => x,
}
}
}
impl Kwp2000DiagnosticServer {
pub fn clear_dtc_range(&mut self, dtc_range: ClearDTCRange) -> DiagServerResult<()> {
let dtc_range_num: u16 = dtc_range.into();
self.execute_command_with_response(
KWP2000Command::ClearDiagnosticInformation,
&[(dtc_range_num >> 8) as u8, dtc_range_num as u8],
)
.map(|_| ())
}
}