Обновление 23.06.2026
This commit is contained in:
parent
88f669f0bf
commit
1195367a28
|
|
@ -26,6 +26,7 @@ void CanSpamTransmitter_Init(tCanSpamTransmitter *env,
|
|||
}
|
||||
|
||||
|
||||
|
||||
static void sendEventToCan(tCanSpamTransmitter *env) {
|
||||
if (env->ide) {
|
||||
env->canFrame.id_type = FLEXCAN_ID_EXT;
|
||||
|
|
@ -72,6 +73,7 @@ static eTimeEventTransmit isEventTransmitter(tCanSpamTransmitter *env) {
|
|||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
#if (CCU_Errors_SEND == 1)
|
||||
if (env->time_CCU_Errors_CYC <= env->timeMs) {
|
||||
env->time_CCU_Errors_CYC = env->timeMs + CCU_Errors_CYC;
|
||||
|
|
@ -83,7 +85,7 @@ static eTimeEventTransmit isEventTransmitter(tCanSpamTransmitter *env) {
|
|||
return event_CCU_Errors_CYC;
|
||||
}
|
||||
#endif
|
||||
|
||||
*/
|
||||
|
||||
#if (CCU_Requests_SEND == 1)
|
||||
if (env->time_CCU_Requests <= env->timeMs) {
|
||||
|
|
@ -217,6 +219,7 @@ static eTimeEventTransmit isEventTransmitter(tCanSpamTransmitter *env) {
|
|||
// начало--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
// начало--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
// начало--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
/*
|
||||
#if (CCU_Msg3_SEND == 1)
|
||||
if (env->time_CCU_Msg3 <= env->timeMs) {
|
||||
env->time_CCU_Msg3 = env->timeMs + CCU_Msg3_CYC;
|
||||
|
|
@ -247,6 +250,7 @@ static eTimeEventTransmit isEventTransmitter(tCanSpamTransmitter *env) {
|
|||
return event_CCU_Msg3;
|
||||
}
|
||||
#endif
|
||||
*/
|
||||
// конец--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
// конец--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
// конец--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
|
|
@ -273,11 +277,11 @@ static eTimeEventTransmit isEventTransmitter(tCanSpamTransmitter *env) {
|
|||
|
||||
void set_CanSpamTransmitter(tCanSpamTransmitter *env) {
|
||||
if (osMutexAcquire(env->access, 5000) == osOK) {
|
||||
memcpy(&ccu_candb_tx.CCU_Errors, &rtY.CCU_Errors_model, sizeof(ccu_candb_tx.CCU_Errors));
|
||||
// memcpy(&ccu_candb_tx.CCU_Errors, &rtY.CCU_Errors_model, sizeof(ccu_candb_tx.CCU_Errors));
|
||||
memcpy(&ccu_candb_tx.CCU_Stat1, &rtY.CCU_Stat1_model, sizeof(ccu_candb_tx.CCU_Stat1));
|
||||
memcpy(&ccu_candb_tx.CCU_Stat2, &rtY.CCU_Stat2_model, sizeof(ccu_candb_tx.CCU_Stat2));
|
||||
memcpy(&ccu_candb_tx.CCU_HVC_Req_Msg, &rtY.CCUCAN_HVC_REQ_MSG_MODEL, sizeof(ccu_candb_tx.CCU_HVC_Req_Msg));
|
||||
memcpy(&ccu_candb_tx.CCU_Msg3, &rtY.CCU_Msg3_model, sizeof(ccu_candb_tx.CCU_Msg3));
|
||||
// memcpy(&ccu_candb_tx.CCU_Msg3, &rtY.CCU_Msg3_model, sizeof(ccu_candb_tx.CCU_Msg3));
|
||||
|
||||
|
||||
osMutexRelease(env->access);
|
||||
|
|
@ -324,4 +328,162 @@ void CanSpamTransmitter_StartThread(tCanSpamTransmitter *env) {
|
|||
if (!env->thread.id) {
|
||||
env->thread.id = osThreadNew((osThreadFunc_t) (CanSpamTransmitter_Thread), (void *) (env), &env->thread.attr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void CanSpamSlowTransmitter_Init(tCanSpamSlowTransmitter *env,
|
||||
tSerialPortFrameIO *ioCanFrame,
|
||||
osMutexId_t modelTaskAccess,
|
||||
tLoggerInterface *logger) {
|
||||
|
||||
env->ioCanFrame = ioCanFrame;
|
||||
env->modelTaskAccess = modelTaskAccess;
|
||||
env->logger = logger;
|
||||
env->access = osMutexNew(NULL);
|
||||
|
||||
InitThreadAtrStatic(&env->thread.attr, "CanSpamSlowTrans", env->thread.controlBlock, env->thread.stack,
|
||||
osPriorityNormal);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void sendEventSlowToCan(tCanSpamSlowTransmitter *env) {
|
||||
if (env->ide) {
|
||||
env->canFrame.id_type = FLEXCAN_ID_EXT;
|
||||
env->canFrame.extended_id = env->can_id;
|
||||
} else {
|
||||
env->canFrame.id_type = FLEXCAN_ID_STD;
|
||||
env->canFrame.standard_id = env->can_id;
|
||||
}
|
||||
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, (uint8_t * ) & env->canFrame.data, env->canFrame.dlc,
|
||||
env->can_id, env->canFrame.id_type, 100, SPAM_SLOW_CAN_HANDLER);
|
||||
}
|
||||
|
||||
void set_CanSpamSlowTransmitter(tCanSpamSlowTransmitter *env) {
|
||||
if (osMutexAcquire(env->access, 5000) == osOK) {
|
||||
memcpy(&ccu_candb_tx.CCU_Errors, &rtY.CCU_Errors_model, sizeof(ccu_candb_tx.CCU_Errors));
|
||||
memcpy(&ccu_candb_tx.CCU_Msg3, &rtY.CCU_Msg3_model, sizeof(ccu_candb_tx.CCU_Msg3));
|
||||
osMutexRelease(env->access);
|
||||
} else {
|
||||
LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error set_CanSpamTransmitter");
|
||||
}
|
||||
}
|
||||
|
||||
void set_CCU_Slow_Mute(tCanSpamSlowTransmitter *env, bool mute) {
|
||||
if (osMutexAcquire(env->access, 5000) == osOK) {
|
||||
env->isMute = mute;
|
||||
osMutexRelease(env->access);
|
||||
} else {
|
||||
LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error set_CCU_Mute");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static eTimeEventTransmit isEventSlowTransmitter(tCanSpamSlowTransmitter *env) {
|
||||
|
||||
#if (CCU_Errors_SEND == 1)
|
||||
if (env->time_CCU_Errors_CYC <= env->timeMs) {
|
||||
env->time_CCU_Errors_CYC = env->timeMs + CCU_Errors_CYC;
|
||||
|
||||
env->can_id = Pack_CCU_Errors_candb(&ccu_candb_tx.CCU_Errors, env->canFrame.data, &env->canFrame.dlc,
|
||||
&env->ide);
|
||||
|
||||
|
||||
return event_CCU_Errors_CYC;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// начало--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
// начало--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
// начало--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
#if (CCU_Msg3_SEND == 1)
|
||||
if (env->time_CCU_Msg3 <= env->timeMs) {
|
||||
env->time_CCU_Msg3 = env->timeMs + CCU_Msg3_CYC;
|
||||
|
||||
// Rolling Counter [0 - 15]
|
||||
if (env->CCU_Msg3_CCU_MSG3_RC >= 15) {
|
||||
env->CCU_Msg3_CCU_MSG3_RC = 0;
|
||||
} else {
|
||||
++env->CCU_Msg3_CCU_MSG3_RC;
|
||||
}
|
||||
|
||||
ccu_candb_tx.CCU_Msg3.CCU_MSG3_RC = env->CCU_Msg3_CCU_MSG3_RC;
|
||||
|
||||
// Checksum XOR8 of the data field this message
|
||||
// Checksum computed as per XOR algorithm:
|
||||
// Byte 1 XOR byte 2 .... XOR byte n-1. (n = packet length.)
|
||||
|
||||
uint8_t d0 = (uint8_t)((ccu_candb_tx.CCU_Msg3.CCU_FAN_Req & (0x7FU)));
|
||||
uint8_t d1 = (uint8_t)((ccu_candb_tx.CCU_Msg3.CCU_RestMode_Stat & (0x03U)));
|
||||
uint8_t d2 = (uint8_t)((ccu_candb_tx.CCU_Msg3.CCU_IncarTempSum_Val_ro & (0xFFU)));
|
||||
uint8_t d3 = (uint8_t)((ccu_candb_tx.CCU_Msg3.CCU_MSG3_RC & (0x0FU)));
|
||||
|
||||
ccu_candb_tx.CCU_Msg3.CCU_MSG3_CS = d0 ^ d1 ^ d2 ^ d3;
|
||||
|
||||
|
||||
env->can_id = Pack_CCU_Msg3_candb(&ccu_candb_tx.CCU_Msg3, env->canFrame.data, &env->canFrame.dlc, &env->ide);
|
||||
|
||||
return event_CCU_Msg3;
|
||||
}
|
||||
#endif
|
||||
// конец--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
// конец--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
// конец--------------------------------------0x501 CCU_Msg3-------------------------------------------------------
|
||||
|
||||
return event_CCU_none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static _Noreturn void CanSpamSlowTransmitter_Thread(tCanSpamSlowTransmitter *env) {
|
||||
for (;;) {
|
||||
|
||||
SystemDelayMs(500);
|
||||
|
||||
if (env->isMute == false) {
|
||||
|
||||
if (osMutexAcquire(env->access, 5000) == osOK) {
|
||||
|
||||
env->timeMs += 500;
|
||||
|
||||
while (isEventSlowTransmitter(env) != event_CCU_none) {
|
||||
sendEventSlowToCan(env);
|
||||
}
|
||||
|
||||
|
||||
osMutexRelease(env->access);
|
||||
} else {
|
||||
LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error CanSpamSlowTransmitter_Thread");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CanSpamSlowTransmitter_StartThread(tCanSpamSlowTransmitter *env) {
|
||||
if (!env->thread.id) {
|
||||
env->thread.id = osThreadNew((osThreadFunc_t) (CanSpamSlowTransmitter_Thread), (void *) (env), &env->thread.attr);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include "LoggerInterface.h"
|
||||
|
||||
#define SPAM_CAN_HANDLER 0
|
||||
#define SPAM_SLOW_CAN_HANDLER 2
|
||||
|
||||
#define CCU_Stat1_SEND 1
|
||||
#define CCU_Stat2_SEND 1
|
||||
|
|
@ -26,7 +27,6 @@
|
|||
#define CU_AC_Ctrl_SEND 0
|
||||
|
||||
|
||||
|
||||
typedef enum {
|
||||
event_CCU_none = 0x00,
|
||||
event_CCU_Stat1_CYC = 0x01,
|
||||
|
|
@ -55,18 +55,18 @@ typedef struct {
|
|||
uint32_t time_CCU_Stat1_CYC;
|
||||
uint32_t time_CCU_Stat2_CYC;
|
||||
uint32_t time_CCU_Stat3_CYC;
|
||||
uint32_t time_CCU_Errors_CYC;
|
||||
// uint32_t time_CCU_Errors_CYC;
|
||||
uint32_t time_CCU_Requests;
|
||||
uint32_t time_CCU_HVC_Req_Msg;
|
||||
uint32_t time_CCU_VCU_Msg1;
|
||||
uint32_t time_CCU_VCU_Msg2;
|
||||
uint32_t time_CCU_Msg1;
|
||||
uint32_t time_CCU_Msg3;
|
||||
// uint32_t time_CCU_Msg3;
|
||||
uint32_t time_CCU_AC_Ctrl;
|
||||
|
||||
uint8_t CCU_HVC_Req_Msg_CCU_HVC_Req_RC;
|
||||
uint8_t CCU_Msg1_CCU_MSG1_RC;
|
||||
uint8_t CCU_Msg3_CCU_MSG3_RC;
|
||||
// uint8_t CCU_Msg3_CCU_MSG3_RC;
|
||||
|
||||
bool isMute;
|
||||
|
||||
|
|
@ -83,7 +83,8 @@ typedef struct {
|
|||
|
||||
} tCanSpamTransmitter;
|
||||
|
||||
void CanSpamTransmitter_Init(tCanSpamTransmitter *env, tSerialPortFrameIO *ioCanFrame, osMutexId_t modelTaskAccess, tLoggerInterface *logger);
|
||||
void CanSpamTransmitter_Init(tCanSpamTransmitter *env, tSerialPortFrameIO *ioCanFrame, osMutexId_t modelTaskAccess,
|
||||
tLoggerInterface *logger);
|
||||
|
||||
void CanSpamTransmitter_StartThread(tCanSpamTransmitter *env);
|
||||
|
||||
|
|
@ -91,4 +92,48 @@ void set_CanSpamTransmitter(tCanSpamTransmitter *env);
|
|||
|
||||
void set_CCU_Mute(tCanSpamTransmitter *env, bool mute);
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
|
||||
tSerialPortFrameIO *ioCanFrame;
|
||||
osMutexId_t access;
|
||||
can_rx_message_type canFrame;
|
||||
|
||||
uint32_t can_id;
|
||||
uint32_t timeMs;
|
||||
uint8_t ide;
|
||||
|
||||
|
||||
uint32_t time_CCU_Errors_CYC;
|
||||
uint32_t time_CCU_Msg3;
|
||||
|
||||
uint8_t CCU_Msg3_CCU_MSG3_RC;
|
||||
|
||||
bool isMute;
|
||||
|
||||
osMutexId_t modelTaskAccess;
|
||||
|
||||
tLoggerInterface *logger;
|
||||
|
||||
struct {
|
||||
osThreadId_t id;
|
||||
uint32_t stack[384];
|
||||
StaticTask_t controlBlock;
|
||||
osThreadAttr_t attr;
|
||||
} thread;
|
||||
|
||||
} tCanSpamSlowTransmitter;
|
||||
|
||||
|
||||
void CanSpamSlowTransmitter_Init(tCanSpamSlowTransmitter *env, tSerialPortFrameIO *ioCanFrame, osMutexId_t modelTaskAccess,
|
||||
tLoggerInterface *logger);
|
||||
|
||||
void CanSpamSlowTransmitter_StartThread(tCanSpamSlowTransmitter *env);
|
||||
|
||||
void set_CanSpamSlowTransmitter(tCanSpamSlowTransmitter *env);
|
||||
|
||||
void set_CCU_Slow_Mute(tCanSpamSlowTransmitter *env, bool mute);
|
||||
|
||||
|
||||
#endif //HVAC_M7_CANSPAMTRANSMITTER_H
|
||||
|
|
|
|||
Loading…
Reference in New Issue