Diagnostics
DTC scanning
Reading fault codes by status and freeze frames.
Hanterill reads Diagnostic Trouble Codes with the UDS ReadDTCInformation service from every ECU that answers a diagnostic session.
Status, not just a code
Each DTC carries a status byte. Hanterill presents it as one of:
| State | Meaning |
|---|---|
| Active | The fault is present now. |
| Pending | Seen once, not yet confirmed over enough drive cycles. |
| Stored | Confirmed and recorded. |
| Historical | Previously set, since cleared, retained as a record. |
A single "check engine" light can sit on top of one active code and several historical ones. The status is what tells you which is which.
Freeze frames and snapshots
Where the ECU stored a snapshot at the time of the fault, Hanterill retrieves it with the code: the conditions recorded when the DTC matured. Not every code has one.
Scanning
Hanterill uses four ReadDTCInformation subfunctions: report the number of DTCs by status mask, report the DTCs by status mask, report a snapshot record for a DTC, and report an extended data record for a DTC.
A report-by-status-mask exchange, with the bytes on the wire:
- request
- 19 02 FF
- response
- 59 02 FF <dtc><status> <dtc><status> ...
The FF mask asks for every status. Each three-byte DTC is followed by one status byte; Hanterill classifies that byte as active, pending, stored or historical.
Hanterill runs this per ECU and aggregates the result into one list, grouped by module.
Clearing
Clearing DTCs changes ECU state and is treated as a write operation. It is disabled until you enable write access for the session. See Safety.
Evidence workflow
Export the session to JSON or CSV, do the repair, scan again, and compare the two exports. Fewer active and stored codes is the result you can point to.