diff --git a/MODULES/CanSerialPortFrame_Flagchip_FC7240/Inc/CanSerialPortFrame.h b/MODULES/CanSerialPortFrame_Flagchip_FC7240/Inc/CanSerialPortFrame.h index f22974c..13d40df 100644 --- a/MODULES/CanSerialPortFrame_Flagchip_FC7240/Inc/CanSerialPortFrame.h +++ b/MODULES/CanSerialPortFrame_Flagchip_FC7240/Inc/CanSerialPortFrame.h @@ -63,12 +63,15 @@ typedef struct { bool reInitOne; - uint8_t CountHardSoftFilter_RX; + uint8_t CountHardFilter_RX; + uint8_t CountSoftFilter_RX; FLEXCAN_BaudType canBaudRate; uint32_t g_u32RxDataIndex; + FLEXCAN_RxMbFilterType pRxMbFilterSoftList[32]; + FLEXCAN_RxMbFilterType pRxMbFilterList[32]; FLEXCAN_RxMbFilterType pRxFilterFifoList[32]; @@ -88,7 +91,8 @@ typedef struct { uint8_t DMA_BUF_LEN_RX; uint8_t pBufCounter; - FilterTo_FLEXCAN_RxMbFilterType *IdHardSoftFilter_RX; + FilterTo_FLEXCAN_RxMbFilterType *IdHardFilter_RX; + FilterTo_FLEXCAN_RxMbFilterType *IdSoftFilter_RX; can_rx_message_type rx_message_struct; @@ -115,8 +119,11 @@ bool vCanSerialPortFrameDMAInit( const uint8_t *DMA_BUF_RX, uint8_t DMA_BUF_LEN_RX, - const FilterTo_FLEXCAN_RxMbFilterType *IdHardSoftFilter_RX, - uint8_t CountHardSoftFilter_RX, + const FilterTo_FLEXCAN_RxMbFilterType *IdHardFilter_RX, + uint8_t CountHardFilter_RX, + + const FilterTo_FLEXCAN_RxMbFilterType *IdSoftFilter_RX, + uint8_t CountSoftFilter_RX, const FLEXCAN_RxMbFilterType *IdFilterFifo_RX, uint8_t CountFilterFifo_RX, @@ -144,8 +151,11 @@ bool vCanSerialPortFrameMbInit( IRQn_Type IRQ_CAN, // FlexCAN0_IRQn ... FlexCAN3_IRQn uint8 CAN_PRIORITY, - const FilterTo_FLEXCAN_RxMbFilterType *IdHardSoftFilter_RX, - uint8_t CountHardSoftFilter_RX, + const FilterTo_FLEXCAN_RxMbFilterType *IdHardFilter_RX, + uint8_t CountHardFilter_RX, + + const FilterTo_FLEXCAN_RxMbFilterType *IdSoftFilter_RX, + uint8_t CountSoftFilter_RX, FLEXCAN_BaudType canBaudRate, FLEXCAN_IdType canTypeFrame, diff --git a/MODULES/CanSerialPortFrame_Flagchip_FC7240/Src/CanSerialPortFrame.c b/MODULES/CanSerialPortFrame_Flagchip_FC7240/Src/CanSerialPortFrame.c index 2e9f925..638e7ed 100644 --- a/MODULES/CanSerialPortFrame_Flagchip_FC7240/Src/CanSerialPortFrame.c +++ b/MODULES/CanSerialPortFrame_Flagchip_FC7240/Src/CanSerialPortFrame.c @@ -80,8 +80,11 @@ bool vCanSerialPortFrameDMAInit( const uint8_t *DMA_BUF_RX, uint8_t DMA_BUF_LEN_RX, - const FilterTo_FLEXCAN_RxMbFilterType *IdHardSoftFilter_RX, - uint8_t CountHardSoftFilter_RX, + const FilterTo_FLEXCAN_RxMbFilterType *IdHardFilter_RX, + uint8_t CountHardFilter_RX, + + const FilterTo_FLEXCAN_RxMbFilterType *IdSoftFilter_RX, + uint8_t CountSoftFilter_RX, const FLEXCAN_RxMbFilterType *IdFilterFifo_RX, uint8_t CountFilterFifo_RX, @@ -105,8 +108,10 @@ bool vCanSerialPortFrameDMAInit( env->can = CANx; env->CAN_INDEX = CAN_INDEX; env->DMA_BUF_LEN_RX = DMA_BUF_LEN_RX; - env->IdHardSoftFilter_RX = (FilterTo_FLEXCAN_RxMbFilterType *) IdHardSoftFilter_RX; - env->CountHardSoftFilter_RX = CountHardSoftFilter_RX; + env->IdHardFilter_RX = (FilterTo_FLEXCAN_RxMbFilterType *) IdHardFilter_RX; + env->IdSoftFilter_RX = (FilterTo_FLEXCAN_RxMbFilterType *) IdSoftFilter_RX; + env->CountHardFilter_RX = CountHardFilter_RX; + env->CountSoftFilter_RX = CountSoftFilter_RX; env->canBaudRate = canBaudRate; env->IRQ_CAN = IRQ_CAN; @@ -306,8 +311,11 @@ bool vCanSerialPortFrameMbInit( IRQn_Type IRQ_CAN, // FlexCAN0_IRQn ... FlexCAN3_IRQn uint8 CAN_PRIORITY, - const FilterTo_FLEXCAN_RxMbFilterType *IdHardSoftFilter_RX, - uint8_t CountHardSoftFilter_RX, + const FilterTo_FLEXCAN_RxMbFilterType *IdHardFilter_RX, + uint8_t CountHardFilter_RX, + + const FilterTo_FLEXCAN_RxMbFilterType *IdSoftFilter_RX, + uint8_t CountSoftFilter_RX, FLEXCAN_BaudType canBaudRate, FLEXCAN_IdType canTypeFrame, @@ -323,8 +331,13 @@ bool vCanSerialPortFrameMbInit( env->can = CANx; env->CAN_INDEX = CAN_INDEX; // env->DMA_BUF_LEN_RX = DMA_BUF_LEN_RX; - env->IdHardSoftFilter_RX = (FilterTo_FLEXCAN_RxMbFilterType *) IdHardSoftFilter_RX; - env->CountHardSoftFilter_RX = CountHardSoftFilter_RX; + + env->IdHardFilter_RX = (FilterTo_FLEXCAN_RxMbFilterType *) IdHardFilter_RX; + env->IdSoftFilter_RX = (FilterTo_FLEXCAN_RxMbFilterType *) IdSoftFilter_RX; + env->CountHardFilter_RX = CountHardFilter_RX; + env->CountSoftFilter_RX = CountSoftFilter_RX; + + env->canBaudRate = canBaudRate; env->IRQ_CAN = IRQ_CAN; @@ -371,14 +384,14 @@ bool vCanSerialPortFrameMbInit( if (tRetVal == FLEXCAN_ERROR_OK) { - for (uint8_t i = 0; i < CountHardSoftFilter_RX; ++i) { - env->pRxMbFilterList[i].eRxFrameType = IdHardSoftFilter_RX[i].eRxFrameType; - env->pRxMbFilterList[i].u32RxCanId = IdHardSoftFilter_RX[i].u32RxCanId; - env->pRxMbFilterList[i].u32RxCanIdMask = IdHardSoftFilter_RX[i].u32RxCanIdMask; + for (uint8_t i = 0; i < CountHardFilter_RX; ++i) { + env->pRxMbFilterList[i].eRxFrameType = IdHardFilter_RX[i].eRxFrameType; + env->pRxMbFilterList[i].u32RxCanId = IdHardFilter_RX[i].u32RxCanId; + env->pRxMbFilterList[i].u32RxCanIdMask = IdHardFilter_RX[i].u32RxCanIdMask; } env->tMbCfg.pRxFilterMBList = env->pRxMbFilterList; - env->tMbCfg.u8RxFilterMBCnt = CountHardSoftFilter_RX; + env->tMbCfg.u8RxFilterMBCnt = CountHardFilter_RX; env->tMbCfg.pRxFilterFifoList = NULL; env->tMbCfg.u8RxFilterFifoCnt = 0; @@ -489,15 +502,15 @@ bool vCanSerialPortSetMaskCount(tCanSerialPortFrameFlagchip *env, uint8_t maskCo // Обновляем список фильтров в рабочем буфере (первые maskCount элементов) for (i = 0; i < maskCount; i++) { - env->pRxMbFilterList[i].eRxFrameType = env->IdHardSoftFilter_RX[i].eRxFrameType; - env->pRxMbFilterList[i].u32RxCanId = env->IdHardSoftFilter_RX[i].u32RxCanId; - env->pRxMbFilterList[i].u32RxCanIdMask = env->IdHardSoftFilter_RX[i].u32RxCanIdMask; + env->pRxMbFilterList[i].eRxFrameType = env->IdHardFilter_RX[i].eRxFrameType; + env->pRxMbFilterList[i].u32RxCanId = env->IdHardFilter_RX[i].u32RxCanId; + env->pRxMbFilterList[i].u32RxCanIdMask = env->IdHardFilter_RX[i].u32RxCanIdMask; } for (i = maskCount; i < 32; i++) { - env->pRxMbFilterList[i].eRxFrameType = env->IdHardSoftFilter_RX[0].eRxFrameType; - env->pRxMbFilterList[i].u32RxCanId = env->IdHardSoftFilter_RX[0].u32RxCanId; - env->pRxMbFilterList[i].u32RxCanIdMask = env->IdHardSoftFilter_RX[0].u32RxCanIdMask; + env->pRxMbFilterList[i].eRxFrameType = env->IdHardFilter_RX[0].eRxFrameType; + env->pRxMbFilterList[i].u32RxCanId = env->IdHardFilter_RX[0].u32RxCanId; + env->pRxMbFilterList[i].u32RxCanIdMask = env->IdHardFilter_RX[0].u32RxCanIdMask; } @@ -573,12 +586,12 @@ void CanSerialPortFrameIrqRxProcessingNO_DMA(tCanSerialPortFrameFlagchip *env, F // Быстрый поиск по ID (можно использовать switch или бинарный поиск) uint8_t filter_index = 0xFF; - const uint8_t count = env->CountHardSoftFilter_RX; + const uint8_t count = env->CountSoftFilter_RX; // Линейный поиск ID for (uint8_t i = 0; i < count; i++) { - if (rx_id == env->IdHardSoftFilter_RX[i].u32RxCanId) { - filter_index = env->IdHardSoftFilter_RX[i].filter; + if (rx_id == env->IdSoftFilter_RX[i].u32RxCanId) { + filter_index = env->IdSoftFilter_RX[i].filter; pMsg->filter_index = filter_index; if (i > 2) { @@ -619,23 +632,23 @@ void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_ uint8_t index = 0xFF; - for (uint8_t i = 0; i < env->CountHardSoftFilter_RX; ++i) { + for (uint8_t i = 0; i < env->CountSoftFilter_RX; ++i) { if ((env->rx_message_struct.id_type == FLEXCAN_ID_STD) && - (env->IdHardSoftFilter_RX[i].eRxFrameType == FLEXCAN_ID_STD)) { + (env->IdSoftFilter_RX[i].eRxFrameType == FLEXCAN_ID_STD)) { - if (env->rx_message_struct.standard_id == env->IdHardSoftFilter_RX[i].u32RxCanId) { - env->rx_message_struct.filter_index = env->IdHardSoftFilter_RX[i].filter; + if (env->rx_message_struct.standard_id == env->IdSoftFilter_RX[i].u32RxCanId) { + env->rx_message_struct.filter_index = env->IdSoftFilter_RX[i].filter; index = i; break; } } else { - if (env->rx_message_struct.extended_id == env->IdHardSoftFilter_RX[i].u32RxCanId) { + if (env->rx_message_struct.extended_id == env->IdSoftFilter_RX[i].u32RxCanId) { - if (env->rx_message_struct.extended_id == env->IdHardSoftFilter_RX[i].u32RxCanId) { - env->rx_message_struct.filter_index = env->IdHardSoftFilter_RX[i].filter; + if (env->rx_message_struct.extended_id == env->IdSoftFilter_RX[i].u32RxCanId) { + env->rx_message_struct.filter_index = env->IdSoftFilter_RX[i].filter; index = i; break; } @@ -659,11 +672,11 @@ void CanSerialPortFrameIrqRxProcessing(tCanSerialPortFrameFlagchip *env, uint32_ REV_BYTES_32(pSrc[u8Index], pDest[u8Index]); } - CanSerialPortFrameAddDataQueue(env, &env->rx_message_struct, env->IdHardSoftFilter_RX[index].filter); + CanSerialPortFrameAddDataQueue(env, &env->rx_message_struct, env->IdSoftFilter_RX[index].filter); } - if (env->CountHardSoftFilter_RX == 0) { + if (env->CountSoftFilter_RX == 0) { // message buffer 3th word uint32_t *pSrc = (uint32_t * )FLEXCAN_MB_WORDN_ADDR(&pBuf[env->pBufCounter << 2], 0U, 8U, 8U); uint32_t *pDest = (uint32_t * ) & env->rx_message_struct.data[0]; diff --git a/MODULES/HVAC_M7_CAN_UDS/CanUds.c b/MODULES/HVAC_M7_CAN_UDS/CanUds.c index 599a97e..df5b320 100644 --- a/MODULES/HVAC_M7_CAN_UDS/CanUds.c +++ b/MODULES/HVAC_M7_CAN_UDS/CanUds.c @@ -2622,6 +2622,7 @@ static const eUds_com uds_com[256] = { {NULL, "", false}, {NULL, "", false}, {NULL, "", false}, + {ControlDTCSetting_85, "ControlDTCSetting_85", true}, {NULL, "", false}, {NULL, "", false}, {NULL, "", false}, @@ -2637,7 +2638,6 @@ static const eUds_com uds_com[256] = { {NULL, "", false}, {NULL, "", false}, {NULL, "", false}, - {ControlDTCSetting_85, "ControlDTCSetting_85", true}, {NULL, "", false}, {NULL, "", false}, {NULL, "", false}, diff --git a/MODULES/HVAC_M7_CanPorts/CanPorts.c b/MODULES/HVAC_M7_CanPorts/CanPorts.c index bbf7b6b..d99cb7e 100644 --- a/MODULES/HVAC_M7_CanPorts/CanPorts.c +++ b/MODULES/HVAC_M7_CanPorts/CanPorts.c @@ -164,9 +164,9 @@ const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan0[countIdCanHardSoft }; */ -/* -#define countIdCanHardSoftFilterCan0 (28) -const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan0[countIdCanHardSoftFilterCan0] = { + +#define countIdCanSoftFilterCan0 (28) +const FilterTo_FLEXCAN_RxMbFilterType IdCanSoftFilterCan0[countIdCanSoftFilterCan0] = { {FLEXCAN_ID_STD, Diag_To_CCU_CANID, 0x7FF, PROTOCOL_CAN_UDS}, {FLEXCAN_ID_STD, Diag_Functional_CANID, 0x7FF, PROTOCOL_CAN_UDS}, {FLEXCAN_ID_STD, EMS_Veh_CANID, 0x7FF, PROTOCOL_CAN_RAW}, @@ -200,11 +200,11 @@ const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan0[countIdCanHardSoft {FLEXCAN_ID_STD, FIU_CCU3_CANID, 0x7FF, PROTOCOL_CAN_RAW}, {FLEXCAN_ID_STD, ESC_04_CANID, 0x7FF, PROTOCOL_CAN_RAW} }; -*/ -#define countIdCanHardSoftFilterCan0 (22) -const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan0[countIdCanHardSoftFilterCan0] = { +#define countIdCanHardFilterCan0 (22) + +const FilterTo_FLEXCAN_RxMbFilterType IdCanHardFilterCan0[countIdCanHardFilterCan0] = { // UDS диагностика {FLEXCAN_ID_STD, Diag_To_CCU_CANID, 0x7FF, PROTOCOL_CAN_UDS}, {FLEXCAN_ID_STD, Diag_Functional_CANID, 0x7FF, PROTOCOL_CAN_UDS}, @@ -260,13 +260,19 @@ const FLEXCAN_RxMbFilterType IdCanFilterFifoCan0[countIdCanFilterFifoCan0] = { #endif */ -#define countIdCanHardSoftFilterCan1 2 -const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan1[countIdCanHardSoftFilterCan1] = { +#define countIdCanSoftFilterCan1 2 +const FilterTo_FLEXCAN_RxMbFilterType IdCanSoftFilterCan1[countIdCanSoftFilterCan1] = { {FLEXCAN_ID_STD, XCP_CCU_RX_CANID, 0x7FF, PROTOCOL_CAN_XCP}, {FLEXCAN_ID_STD, dbg_Cmd_Act_Information_CANID, 0x7FF, PROTOCOL_CAN_RAW} }; +#define countIdCanHardFilterCan1 2 +const FilterTo_FLEXCAN_RxMbFilterType IdCanHardFilterCan1[countIdCanHardFilterCan1] = { + {FLEXCAN_ID_STD, XCP_CCU_RX_CANID, 0x7FF, PROTOCOL_CAN_XCP}, + {FLEXCAN_ID_STD, dbg_Cmd_Act_Information_CANID, 0x7FF, PROTOCOL_CAN_RAW} +}; + #if (CAN_DMA_EN == 1) #define countIdCanFilterFifoCan1 1 const FLEXCAN_RxMbFilterType IdCanFilterFifoCan1[countIdCanFilterFifoCan1] = { @@ -324,8 +330,11 @@ bool vCanPort_InitCan0() { FlexCAN0_IRQn, // // FlexCAN0_IRQn ... FlexCAN3_IRQn 0xFF, - IdCanHardSoftFilterCan0, - countIdCanHardSoftFilterCan0, + IdCanHardFilterCan0, + countIdCanHardFilterCan0, + + IdCanSoftFilterCan0, + countIdCanSoftFilterCan0, FLEXCAN_BAUD_500K, @@ -428,9 +437,11 @@ bool vCanPort_InitCan1() { FlexCAN1_IRQn, // // FlexCAN0_IRQn ... FlexCAN3_IRQn 0xFF, - IdCanHardSoftFilterCan1, - countIdCanHardSoftFilterCan1, + IdCanHardFilterCan1, + countIdCanHardFilterCan1, + IdCanSoftFilterCan1, + countIdCanSoftFilterCan1, FLEXCAN_BAUD_500K, FLEXCAN_ID_STD, diff --git a/MODULES/HVAC_M7_StatusData/DiagnosticTask.c b/MODULES/HVAC_M7_StatusData/DiagnosticTask.c index 61c43b8..020ceaf 100644 --- a/MODULES/HVAC_M7_StatusData/DiagnosticTask.c +++ b/MODULES/HVAC_M7_StatusData/DiagnosticTask.c @@ -97,16 +97,16 @@ const char *DTC_Error_Code_Strings[COUNT_DTC_CODE_ERROR] = { "DTC_SEALING_VALVE_GATE_POSITION_NOT_REACHED", // 0xA09204 "DTC_BODY_CAN_BUS_OFF", // 0xC02888 "DTC_HVAC_CAN_BUS_OFF", // 0xC03788 - "DTC_LOST_COMM_ECM_PCM", // 0xC10087 - "DTC_LOST_COMM_ESP", // 0xC12287 - "DTC_LOST_COMM_BCM", // 0xC14187 - "DTC_LOST_COMM_AC_COMPRESSOR", // 0xC16B87 - "DTC_LOST_COMM_DOOR_MODULE_A_DMFL", // 0xC19987 - "DTC_LOST_COMM_DOOR_MODULE_B_DMFR", // 0xC20087 - "DTC_LOST_COMM_SEAT_MODULE_A_SMFL", // 0xC20887 - "DTC_LOST_COMM_SEAT_MODULE_B_SMFR", // 0xC20987 - "DTC_LOST_COMM_SEAT_MODULE_C_SMRL", // 0xC21087 - "DTC_LOST_COMM_SEAT_MODULE_D_SMRR", // 0xC21187 + "DTC_LOST_COMM_ECM_PCM (EMS/VCU)", // 0xC10087 + "DTC_LOST_COMM_ESP (ESP)", // 0xC12287 + "DTC_LOST_COMM_BCM (BCM)", // 0xC14187 + "DTC_LOST_COMM_AC_COMPRESSOR (HVC)", // 0xC16B87 + "DTC_LOST_COMM_DOOR_MODULE_A_DMFL (DMFL)", // 0xC19987 + "DTC_LOST_COMM_DOOR_MODULE_B_DMFR (DMFR)", // 0xC20087 + "DTC_LOST_COMM_SEAT_MODULE_A_SMFL (SMFL)", // 0xC20887 + "DTC_LOST_COMM_SEAT_MODULE_B_SMFR (SMFR)", // 0xC20987 + "DTC_LOST_COMM_SEAT_MODULE_C_SMRL (SMRL)", // 0xC21087 + "DTC_LOST_COMM_SEAT_MODULE_D_SMRR (SMRR)", // 0xC21187 "DTC_LOST_COMM_TRUNK_CCPF_CCPR", // 0xE2A187 "DTC_LOST_COMM_CGW", // 0xE2A287 "DTC_LOST_COMM_DEFROSTER_GATE", // 0xE23087 @@ -250,23 +250,23 @@ uint32_t diagnostic_UDS_ReadDTCInformation_19_dtc(tDiagnostic *env, tDiagnosticD 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; - } - } + 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; + } + } } @@ -306,8 +306,8 @@ uint32_t diagnostic_UDS_ReadDTCSupportDTC_19_dtc(tDiagnostic *env, tDiagnosticDT void set_NoBitsDTC(tDiagnostic *env, bool noBitsDTC) { if (osMutexAcquire(env->access, 5000) == osOK) { - env->isNoBitsDTC = noBitsDTC; memcpy(dtc_state_FIX_error, dtc_state_error, sizeof(dtc_state_error)); + env->isNoBitsDTC = noBitsDTC; osMutexRelease(env->access); } else { @@ -372,7 +372,8 @@ setErrorDTC_CAN(tDiagnostic *env, uint8_t *dtc_state_error_model, ccu_candb_erro } // U010087 (EMS/VCU) - 0x298 OR 0x150 OR 0x153 - OK - if ((CAN_ERROR_MISSLE->EMS_HVC_Req_Msg) || (CAN_ERROR_MISSLE->EMS_Veh) || (CAN_ERROR_MISSLE->EMS_Veh_02) || (time > timeCanSpamReceiver)) { + if ((CAN_ERROR_MISSLE->EMS_HVC_Req_Msg) || (CAN_ERROR_MISSLE->EMS_Veh) || (CAN_ERROR_MISSLE->EMS_Veh_02) || + (time > timeCanSpamReceiver)) { dtc_state_error_model[DTC_LOST_COMM_ECM_PCM] = DTC_TEST_FAILED_CONFIRMED; } else { dtc_state_error_model[DTC_LOST_COMM_ECM_PCM] = dtc_state_error[DTC_LOST_COMM_ECM_PCM] & (~(DTC_TEST_FAILED)); @@ -386,14 +387,16 @@ setErrorDTC_CAN(tDiagnostic *env, uint8_t *dtc_state_error_model, ccu_candb_erro } // U014187 (BCM) - 0x365 OR 0x157 OR 0x152 OR 0x280 OR 0x51A - OK - if ((CAN_ERROR_MISSLE->BCM_CLIMATIC_DATA) || (CAN_ERROR_MISSLE->BCM_EEM) || (CAN_ERROR_MISSLE->BCM_Powertrain) || (CAN_ERROR_MISSLE->BCM_VEH_STATE) || (CAN_ERROR_MISSLE->VEH_VIN) || (time > timeCanSpamReceiver)) { + if ((CAN_ERROR_MISSLE->BCM_CLIMATIC_DATA) || (CAN_ERROR_MISSLE->BCM_EEM) || (CAN_ERROR_MISSLE->BCM_Powertrain) || + (CAN_ERROR_MISSLE->BCM_VEH_STATE) || (CAN_ERROR_MISSLE->VEH_VIN) || (time > timeCanSpamReceiver)) { dtc_state_error_model[DTC_LOST_COMM_BCM] = DTC_TEST_FAILED_CONFIRMED; } else { dtc_state_error_model[DTC_LOST_COMM_BCM] = dtc_state_error[DTC_LOST_COMM_BCM] & (~(DTC_TEST_FAILED)); } // U016B87 (HVC) - 0x25A OR 0x305 - OK - if ((CAN_ERROR_MISSLE->HVC_CCU_Status_Msg) || (CAN_ERROR_MISSLE->HVC_Err_Status_Msg) || (time > timeCanSpamReceiver)) { + if ((CAN_ERROR_MISSLE->HVC_CCU_Status_Msg) || (CAN_ERROR_MISSLE->HVC_Err_Status_Msg) || + (time > timeCanSpamReceiver)) { dtc_state_error_model[DTC_LOST_COMM_AC_COMPRESSOR] = DTC_TEST_FAILED_CONFIRMED; } else { dtc_state_error_model[DTC_LOST_COMM_AC_COMPRESSOR] = @@ -450,8 +453,9 @@ setErrorDTC_CAN(tDiagnostic *env, uint8_t *dtc_state_error_model, ccu_candb_erro } static void -setErrorDTC_LIN(uint8_t *dtc_state_error_model, const uint8_t *LIN1_ERROR_MISSING, const uint8_t *LIN2_ERROR_MISSING, const uint8_t -*LIN3_ERROR_MISSING, const uint8_t *LIN4_ERROR_MISSING, const uint8_t *LIN5_ERROR_MISSING) { +setErrorDTC_LIN(uint8_t *dtc_state_error_model, const uint8_t *LIN1_ERROR_MISSING, const uint8_t *LIN2_ERROR_MISSING, + const uint8_t + *LIN3_ERROR_MISSING, const uint8_t *LIN4_ERROR_MISSING, const uint8_t *LIN5_ERROR_MISSING) { for (uint8_t i = 0; i < 9; ++i) { if (LIN1_ERROR_MISSING[i]) { @@ -512,25 +516,29 @@ void set_Dtc_state(tDiagnostic *env, CCU_Errors_t *CCU_Errors, if (env->isCleanDTC) { env->isCleanDTC = false; - + memset(dtc_state_FIX_error, 0, sizeof(dtc_state_FIX_error)); memset(dtc_state_error, 0, sizeof(dtc_state_error)); - } + if (env->isNoBitsDTC == true) { + osMutexRelease(env->access); + return; + } - for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { - if (dtc_state_error_model[i]) { - dtc_state_error_model[i] = DTC_TEST_FAILED_CONFIRMED; - } else { - dtc_state_error_model[i] = dtc_state_error[i] & (~(DTC_TEST_FAILED)); + for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { + if (dtc_state_error_model[i]) { + dtc_state_error_model[i] = DTC_TEST_FAILED_CONFIRMED; + } else { + dtc_state_error_model[i] = dtc_state_error[i] & (~(DTC_TEST_FAILED)); + } } - } - setErrorDTC_LIN(dtc_state_error_model, LIN1_ERROR_MISSING, LIN2_ERROR_MISSING, LIN3_ERROR_MISSING, LIN4_ERROR_MISSING, LIN5_ERROR_MISSING); - setErrorDTC_CAN_VIN(dtc_state_error_model, CAN_ERROR_MISSING, VIN, CCU_Errors); + setErrorDTC_LIN(dtc_state_error_model, LIN1_ERROR_MISSING, LIN2_ERROR_MISSING, LIN3_ERROR_MISSING, + LIN4_ERROR_MISSING, LIN5_ERROR_MISSING); + setErrorDTC_CAN_VIN(dtc_state_error_model, CAN_ERROR_MISSING, VIN, CCU_Errors); - // Если не было изначально сообщений - setErrorDTC_CAN(env, dtc_state_error_model, CAN_ERROR_MISSING); + // Если не было изначально сообщений + setErrorDTC_CAN(env, dtc_state_error_model, CAN_ERROR_MISSING); // if () { // dtc_state_error_model[DTC_REAR_HVAC_AROMA_CONFIG_INVALID] = DTC_TEST_FAILED_CONFIRMED; @@ -538,6 +546,8 @@ void set_Dtc_state(tDiagnostic *env, CCU_Errors_t *CCU_Errors, // dtc_state_error_model[DTC_REAR_HVAC_AROMA_CONFIG_INVALID] = dtc_state_error[DTC_REAR_HVAC_AROMA_CONFIG_INVALID] & (~(DTC_TEST_FAILED)); // } + + if (memcmp(dtc_state_error, dtc_state_error_model, sizeof(dtc_state_error)) != 0) { bool isDTC_FileWrite = false;