diff --git a/LinTasks.c b/LinTasks.c index b37a719..1f640dc 100644 --- a/LinTasks.c +++ b/LinTasks.c @@ -576,7 +576,7 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { if (env->linCommandActuator[i].COM == LIN_ACT_CFR_MOD) { - ret = CFR_MOD_x(env->linIo, env->linData, env->linCommandActuator[i].BUS_ADR, + ret = CFR_MOD_x(env->linIo, env->linData, env->linCommandActuator[i].BUS_ADR | 0x20, env->linCommandActuator[i].MODE); if (ret == LIN_TX_COMPLETED) { @@ -598,7 +598,7 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { if (env->linCommandActuator[i].COM == LIN_ACT_CFR_INI) { ret = CFR_INI_x(env->linIo, env->linData, - env->linCommandActuator[i].BUS_ADR, + env->linCommandActuator[i].BUS_ADR | 0x20, env->linCommandActuator[i].POS); if (ret == LIN_TX_COMPLETED) { @@ -618,7 +618,7 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { if (env->linCommandActuator[i].COM == LIN_ACT_CFR_SET) { ret = CFR_SET_x(env->linIo, env->linData, - env->linCommandActuator[i].BUS_ADR, + env->linCommandActuator[i].BUS_ADR | 0x20, env->linCommandActuator[i].POS, env->linCommandActuator[i].Stall_SET, env->linCommandActuator[i].Lnoise_SET, @@ -706,9 +706,9 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { 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) +// 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"); @@ -736,20 +736,19 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { return LIN_NO_EVENT; } -static void isEnterCommand(tLinTaskActuator *env) { +bool setBusy(tLinTaskActuator *env) { - for (uint8_t j = 0; j < 5; ++j) { - for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { - if (env->linCommandActuator[i].COM != LIN_ACT_CFR_NONE) { - return; - } + for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { + + if (env->linCommandActuator[i].COM != LIN_ACT_CFR_NONE) { + env->busy = true; + return true; } - SystemDelayMs(100); } + return false; } - void resetStall(tLinTaskActuator *env) { for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { @@ -790,10 +789,12 @@ static _Noreturn void Lin0_Thread(tLinTaskActuator *env) { env->error_connect = 0; } + env->busy = false; + osMutexRelease(env->access); } - isEnterCommand(env); + SystemDelayMs(500); } } diff --git a/LinTasks.h b/LinTasks.h index 72ef01e..e6b41a6 100644 --- a/LinTasks.h +++ b/LinTasks.h @@ -454,7 +454,7 @@ typedef struct { tLinIO *linIo; osMutexId_t access; - uint8_t busy; // Устройство занято + bool busy; // Устройство занято uint8_t error_connect; // Ошибка соединения (устройство не отвечает) tLinStateFullActuator linStateActuator[9]; @@ -484,4 +484,6 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state); void resetStall(tLinTaskActuator *env); +bool setBusy(tLinTaskActuator *env); + #endif //HVAC_LIN_TASKS_H