/// DTC maps for S300 and KPro ECU protocols. /// /// Key format: 'ERRxx_bity' where xx = byte index (00-based), y = bit number (0=LSB). /// Value: 'Pxxxx — description' library; /// S300 DTC map (ERR00–ERR03, 4 bytes × 8 bits = 32 possible codes) const Map s300DtcMap = { // ERR00 (byte 0x31) 'ERR00_bit0': 'P0130 — O2 Sensor (front)', 'ERR00_bit1': 'P0135 — O2 Sensor Heater (front)', 'ERR00_bit2': 'P0505 — Idle Air Control Valve', 'ERR00_bit3': 'P0108 — MAP Sensor High', 'ERR00_bit4': 'P0107 — MAP Sensor Low', 'ERR00_bit5': 'P0113 — IAT Sensor High', 'ERR00_bit6': 'P0112 — IAT Sensor Low', 'ERR00_bit7': 'P0118 — ECT Sensor High', // ERR01 (byte 0x32) 'ERR01_bit0': 'P0117 — ECT Sensor Low', 'ERR01_bit1': 'P0336 — CKP Sensor', 'ERR01_bit2': 'P0341 — CMP Sensor', 'ERR01_bit3': 'P1362 — TDC Sensor (No Signal)', 'ERR01_bit4': 'P1363 — TDC Sensor (No Signal 2)', 'ERR01_bit5': 'P0335 — CKP Sensor (No Signal)', 'ERR01_bit6': 'P1361 — TDC Sensor', 'ERR01_bit7': 'P0300 — Random Misfire', // ERR02 (byte 0x33) 'ERR02_bit0': 'P0301 — Misfire Cylinder 1', 'ERR02_bit1': 'P0302 — Misfire Cylinder 2', 'ERR02_bit2': 'P0303 — Misfire Cylinder 3', 'ERR02_bit3': 'P0304 — Misfire Cylinder 4', 'ERR02_bit4': 'P1259 — VTEC System Malfunction', 'ERR02_bit5': 'P0420 — Catalyst System Low Efficiency', 'ERR02_bit6': 'P0401 — EGR Insufficient Flow', 'ERR02_bit7': 'P1456 — EVAP Leak (large) Fuel Tank Side', // ERR03 (byte 0x34) 'ERR03_bit0': 'P1457 — EVAP Leak (large) Canister Side', 'ERR03_bit1': 'P0498 — EVAP Canister Vent Shut Valve', 'ERR03_bit2': 'P0497 — EVAP Low Purge Flow', 'ERR03_bit3': 'P0122 — TPS Sensor Low', 'ERR03_bit4': 'P0123 — TPS Sensor High', 'ERR03_bit5': 'P0562 — Battery Voltage Low', 'ERR03_bit6': 'P0563 — Battery Voltage High', 'ERR03_bit7': 'P1607 — PCM Internal Circuit', }; /// KPro DTC map (ERR00–ERR17, 18 bytes × 8 bits = 144 possible codes) const Map kproDtcMap = { // ERR00 'ERR00_bit0': 'P0130 — O2 Sensor (front)', 'ERR00_bit1': 'P0135 — O2 Sensor Heater (front)', 'ERR00_bit2': 'P0505 — Idle Air Control Valve', 'ERR00_bit3': 'P0108 — MAP Sensor High', 'ERR00_bit4': 'P0107 — MAP Sensor Low', 'ERR00_bit5': 'P0113 — IAT Sensor High', 'ERR00_bit6': 'P0112 — IAT Sensor Low', 'ERR00_bit7': 'P0118 — ECT Sensor High', // ERR01 'ERR01_bit0': 'P0117 — ECT Sensor Low', 'ERR01_bit1': 'P0336 — CKP Sensor', 'ERR01_bit2': 'P0341 — CMP Sensor', 'ERR01_bit3': 'P1362 — TDC Sensor (No Signal)', 'ERR01_bit4': 'P1363 — TDC Sensor (No Signal 2)', 'ERR01_bit5': 'P0335 — CKP Sensor (No Signal)', 'ERR01_bit6': 'P1361 — TDC Sensor', 'ERR01_bit7': 'P0300 — Random Misfire', // ERR02 'ERR02_bit0': 'P0301 — Misfire Cylinder 1', 'ERR02_bit1': 'P0302 — Misfire Cylinder 2', 'ERR02_bit2': 'P0303 — Misfire Cylinder 3', 'ERR02_bit3': 'P0304 — Misfire Cylinder 4', 'ERR02_bit4': 'P1259 — VTEC System Malfunction', 'ERR02_bit5': 'P0420 — Catalyst System Low Efficiency', 'ERR02_bit6': 'P0401 — EGR Insufficient Flow', 'ERR02_bit7': 'P1456 — EVAP Leak (large) Fuel Tank Side', // ERR03 'ERR03_bit0': 'P1457 — EVAP Leak (large) Canister Side', 'ERR03_bit1': 'P0498 — EVAP Canister Vent Shut Valve', 'ERR03_bit2': 'P0497 — EVAP Low Purge Flow', 'ERR03_bit3': 'P0122 — TPS Sensor Low', 'ERR03_bit4': 'P0123 — TPS Sensor High', 'ERR03_bit5': 'P0562 — Battery Voltage Low', 'ERR03_bit6': 'P0563 — Battery Voltage High', 'ERR03_bit7': 'P1607 — PCM Internal Circuit', // ERR04 'ERR04_bit0': 'P0136 — O2 Sensor (rear)', 'ERR04_bit1': 'P0141 — O2 Sensor Heater (rear)', 'ERR04_bit2': 'P1166 — Air Fuel Ratio (A/F) Sensor Heater', 'ERR04_bit3': 'P1167 — Air Fuel Ratio (A/F) Sensor', 'ERR04_bit4': 'P2195 — A/F Sensor Signal Stuck Lean', 'ERR04_bit5': 'P2196 — A/F Sensor Signal Stuck Rich', 'ERR04_bit6': 'P2237 — A/F Sensor Pump Cell Current Input Low', 'ERR04_bit7': 'P2240 — A/F Sensor Pump Cell Current Input High', // ERR05 'ERR05_bit0': 'P2243 — A/F Sensor Reference Voltage Low', 'ERR05_bit1': 'P2247 — A/F Sensor Reference Voltage High', 'ERR05_bit2': 'P2251 — A/F Sensor VS Cell Voltage Low', 'ERR05_bit3': 'P2254 — A/F Sensor VS Cell Voltage High', 'ERR05_bit4': 'P0031 — O2 Sensor Heater Current Low (bank 1, sensor 1)', 'ERR05_bit5': 'P0032 — O2 Sensor Heater Current High (bank 1, sensor 1)', 'ERR05_bit6': 'P0037 — O2 Sensor Heater Current Low (bank 1, sensor 2)', 'ERR05_bit7': 'P0038 — O2 Sensor Heater Current High (bank 1, sensor 2)', // ERR06 'ERR06_bit0': 'P0068 — MAP/MAF vs Throttle Position Correlation', 'ERR06_bit1': 'P0101 — MAF Sensor Range/Performance', 'ERR06_bit2': 'P0102 — MAF Sensor Low Input', 'ERR06_bit3': 'P0103 — MAF Sensor High Input', 'ERR06_bit4': 'P0171 — System Lean (bank 1)', 'ERR06_bit5': 'P0172 — System Rich (bank 1)', 'ERR06_bit6': 'P0174 — System Lean (bank 2)', 'ERR06_bit7': 'P0175 — System Rich (bank 2)', // ERR07 'ERR07_bit0': 'P0325 — Knock Sensor', 'ERR07_bit1': 'P0330 — Knock Sensor 2', 'ERR07_bit2': 'P0339 — CKP Sensor Intermittent', 'ERR07_bit3': 'P0344 — CMP Sensor Intermittent', 'ERR07_bit4': 'P0365 — CMP Sensor B Circuit', 'ERR07_bit5': 'P0390 — CMP Sensor B Circuit (bank 2)', 'ERR07_bit6': 'P0498 — EVAP Canister Vent Shut Valve Low', 'ERR07_bit7': 'P0499 — EVAP Canister Vent Shut Valve High', // ERR08 'ERR08_bit0': 'P0600 — Serial Communication Link', 'ERR08_bit1': 'P0601 — Internal Control Module Memory', 'ERR08_bit2': 'P0604 — Internal Control Module RAM', 'ERR08_bit3': 'P0605 — Internal Control Module ROM', 'ERR08_bit4': 'P0657 — Actuator Supply Voltage A Open', 'ERR08_bit5': 'P0685 — ECM/PCM Power Relay Control Open', 'ERR08_bit6': 'P0691 — Fan 1 Control Circuit Low', 'ERR08_bit7': 'P0692 — Fan 1 Control Circuit High', // ERR09 'ERR09_bit0': 'P0693 — Fan 2 Control Circuit Low', 'ERR09_bit1': 'P0694 — Fan 2 Control Circuit High', 'ERR09_bit2': 'P1454 — EVAP Pressure Sensor Range/Performance', 'ERR09_bit3': 'P1455 — EVAP Leak (small)', 'ERR09_bit4': 'P1508 — IAC Valve Circuit Low', 'ERR09_bit5': 'P1509 — IAC Valve Circuit High', 'ERR09_bit6': 'P1519 — Idle Air Control Valve Stuck', 'ERR09_bit7': 'P1706 — A/T Range Switch Out Of Range', // ERR10 'ERR10_bit0': 'P2101 — Throttle Actuator Control Motor Range', 'ERR10_bit1': 'P2118 — Throttle Actuator Control Motor Current Range', 'ERR10_bit2': 'P2119 — Throttle Actuator Control Throttle Body Range', 'ERR10_bit3': 'P2122 — Throttle/Pedal Position Sensor D Low Input', 'ERR10_bit4': 'P2123 — Throttle/Pedal Position Sensor D High Input', 'ERR10_bit5': 'P2127 — Throttle/Pedal Position Sensor E Low Input', 'ERR10_bit6': 'P2128 — Throttle/Pedal Position Sensor E High Input', 'ERR10_bit7': 'P2135 — Throttle/Pedal Position Sensor A/B Voltage Correlation', // ERR11 'ERR11_bit0': 'P2138 — Throttle/Pedal Position Sensor D/E Voltage Correlation', 'ERR11_bit1': 'P2176 — Throttle Actuator Control System Idle Position Not Learned', 'ERR11_bit2': 'P2227 — Barometric Pressure Sensor A Circuit Range', 'ERR11_bit3': 'P2228 — Barometric Pressure Sensor A Circuit Low', 'ERR11_bit4': 'P2229 — Barometric Pressure Sensor A Circuit High', 'ERR11_bit5': 'P2610 — ECM/PCM Internal Engine Off Timer', 'ERR11_bit6': 'P2647 — VTEC System High (bank 1)', 'ERR11_bit7': 'P2648 — VTEC System Low (bank 1)', // ERR12 'ERR12_bit0': 'P2649 — VTEC System High (bank 2)', 'ERR12_bit1': 'P2650 — VTEC System Low (bank 2)', 'ERR12_bit2': 'P3400 — VTEC System Stuck Off (bank 1)', 'ERR12_bit3': 'P3497 — VTEC System Stuck Off (bank 2)', 'ERR12_bit4': 'U0073 — Control Module Communication Bus Off', 'ERR12_bit5': 'U0100 — Lost Communication With ECM/PCM A', 'ERR12_bit6': 'U0155 — Lost Communication With Instrument Panel Cluster', 'ERR12_bit7': 'U0164 — Lost Communication With HVAC Control Module', // ERR13 'ERR13_bit0': 'P0011 — Camshaft Position A — Timing Over-Advanced (bank 1)', 'ERR13_bit1': 'P0012 — Camshaft Position A — Timing Over-Retarded (bank 1)', 'ERR13_bit2': 'P0021 — Camshaft Position B — Timing Over-Advanced (bank 1)', 'ERR13_bit3': 'P0022 — Camshaft Position B — Timing Over-Retarded (bank 1)', 'ERR13_bit4': 'P0340 — CMP Sensor A Circuit (bank 1)', 'ERR13_bit5': 'P0345 — CMP Sensor A Circuit (bank 2)', 'ERR13_bit6': 'P0366 — CMP Sensor B Circuit Range/Performance (bank 1)', 'ERR13_bit7': 'P0391 — CMP Sensor B Circuit Range/Performance (bank 2)', // ERR14 'ERR14_bit0': 'P0016 — Crankshaft/Camshaft Position Correlation (bank 1, sensor A)', 'ERR14_bit1': 'P0017 — Crankshaft/Camshaft Position Correlation (bank 1, sensor B)', 'ERR14_bit2': 'P0018 — Crankshaft/Camshaft Position Correlation (bank 2, sensor A)', 'ERR14_bit3': 'P0019 — Crankshaft/Camshaft Position Correlation (bank 2, sensor B)', 'ERR14_bit4': 'P0008 — Engine Position System (bank 1)', 'ERR14_bit5': 'P0009 — Engine Position System (bank 2)', 'ERR14_bit6': 'P0014 — Camshaft Position B — Timing Over-Advanced (bank 1)', 'ERR14_bit7': 'P0024 — Camshaft Position B — Timing Over-Advanced (bank 2)', // ERR15 'ERR15_bit0': 'P0087 — Fuel Rail/System Pressure Too Low', 'ERR15_bit1': 'P0088 — Fuel Rail/System Pressure Too High', 'ERR15_bit2': 'P0089 — Fuel Pressure Regulator Performance', 'ERR15_bit3': 'P0090 — Fuel Pressure Regulator Control Circuit', 'ERR15_bit4': 'P0091 — Fuel Pressure Regulator Control Circuit Low', 'ERR15_bit5': 'P0092 — Fuel Pressure Regulator Control Circuit High', 'ERR15_bit6': 'P0201 — Injector Circuit/Open Cylinder 1', 'ERR15_bit7': 'P0202 — Injector Circuit/Open Cylinder 2', // ERR16 'ERR16_bit0': 'P0203 — Injector Circuit/Open Cylinder 3', 'ERR16_bit1': 'P0204 — Injector Circuit/Open Cylinder 4', 'ERR16_bit2': 'P0261 — Injector Circuit Low Cylinder 1', 'ERR16_bit3': 'P0264 — Injector Circuit Low Cylinder 2', 'ERR16_bit4': 'P0267 — Injector Circuit Low Cylinder 3', 'ERR16_bit5': 'P0270 — Injector Circuit Low Cylinder 4', 'ERR16_bit6': 'P0262 — Injector Circuit High Cylinder 1', 'ERR16_bit7': 'P0265 — Injector Circuit High Cylinder 2', // ERR17 'ERR17_bit0': 'P0268 — Injector Circuit High Cylinder 3', 'ERR17_bit1': 'P0271 — Injector Circuit High Cylinder 4', 'ERR17_bit2': 'P0351 — Ignition Coil A Primary/Secondary Circuit', 'ERR17_bit3': 'P0352 — Ignition Coil B Primary/Secondary Circuit', 'ERR17_bit4': 'P0353 — Ignition Coil C Primary/Secondary Circuit', 'ERR17_bit5': 'P0354 — Ignition Coil D Primary/Secondary Circuit', 'ERR17_bit6': 'P0627 — Fuel Pump Control Circuit Open', 'ERR17_bit7': 'P0628 — Fuel Pump Control Circuit Low', }; /// Returns a list of active DTC descriptions from the given raw error bytes /// using the provided map. List decodeDtcs(List errBytes, Map dtcMap) { final List active = []; for (int byteIdx = 0; byteIdx < errBytes.length; byteIdx++) { final int b = errBytes[byteIdx]; if (b == 0) continue; for (int bit = 0; bit < 8; bit++) { if ((b >> bit) & 1 == 1) { final String key = 'ERR${byteIdx.toString().padLeft(2, '0')}_bit$bit'; final String? desc = dtcMap[key]; if (desc != null) active.add(desc); } } } return active; }