Обновление

This commit is contained in:
cfif 2026-01-30 17:14:14 +03:00
parent 7abaa62de7
commit cdc6ef6bb1
2 changed files with 35 additions and 25 deletions

View File

@ -5,6 +5,7 @@
#include "CanSpamTransmitter.h"
#include "CmsisRtosThreadUtils.h"
#include "CanPorts.h"
#include "memory.h"
void CanSpamTransmitter_Init(tCanSpamTransmitter *env,
tSerialPortFrameIO *ioCanFrame) {
@ -198,89 +199,89 @@ static void CCU_Msg3(tCanSpamTransmitter *env) {
_m->CCU_MSG3_CS = d0 ^ d1 ^ d2 ^ d3;
}
static void CCU_Errors(tCanSpamTransmitter *env) {
static void CCU_Errors(tCanSpamTransmitter *env) {
CCU_Errors_t *_m = &ccu_candb_tx.CCU_Errors;
// Incar temperature sensors for front zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_IncarTempErrF_Stat = 0; // Bits= 1
_m->CCU_IncarTempErrF_Stat = env->CCU_Errors.CCU_IncarTempErrF_Stat; // Bits= 1
// Incar temperature sensors for rear zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_IncarTempErrR_Stat = 0; // Bits= 1
_m->CCU_IncarTempErrR_Stat = env->CCU_Errors.CCU_IncarTempErrR_Stat; // Bits= 1
// Duct temperature sensors for front zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_DuctTempSenErrF_Stat = 0; // Bits= 1
_m->CCU_DuctTempSenErrF_Stat = env->CCU_Errors.CCU_DuctTempSenErrF_Stat; // Bits= 1
// Duct temperature sensors for rear zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_DuctTempSenErrR_Stat = 0; // Bits= 1
_m->CCU_DuctTempSenErrR_Stat = env->CCU_Errors.CCU_DuctTempSenErrR_Stat; // Bits= 1
// Evaporator temperature sensor for front zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_EvaTempSenErrF_Stat = 0; // Bits= 1
_m->CCU_EvaTempSenErrF_Stat = env->CCU_Errors.CCU_EvaTempSenErrF_Stat; // Bits= 1
// Evaporator temperature sensor for rear zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_EvaTempSenErrR_Stat = 0; // Bits= 1
_m->CCU_EvaTempSenErrR_Stat = env->CCU_Errors.CCU_EvaTempSenErrR_Stat; // Bits= 1
// Deflectors for front zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_DeflectorSwErrF_Stat = 0; // Bits= 1
_m->CCU_DeflectorSwErrF_Stat = env->CCU_Errors.CCU_DeflectorSwErrF_Stat; // Bits= 1
// Deflectors for rear zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_DeflectorSwErrR_Stat = 0; // Bits= 1
_m->CCU_DeflectorSwErrR_Stat = env->CCU_Errors.CCU_DeflectorSwErrR_Stat; // Bits= 1
// Pressure sensors error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_PressSenErr_Stat = 0; // Bits= 1
_m->CCU_PressSenErr_Stat = env->CCU_Errors.CCU_PressSenErr_Stat; // Bits= 1
// Ambient temperature sensor error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_AmbienTemptSenErr_Stat = 0; // Bits= 1
_m->CCU_AmbienTemptSenErr_Stat = env->CCU_Errors.CCU_AmbienTemptSenErr_Stat; // Bits= 1
// Sealing valve error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_SealingValveErr_Stat = 0; // Bits= 1
_m->CCU_SealingValveErr_Stat = env->CCU_Errors.CCU_SealingValveErr_Stat; // Bits= 1
// ETXV error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_ETXVerr_Stat = 0; // Bits= 1
_m->CCU_ETXVerr_Stat = env->CCU_Errors.CCU_ETXVerr_Stat; // Bits= 1
// HVAC fan or TXV for front zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_HVACfanOrTXVerrF_Stat = 0; // Bits= 1
_m->CCU_HVACfanOrTXVerrF_Stat = env->CCU_Errors.CCU_HVACfanOrTXVerrF_Stat; // Bits= 1
// HVAC fan or TXV for rear zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_HVACfanOrTXVerrR_Stat = 0; // Bits= 1
_m->CCU_HVACfanOrTXVerrR_Stat = env->CCU_Errors.CCU_HVACfanOrTXVerrR_Stat; // Bits= 1
// Actuators for front zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_ActuatorErrF_Stat = 0; // Bits= 1
_m->CCU_ActuatorErrF_Stat = env->CCU_Errors.CCU_ActuatorErrF_Stat; // Bits= 1
// Actuators for rear zone error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_ActuatorErrR_Stat = 0; // Bits= 1
_m->CCU_ActuatorErrR_Stat = env->CCU_Errors.CCU_ActuatorErrR_Stat; // Bits= 1
// Ultraviolet system error status
// 3 : "Component malfunction"
@ -289,12 +290,12 @@ static void CCU_Errors(tCanSpamTransmitter *env) {
// 1 : "Supply chain break
// 0 : "No error"
_m->CCU_UltravioletErr_Stat = 0; // Bits= 2
_m->CCU_UltravioletErr_Stat = env->CCU_Errors.CCU_UltravioletErr_Stat; // Bits= 2
// CCU VIN record error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_VinRecordErr_Stat = 0; // Bits= 1
_m->CCU_VinRecordErr_Stat = env->CCU_Errors.CCU_VinRecordErr_Stat; // Bits= 1
// Air quality sensor error status
// 4 : "Component malfunction"
@ -302,17 +303,17 @@ static void CCU_Errors(tCanSpamTransmitter *env) {
// 2 : "Supply chain short circuit"
// 1 : "Supply chain break"
// 0 : "No error"
_m->CCU_AirQualSenErr_Stat = 0; // Bits= 3
_m->CCU_AirQualSenErr_Stat = env->CCU_Errors.CCU_AirQualSenErr_Stat; // Bits= 3
// CCU communication error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_CommErr_Stat = 0; // Bits= 1
_m->CCU_CommErr_Stat = env->CCU_Errors.CCU_CommErr_Stat; // Bits= 1
// Two-way valve error status
// 1 : "Error"
// 0 : "No error"
_m->CCU_TWVerr_Stat = 0; // Bits= 1
_m->CCU_TWVerr_Stat = env->CCU_Errors.CCU_TWVerr_Stat; // Bits= 1
// Ionization system error status
// 4 : "Component malfunction"
@ -323,7 +324,7 @@ static void CCU_Errors(tCanSpamTransmitter *env) {
// 1 : "Supply chain break
// 0 : "No error"
_m->CCU_IonizationErr_Stat = 0; // Bits= 3
_m->CCU_IonizationErr_Stat = env->CCU_Errors.CCU_IonizationErr_Stat; // Bits= 3
// Aromatization system error status
// 4 : "Component malfunction"
@ -334,7 +335,7 @@ static void CCU_Errors(tCanSpamTransmitter *env) {
// 1 : "Supply chain break
// 0 : "No error"
_m->CCU_AromaErr_Stat = 0; // Bits= 3
_m->CCU_AromaErr_Stat = env->CCU_Errors.CCU_AromaErr_Stat; // Bits= 3
}
static void sendEventToCan(tCanSpamTransmitter *env) {
@ -486,10 +487,16 @@ static eTimeEventTransmit isEventTransmitter(tCanSpamTransmitter *env) {
return event_CCU_none;
}
void set_CCU_Errors(tCanSpamTransmitter *env, CCU_Errors_t *CCU_Errors) {
if (osMutexAcquire(env->access, 1000) == osOK) {
memcpy(&env->CCU_Errors, CCU_Errors, sizeof(CCU_Errors_t));
osMutexRelease(env->access);
}
}
static _Noreturn void CanSpamTransmitter_Thread(tCanSpamTransmitter *env) {
for (;;) {
if (osMutexAcquire(env->access, 100) == osOK) {
if (osMutexAcquire(env->access, 1000) == osOK) {
env->timeMs = GetSystemTick();

View File

@ -46,6 +46,8 @@ typedef struct {
uint32_t time_CCU_Msg3;
uint32_t time_CCU_AC_Ctrl;
CCU_Errors_t CCU_Errors;
struct {
osThreadId_t id;
uint32_t stack[512];
@ -59,5 +61,6 @@ void CanSpamTransmitter_Init(tCanSpamTransmitter *env, tSerialPortFrameIO *ioCan
void CanSpamTransmitter_StartThread(tCanSpamTransmitter *env);
void set_CCU_Errors(tCanSpamTransmitter *env, CCU_Errors_t *CCU_Errors);
#endif //HVAC_M7_CANSPAMTRANSMITTER_H