metatroncubeswdev ba79775fbc Fix DTC tables and Clear DTC result; auto-set ECU type from adapter name
- Rewrite S300 and KPro DTC tables from hvbt_protocol.pdf (the previous
  tables did not match the PDF; e.g. ERR01.6 is P0350 IGM, not P1361).
- Clear DTC: the adapter never echoes the documented ack, but the ECU does
  clear (bench: 3 of 4 codes cleared, P0350 re-set at once as an active
  fault). Judge success from the live ERR bytes; wait only 0.6 s for the
  ack so polling resumes, and report "N of M cleared".
- Set the ECU protocol from the adapter name (S300/KPro) on connect; a
  stale KPro setting made an S300 adapter look unresponsive.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 23:08:29 -04:00

258 lines
11 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/// DTC maps for S300 and KPro ECU protocols, transcribed from the "DTC map"
/// sections of hvbt_protocol.pdf.
///
/// Key format: 'ERRxx_bity' where xx = ERR byte index (00-based), y = bit
/// number (0=LSB). Value: '<code> — description'. Bits the PDF leaves
/// undocumented ("???") use 'ERRxx.y' as the code so the raw bit is still
/// visible on screen.
library;
/// S300 DTC map (ERR00–ERR03 = frame bytes 37–40). Descriptions include the
/// Honda blink code and sensor abbreviation from the PDF.
const Map<String, String> s300DtcMap = {
// ERR00
'ERR00_bit0': 'P0130 — Oxygen Sensor #1 (O2A, code 1)',
'ERR00_bit1': 'P0150 — Oxygen Sensor #2 (O2B, code 2)',
'ERR00_bit2': 'P0105 — Manifold Absolute Pressure Sensor (MAP, code 3)',
'ERR00_bit3': 'P0335 — Crank Position Sensor (CKP, code 4)',
'ERR00_bit4': 'P0105 — Manifold Absolute Pressure Sensor (MAP, code 5)',
'ERR00_bit5': 'P0106 — Engine Coolant Sensor (ECT, code 6)',
'ERR00_bit6': 'P0123 — Throttle Position Sensor (TPS, code 7)',
'ERR00_bit7': 'P1362 — Top Dead Center Sensor (TDC, code 8)',
// ERR01
'ERR01_bit0': 'P0340 — Cylinder/Cam Sensor (CYL, code 9)',
'ERR01_bit1': 'P0113 — Intake Air Temperature Sensor (IAT, code 10)',
'ERR01_bit2': 'P0217 — Engine Overheating (OH, code 11)',
'ERR01_bit3': 'P0403 — EGR Lift Valve (EGR, code 12)',
'ERR01_bit4': 'P1106 — Atmospheric Pressure Sensor (BARO, code 13)',
'ERR01_bit5': 'P0505 — Idle Air Control Valve (IAC, code 14)',
'ERR01_bit6': 'P0350 — Ignition Control Module (IGM, code 15)',
'ERR01_bit7': 'P0200 — Fuel Injectors (INJ, code 16)',
// ERR02
'ERR02_bit0': 'P0500 — Vehicle Speed Sensor (VSS, code 17)',
'ERR02_bit1': 'ERR02.1 — Undocumented code',
'ERR02_bit2': 'P0700 — Automatic Transmission Lockup Control Valve (code 19)',
'ERR02_bit3': 'P1298 — Electrical Load Detector (ELD, code 20)',
'ERR02_bit4': 'P2649 — VTEC Solenoid (VTS, code 21)',
'ERR02_bit5': 'P2647 — VTEC Pressure Valve (VTP, code 22)',
'ERR02_bit6': 'P0325 — Knock Sensor (code 23)',
'ERR02_bit7': 'P1324 — Knock Sensor (code 24)',
// ERR03
'ERR03_bit0': 'P0750 — Automatic Transmission A Signal (ATA, code 30)',
'ERR03_bit1': 'P0755 — Automatic Transmission B Signal (ATB, code 31)',
'ERR03_bit2': 'P0135 — Primary Oxygen Sensor Heater (PO2H, code 41)',
'ERR03_bit3': 'P0135 — Oxygen Sensor Heater',
'ERR03_bit4': 'P0169 — Fuel Supply System (code 43)',
'ERR03_bit5': 'ERR03.5 — Undocumented code',
'ERR03_bit6': 'ERR03.6 — Undocumented code',
'ERR03_bit7': 'ERR03.7 — Undocumented code',
};
/// KPro DTC map (ERR00–ERR17 = frame bytes 62–79).
const Map<String, String> kproDtcMap = {
// ERR00
'ERR00_bit0': 'ERR00.0 — Unknown error 0',
'ERR00_bit1': 'P1607 — Internal Circuit Malfunction (check calibration type)',
'ERR00_bit2': 'P0131 — O2 Sensor Voltage Low',
'ERR00_bit3': 'P0132 — O2 Sensor Voltage High',
'ERR00_bit4': 'P0107 — MAP Sensor Low Voltage',
'ERR00_bit5': 'P0108 — MAP Sensor High Voltage',
'ERR00_bit6': 'P0335 — CRK Sensor No Signal',
'ERR00_bit7': 'P0336 — CRK Sensor Intermittent Interruption',
// ERR01
'ERR01_bit0': 'P1128 — MAP Sensor Signal Lower Than Expected',
'ERR01_bit1': 'P1129 — MAP Sensor Signal Higher Than Expected',
'ERR01_bit2': 'P0117 — ECT Sensor Low Voltage',
'ERR01_bit3': 'P0118 — ECT Sensor High Voltage',
'ERR01_bit4': 'P0122 — TPS Low Voltage',
'ERR01_bit5': 'P0123 — TPS High Voltage',
'ERR01_bit6': 'P1121 — TPS Signal Lower Than Expected',
'ERR01_bit7': 'P1122 — TPS Signal Higher Than Expected',
// ERR02
'ERR02_bit0': 'P0176 — Ethanol Sensor Input Error',
'ERR02_bit1': 'ERR02.1 — No description available',
'ERR02_bit2': 'ERR02.2 — No description available',
'ERR02_bit3': 'ERR02.3 — No description available',
'ERR02_bit4': 'P1362 — TDC Sensor No Signal',
'ERR02_bit5': 'P1361 — TDC Sensor Intermittent Signal Interruption',
'ERR02_bit6': 'P0112 — IAT Sensor Low Voltage',
'ERR02_bit7': 'P0113 — IAT Sensor High Voltage',
// ERR03
'ERR03_bit0': 'P1213 — IMA Sensor Voltage Low',
'ERR03_bit1': 'P1214 — IMA Sensor Voltage High',
'ERR03_bit2': 'ERR03.2 — EGR Lift Sensor Voltage Error',
'ERR03_bit3': 'ERR03.3 — EGR F/B Error',
'ERR03_bit4': 'P1107 — Barometric Pressure Low Voltage',
'ERR03_bit5': 'P1108 — Barometric Pressure High Voltage',
'ERR03_bit6': 'P1106 — Barometric Pressure Sensor Range/Performance',
'ERR03_bit7': 'ERR03.7 — Unknown error 37',
// ERR04
'ERR04_bit0': 'P0505 — Idle Control System Malfunction',
'ERR04_bit1': 'P1519 — Idle Air Control Valve Circuit Malfunction',
'ERR04_bit2': 'P0500 — VSS Malfunction',
'ERR04_bit3': 'ERR04.3 — VSP',
'ERR04_bit4': 'P1297 — ELD Circuit Low Voltage',
'ERR04_bit5': 'P1298 — ELD Circuit High Voltage',
'ERR04_bit6': 'P1253 — VTEC Solenoid Drive Time Abnormality',
'ERR04_bit7': 'ERR04.7 — Unknown error 47',
// ERR05
'ERR05_bit0': 'P1259 — VTEC System Malfunction (Oil Pressure Switch)',
'ERR05_bit1': 'ERR05.1 — Unknown error 51',
'ERR05_bit2': 'P0325 — Knock Sensor Circuit Malfunction',
'ERR05_bit3': 'P1324 — Knock Sensor Circuit Failure',
'ERR05_bit4': 'P0563 — VBU Voltage High',
'ERR05_bit5': 'ERR05.5 — Unknown error 55',
'ERR05_bit6': 'ERR05.6 — Unknown error 56',
'ERR05_bit7': 'ERR05.7 — Unknown error 57',
// ERR06
'ERR06_bit0': 'P1162 — Air Fuel Ratio Sensor Circuit Malfunction',
'ERR06_bit1': 'ERR06.1 — LAF Sensor AFV1 Short',
'ERR06_bit2': 'ERR06.2 — LAF Sensor AFC1 Short',
'ERR06_bit3': 'ERR06.3 — Unknown error 63',
'ERR06_bit4':
'ERR06.4 — Daughter Board Communication Error (battery voltage low when cranking)',
'ERR06_bit5': 'ERR06.5 — Unknown error 65',
'ERR06_bit6':
'P0600 — Multiplexer Not Present (for engine swaps disable in misc parameters)',
'ERR06_bit7': 'ERR06.7 — Unknown error 67',
// ERR07
'ERR07_bit0': 'P1505 — PCV Negative Pressure',
'ERR07_bit1': 'ERR07.1 — Unknown error 71',
'ERR07_bit2': 'ERR07.2 — Unknown error 72',
'ERR07_bit3': 'ERR07.3 — Idle Valve',
'ERR07_bit4': 'P0135 — Primary HO2S Circuit Malfunction',
'ERR07_bit5': 'P1166 — Primary HO2S Heater Circuit Malfunction',
'ERR07_bit6': 'P1167 — Primary LAF HO2S Heater System Malfunction',
'ERR07_bit7': 'P0134 — Air/Fuel Ratio Sensor No Activity Detected',
// ERR08
'ERR08_bit0': 'P0172 — Fuel System Too Rich',
'ERR08_bit1': 'P0171 — Fuel System Too Lean',
'ERR08_bit2': 'P1162 — Air/Fuel Ratio (A/F) Sensor Slow Response',
'ERR08_bit3': 'ERR08.3 — Unknown error 83',
'ERR08_bit4': 'P0010 — VTC Oil Control Solenoid Valve Malfunction',
'ERR08_bit5': 'P0011 — VTC System Malfunction',
'ERR08_bit6': 'P0340 — CMP Sensor No Signal',
'ERR08_bit7': 'P0344 — CMP Sensor Intermittent Interruption',
// ERR09
'ERR09_bit0': 'P0341 — Variable Valve Timing (VTC) Phase Gap',
'ERR09_bit1': 'ERR09.1 — Unknown error 91',
'ERR09_bit2': 'ERR09.2 — Undocumented code',
'ERR09_bit3': 'P1163 — Air Fuel Ratio Sensor Slow Response',
'ERR09_bit4': 'P1164 — Air Fuel Ratio Sensor Range/Performance Problem',
'ERR09_bit5': 'ERR09.5 — Undocumented code',
'ERR09_bit6': 'P0137 — Secondary O2 Circuit Low Voltage',
'ERR09_bit7': 'P0138 — Secondary O2 Circuit High Voltage',
// ERR10
'ERR10_bit0': 'P0139 — Secondary O2 Circuit Slow Response',
'ERR10_bit1': 'ERR10.1 — Unknown error 101',
'ERR10_bit2': 'P0141 — Secondary O2 Circuit Heater Circuit Malfunction',
'ERR10_bit3': 'ERR10.3 — Unknown error 103',
'ERR10_bit4': 'P0420 — Catalyst System Efficiency Below Threshold',
'ERR10_bit5': 'ERR10.5 — Catalyst / Secondary O2 Sensor',
'ERR10_bit6': 'ERR10.6 — Unknown error 106',
'ERR10_bit7': 'ERR10.7 — Unknown error 107',
// ERR11
'ERR11_bit0': 'P0301 — Cylinder #1 Misfire',
'ERR11_bit1': 'ERR11.1 — Unknown error 111',
'ERR11_bit2': 'P0302 — Cylinder #2 Misfire',
'ERR11_bit3': 'ERR11.3 — Undocumented code',
'ERR11_bit4': 'P0303 — Cylinder #3 Misfire',
'ERR11_bit5': 'ERR11.5 — Unknown error 115',
'ERR11_bit6': 'P0304 — Cylinder #4 Misfire',
'ERR11_bit7': 'ERR11.7 — Unknown error 117',
// ERR12
'ERR12_bit0': 'P0300 — Random Misfire',
'ERR12_bit1': 'ERR12.1 — Unknown error 121',
'ERR12_bit2': 'ERR12.2 — EGR Flow',
'ERR12_bit3': 'ERR12.3 — Unknown error 123',
'ERR12_bit4': 'P0116 — ECT Sensor Range/Performance Problem',
'ERR12_bit5': 'ERR12.5 — Unknown error 125',
'ERR12_bit6': 'P0128 — Cooling System Malfunction (Thermostat)',
'ERR12_bit7': 'ERR12.7 — VTC Solenoid',
// ERR13
'ERR13_bit0': 'P1456 — EVAP Control System Leakage (Fuel Tank)',
'ERR13_bit1': 'P1457 — EVAP Control System Leakage (Canister System)',
'ERR13_bit2': 'P0452 — Fuel Tank Pressure Sensor Low Voltage',
'ERR13_bit3': 'P0453 — Fuel Tank Pressure Sensor High Voltage',
'ERR13_bit4': 'P0451 — Fuel Tank Pressure Sensor Range/Performance',
'ERR13_bit5': 'ERR13.5 — Undocumented code',
'ERR13_bit6': 'P0443 — EVAP Purge Valve Circuit',
'ERR13_bit7': 'ERR13.7 — Unknown error 137',
// ERR14
'ERR14_bit0': 'ERR14.0 — PF2 Low',
'ERR14_bit1': 'ERR14.1 — PF2 High',
'ERR14_bit2': 'ERR14.2 — PF2 Monitor',
'ERR14_bit3': 'ERR14.3 — Undocumented code',
'ERR14_bit4': 'ERR14.4 — TF2 Low',
'ERR14_bit5': 'ERR14.5 — TF2 High',
'ERR14_bit6': 'ERR14.6 — PF0 Low',
'ERR14_bit7': 'ERR14.7 — PF0 High',
// ERR15
'ERR15_bit0': 'ERR15.0 — TF0 Low',
'ERR15_bit1': 'ERR15.1 — TF0 High',
'ERR15_bit2': 'ERR15.2 — 3rd O2 Sensor Voltage Low',
'ERR15_bit3': 'ERR15.3 — 3rd O2 Sensor Voltage High',
'ERR15_bit4': 'ERR15.4 — 3rd O2 Sensor Response',
'ERR15_bit5': 'ERR15.5 — Unknown error 155',
'ERR15_bit6': 'ERR15.6 — 3rd O2 Sensor Heater Current Abnormality',
'ERR15_bit7': 'ERR15.7 — Unknown error 157',
// ERR16
'ERR16_bit0': 'ERR16.0 — NOx Ability Monitor',
'ERR16_bit1': 'ERR16.1 — Unknown error 161',
'ERR16_bit2':
'P1077 — Intake Manifold Runner Control System Malfunction (low rpm)',
'ERR16_bit3':
'P1078 — Intake Manifold Runner Control System Malfunction (high rpm)',
'ERR16_bit4': 'P0661 — Intake Manifold Runner Control Low Voltage',
'ERR16_bit5': 'P0662 — Intake Manifold Runner Control High Voltage',
'ERR16_bit6': 'ERR16.6 — P1 Switch Abnormality',
'ERR16_bit7': 'ERR16.7 — Unknown error 167',
// ERR17
'ERR17_bit0': 'P0219 — Engine Over-Rev',
'ERR17_bit1': 'P0217 — Engine Over-Heating',
'ERR17_bit2': 'ERR17.2 — Undocumented code',
'ERR17_bit3': 'ERR17.3 — Undocumented code',
'ERR17_bit4': 'ERR17.4 — Undocumented code',
'ERR17_bit5': 'ERR17.5 — Undocumented code',
'ERR17_bit6': 'ERR17.6 — Undocumented code',
'ERR17_bit7': 'ERR17.7 — Undocumented code',
};
/// Returns a list of active DTC descriptions from the given raw error bytes
/// using the provided map.
List<String> decodeDtcs(List<int> errBytes, Map<String, String> dtcMap) {
final List<String> 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;
}