From b83c8e1efb6ec5b2f45b064b383afbbcd707f9ac Mon Sep 17 00:00:00 2001 From: cfif Date: Tue, 5 May 2026 15:36:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BB=D0=B0=D1=82=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=20V2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DiagnosticTask.c | 410 ++++++++--------------------------------------- DiagnosticTask.h | 34 +--- 2 files changed, 73 insertions(+), 371 deletions(-) diff --git a/DiagnosticTask.c b/DiagnosticTask.c index d89977e..1c75a39 100644 --- a/DiagnosticTask.c +++ b/DiagnosticTask.c @@ -14,8 +14,6 @@ void Diagnostic_Init(tDiagnostic *env, tLoggerInterface *logger) { env->logger = logger; - env->queue = osMessageQueueNew(DIAGNOSTIC_QUEUE_SIZE, 1, NULL); - env->access = osMutexNew(NULL); // for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { @@ -28,365 +26,115 @@ void Diagnostic_Init(tDiagnostic *env, tLoggerInterface *logger) { // osPriorityNormal); } -static uint32_t diagnostic_ClearDiagnosticInformation_14(tDiagnostic *env, void *extEnv) { +uint32_t diagnostic_ClearDiagnosticInformation_14(tDiagnostic *env) { -// for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { - // Тест DTC не был выполнен с момента последней очистки + if (osMutexAcquire(env->access, 5000) == osOK) { + + // for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { + // Тест DTC не был выполнен с момента последней очистки // dtc_state_error[i] |= UDS_dtc_mask_testNotCompletedSinceLastClear; // dtc_state_FIX_error[i] |= UDS_dtc_mask_testNotCompletedSinceLastClear; // } + osMutexRelease(env->access); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Access error diagnostic_ClearDiagnosticInformation_14"); + } + + return 0; } -static uint32_t diagnostic_UDS_ReadDTCInformation_19_count(tDiagnostic *env, void *extEnv) { - - tDiagnosticDTC *diagnosticDTC = (tDiagnosticDTC *) extEnv; +uint32_t diagnostic_UDS_ReadDTCInformation_19_count(tDiagnostic *env, tDiagnosticDTC *diagnosticDTC) { uint32_t countDTC = 0; - for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { + if (osMutexAcquire(env->access, 5000) == osOK) { - if (env->isNoBitsDTC) { - if (dtc_state_FIX_error[i] & (diagnosticDTC->mask)) { - ++countDTC; - } - } else { - if (dtc_state_error[i] & (diagnosticDTC->mask)) { - ++countDTC; + for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { + + if (env->isNoBitsDTC) { + if (dtc_state_FIX_error[i] & (diagnosticDTC->mask)) { + ++countDTC; + } + } else { + if (dtc_state_error[i] & (diagnosticDTC->mask)) { + ++countDTC; + } } + } + osMutexRelease(env->access); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Access error diagnostic_ClearDiagnosticInformation_14"); } + return countDTC; } -static uint32_t diagnostic_UDS_ReadDTCInformation_19_dtc(tDiagnostic *env, void *extEnv) { - - tDiagnosticDTC *diagnosticDTC = (tDiagnosticDTC *) extEnv; +uint32_t diagnostic_UDS_ReadDTCInformation_19_dtc(tDiagnostic *env, tDiagnosticDTC *diagnosticDTC) { uint32_t size = 0; - for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { + if (osMutexAcquire(env->access, 5000) == osOK) { - 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; + for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { + + 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; + } } } + + + osMutexRelease(env->access); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Access error diagnostic_UDS_ReadDTCInformation_19_dtc"); } return size; } -static uint32_t diagnostic_UDS_ReadDTCSupportDTC_19_dtc(tDiagnostic *env, void *extEnv) { - - tDiagnosticDTC *diagnosticDTC = (tDiagnosticDTC *) extEnv; +uint32_t diagnostic_UDS_ReadDTCSupportDTC_19_dtc(tDiagnostic *env, tDiagnosticDTC *diagnosticDTC) { uint32_t size = 0; - for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { + if (osMutexAcquire(env->access, 5000) == osOK) { - 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] = 0; - size += 4; + for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { + + 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] = 0; + size += 4; + } + + osMutexRelease(env->access); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Access error diagnostic_UDS_ReadDTCSupportDTC_19_dtc"); } return size; } -const eDiagnosticState diagnostic_com[] = { - {diagnostic_ClearDiagnosticInformation_14, "diagnostic_ClearDiagnosticInformation_14"}, - {diagnostic_UDS_ReadDTCInformation_19_count, "diagnostic_UDS_ReadDTCInformation_19_count"}, - {diagnostic_UDS_ReadDTCInformation_19_dtc, "diagnostic_UDS_ReadDTCInformation_19_dtc"}, - {diagnostic_UDS_ReadDTCSupportDTC_19_dtc, "diagnostic_UDS_ReadDTCSupportDTC_19_dtc"}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""}, - {NULL, ""} -}; - -uint32_t SetGetDiagnosticData(tDiagnostic *env, eDiagnosticType diagnosticType, void *extEnv) { - uint32_t ret = 0; - - if (diagnostic_com[diagnosticType].func != NULL) { - - if (osMutexAcquire(env->access, 5000) == osOK) { - ret = diagnostic_com[diagnosticType].func(env, extEnv); - osMutexRelease(env->access); - } else { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Access error SetGetDiagnosticData"); - } - } - - return ret; -} - void set_NoBitsDTC(tDiagnostic *env, bool noBitsDTC) { if (osMutexAcquire(env->access, 5000) == osOK) { @@ -399,8 +147,7 @@ void set_NoBitsDTC(tDiagnostic *env, bool noBitsDTC) { } } -// Ошибки DTC -void set_Dtc_state_error(tDiagnostic *env) { +void set_Dtc_state(tDiagnostic *env) { if (osMutexAcquire(env->access, 1000) == osOK) { memcpy(&dtc_state_error, &rtY.dtc_state_error_model, sizeof(dtc_state_error)); osMutexRelease(env->access); @@ -409,24 +156,3 @@ void set_Dtc_state_error(tDiagnostic *env) { } } - -static _Noreturn void Diagnostic_Thread(tDiagnostic *env) { - for (;;) { - - osStatus_t status = osMessageQueueGet(env->queue, &env->diagnosticType, 0, 1000); - - if (status == osOK) { - if (osMutexAcquire(env->access, 1000) == osOK) { - - - osMutexRelease(env->access); - } - } - } -} - -void Diagnostic_StartThread(tDiagnostic *env) { -// if (!env->thread.id) { -// env->thread.id = osThreadNew((osThreadFunc_t) (Diagnostic_Thread), (void *) (env), &env->thread.attr); -// } -} \ No newline at end of file diff --git a/DiagnosticTask.h b/DiagnosticTask.h index e336aa3..1a2632f 100644 --- a/DiagnosticTask.h +++ b/DiagnosticTask.h @@ -8,14 +8,6 @@ #include #include "LoggerInterface.h" -#define DIAGNOSTIC_QUEUE_SIZE 10 - -typedef enum { - DIAGNOSTIC_UDS_ClearDiagnosticInformation_14 = 0x00, - DIAGNOSTIC_UDS_ReadDTCInformation_19_1 = 0x01, - DIAGNOSTIC_UDS_ReadDTCInformation_19_2 = 0x02, - DIAGNOSTIC_UDS_ReadDTCInformation_19_A = 0x03 -} eDiagnosticType; typedef struct { uint8_t mask; @@ -24,36 +16,20 @@ typedef struct { typedef struct { osMutexId_t access; - osMessageQueueId_t queue; - eDiagnosticType diagnosticType; tLoggerInterface *logger; bool isNoBitsDTC; -// struct { -// osThreadId_t id; -// uint32_t stack[512]; -// StaticTask_t controlBlock; -// osThreadAttr_t attr; -// } thread; - } tDiagnostic; -typedef uint32_t (*diagnostic_func_ptr)(tDiagnostic *env, void *extEnv); - -typedef struct { - diagnostic_func_ptr func; - char *desc; -} eDiagnosticState; - void Diagnostic_Init(tDiagnostic *env, tLoggerInterface *logger); -void Diagnostic_StartThread(tDiagnostic *env); - void set_NoBitsDTC(tDiagnostic *env, bool noBitsDTC); +void set_Dtc_state(tDiagnostic *env); -void set_Dtc_state_error(tDiagnostic *env); - -uint32_t SetGetDiagnosticData(tDiagnostic *env, eDiagnosticType diagnosticType, void *extEnv); +uint32_t diagnostic_ClearDiagnosticInformation_14(tDiagnostic *env); +uint32_t diagnostic_UDS_ReadDTCInformation_19_count(tDiagnostic *env, tDiagnosticDTC *diagnosticDTC); +uint32_t diagnostic_UDS_ReadDTCInformation_19_dtc(tDiagnostic *env, tDiagnosticDTC *diagnosticDTC); +uint32_t diagnostic_UDS_ReadDTCSupportDTC_19_dtc(tDiagnostic *env, tDiagnosticDTC *diagnosticDTC); #endif //HVAC_M7_DIAGNOSTICTASK_H