diff --git a/DiagnosticTask.c b/DiagnosticTask.c index e12c7fb..75203e3 100644 --- a/DiagnosticTask.c +++ b/DiagnosticTask.c @@ -30,43 +30,61 @@ void Diagnostic_Init(tDiagnostic *env, tLoggerInterface *logger) { static uint32_t diagnostic_ClearDiagnosticInformation_14(tDiagnostic *env, void *extEnv) { for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { - // Тест DTC не был выполнен в текущем цикле работы - // dtc_state_error[i] = UDS_dtc_mask_testNotCompletedThisOperationCycle; // Тест DTC не был выполнен с момента последней очистки dtc_state_error[i] |= UDS_dtc_mask_testNotCompletedSinceLastClear; + dtc_state_FIX_error[i] |= UDS_dtc_mask_testNotCompletedSinceLastClear; } return 0; } -static uint32_t diagnostic_UDS_ReadDTCInformation_19_1(tDiagnostic *env, void *extEnv) { +static uint32_t diagnostic_UDS_ReadDTCInformation_19_count(tDiagnostic *env, void *extEnv) { tDiagnosticDTC *diagnosticDTC = (tDiagnosticDTC *) extEnv; uint32_t countDTC = 0; for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { - if (dtc_state_error[i] & (diagnosticDTC->mask)) { - ++countDTC; + + if (env->isNoBitsDTC) { + if (dtc_state_FIX_error[i] & (diagnosticDTC->mask)) { + ++countDTC; + } + } else { + if (dtc_state_error[i] & (diagnosticDTC->mask)) { + ++countDTC; + } } + } return countDTC; } -static uint32_t diagnostic_UDS_ReadDTCInformation_19_2(tDiagnostic *env, void *extEnv) { +static uint32_t diagnostic_UDS_ReadDTCInformation_19_dtc(tDiagnostic *env, void *extEnv) { tDiagnosticDTC *diagnosticDTC = (tDiagnosticDTC *) extEnv; uint32_t size = 0; for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { - if (dtc_state_error[i] & (diagnosticDTC->mask)) { - diagnosticDTC->dataResponse[size] = dtc_codes[i].DTCHighByte; - diagnosticDTC->dataResponse[size + 1] = dtc_codes[i].DTCMiddleByte; - diagnosticDTC->dataResponse[size + 2] = dtc_codes[i].DTCLowByte; - diagnosticDTC->dataResponse[size + 3] = dtc_state_error[i] & (diagnosticDTC->mask); - size += 4; + + if (env->isNoBitsDTC) { + if (dtc_state_FIX_error[i] & (diagnosticDTC->mask)) { + diagnosticDTC->dataResponse[size] = dtc_codes[i].DTCHighByte; + diagnosticDTC->dataResponse[size + 1] = dtc_codes[i].DTCMiddleByte; + diagnosticDTC->dataResponse[size + 2] = dtc_codes[i].DTCLowByte; + diagnosticDTC->dataResponse[size + 3] = dtc_state_error[i] & (diagnosticDTC->mask); + size += 4; + } + } else { + if (dtc_state_error[i] & (diagnosticDTC->mask)) { + diagnosticDTC->dataResponse[size] = dtc_codes[i].DTCHighByte; + diagnosticDTC->dataResponse[size + 1] = dtc_codes[i].DTCMiddleByte; + diagnosticDTC->dataResponse[size + 2] = dtc_codes[i].DTCLowByte; + diagnosticDTC->dataResponse[size + 3] = dtc_state_error[i] & (diagnosticDTC->mask); + size += 4; + } } } @@ -75,8 +93,8 @@ static uint32_t diagnostic_UDS_ReadDTCInformation_19_2(tDiagnostic *env, void *e const eDiagnosticState diagnostic_com[] = { {diagnostic_ClearDiagnosticInformation_14, "diagnostic_ClearDiagnosticInformation_14"}, - {diagnostic_UDS_ReadDTCInformation_19_1, "diagnostic_UDS_ReadDTCInformation_19_1"}, - {diagnostic_UDS_ReadDTCInformation_19_2, "diagnostic_UDS_ReadDTCInformation_19_2"}, + {diagnostic_UDS_ReadDTCInformation_19_count, "diagnostic_UDS_ReadDTCInformation_19_count"}, + {diagnostic_UDS_ReadDTCInformation_19_dtc, "diagnostic_UDS_ReadDTCInformation_19_dtc"}, {NULL, ""}, {NULL, ""}, {NULL, ""}, @@ -348,7 +366,10 @@ uint32_t SetGetDiagnosticData(tDiagnostic *env, eDiagnosticType diagnosticType, void setNoBitsDTC(tDiagnostic *env, bool noBitsDTC) { if (osMutexAcquire(env->access, 1000) == osOK) { + env->isNoBitsDTC = noBitsDTC; + memcpy(dtc_state_FIX_error, dtc_state_error, sizeof(dtc_state_error)); + osMutexRelease(env->access); } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "Access error setBitsDTC"); diff --git a/StatusError.c b/StatusError.c index 4018fb2..1b0c110 100644 --- a/StatusError.c +++ b/StatusError.c @@ -16,6 +16,7 @@ // Массив DTC ошибок uint8_t dtc_state_error[COUNT_DTC_CODE_ERROR]; +uint8_t dtc_state_FIX_error[COUNT_DTC_CODE_ERROR]; // Структура DTC кодов const tDTC_Entry dtc_codes[COUNT_DTC_CODE_ERROR] = { diff --git a/StatusError.h b/StatusError.h index dc82c84..165a468 100644 --- a/StatusError.h +++ b/StatusError.h @@ -31,15 +31,16 @@ typedef enum { UDS_dtc_mask_pendingDTC = 0x4, // DTC был активным в текущем или предыдущем цикле (Временное) UDS_dtc_mask_confirmedDTC = 0x8, // DTC подтвержден (Постоянное) UDS_dtc_mask_testNotCompletedSinceLastClear = 0x10, // Тест DTC не был выполнен с момента последней очистки (Временное) - UDS_dtc_mask_testFailedSinceLastClear = 0x20, // Тест DTC обнаруживал неисправность хотя бы раз с момента последней очистки (Временное) + UDS_dtc_mask_testFailedSinceLastClear = 0x20, // Тест DTC обнаруживал неисправность хотя бы раз с момента последней очистки (Постоянное) UDS_dtc_mask_testNotCompletedThisOperationCycle = 0x40, // Тест DTC не был выполнен в текущем цикле работы (Временное) - UDS_dtc_mask_warningIndicatorRequested = 0x80 // Сервер запрашивает включение индикатора предупреждения (Временное) + UDS_dtc_mask_warningIndicatorRequested = 0x80 // Сервер запрашивает включение индикатора предупреждения (Зависит) } eUdsDTCMask; #define COUNT_DTC_CODE_ERROR 127 extern const tDTC_Entry dtc_codes[COUNT_DTC_CODE_ERROR]; extern uint8_t dtc_state_error[COUNT_DTC_CODE_ERROR]; +extern uint8_t dtc_state_FIX_error[COUNT_DTC_CODE_ERROR]; //# ErrorCode HexCode FTB SAE J2012 Symptom Description DTC description HW Comment Pre-Condtion Maturation Failure Threshold Maturation Time De-Maturation Failure Threshold De-Maturation Time Degrade mode / Fail-safe action Malfunction Indicator Remark Comment SW progress //1 B20101C A0101C 0x1C Voltage Out of Range CCU Power supply (BATTERY) - circuit voltage out of range Possible T30d_state = "1" and T15_state = "1" 6.0v > VIN or VIN > 18.0V t > 3sec 6.0v < VIN and VIN < 18.0V t > 1 sec Only DTC Set * If voltage of battery is under 7.0v/7.5v or over 17.5v/18.0v, 1) Actuator Stop 2) Blower Stop 3) Seat Module Stop Request None Condition * If voltage of battery is under 7.0v/7.5v or over 17.5v/18.0v, --> * If voltage of battery is under 7.5v/8.0v or over 17.0v/17.5v OK : DTC / Fail-Safe