Обновление

This commit is contained in:
cfif 2026-02-13 15:59:41 +03:00
parent 8eaee9d0d4
commit 4023c117d7
2 changed files with 310 additions and 139 deletions

View File

@ -9,7 +9,7 @@
#include "Lins.h"
#include "LoggerInterface.h"
#define LOG_SIGN "Lin0"
//#define LOG_SIGN "Lin0"
#define LOGGER env->logger
@ -551,13 +551,160 @@ static bool setState20(tLinTaskActuator *env, bool isError, uint8_t index) {
return false;
}
static bool isBroadCast(tLinTaskActuator *env) {
static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env) {
for (uint8_t j = 0; j < env->LIN_ISSR_ALL; ++j) {
if (env->linCommandActuator[j].BUS_ADR != 0) {
return false;
}
}
return true;
}
static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) {
lin_event_id_t ret = LIN_NO_EVENT;
if (isBroadCast(env)) {
//--------------------------------------BROADCAST---------------------------------------------------------
//--------------------------------------BROADCAST---------------------------------------------------------
//--------------------------------------BROADCAST---------------------------------------------------------
if (env->linCommandActuator[0].COM == LIN_ACT_CFR_MOD) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN, "Sending a command (BROADCAST): LIN_ACT_CFR_MOD (ADR = %d MODE = %d)",
env->linCommandActuator[0].BUS_ADR,
env->linCommandActuator[0].MODE)
#endif
ret = CFR_MOD_x(env->linIo, env->linData, env->linCommandActuator[0].BUS_ADR | 0x20,
env->linCommandActuator[0].MODE);
if (ret == LIN_TX_COMPLETED) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN,
"Command completed successfully (BROADCAST): LIN_ACT_CFR_MOD (ADR = %d MODE = %d)",
env->linCommandActuator[0].BUS_ADR,
env->linCommandActuator[0].MODE)
#endif
setState20(env, false, 0);
} else {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN, "Command failed (BROADCAST) [%d]: LIN_ACT_CFR_MOD (ADR = %d MODE = %d)",
env->linCommandActuator[0].BUS_ADR,
env->linCommandActuator[0].MODE)
#endif
setState20(env, true, 0);
}
}
if (env->linCommandActuator[0].COM == LIN_ACT_CFR_INI) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN, "Sending a command (BROADCAST): LIN_ACT_CFR_INI (ADR = %d POS = %d)",
env->linCommandActuator[0].BUS_ADR,
env->linCommandActuator[0].POS)
#endif
ret = CFR_INI_x(env->linIo, env->linData,
env->linCommandActuator[0].BUS_ADR | 0x20,
env->linCommandActuator[0].POS);
if (ret == LIN_TX_COMPLETED) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN,
"Command completed successfully (BROADCAST): LIN_ACT_CFR_INI (ADR = %d POS = %d)",
env->linCommandActuator[0].BUS_ADR, env->linCommandActuator[0].POS)
#endif
setState20(env, false, 0);
} else {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN, "Command failed (BROADCAST): LIN_ACT_CFR_INI (ADR = %d POS = %d)",
env->linCommandActuator[0].BUS_ADR,
env->linCommandActuator[0].POS)
#endif
setState20(env, true, 0);
}
}
if (env->linCommandActuator[0].COM == LIN_ACT_CFR_SET) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN,
"Sending a command (BROADCAST): LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)",
env->linCommandActuator[0].BUS_ADR,
env->linCommandActuator[0].POS,
env->linCommandActuator[0].Stall_SET,
env->linCommandActuator[0].Lnoise_SET,
env->linCommandActuator[0].Autos_SET,
env->linCommandActuator[0].Speed_SET,
env->linCommandActuator[0].Coils_Stop_SET
)
#endif
ret = CFR_SET_x(env->linIo, env->linData,
env->linCommandActuator[0].BUS_ADR | 0x20,
env->linCommandActuator[0].POS,
env->linCommandActuator[0].Stall_SET,
env->linCommandActuator[0].Lnoise_SET,
env->linCommandActuator[0].Autos_SET,
env->linCommandActuator[0].Speed_SET,
env->linCommandActuator[0].Coils_Stop_SET);
if (ret == LIN_TX_COMPLETED) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN,
"Command completed successfully (BROADCAST): LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)",
env->linCommandActuator[0].BUS_ADR,
env->linCommandActuator[0].POS,
env->linCommandActuator[0].Stall_SET,
env->linCommandActuator[0].Lnoise_SET,
env->linCommandActuator[0].Autos_SET,
env->linCommandActuator[0].Speed_SET,
env->linCommandActuator[0].Coils_Stop_SET)
#endif
setState20(env, false, 0);
} else {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN,
"Command failed (BROADCAST): LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)",
env->linCommandActuator[0].BUS_ADR,
env->linCommandActuator[0].POS,
env->linCommandActuator[0].Stall_SET,
env->linCommandActuator[0].Lnoise_SET,
env->linCommandActuator[0].Autos_SET,
env->linCommandActuator[0].Speed_SET,
env->linCommandActuator[0].Coils_Stop_SET
)
#endif
setState20(env, true, 0);
}
}
} else {
//--------------------------------------NO BROADCAST---------------------------------------------------------
//--------------------------------------NO BROADCAST---------------------------------------------------------
//--------------------------------------NO BROADCAST---------------------------------------------------------
for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) {
if (env->linCommandActuator[i].BUS_ADR == 0) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN, "Let's skip the command: LIN_ACT_CFR_MOD (ADR = %d MODE = %d)",
env->linCommandActuator[i].BUS_ADR,
env->linCommandActuator[i].MODE)
#endif
continue;
}
if (env->linCommandActuator[i].COM == LIN_ACT_CFR_MOD) {
#if (LOG_LIN_ACTUATOR == 1)
@ -594,6 +741,15 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env) {
for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) {
if (env->linCommandActuator[i].BUS_ADR == 0) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN, "Let's skip the command: LIN_ACT_CFR_INI (ADR = %d POS = %d)",
env->linCommandActuator[i].BUS_ADR,
env->linCommandActuator[i].POS)
#endif
continue;
}
if (env->linCommandActuator[i].COM == LIN_ACT_CFR_INI) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN, "Sending a command: LIN_ACT_CFR_INI (ADR = %d POS = %d)",
@ -628,6 +784,21 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env) {
for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) {
if (env->linCommandActuator[i].BUS_ADR == 0) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN,
"Let's skip the command: LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)",
env->linCommandActuator[i].BUS_ADR,
env->linCommandActuator[i].POS,
env->linCommandActuator[i].Stall_SET,
env->linCommandActuator[i].Lnoise_SET,
env->linCommandActuator[i].Autos_SET,
env->linCommandActuator[i].Speed_SET,
env->linCommandActuator[i].Coils_Stop_SET)
#endif
continue;
}
if (env->linCommandActuator[i].COM == LIN_ACT_CFR_SET) {
#if (LOG_LIN_ACTUATOR == 1)
LoggerFormatInfo(LOGGER, LOG_SIGN,
@ -638,8 +809,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env) {
env->linCommandActuator[i].Lnoise_SET,
env->linCommandActuator[i].Autos_SET,
env->linCommandActuator[i].Speed_SET,
env->linCommandActuator[i].Coils_Stop_SET
)
env->linCommandActuator[i].Coils_Stop_SET)
#endif
ret = CFR_SET_x(env->linIo, env->linData,
env->linCommandActuator[i].BUS_ADR | 0x20,
@ -685,6 +855,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env) {
}
}
} // BroadCast
for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) {
/*
@ -712,16 +883,16 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env) {
env->linCommandActuator[i].isRFR_STA = 0;
uint8_t BUS_ADR;
uint16_t CPOS_ALL;
eEmrf_Slave_STA Emrf_Slave;
eMode_Mod Mode_Slave;
uint8_t Error1_Supply_Slave;
uint8_t Error2_Communication_Slave;
uint8_t Error3_Temperature_Slave;
uint8_t Error4_Permanent_Electrical_Slave;
eStall_STA Stall_Slave;
eReset_STA Reset_Slave;
uint8_t BUS_ADR = 0;
uint16_t CPOS_ALL = 0;
eEmrf_Slave_STA Emrf_Slave = 0;
eMode_Mod Mode_Slave = 0;
uint8_t Error1_Supply_Slave = 0;
uint8_t Error2_Communication_Slave = 0;
uint8_t Error3_Temperature_Slave = 0;
uint8_t Error4_Permanent_Electrical_Slave = 0;
eStall_STA Stall_Slave = 0;
eReset_STA Reset_Slave = 0;
ret = RFR_STA_x(env->linIo, env->linData, i | 0x20,
&BUS_ADR,
@ -836,7 +1007,7 @@ bool setBusy(tLinTaskActuator *env) {
return false;
}
void resetStall(tLinTaskActuator *env, uint8_t *dataLocalStall) {
void resetStall(tLinTaskActuator *env, uint8_t *dataLocalStall, char *LOG_SIGN) {
for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) {
@ -879,7 +1050,7 @@ void Lin_1_Init(tLinTaskActuator *env,
env->LIN_ISSR_ALL = LIN_ISSR_ALL;
env->access = osMutexNew(NULL);
InitThreadAtrStatic(&env->threadLin.attr, "Lin1", env->threadLin.controlBlock, env->threadLin.stack,
InitThreadAtrStatic(&env->threadLin.attr, "Ln1", env->threadLin.controlBlock, env->threadLin.stack,
osPriorityNormal);
}
@ -888,7 +1059,7 @@ static _Noreturn void Lin1_Thread(tLinTaskActuator *env) {
for (;;) {
if (osMutexAcquire(env->access, 1000) == osOK) {
lin_event_id_t res = Lin_Scheduler(env);
lin_event_id_t res = Lin_Scheduler(env, "Ln1 ");
uint8_t isError = 0;
for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) {
@ -941,7 +1112,7 @@ void Lin_2_Init(tLinTaskActuator *env,
env->LIN_ISSR_ALL = LIN_ISSR_ALL;
env->access = osMutexNew(NULL);
InitThreadAtrStatic(&env->threadLin.attr, "Lin2", env->threadLin.controlBlock, env->threadLin.stack,
InitThreadAtrStatic(&env->threadLin.attr, "Ln2", env->threadLin.controlBlock, env->threadLin.stack,
osPriorityNormal);
}
@ -950,7 +1121,7 @@ static _Noreturn void Lin2_Thread(tLinTaskActuator *env) {
for (;;) {
if (osMutexAcquire(env->access, 1000) == osOK) {
lin_event_id_t res = Lin_Scheduler(env);
lin_event_id_t res = Lin_Scheduler(env, "Ln2 ");
uint8_t isError = 0;
for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) {
@ -1003,7 +1174,7 @@ void Lin_3_Init(tLinTaskActuator *env,
env->LIN_ISSR_ALL = LIN_ISSR_ALL;
env->access = osMutexNew(NULL);
InitThreadAtrStatic(&env->threadLin.attr, "Lin3", env->threadLin.controlBlock, env->threadLin.stack,
InitThreadAtrStatic(&env->threadLin.attr, "Ln3", env->threadLin.controlBlock, env->threadLin.stack,
osPriorityNormal);
}
@ -1012,7 +1183,7 @@ static _Noreturn void Lin3_Thread(tLinTaskActuator *env) {
for (;;) {
if (osMutexAcquire(env->access, 1000) == osOK) {
lin_event_id_t res = Lin_Scheduler(env);
lin_event_id_t res = Lin_Scheduler(env, "Ln3 ");
uint8_t isError = 0;
for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) {

View File

@ -10,7 +10,7 @@
#include "LinIO.h"
#include "LoggerInterface.h"
#define LOG_LIN_ACTUATOR 0
#define LOG_LIN_ACTUATOR 1
typedef struct __attribute__ ((packed)) {
uint8_t BUS_ADR;
@ -490,7 +490,7 @@ void Lin3_StartThread(tLinTaskActuator *env);
void GetLin123CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state);
void resetStall(tLinTaskActuator *env, uint8_t *dataLocalStall);
void resetStall(tLinTaskActuator *env, uint8_t *dataLocalStall, char *LOG_SIGN);
bool setBusy(tLinTaskActuator *env);
#endif //HVAC_LIN_TASKS_H