Skip to content
Hanterill

Documentation

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:

StateMeaning
ActiveThe fault is present now.
PendingSeen once, not yet confirmed over enough drive cycles.
StoredConfirmed and recorded.
HistoricalPreviously 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:

ReadDTCInformation, report DTCs by status mask
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.