Обновление
This commit is contained in:
parent
377bd4c7a2
commit
010e2872ac
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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] = {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue