What belongs in the input?
Enter a complete diagnostic payload, not a whole CAN log line. For an 8-byte single frame, the final two bytes must be FF padding. For a multi-packet message, first use the BAM checker and retain exactly the announced payload length. A truncated sequence cannot safely be decoded by filling its gaps.
Method and example
Two leading bytes contain four 2-bit lamp status fields and four flash fields. Each subsequent record uses four bytes. For current CM=0 encoding, SPN = B1 + 256×B2 + 65536×(B3 >> 5); FMI = B3 & 31; OC = B4 & 127; CM = B4 >> 7. The sample contains SPN 110 / FMI 5 / OC 3, followed by SPN 100 / FMI 1 / OC 2. These are synthetic numeric examples, not diagnoses.
Unavailable is not zero
OC 127 is unavailable. A CM=1 record needs the appropriate legacy method, so its SPN is withheld. An all-FF record is reported as unavailable rather than a valid current SPN. A sole zero DTC record is the no-DTC marker; a mixed zero marker prompts review. Reserved lamp states remain visible.
DM1, DM2 and equipment context
The field layout also applies to DM2. Bytes alone do not identify the PGN, ECU or whether a condition is active or previously active. Preserve the source CAN ID separately. Lamp fields from one ECU are not a combined dashboard state. Consult authorized equipment documentation for meanings and repair procedures; this page contains no proprietary SPN catalog and cannot establish machine health.
Passive capture review only. No connection to equipment, no bus transmission, no safety clearance and no protocol certification. A clean result describes the supplied bytes, not the completeness of the original recording.