diff --git a/firmware/controllers/algo/obd_error_codes.h b/firmware/controllers/algo/obd_error_codes.h index 08fadf0b05..addc9ecb06 100644 --- a/firmware/controllers/algo/obd_error_codes.h +++ b/firmware/controllers/algo/obd_error_codes.h @@ -307,7 +307,9 @@ enum class ObdCode : uint16_t { //P0259 Injection Pump Fuel Metering Control "B" High (Cam/R //P0260 Injection Pump Fuel Metering Control "B" Intermittent Injector) //P0261 Cylinder I Injector Circuit Low + OBD_Injector_Circuit_1_Low = 261, //P0262 Cylinder I Injector Circuit High + OBD_Injector_Circuit_1_High = 262, //P0263 Cylinder I Contribution/Balance Fault //P0264 Cylinder 2 Injector Circuit Low //P0265 Cylinder 2 Injector Circuit High diff --git a/firmware/controllers/sensors/sensor_checker.cpp b/firmware/controllers/sensors/sensor_checker.cpp index 257d029ac5..e14d15b8bd 100644 --- a/firmware/controllers/sensors/sensor_checker.cpp +++ b/firmware/controllers/sensors/sensor_checker.cpp @@ -128,9 +128,13 @@ static ObdCode getCodeForInjector(int idx, brain_pin_diag_e diag) { return ObdCode::None; } - // TODO: do something more intelligent with `diag`? - UNUSED(diag); + if ((diag & PIN_OPEN) || (diag & PIN_SHORT_TO_GND)) { + return (ObdCode)((int)ObdCode::OBD_Injector_Circuit_1_Low + (idx * 3)); + } else if ((diag & PIN_SHORT_TO_BAT) || (diag & PIN_OVERLOAD)) { + return (ObdCode)((int)ObdCode::OBD_Injector_Circuit_1_High + (idx * 3)); + } + /* else common error code */ return (ObdCode)((int)ObdCode::OBD_Injector_Circuit_1 + idx); } #endif // EFI_ENGINE_CONTROL