Добавлены два интерфейса ccu_candb_error_missing_rx_t ccu_candb_time_missing_rx_t

This commit is contained in:
cfif 2026-08-31 13:57:39 +03:00
parent 571e821ddf
commit 0a36a55574
8 changed files with 125 additions and 46 deletions

View File

@ -10,7 +10,8 @@
#ifdef __DEF_CCU_CANDB__ #ifdef __DEF_CCU_CANDB__
ccu_candb_rx_t ccu_candb_rx; ccu_candb_rx_t ccu_candb_rx;
ccu_candb_error_rx_t ccu_candb_error_rx; ccu_candb_error_missing_rx_t ccu_candb_error_missing_rx;
ccu_candb_time_missing_rx_t ccu_candb_time_missing_rx;
ccu_candb_tx_t ccu_candb_tx; ccu_candb_tx_t ccu_candb_tx;
#endif // __DEF_CCU_CANDB__ #endif // __DEF_CCU_CANDB__

View File

@ -79,9 +79,42 @@ typedef struct
uint8_t FIU_CCU1; uint8_t FIU_CCU1;
uint8_t FIU_CCU2; uint8_t FIU_CCU2;
uint8_t FIU_CCU3; uint8_t FIU_CCU3;
uint8_t Diag_To_CCU; } ccu_candb_error_missing_rx_t;
uint8_t Diag_Functional;
} ccu_candb_error_rx_t;
typedef struct
{
uint32_t ESC_04;
uint32_t EMS_Veh;
uint32_t BCM_Powertrain;
uint32_t EMS_Veh_02;
uint32_t BCM_EEM;
uint32_t DMFR_Msg1;
uint32_t DMFL_Msg1;
uint32_t TM_Stat;
uint32_t TM_CP;
uint32_t HVC_CCU_Status_Msg;
uint32_t BCM_VEH_STATE;
uint32_t EMS_HVC_Req_Msg;
uint32_t HVC_Err_Status_Msg;
uint32_t BCM_CLIMATIC_DATA;
uint32_t VCU_CCU_Req;
uint32_t ESC_08;
uint32_t SMFL_status;
uint32_t SMFR_status;
uint32_t SMRL_status;
uint32_t SMRR_status;
uint32_t SDM_Cmd;
uint32_t VEH_VIN;
uint32_t OCUFL_MSG;
uint32_t OCUFR_MSG;
uint32_t OCURL_MSG;
uint32_t OCURR_MSG;
uint32_t DW_STATE;
uint32_t FIU_CCU1;
uint32_t FIU_CCU2;
uint32_t FIU_CCU3;
} ccu_candb_time_missing_rx_t;
typedef struct typedef struct
{ {
@ -104,7 +137,8 @@ uint32_t ccu_candb_Receive(ccu_candb_rx_t* m, const uint8_t* d, uint32_t msgid,
#ifdef __DEF_CCU_CANDB__ #ifdef __DEF_CCU_CANDB__
extern ccu_candb_rx_t ccu_candb_rx; extern ccu_candb_rx_t ccu_candb_rx;
extern ccu_candb_error_rx_t ccu_candb_error_rx; extern ccu_candb_error_missing_rx_t ccu_candb_error_missing_rx;
extern ccu_candb_time_missing_rx_t ccu_candb_time_missing_rx;
extern ccu_candb_tx_t ccu_candb_tx; extern ccu_candb_tx_t ccu_candb_tx;
#endif // __DEF_CCU_CANDB__ #endif // __DEF_CCU_CANDB__

View File

@ -17,40 +17,41 @@ typedef struct {
uint32_t can_id; uint32_t can_id;
FrameMonitor_t *monitor; FrameMonitor_t *monitor;
uint8_t *error_flag; uint8_t *error_flag;
uint32_t *time_flag;
} CAN_MonitorEntry_t; } CAN_MonitorEntry_t;
// Таблица всех мониторов // Таблица всех мониторов
static const CAN_MonitorEntry_t g_can_monitors[] = { static const CAN_MonitorEntry_t g_can_monitors[] = {
{ESC_04_CANID, &ccu_candb_rx.ESC_04.mon1, &ccu_candb_error_rx.ESC_04}, {ESC_04_CANID, &ccu_candb_rx.ESC_04.mon1, &ccu_candb_error_missing_rx.ESC_04, &ccu_candb_time_missing_rx.ESC_04},
{EMS_Veh_CANID, &ccu_candb_rx.EMS_Veh.mon1, &ccu_candb_error_rx.EMS_Veh}, {EMS_Veh_CANID, &ccu_candb_rx.EMS_Veh.mon1, &ccu_candb_error_missing_rx.EMS_Veh, &ccu_candb_time_missing_rx.EMS_Veh},
{BCM_Powertrain_CANID, &ccu_candb_rx.BCM_Powertrain.mon1, &ccu_candb_error_rx.BCM_Powertrain}, {BCM_Powertrain_CANID, &ccu_candb_rx.BCM_Powertrain.mon1, &ccu_candb_error_missing_rx.BCM_Powertrain, &ccu_candb_time_missing_rx.BCM_Powertrain},
{EMS_Veh_02_CANID, &ccu_candb_rx.EMS_Veh_02.mon1, &ccu_candb_error_rx.EMS_Veh_02}, {EMS_Veh_02_CANID, &ccu_candb_rx.EMS_Veh_02.mon1, &ccu_candb_error_missing_rx.EMS_Veh_02, &ccu_candb_time_missing_rx.EMS_Veh_02},
{BCM_EEM_CANID, &ccu_candb_rx.BCM_EEM.mon1, &ccu_candb_error_rx.BCM_EEM}, {BCM_EEM_CANID, &ccu_candb_rx.BCM_EEM.mon1, &ccu_candb_error_missing_rx.BCM_EEM, &ccu_candb_time_missing_rx.BCM_EEM},
{DMFR_Msg1_CANID, &ccu_candb_rx.DMFR_Msg1.mon1, &ccu_candb_error_rx.DMFR_Msg1}, {DMFR_Msg1_CANID, &ccu_candb_rx.DMFR_Msg1.mon1, &ccu_candb_error_missing_rx.DMFR_Msg1, &ccu_candb_time_missing_rx.DMFR_Msg1},
{DMFL_Msg1_CANID, &ccu_candb_rx.DMFL_Msg1.mon1, &ccu_candb_error_rx.DMFL_Msg1}, {DMFL_Msg1_CANID, &ccu_candb_rx.DMFL_Msg1.mon1, &ccu_candb_error_missing_rx.DMFL_Msg1, &ccu_candb_time_missing_rx.DMFL_Msg1},
{TM_Stat_CANID, &ccu_candb_rx.TM_Stat.mon1, &ccu_candb_error_rx.TM_Stat}, {TM_Stat_CANID, &ccu_candb_rx.TM_Stat.mon1, &ccu_candb_error_missing_rx.TM_Stat, &ccu_candb_time_missing_rx.TM_Stat},
{TM_CP_CANID, &ccu_candb_rx.TM_CP.mon1, &ccu_candb_error_rx.TM_CP}, {TM_CP_CANID, &ccu_candb_rx.TM_CP.mon1, &ccu_candb_error_missing_rx.TM_CP, &ccu_candb_time_missing_rx.TM_CP},
{HVC_CCU_Status_Msg_CANID, &ccu_candb_rx.HVC_CCU_Status_Msg.mon1, &ccu_candb_error_rx.HVC_CCU_Status_Msg}, {HVC_CCU_Status_Msg_CANID, &ccu_candb_rx.HVC_CCU_Status_Msg.mon1, &ccu_candb_error_missing_rx.HVC_CCU_Status_Msg, &ccu_candb_time_missing_rx.HVC_CCU_Status_Msg},
{BCM_VEH_STATE_CANID, &ccu_candb_rx.BCM_VEH_STATE.mon1, &ccu_candb_error_rx.BCM_VEH_STATE}, {BCM_VEH_STATE_CANID, &ccu_candb_rx.BCM_VEH_STATE.mon1, &ccu_candb_error_missing_rx.BCM_VEH_STATE, &ccu_candb_time_missing_rx.BCM_VEH_STATE},
{EMS_HVC_Req_Msg_CANID, &ccu_candb_rx.EMS_HVC_Req_Msg.mon1, &ccu_candb_error_rx.EMS_HVC_Req_Msg}, {EMS_HVC_Req_Msg_CANID, &ccu_candb_rx.EMS_HVC_Req_Msg.mon1, &ccu_candb_error_missing_rx.EMS_HVC_Req_Msg, &ccu_candb_time_missing_rx.EMS_HVC_Req_Msg},
{HVC_Err_Status_Msg_CANID, &ccu_candb_rx.HVC_Err_Status_Msg.mon1, &ccu_candb_error_rx.HVC_Err_Status_Msg}, {HVC_Err_Status_Msg_CANID, &ccu_candb_rx.HVC_Err_Status_Msg.mon1, &ccu_candb_error_missing_rx.HVC_Err_Status_Msg, &ccu_candb_time_missing_rx.HVC_Err_Status_Msg},
{BCM_CLIMATIC_DATA_CANID, &ccu_candb_rx.BCM_CLIMATIC_DATA.mon1, &ccu_candb_error_rx.BCM_CLIMATIC_DATA}, {BCM_CLIMATIC_DATA_CANID, &ccu_candb_rx.BCM_CLIMATIC_DATA.mon1, &ccu_candb_error_missing_rx.BCM_CLIMATIC_DATA, &ccu_candb_time_missing_rx.BCM_CLIMATIC_DATA},
{VCU_CCU_Req_CANID, &ccu_candb_rx.VCU_CCU_Req.mon1, &ccu_candb_error_rx.VCU_CCU_Req}, {VCU_CCU_Req_CANID, &ccu_candb_rx.VCU_CCU_Req.mon1, &ccu_candb_error_missing_rx.VCU_CCU_Req, &ccu_candb_time_missing_rx.VCU_CCU_Req},
{ESC_08_CANID, &ccu_candb_rx.ESC_08.mon1, &ccu_candb_error_rx.ESC_08}, {ESC_08_CANID, &ccu_candb_rx.ESC_08.mon1, &ccu_candb_error_missing_rx.ESC_08, &ccu_candb_time_missing_rx.ESC_08},
{SMFL_status_CANID, &ccu_candb_rx.SMFL_status.mon1, &ccu_candb_error_rx.SMFL_status}, {SMFL_status_CANID, &ccu_candb_rx.SMFL_status.mon1, &ccu_candb_error_missing_rx.SMFL_status, &ccu_candb_time_missing_rx.SMFL_status},
{SMFR_status_CANID, &ccu_candb_rx.SMFR_status.mon1, &ccu_candb_error_rx.SMFR_status}, {SMFR_status_CANID, &ccu_candb_rx.SMFR_status.mon1, &ccu_candb_error_missing_rx.SMFR_status, &ccu_candb_time_missing_rx.SMFR_status},
{SMRL_status_CANID, &ccu_candb_rx.SMRL_status.mon1, &ccu_candb_error_rx.SMRL_status}, {SMRL_status_CANID, &ccu_candb_rx.SMRL_status.mon1, &ccu_candb_error_missing_rx.SMRL_status, &ccu_candb_time_missing_rx.SMRL_status},
{SMRR_status_CANID, &ccu_candb_rx.SMRR_status.mon1, &ccu_candb_error_rx.SMRR_status}, {SMRR_status_CANID, &ccu_candb_rx.SMRR_status.mon1, &ccu_candb_error_missing_rx.SMRR_status, &ccu_candb_time_missing_rx.SMRR_status},
{SDM_Cmd_CANID, &ccu_candb_rx.SDM_Cmd.mon1, &ccu_candb_error_rx.SDM_Cmd}, {SDM_Cmd_CANID, &ccu_candb_rx.SDM_Cmd.mon1, &ccu_candb_error_missing_rx.SDM_Cmd, &ccu_candb_time_missing_rx.SDM_Cmd},
{VEH_VIN_CANID, &ccu_candb_rx.VEH_VIN.mon1, &ccu_candb_error_rx.VEH_VIN}, {VEH_VIN_CANID, &ccu_candb_rx.VEH_VIN.mon1, &ccu_candb_error_missing_rx.VEH_VIN, &ccu_candb_time_missing_rx.VEH_VIN},
{OCUFL_MSG_CANID, &ccu_candb_rx.OCUFL_MSG.mon1, &ccu_candb_error_rx.OCUFL_MSG}, {OCUFL_MSG_CANID, &ccu_candb_rx.OCUFL_MSG.mon1, &ccu_candb_error_missing_rx.OCUFL_MSG, &ccu_candb_time_missing_rx.OCUFL_MSG},
{OCUFR_MSG_CANID, &ccu_candb_rx.OCUFR_MSG.mon1, &ccu_candb_error_rx.OCUFR_MSG}, {OCUFR_MSG_CANID, &ccu_candb_rx.OCUFR_MSG.mon1, &ccu_candb_error_missing_rx.OCUFR_MSG, &ccu_candb_time_missing_rx.OCUFR_MSG},
{OCURL_MSG_CANID, &ccu_candb_rx.OCURL_MSG.mon1, &ccu_candb_error_rx.OCURL_MSG}, {OCURL_MSG_CANID, &ccu_candb_rx.OCURL_MSG.mon1, &ccu_candb_error_missing_rx.OCURL_MSG, &ccu_candb_time_missing_rx.OCURL_MSG},
{OCURR_MSG_CANID, &ccu_candb_rx.OCURR_MSG.mon1, &ccu_candb_error_rx.OCURR_MSG}, {OCURR_MSG_CANID, &ccu_candb_rx.OCURR_MSG.mon1, &ccu_candb_error_missing_rx.OCURR_MSG, &ccu_candb_time_missing_rx.OCURR_MSG},
{DW_STATE_CANID, &ccu_candb_rx.DW_STATE.mon1, &ccu_candb_error_rx.DW_STATE}, {DW_STATE_CANID, &ccu_candb_rx.DW_STATE.mon1, &ccu_candb_error_missing_rx.DW_STATE, &ccu_candb_time_missing_rx.DW_STATE},
{FIU_CCU1_CANID, &ccu_candb_rx.FIU_CCU1.mon1, &ccu_candb_error_rx.FIU_CCU1}, {FIU_CCU1_CANID, &ccu_candb_rx.FIU_CCU1.mon1, &ccu_candb_error_missing_rx.FIU_CCU1, &ccu_candb_time_missing_rx.FIU_CCU1},
{FIU_CCU2_CANID, &ccu_candb_rx.FIU_CCU2.mon1, &ccu_candb_error_rx.FIU_CCU2}, {FIU_CCU2_CANID, &ccu_candb_rx.FIU_CCU2.mon1, &ccu_candb_error_missing_rx.FIU_CCU2, &ccu_candb_time_missing_rx.FIU_CCU2},
{FIU_CCU3_CANID, &ccu_candb_rx.FIU_CCU3.mon1, &ccu_candb_error_rx.FIU_CCU3}, {FIU_CCU3_CANID, &ccu_candb_rx.FIU_CCU3.mon1, &ccu_candb_error_missing_rx.FIU_CCU3, &ccu_candb_time_missing_rx.FIU_CCU3},
}; };
#define CAN_MONITOR_COUNT (sizeof(g_can_monitors) / sizeof(g_can_monitors[0])) #define CAN_MONITOR_COUNT (sizeof(g_can_monitors) / sizeof(g_can_monitors[0]))
@ -86,6 +87,10 @@ void CanSpamReceiver_Init(tCanSpamReceiver *env,
env->ccu_candb_rx_EMS_HVC_Req_Msg = osMessageQueueNew(1, sizeof(ccu_candb_rx.EMS_HVC_Req_Msg), NULL); env->ccu_candb_rx_EMS_HVC_Req_Msg = osMessageQueueNew(1, sizeof(ccu_candb_rx.EMS_HVC_Req_Msg), NULL);
env->ccu_candb_rx_HVC_Err_Status_Msg = osMessageQueueNew(1, sizeof(ccu_candb_rx.HVC_Err_Status_Msg), NULL); env->ccu_candb_rx_HVC_Err_Status_Msg = osMessageQueueNew(1, sizeof(ccu_candb_rx.HVC_Err_Status_Msg), NULL);
*/ */
env->ccu_candb_error_missing_rx = osMessageQueueNew(1, sizeof(ccu_candb_error_missing_rx_t), NULL);
env->ccu_candb_time_missing_rx = osMessageQueueNew(1, sizeof(ccu_candb_time_missing_rx_t), NULL);
env->ccu_candb_rx_LOCAL_HVAC_VIN = osMessageQueueNew(1, 17, NULL); env->ccu_candb_rx_LOCAL_HVAC_VIN = osMessageQueueNew(1, 17, NULL);
env->ccu_candb_rx_LOCAL_HVAC_UDS_VIN = osMessageQueueNew(1, 17, NULL); env->ccu_candb_rx_LOCAL_HVAC_UDS_VIN = osMessageQueueNew(1, 17, NULL);
env->ccu_candb_rx_TM_CP = osMessageQueueNew(1, sizeof(rtDW.TM_CP_model), NULL); env->ccu_candb_rx_TM_CP = osMessageQueueNew(1, sizeof(rtDW.TM_CP_model), NULL);
@ -121,6 +126,9 @@ static void CheckAllCANMonitors(void) {
// Сохраняем ошибку // Сохраняем ошибку
*(g_can_monitors[i].error_flag) = error; *(g_can_monitors[i].error_flag) = error;
// Сохраняем время
*(g_can_monitors[i].time_flag) = mon->last_cycle;
} }
} }
@ -130,7 +138,22 @@ static void set_CanSpamReceiver(tCanSpamReceiver *env, uint32_t recid) {
// ВСЕГДА проверяем все мониторы на таймаут // ВСЕГДА проверяем все мониторы на таймаут
CheckAllCANMonitors(); CheckAllCANMonitors();
uint32_t countQueue_ccu_candb_rx = osMessageQueueGetSpace(env->ccu_candb_rx_TM_CP);
uint32_t countQueue_ccu_candb_rx = osMessageQueueGetSpace(env->ccu_candb_error_missing_rx);
if (countQueue_ccu_candb_rx) {
status = osMessageQueuePut(env->ccu_candb_error_missing_rx, &ccu_candb_error_missing_rx, 0, 0U);
return;
}
countQueue_ccu_candb_rx = osMessageQueueGetSpace(env->ccu_candb_time_missing_rx);
if (countQueue_ccu_candb_rx) {
status = osMessageQueuePut(env->ccu_candb_time_missing_rx, &ccu_candb_time_missing_rx, 0, 0U);
return;
}
countQueue_ccu_candb_rx = osMessageQueueGetSpace(env->ccu_candb_rx_TM_CP);
if ((countQueue_ccu_candb_rx) && (recid == TM_CP_CANID)) { if ((countQueue_ccu_candb_rx) && (recid == TM_CP_CANID)) {
status = osMessageQueuePut(env->ccu_candb_rx_TM_CP, &ccu_candb_rx.TM_CP, 0, 0U); status = osMessageQueuePut(env->ccu_candb_rx_TM_CP, &ccu_candb_rx.TM_CP, 0, 0U);
return; return;
@ -294,11 +317,27 @@ bool get_is_NoNull_CanSpam_BCM_PowerTrain_Receiver(tCanSpamReceiver *env) {
return false; return false;
} }
void get_CanSpamReceiver(tCanSpamReceiver *env, char *VIN) { void get_CanSpamReceiver(tCanSpamReceiver *env, char *VIN, ccu_candb_error_missing_rx_t *CAN_ERROR_MISSLE, ccu_candb_time_missing_rx_t *CAN_TIME_MISSLE) {
osStatus_t status = osOK; osStatus_t status = osOK;
uint32_t countQueue_ccu_candb_rx = osMessageQueueGetSpace(env->ccu_candb_rx_TM_CP);
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
uint32_t countQueue_ccu_candb_rx = osMessageQueueGetSpace(env->ccu_candb_error_missing_rx);
if (countQueue_ccu_candb_rx == 0) {
status = osMessageQueueGet(env->ccu_candb_error_missing_rx, CAN_ERROR_MISSLE, 0, 0U);
}
countQueue_ccu_candb_rx = osMessageQueueGetSpace(env->ccu_candb_time_missing_rx);
if (countQueue_ccu_candb_rx == 0) {
status = osMessageQueueGet(env->ccu_candb_time_missing_rx, CAN_TIME_MISSLE, 0, 0U);
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
countQueue_ccu_candb_rx = osMessageQueueGetSpace(env->ccu_candb_rx_TM_CP);
if (countQueue_ccu_candb_rx == 0) { if (countQueue_ccu_candb_rx == 0) {
status = osMessageQueueGet(env->ccu_candb_rx_TM_CP, &rtDW.TM_CP_model, 0, 0U); status = osMessageQueueGet(env->ccu_candb_rx_TM_CP, &rtDW.TM_CP_model, 0, 0U);
} }

View File

@ -58,6 +58,8 @@ typedef struct {
bool getVIN1; bool getVIN1;
bool getVIN2; bool getVIN2;
osMessageQueueId_t ccu_candb_error_missing_rx;
osMessageQueueId_t ccu_candb_time_missing_rx;
osMessageQueueId_t ccu_candb_rx_LOCAL_HVAC_VIN; osMessageQueueId_t ccu_candb_rx_LOCAL_HVAC_VIN;
osMessageQueueId_t ccu_candb_rx_LOCAL_HVAC_UDS_VIN; osMessageQueueId_t ccu_candb_rx_LOCAL_HVAC_UDS_VIN;
@ -88,7 +90,7 @@ void CanSpamReceiver_Init(tCanSpamReceiver *env, tSerialPortFrameIO *ioCanFrame,
void CanSpamReceiver_StartThread(tCanSpamReceiver *env); void CanSpamReceiver_StartThread(tCanSpamReceiver *env);
void get_CanSpamReceiver(tCanSpamReceiver *env, char *VIN); void get_CanSpamReceiver(tCanSpamReceiver *env, char *VIN, ccu_candb_error_missing_rx_t *CAN_ERROR_MISSLE, ccu_candb_time_missing_rx_t *CAN_TIME_MISSLE);
bool get_CanSpamReceiverUDS(tCanSpamReceiver *env, char *VIN, func_update_func update_func, void *update_func_env, bool get_CanSpamReceiverUDS(tCanSpamReceiver *env, char *VIN, func_update_func update_func, void *update_func_env,
uint32_t timeout, uint32_t count); uint32_t timeout, uint32_t count);

View File

@ -650,7 +650,7 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
//начало--------------------------------------------------ВХОД МОДЕЛИ CAN----------------------------------------------- //начало--------------------------------------------------ВХОД МОДЕЛИ CAN-----------------------------------------------
get_CanSpamReceiver(env->canSpamReceiver, env->GET_HVAC_VIN); get_CanSpamReceiver(env->canSpamReceiver, env->GET_HVAC_VIN, &env->CAN_ERROR_MISSLE, &env->CAN_TIME_MISSLE);
// Если был захват в UDS (подмена) // Если был захват в UDS (подмена)
if (model_Status_Set_For_Model_output.EMS == 1) { if (model_Status_Set_For_Model_output.EMS == 1) {
@ -864,7 +864,7 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
//начало--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ DTC------------------------------------------ //начало--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ DTC------------------------------------------
memcpy(env->dtc_state_error, rtY.dtc_state_error_model, sizeof(env->dtc_state_error)); memcpy(env->dtc_state_error, rtY.dtc_state_error_model, sizeof(env->dtc_state_error));
set_Dtc_state(env->diagnostic, &env->ccu_candb_tx.CCU_Errors, env->dtc_state_error, env->GET_HVAC_VIN); set_Dtc_state(env->diagnostic, &env->ccu_candb_tx.CCU_Errors, env->dtc_state_error, env->GET_HVAC_VIN, &env->CAN_ERROR_MISSLE, &env->CAN_TIME_MISSLE);
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ DTC------------------------------------------- //конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ DTC-------------------------------------------
memcpy(&env->ccu_candb_tx.CCU_Stat1, &rtY.CCU_Stat1_model, sizeof(env->ccu_candb_tx.CCU_Stat1)); memcpy(&env->ccu_candb_tx.CCU_Stat1, &rtY.CCU_Stat1_model, sizeof(env->ccu_candb_tx.CCU_Stat1));

View File

@ -40,6 +40,9 @@ typedef struct {
osMutexId_t access; osMutexId_t access;
char GET_HVAC_VIN[17]; char GET_HVAC_VIN[17];
ccu_candb_error_missing_rx_t CAN_ERROR_MISSLE;
ccu_candb_time_missing_rx_t CAN_TIME_MISSLE;
uint8_t dtc_state_error[127]; uint8_t dtc_state_error[127];

View File

@ -154,8 +154,8 @@ static bool isVINError(char *VIN) {
return false; // NULL — не ошибка (ещё нет данных) return false; // NULL — не ошибка (ещё нет данных)
} }
// Пустой VIN (нули) — ещё не собран → НЕ ошибка // Пустой VIN (пробелы) — ещё не собран → НЕ ошибка
if (memcmp(VIN, "00000000000000000", 17) == 0) { if (memcmp(VIN, " ", 17) == 0) {
return false; // НЕ ошибка! return false; // НЕ ошибка!
} }
@ -168,10 +168,10 @@ static bool isVINError(char *VIN) {
return true; return true;
} }
void set_Dtc_state(tDiagnostic *env, CCU_Errors_t *CCU_Errors, uint8_t *dtc_state_error_model, char *VIN) { void set_Dtc_state(tDiagnostic *env, CCU_Errors_t *CCU_Errors, uint8_t *dtc_state_error_model, char *VIN, ccu_candb_error_missing_rx_t *CAN_ERROR_MISSLE, ccu_candb_time_missing_rx_t *CAN_TIME_MISSLE) {
if (osMutexAcquire(env->access, 5000) == osOK) { if (osMutexAcquire(env->access, 5000) == osOK) {
bool vin_timeout = ccu_candb_error_rx.VEH_VIN; bool vin_timeout = CAN_ERROR_MISSLE->VEH_VIN;
bool vin_error = isVINError(VIN); bool vin_error = isVINError(VIN);
// DTC = 1 только если: // DTC = 1 только если:

View File

@ -25,7 +25,7 @@ typedef struct {
void Diagnostic_Init(tDiagnostic *env, tLoggerInterface *logger); void Diagnostic_Init(tDiagnostic *env, tLoggerInterface *logger);
void set_NoBitsDTC(tDiagnostic *env, bool noBitsDTC); void set_NoBitsDTC(tDiagnostic *env, bool noBitsDTC);
void set_Dtc_state(tDiagnostic *env, CCU_Errors_t *CCU_Errors, uint8_t *dtc_state_error_model, char *VIN); void set_Dtc_state(tDiagnostic *env, CCU_Errors_t *CCU_Errors, uint8_t *dtc_state_error_model, char *VIN, ccu_candb_error_missing_rx_t *CAN_ERROR_MISSLE, ccu_candb_time_missing_rx_t *CAN_TIME_MISSLE);
uint32_t diagnostic_ClearDiagnosticInformation_14(tDiagnostic *env); uint32_t diagnostic_ClearDiagnosticInformation_14(tDiagnostic *env);
uint32_t diagnostic_UDS_ReadDTCInformation_19_count(tDiagnostic *env, tDiagnosticDTC *diagnosticDTC); uint32_t diagnostic_UDS_ReadDTCInformation_19_count(tDiagnostic *env, tDiagnosticDTC *diagnosticDTC);