Introduction
IO93 is a bitmap parameter which operates according to OBD-II PIDs Service 01 PID 01 — Monitor Status Since DTCs Cleared.
Note: IO93 does not show exact OBD error codes. Instead, it reports whether the MIL light is on, how many diagnostic codes are flagged, and the availability/completeness of on-board readiness tests.
Warning: If you need to know exact OBD DTC codes, this feature is available via integration of the Ruptela device protocol, Command 9/109 Diagnostic Trouble Code on the server.
1 Overview
1.1 Parameter Structure
IO93 is a 4-byte (32-bit) value. Each byte (A, B, C, D) encodes specific diagnostic information:
Byte A — MIL status and DTC count
Byte B — Monitoring support flags and engine type
Byte C — Monitoring availability (varies by engine type)
Byte D — Monitoring readiness (varies by engine type)
1.2 Engine Type Abbreviations
SI — Spark Ignition (e.g. petrol/Otto or Wankel engines)
CI — Compression Ignition (e.g. diesel engines)
2 Byte Decoding Reference
2.1 Byte A — MIL and DTC Count (SI/CI)
Bit | Values | Description | Engine |
| 0–127 | Number of DTCs stored in the ECU | SI/CI |
| 0 = MIL OFF, 1 = MIL ON | Malfunction Indicator Lamp (MIL) status | SI/CI |
2.2 Byte B — Monitoring Support and Engine Type
Bit | Values | Description | Engine |
| 0 = NO, 1 = YES | Misfire monitoring supported | SI/CI |
| 0 = NO, 1 = YES | Fuel system monitoring supported | SI/CI |
| 0 = NO, 1 = YES | Comprehensive component monitoring supported | SI/CI |
| 0 = SI, 1 = CI | Engine type (0 = Spark ignition, 1 = Compression ignition) | SI/CI |
| 0 = YES, 1 = NO | Misfire monitoring ready | SI/CI |
| 0 = YES, 1 = NO | Fuel system monitoring ready | SI/CI |
| 0 = YES, 1 = NO | Comprehensive component monitoring ready | SI/CI |
| 0 | ISO/SAE reserved | SI/CI |
2.3 Byte C — Monitoring Availability
Bit | Values | SI Description | CI Description |
| 0 = NO, 1 = YES | Catalyst monitoring supported | NMHC catalyst monitoring supported |
| 0 = NO, 1 = YES | Heated catalyst monitoring supported | NOx after-treatment monitoring supported |
| 0 = NO, 1 = YES | Evaporative system monitoring supported | ISO/SAE reserved |
| 0 = NO, 1 = YES | Secondary air system monitoring supported | Boost pressure system monitoring supported |
| 0 | ISO/SAE reserved | ISO/SAE reserved |
| 0 = NO, 1 = YES | Oxygen sensor monitoring supported | Exhaust gas sensor monitoring supported |
| 0 = NO, 1 = YES | Oxygen sensor heater monitoring supported | PM filter monitoring supported |
| 0 = NO, 1 = YES | EGR and/or VVT system monitoring supported | EGR and/or VVT system monitoring supported |
2.4 Byte D — Monitoring Readiness
Bit | Values | SI Description | CI Description |
| 0 = NO, 1 = YES | Catalyst monitoring ready | NMHC catalyst monitoring ready |
| 0 = NO, 1 = YES | Heated catalyst monitoring ready | NOx after-treatment monitoring ready |
| 0 = NO, 1 = YES | Evaporative system monitoring ready | ISO/SAE reserved |
| 0 = NO, 1 = YES | Secondary air system monitoring ready | Boost pressure system monitoring ready |
| 0 | ISO/SAE reserved | ISO/SAE reserved |
| 0 = NO, 1 = YES | Oxygen sensor monitoring ready | Exhaust gas sensor monitoring ready |
| 0 = NO, 1 = YES | Oxygen sensor heater monitoring ready | PM filter monitoring ready |
| 0 = NO, 1 = YES | EGR and/or VVT system monitoring ready | EGR and/or VVT system monitoring ready |
3 How to Decode IO93
3.1 Decoding Method
The best way to decode IO93 is to parse the value bit by bit. The recommended tool is Windows Calculator in Programmer mode, which provides a bit-toggle keypad for easy binary inspection.
Note: Decoding runs from MSB (most significant byte) to LSB (least significant byte). Because the parameter is 4 bytes long, prepend "0" as needed to ensure the full 32-bit length (bit count runs from 0 to 31.).
3.2 Decoding Steps
Your device provides IO93 as a hexadecimal value. Follow these steps to decode it:
Take the hex value from the device.
Prepend "
0" if needed to reach the full 32-bit length.Convert to binary (use Calculator in Programmer mode).
Parse each byte (A, B, C, D) starting from bit A7 down to D0.
For each bit that is "
1", refer to the reference tables above. For bits A0–A6, read the value as a number (a combination of bits give decimal number) — it indicates the DTC count.
4 Examples
4.1 Example 1 — 0x0D062040
Convert the value step by step:
HEX: 0x0D062040
Decimal: 218,505,280
Binary: 0000 1101 0000 0110 0010 0000 0100 0000
[Byte A] [Byte B] [Byte C] [Byte D]
Parse each byte starting from A7 down to D0:
Byte (HEX) | Decoded Meaning |
| A7 = 0 → MIL/CEL is OFF |
| B1 = 1 → Fuel system monitoring supported |
| C5 = 1 → Oxygen sensor monitoring supported (SI) |
| D6 = 1 → Oxygen sensor heater monitoring ready (SI) |
4.2 Example 2 — 0x00080000
Convert the value step by step:
HEX: 0x00080000
Decimal: 524,288
Binary: 0000 0000 0000 1000 0000 0000 0000 0000
[Byte A] [Byte B] [Byte C] [Byte D]
Note: Prepend "0" in front to ensure full 32-bit length.
Only one bit is set — B3 = 1. According to the Byte B table, this means:
Byte (HEX) | Decoded Meaning |
| B3 = 1 → Engine type: CI (Compression Ignition / Diesel) |
All other bits are "0", so no MIL, no DTCs, and no other monitoring flags are active.