diff --git a/LinTasks.c b/LinTasks.c index 7a32a20..2f30351 100644 --- a/LinTasks.c +++ b/LinTasks.c @@ -7,6 +7,10 @@ #include "CanPorts.h" #include "fc7xxx_driver_lin.h" #include "Lins.h" +#include "LoggerInterface.h" + +#define LOG_SIGN "Lin0" +#define LOGGER env->logger //начало----------------------------------------- LIN 0 ---------------------------------------------------------------- //начало----------------------------------------- LIN 0 ---------------------------------------------------------------- @@ -522,10 +526,12 @@ lin_event_id_t CFR_PRG_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS, */ void Lin_0_Init(tLinTaskActuator *env, tLinData *linData, - tLinIO *linIO) { + tLinIO *linIO, + tLoggerInterface *logger) { env->linIo = linIO; env->linData = linData; + env->logger = logger; env->access = osMutexNew(NULL); InitThreadAtrStatic(&env->thread.attr, "Lin0", env->thread.controlBlock, env->thread.stack, @@ -693,8 +699,17 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { env->linStateActuator[BUS_ADR].Error2_Communication_Slave = Error2_Communication_Slave; env->linStateActuator[BUS_ADR].Error3_Temperature_Slave = Error3_Temperature_Slave; env->linStateActuator[BUS_ADR].Error4_Permanent_Electrical_Slave = Error4_Permanent_Electrical_Slave; - env->linStateActuator[BUS_ADR].Stall_Slave = Stall_Slave; + + if (env->linStateActuator[BUS_ADR].Stall_Slave == LIN_STALL_STA_OFF) { + env->linStateActuator[BUS_ADR].Stall_Slave = Stall_Slave; + } + env->linStateActuator[BUS_ADR].Reset_Slave = Reset_Slave; + + LoggerFormatInfo(LOGGER, LOG_SIGN, "BUS_ADR = %d, CPOS_ALL = %d, Stall_Slave = %d", BUS_ADR, + env->linStateActuator[BUS_ADR].CPOS_ALL, + env->linStateActuator[BUS_ADR].Stall_Slave) + } else { asm("nop"); } @@ -734,6 +749,29 @@ static void isEnterCommand(tLinTaskActuator *env) { } + +void resetStall(tLinTaskActuator *env) { + + for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { + + if (env->linCommandActuator[i].COM == LIN_ACT_CFR_SET) { + + env->linStateActuator[i].Stall_Slave = LIN_STALL_STA_OFF; + + if (env->linCommandActuator[i].BUS_ADR == 0x20) { + + for (uint8_t j = 0; j < LIN0_ISSR_ALL; ++j) { + env->linStateActuator[j].Stall_Slave = LIN_STALL_STA_OFF; + } + + return; + } + + } + } + +} + static _Noreturn void Lin0_Thread(tLinTaskActuator *env) { for (;;) { diff --git a/LinTasks.h b/LinTasks.h index 7add588..72ef01e 100644 --- a/LinTasks.h +++ b/LinTasks.h @@ -8,6 +8,7 @@ #include #include "stdbool.h" #include "LinIO.h" +#include "LoggerInterface.h" typedef struct __attribute__ ((packed)) { @@ -461,6 +462,8 @@ typedef struct { tLinData *linData; + tLoggerInterface *logger; + struct { osThreadId_t id; uint32_t stack[1024]; @@ -472,10 +475,13 @@ typedef struct { void Lin_0_Init(tLinTaskActuator *env, tLinData *linData, - tLinIO *linIO); + tLinIO *linIO, + tLoggerInterface *logger); void Lin0_StartThread(tLinTaskActuator *env); void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state); +void resetStall(tLinTaskActuator *env); + #endif //HVAC_LIN_TASKS_H