Обновление

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 "CanSpamTransmitter.h"
#include "CmsisRtosThreadUtils.h" #include "CmsisRtosThreadUtils.h"
#include "CanPorts.h" #include "CanPorts.h"
#include "memory.h"
void CanSpamTransmitter_Init(tCanSpamTransmitter *env, void CanSpamTransmitter_Init(tCanSpamTransmitter *env,
tSerialPortFrameIO *ioCanFrame) { tSerialPortFrameIO *ioCanFrame) {
@ -205,82 +206,82 @@ static void CCU_Errors(tCanSpamTransmitter *env) {
// Incar temperature sensors for front zone error status // Incar temperature sensors for front zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Incar temperature sensors for rear zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Duct temperature sensors for front zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Duct temperature sensors for rear zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Evaporator temperature sensor for front zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Evaporator temperature sensor for rear zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Deflectors for front zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Deflectors for rear zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Pressure sensors error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Ambient temperature sensor error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Sealing valve error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // ETXV error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // HVAC fan or TXV for front zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // HVAC fan or TXV for rear zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Actuators for front zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Actuators for rear zone error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Ultraviolet system error status
// 3 : "Component malfunction" // 3 : "Component malfunction"
@ -289,12 +290,12 @@ static void CCU_Errors(tCanSpamTransmitter *env) {
// 1 : "Supply chain break // 1 : "Supply chain break
// 0 : "No error" // 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 // CCU VIN record error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Air quality sensor error status
// 4 : "Component malfunction" // 4 : "Component malfunction"
@ -302,17 +303,17 @@ static void CCU_Errors(tCanSpamTransmitter *env) {
// 2 : "Supply chain short circuit" // 2 : "Supply chain short circuit"
// 1 : "Supply chain break" // 1 : "Supply chain break"
// 0 : "No error" // 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 // CCU communication error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Two-way valve error status
// 1 : "Error" // 1 : "Error"
// 0 : "No 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 // Ionization system error status
// 4 : "Component malfunction" // 4 : "Component malfunction"
@ -323,7 +324,7 @@ static void CCU_Errors(tCanSpamTransmitter *env) {
// 1 : "Supply chain break // 1 : "Supply chain break
// 0 : "No error" // 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 // Aromatization system error status
// 4 : "Component malfunction" // 4 : "Component malfunction"
@ -334,7 +335,7 @@ static void CCU_Errors(tCanSpamTransmitter *env) {
// 1 : "Supply chain break // 1 : "Supply chain break
// 0 : "No error" // 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) { static void sendEventToCan(tCanSpamTransmitter *env) {
@ -486,10 +487,16 @@ static eTimeEventTransmit isEventTransmitter(tCanSpamTransmitter *env) {
return event_CCU_none; 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) { static _Noreturn void CanSpamTransmitter_Thread(tCanSpamTransmitter *env) {
for (;;) { for (;;) {
if (osMutexAcquire(env->access, 100) == osOK) { if (osMutexAcquire(env->access, 1000) == osOK) {
env->timeMs = GetSystemTick(); env->timeMs = GetSystemTick();

View File

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