use crate::{dynamic_diag::DynamicDiagSession, DiagServerResult};
use automotive_diag::kwp2000::KwpCommand;
#[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 DynamicDiagSession {
pub fn kwp_clear_dtc_range(&self, dtc_range: ClearDTCRange) -> DiagServerResult<()> {
let dtc_range_num: u16 = dtc_range.into();
self.send_command_with_response(
KwpCommand::ClearDiagnosticInformation,
&[(dtc_range_num >> 8) as u8, dtc_range_num as u8],
)?;
Ok(())
}
}