Добавлена работа с DTC и фильтрация CAN сообщений
This commit is contained in:
parent
24a5968d22
commit
b24a008298
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -2622,21 +2622,6 @@ static const eUds_com uds_com[256] = {
|
|||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{ControlDTCSetting_85, "ControlDTCSetting_85", true},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
|
|
@ -2735,6 +2720,21 @@ static const eUds_com uds_com[256] = {
|
|||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false},
|
||||
{NULL, "", false}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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,11 +516,14 @@ 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]) {
|
||||
|
|
@ -526,7 +533,8 @@ void set_Dtc_state(tDiagnostic *env, CCU_Errors_t *CCU_Errors,
|
|||
}
|
||||
}
|
||||
|
||||
setErrorDTC_LIN(dtc_state_error_model, LIN1_ERROR_MISSING, LIN2_ERROR_MISSING, LIN3_ERROR_MISSING, LIN4_ERROR_MISSING, LIN5_ERROR_MISSING);
|
||||
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);
|
||||
|
||||
// Если не было изначально сообщений
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue