Обновление платы на V2

This commit is contained in:
cfif 2026-05-05 15:36:29 +03:00
parent eaa28ca1bc
commit ae739c1466
4 changed files with 182 additions and 30 deletions

76
CanSpamDebugReceiver.c Normal file
View File

@ -0,0 +1,76 @@
//
// Created by cfif on 05.04.2024.
//
#include <SystemDelayInterface.h>
#include "CanSpamDebugReceiver.h"
#include "CmsisRtosThreadUtils.h"
#include "CanPorts.h"
#include "string.h"
#include "HVAC_model.h"
#define LOG_SIGN "CAN_DEBUG_RECEIVED"
#define LOGGER env->logger
void CanSpamDebugReceiver_Init(tCanSpamDebugReceiver *env,
tSerialPortFrameIO *ioCanFrame,
tLoggerInterface *logger) {
env->ioCanFrame = ioCanFrame;
env->logger = logger;
env->access = osMutexNew(NULL);
InitThreadAtrStatic(&env->thread.attr, "CanSpamDebugRec", env->thread.controlBlock, env->thread.stack,
osPriorityNormal);
}
static void ListenCanSpamDebugReceiver(tCanSpamDebugReceiver *env) {
uint16_t recv = env->ioCanFrame->receive(env->ioCanFrame->env, PROTOCOL_CAN_RAW, (uint8_t *) &env->canFrame, 1,
1000);
if (recv == 0)
return;
if (osMutexAcquire(env->access, 5000) == osOK) {
uint32_t id = env->canFrame.standard_id;
if (env->canFrame.id_type == FLEXCAN_ID_EXT) {
id = env->canFrame.extended_id;
}
uint32_t result = ccu_candb_dbg_Receive(&ccu_candb_dbg_rx, env->canFrame.data, id, env->canFrame.dlc);
osMutexRelease(env->access);
} else {
LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error ListenCanSpamDebugReceiver");
}
}
uint8_t get_CanSpamDebugReceiverMultiIndex(tCanSpamDebugReceiver *env) {
uint8_t index = 0;
if (osMutexAcquire(env->access, 5000) == osOK) {
index = ccu_candb_dbg_rx.dbg_Cmd_Act_Information.Cmd_Target_Act_Index;
osMutexRelease(env->access);
} else {
LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error get_CanSpamDebugReceiver");
}
return index;
}
static _Noreturn void CanSpamDebugReceiver_Thread(tCanSpamDebugReceiver *env) {
for (;;) {
ListenCanSpamDebugReceiver(env);
}
}
void CanSpamDebugReceiver_StartThread(tCanSpamDebugReceiver *env) {
if (!env->thread.id) {
env->thread.id = osThreadNew((osThreadFunc_t) (CanSpamDebugReceiver_Thread), (void *) (env), &env->thread.attr);
}
}

37
CanSpamDebugReceiver.h Normal file
View File

@ -0,0 +1,37 @@
//
// Created by cfif on 05.04.2024.
//
#ifndef HVAC_CAN_SPAM_DEBUG_RECEIVER_H
#define HVAC_CAN_SPAM_DEBUG_RECEIVER_H
#include <cmsis_os.h>
#include "CanSerialPortFrame.h"
#include "ccu_candb_dbg-binutil.h"
#include "LoggerInterface.h"
typedef struct {
tSerialPortFrameIO *ioCanFrame;
osMutexId_t access;
can_rx_message_type canFrame;
tLoggerInterface *logger;
struct {
osThreadId_t id;
uint32_t stack[384];
StaticTask_t controlBlock;
osThreadAttr_t attr;
} thread;
} tCanSpamDebugReceiver;
void CanSpamDebugReceiver_Init(tCanSpamDebugReceiver *env, tSerialPortFrameIO *ioCanFrame, tLoggerInterface *logger);
void CanSpamDebugReceiver_StartThread(tCanSpamDebugReceiver *env);
uint8_t get_CanSpamDebugReceiverMultiIndex(tCanSpamDebugReceiver *env);
#endif //HVAC_CAN_SPAM_DEBUG_RECEIVER_H

View File

@ -6,16 +6,19 @@
#include "CmsisRtosThreadUtils.h"
#include "CanPorts.h"
#include "memory.h"
#include "HVAC_model.h"
#define LOG_SIGN "CAN_DEBUG_TRANSMITTER"
#define LOGGER env->logger
void CanSpamDebugTransmitter_Init(tCanSpamDebugTransmitter *env,
tSerialPortFrameIO *ioCanFrame,
tCanSpamDebugReceiver *canSpamDebugReceiver,
tLoggerInterface *logger) {
env->ioCanFrame = ioCanFrame;
env->logger = logger;
env->canSpamDebugReceiver = canSpamDebugReceiver;
env->access = osMutexNew(NULL);
InitThreadAtrStatic(&env->thread.attr, "CanSpamDebugTrans", env->thread.controlBlock, env->thread.stack,
@ -42,7 +45,8 @@ static eTimeEventDbgTransmit isEventTransmitter(tCanSpamDebugTransmitter *env) {
if (env->time_dbg_Act0_CYC < env->timeMs) {
env->time_dbg_Act0_CYC = env->timeMs + dbg_Act0_CYC;
env->can_id = Pack_dbg_Act0_candb_dbg(&ccu_candb_dbg_tx.dbg_Act0, env->canFrame.data, &env->canFrame.dlc, &env->ide);
env->can_id = Pack_dbg_Act0_candb_dbg(&ccu_candb_dbg_tx.dbg_Act0, env->canFrame.data, &env->canFrame.dlc,
&env->ide);
return event_dbg_Act0_CYC;
}
@ -52,7 +56,8 @@ static eTimeEventDbgTransmit isEventTransmitter(tCanSpamDebugTransmitter *env) {
if (env->time_dbg_Act1_CYC < env->timeMs) {
env->time_dbg_Act1_CYC = env->timeMs + dbg_Act1_CYC;
env->can_id = Pack_dbg_Act1_candb_dbg(&ccu_candb_dbg_tx.dbg_Act1, env->canFrame.data, &env->canFrame.dlc, &env->ide);
env->can_id = Pack_dbg_Act1_candb_dbg(&ccu_candb_dbg_tx.dbg_Act1, env->canFrame.data, &env->canFrame.dlc,
&env->ide);
return event_dbg_Act1_CYC;
}
@ -62,7 +67,8 @@ static eTimeEventDbgTransmit isEventTransmitter(tCanSpamDebugTransmitter *env) {
if (env->time_dbg_Act2_CYC < env->timeMs) {
env->time_dbg_Act2_CYC = env->timeMs + dbg_Act2_CYC;
env->can_id = Pack_dbg_Act2_candb_dbg(&ccu_candb_dbg_tx.dbg_Act2, env->canFrame.data, &env->canFrame.dlc, &env->ide);
env->can_id = Pack_dbg_Act2_candb_dbg(&ccu_candb_dbg_tx.dbg_Act2, env->canFrame.data, &env->canFrame.dlc,
&env->ide);
return event_dbg_Act2_CYC;
}
@ -304,7 +310,17 @@ static eTimeEventDbgTransmit isEventTransmitter(tCanSpamDebugTransmitter *env) {
if (env->time_dbg_Sen_Duct_CYC < env->timeMs) {
env->time_dbg_Sen_Duct_CYC = env->timeMs + dbg_Sen_Duct_CYC;
env->can_id = Pack_dbg_Sen_Duct_candb_dbg(&ccu_candb_dbg_tx.dbg_Sen_Duct, env->canFrame.data, &env->canFrame.dlc, &env->ide);
ccu_candb_dbg_tx.dbg_Sen_Duct.dbg_Sen_Duct_MultMsg_Idx = env->dbg_Sen_Duct_MultMsg_Idx;
env->can_id = Pack_dbg_Sen_Duct_candb_dbg(&ccu_candb_dbg_tx.dbg_Sen_Duct, env->canFrame.data,
&env->canFrame.dlc, &env->ide);
++env->dbg_Sen_Duct_MultMsg_Idx;
if (env->dbg_Sen_Duct_MultMsg_Idx > 3) {
env->dbg_Sen_Duct_MultMsg_Idx = 0;
}
return event_dbg_Sen_Duct_CYC;
}
@ -314,7 +330,8 @@ static eTimeEventDbgTransmit isEventTransmitter(tCanSpamDebugTransmitter *env) {
if (env->time_dbg_Sen_Eva_CYC < env->timeMs) {
env->time_dbg_Sen_Eva_CYC = env->timeMs + dbg_Sen_Eva_CYC;
env->can_id = Pack_dbg_Sen_Eva_candb_dbg(&ccu_candb_dbg_tx.dbg_Sen_Eva, env->canFrame.data, &env->canFrame.dlc, &env->ide);
env->can_id = Pack_dbg_Sen_Eva_candb_dbg(&ccu_candb_dbg_tx.dbg_Sen_Eva, env->canFrame.data, &env->canFrame.dlc,
&env->ide);
return event_dbg_Sen_Eva_CYC;
}
@ -333,6 +350,21 @@ static eTimeEventDbgTransmit isEventTransmitter(tCanSpamDebugTransmitter *env) {
return event_dbg_none;
}
void set_CanDebugSpamTransmitter(tCanSpamDebugTransmitter *env) {
if (osMutexAcquire(env->access, 5000) == osOK) {
memcpy(&ccu_candb_dbg_tx.dbg_Act0, &rtY.dbgCAN_dbg_Act0_model, sizeof(ccu_candb_dbg_tx.dbg_Act0));
memcpy(&ccu_candb_dbg_tx.dbg_Act1, &rtY.dbgCAN_dbg_Act1_model, sizeof(ccu_candb_dbg_tx.dbg_Act1));
memcpy(&ccu_candb_dbg_tx.dbg_Act2, &rtY.dbgCAN_dbg_Act2_model, sizeof(ccu_candb_dbg_tx.dbg_Act2));
memcpy(&ccu_candb_dbg_tx.dbg_Sen_Duct, &rtY.dbgCAN_dbg_Sen_Duct_model, sizeof(ccu_candb_dbg_tx.dbg_Sen_Duct));
memcpy(&ccu_candb_dbg_tx.dbg_Sen_Eva, &rtY.dbgCAN_dbg_Sen_Eva_model, sizeof(ccu_candb_dbg_tx.dbg_Sen_Eva));
osMutexRelease(env->access);
} else {
LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error set_CanDebugSpamTransmitter");
}
}
static _Noreturn void CanSpamDebugTransmitter_Thread(tCanSpamDebugTransmitter *env) {
for (;;) {

View File

@ -9,36 +9,37 @@
#include "CanSerialPortFrame.h"
#include "ccu_candb_dbg-binutil.h"
#include "LoggerInterface.h"
#include "CanSpamDebugReceiver.h"
#define dbg_Act0_SEND 1
#define dbg_Act1_SEND 1
#define dbg_Act2_SEND 1
#define dbg_Auto_AF_SEND 1
#define dbg_Auto_Duct_SEND 1
#define dbg_Auto_Valve_Plus_SEND 1
#define dbg_CCU_Info_SEND 1
#define dbg_CCU_IO_SEND 1
#define dbg_DiffBlr_ValveOpen_SEND 1
#define dbg_Drs_SEND 1
#define dbg_Info_Act1_SEND 1
#define dbg_Info_Act2_SEND 1
#define dbg_LIN_AirQS_Stat_SEND 1
#define dbg_LIN_Aroma_Stat_SEND 1
#define dbg_LIN_DRS_Stat_SEND 1
#define dbg_LIN_eTXV_Stat_SEND 1
#define dbg_LIN_Ionizer_Stat_SEND 1
#define dbg_Logic_Ac_SEND 1
#define dbg_Logic_Blower_SEND 1
#define dbg_Logic_KM_Status_SEND 1
#define dbg_Logic_Rec_SEND 1
#define dbg_Logic_State_SEND 1
#define dbg_Logic_Valve_SEND 1
#define dbg_Sen_0_SEND 1
#define dbg_Sen_Amb_SEND 1
#define dbg_Sen_Demist_SEND 1
#define dbg_Auto_AF_SEND 0
#define dbg_Auto_Duct_SEND 0
#define dbg_Auto_Valve_Plus_SEND 0
#define dbg_CCU_Info_SEND 0
#define dbg_CCU_IO_SEND 0
#define dbg_DiffBlr_ValveOpen_SEND 0
#define dbg_Drs_SEND 0
#define dbg_Info_Act1_SEND 0
#define dbg_Info_Act2_SEND 0
#define dbg_LIN_AirQS_Stat_SEND 0
#define dbg_LIN_Aroma_Stat_SEND 0
#define dbg_LIN_DRS_Stat_SEND 0
#define dbg_LIN_eTXV_Stat_SEND 0
#define dbg_LIN_Ionizer_Stat_SEND 0
#define dbg_Logic_Ac_SEND 0
#define dbg_Logic_Blower_SEND 0
#define dbg_Logic_KM_Status_SEND 0
#define dbg_Logic_Rec_SEND 0
#define dbg_Logic_State_SEND 0
#define dbg_Logic_Valve_SEND 0
#define dbg_Sen_0_SEND 0
#define dbg_Sen_Amb_SEND 0
#define dbg_Sen_Demist_SEND 0
#define dbg_Sen_Duct_SEND 1
#define dbg_Sen_Eva_SEND 1
#define dbg_Sen_Incar_SEND 1
#define dbg_Sen_Incar_SEND 0
#define dbg_Act0_CYC 100
@ -104,6 +105,8 @@ typedef struct {
osMutexId_t access;
can_rx_message_type canFrame;
tCanSpamDebugReceiver *canSpamDebugReceiver;
uint32_t can_id;
uint32_t timeMs;
uint8_t ide;
@ -140,6 +143,8 @@ typedef struct {
tLoggerInterface *logger;
uint8_t dbg_Sen_Duct_MultMsg_Idx;
struct {
osThreadId_t id;
uint32_t stack[384];
@ -150,9 +155,11 @@ typedef struct {
} tCanSpamDebugTransmitter;
void
CanSpamDebugTransmitter_Init(tCanSpamDebugTransmitter *env, tSerialPortFrameIO *ioCanFrame, tLoggerInterface *logger);
CanSpamDebugTransmitter_Init(tCanSpamDebugTransmitter *env, tSerialPortFrameIO *ioCanFrame,
tCanSpamDebugReceiver *canSpamDebugReceiver, tLoggerInterface *logger);
void CanSpamDebugTransmitter_StartThread(tCanSpamDebugTransmitter *env);
void set_CanDebugSpamTransmitter(tCanSpamDebugTransmitter *env);
#endif //HVAC_M7_CANSPAMDEBUGTRANSMITTER_H