From 05830fb4fa7b51299873534a3b5aabe8deacef38 Mon Sep 17 00:00:00 2001 From: cfif Date: Fri, 28 Nov 2025 11:47:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LinTasks.c | 483 +++++++++++++++++++++++++++++++++++------------------ LinTasks.h | 13 ++ 2 files changed, 330 insertions(+), 166 deletions(-) diff --git a/LinTasks.c b/LinTasks.c index a044366..ff04178 100644 --- a/LinTasks.c +++ b/LinTasks.c @@ -102,21 +102,22 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) { osMessageQueuePut(env->rxDataQueue, (uint8_t *) &pXferState->currentEventId, 0x0, 0U); } -static lin_event_id_t SEND_ACTUATOR_COM_x(tLinTaskActuator *env, uint8_t COM_ADR) { - lin_event_id_t res = env->linIo->runCommand(env->linIo->env, COM_ADR, 50); +static lin_event_id_t SEND_ACTUATOR_COM_x(tLinIO *linIo, uint8_t COM_ADR) { + lin_event_id_t res = linIo->runCommand(linIo->env, COM_ADR, 50); SystemDelayMs(20); return res; } -lin_event_id_t DFR_PRG_x(tLinTaskActuator *env, uint8_t BUS_ADR) { +lin_event_id_t DFR_PRG_x(tLinIO *linIo, tLinData *linData, + uint8_t BUS_ADR) { lin_event_id_t res; - env->linData->direction = LIN_DIRECTION_SET; - env->linData->g_aTxBufferLen = sizeof(ACT_DFR_PRG); - env->linData->g_aRxBufferLen = 0; + linData->direction = LIN_DIRECTION_SET; + linData->g_aTxBufferLen = sizeof(ACT_DFR_PRG); + linData->g_aRxBufferLen = 0; - ACT_DFR_PRG *ACT_DFR_PRG_ = (ACT_DFR_PRG *) env->linData->g_aTxBuffer; + ACT_DFR_PRG *ACT_DFR_PRG_ = (ACT_DFR_PRG *) linData->g_aTxBuffer; ACT_DFR_PRG_->BUS_ADR = BUS_ADR; ACT_DFR_PRG_->Data1_DFR_PRG = 0xFF; @@ -124,7 +125,7 @@ lin_event_id_t DFR_PRG_x(tLinTaskActuator *env, uint8_t BUS_ADR) { while (retry) { - res = SEND_ACTUATOR_COM_x(env->linIo->env, DFR_PRG); + res = SEND_ACTUATOR_COM_x(linIo, DFR_PRG); if (res == LIN_TX_COMPLETED) { break; @@ -136,30 +137,37 @@ lin_event_id_t DFR_PRG_x(tLinTaskActuator *env, uint8_t BUS_ADR) { return res; } -lin_event_id_t RFR_PRG_x(tLinTaskActuator *env, uint8_t BUS_ADR) { +lin_event_id_t RFR_PRG_x(tLinIO *linIo, tLinData *linData, + uint8_t *BUS_ADR, + uint8_t *BUS_NEW_ADR, + uint8_t *NOTL_DREH_Master, + uint8_t *NOTL_ENAB_Master, + uint8_t *DREH_Slave, + uint8_t *ParitySlave, + uint8_t *Version_CFR) { lin_event_id_t res; - env->linData->direction = LIN_DIRECTION_GET; + linData->direction = LIN_DIRECTION_GET; - env->linData->g_aTxBufferLen = 0; - env->linData->g_aRxBufferLen = sizeof(ACT_RFR_PRG); + linData->g_aTxBufferLen = 0; + linData->g_aRxBufferLen = sizeof(ACT_RFR_PRG); - ACT_RFR_PRG *ACT_RFR_PRG_ = (ACT_RFR_PRG *) env->linData->g_aRxBuffer; + ACT_RFR_PRG *ACT_RFR_PRG_ = (ACT_RFR_PRG *) linData->g_aRxBuffer; uint8_t retry = 3; while (retry) { - res = SEND_ACTUATOR_COM_x(env->linIo->env, RFR_PRG); + res = SEND_ACTUATOR_COM_x(linIo, RFR_PRG); if (res == LIN_RX_COMPLETED) { - - env->linStateActuator[BUS_ADR].BUS_NEW_ADR = ACT_RFR_PRG_->BUS_NEW_ADR; - env->linStateActuator[BUS_ADR].NOTL_DREH_Master = ACT_RFR_PRG_->NOTL_DREH_Master; - env->linStateActuator[BUS_ADR].NOTL_ENAB_Master = ACT_RFR_PRG_->NOTL_ENAB_Master; - env->linStateActuator[BUS_ADR].DREH_Slave = ACT_RFR_PRG_->DREH_Slave; - env->linStateActuator[BUS_ADR].ParitySlave = ACT_RFR_PRG_->ParitySlave; - env->linStateActuator[BUS_ADR].Version_CFR = ACT_RFR_PRG_->Version_CFR; + *BUS_ADR = ACT_RFR_PRG_->BUS_ADR; + *BUS_NEW_ADR = ACT_RFR_PRG_->BUS_NEW_ADR; + *NOTL_DREH_Master = ACT_RFR_PRG_->NOTL_DREH_Master; + *NOTL_ENAB_Master = ACT_RFR_PRG_->NOTL_ENAB_Master; + *DREH_Slave = ACT_RFR_PRG_->DREH_Slave; + *ParitySlave = ACT_RFR_PRG_->ParitySlave; + *Version_CFR = ACT_RFR_PRG_->Version_CFR; break; } @@ -171,14 +179,15 @@ lin_event_id_t RFR_PRG_x(tLinTaskActuator *env, uint8_t BUS_ADR) { } -lin_event_id_t DFR_IDE_x(tLinTaskActuator *env, uint8_t BUS_ADR) { +lin_event_id_t DFR_IDE_x(tLinIO *linIo, tLinData *linData, + uint8_t BUS_ADR) { lin_event_id_t res; - env->linData->direction = LIN_DIRECTION_SET; - env->linData->g_aTxBufferLen = sizeof(ACT_DFR_IDE); - env->linData->g_aRxBufferLen = 0; + linData->direction = LIN_DIRECTION_SET; + linData->g_aTxBufferLen = sizeof(ACT_DFR_IDE); + linData->g_aRxBufferLen = 0; - ACT_DFR_IDE *ACT_DFR_IDE_ = (ACT_DFR_IDE *) env->linData->g_aTxBuffer; + ACT_DFR_IDE *ACT_DFR_IDE_ = (ACT_DFR_IDE *) linData->g_aTxBuffer; ACT_DFR_IDE_->BUS_ADR = BUS_ADR; ACT_DFR_IDE_->Data1_DFR_IDE = 0xFF; @@ -186,7 +195,7 @@ lin_event_id_t DFR_IDE_x(tLinTaskActuator *env, uint8_t BUS_ADR) { while (retry) { - res = SEND_ACTUATOR_COM_x(env->linIo->env, DFR_IDE); + res = SEND_ACTUATOR_COM_x(linIo, DFR_IDE); if (res == LIN_TX_COMPLETED) { break; @@ -198,27 +207,31 @@ lin_event_id_t DFR_IDE_x(tLinTaskActuator *env, uint8_t BUS_ADR) { return res; } -lin_event_id_t RFR_IDE_x(tLinTaskActuator *env, uint8_t BUS_ADR) { +lin_event_id_t RFR_IDE_x(tLinIO *linIo, tLinData *linData, + uint8_t *BUS_ADR, + uint8_t *IDE_ref, + uint8_t *IDE_Sup, + uint8_t *IDE_Har) { lin_event_id_t res; - env->linData->direction = LIN_DIRECTION_GET; + linData->direction = LIN_DIRECTION_GET; - env->linData->g_aTxBufferLen = 0; - env->linData->g_aRxBufferLen = sizeof(ACT_RFR_IDE); + linData->g_aTxBufferLen = 0; + linData->g_aRxBufferLen = sizeof(ACT_RFR_IDE); - ACT_RFR_IDE *ACT_RFR_IDE_ = (ACT_RFR_IDE *) env->linData->g_aRxBuffer; + ACT_RFR_IDE *ACT_RFR_IDE_ = (ACT_RFR_IDE *) linData->g_aRxBuffer; uint8_t retry = 3; while (retry) { - res = SEND_ACTUATOR_COM_x(env->linIo->env, RFR_IDE); + res = SEND_ACTUATOR_COM_x(linIo, RFR_IDE); if (res == LIN_RX_COMPLETED) { - - env->linStateActuator[BUS_ADR].IDE_ref = ACT_RFR_IDE_->IDE_ref; - env->linStateActuator[BUS_ADR].IDE_Sup = ACT_RFR_IDE_->IDE_Sup; - env->linStateActuator[BUS_ADR].IDE_Har = ACT_RFR_IDE_->IDE_Har; + *BUS_ADR = ACT_RFR_IDE_->BUS_ADR; + *IDE_ref = ACT_RFR_IDE_->IDE_ref; + *IDE_Sup = ACT_RFR_IDE_->IDE_Sup; + *IDE_Har = ACT_RFR_IDE_->IDE_Har; break; } @@ -229,14 +242,14 @@ lin_event_id_t RFR_IDE_x(tLinTaskActuator *env, uint8_t BUS_ADR) { return res; } -lin_event_id_t DFR_STA_x(tLinTaskActuator *env, uint8_t BUS_ADR) { +lin_event_id_t DFR_STA_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADR) { lin_event_id_t res; - env->linData->direction = LIN_DIRECTION_SET; - env->linData->g_aTxBufferLen = sizeof(ACT_DFR_STA); - env->linData->g_aRxBufferLen = 0; + linData->direction = LIN_DIRECTION_SET; + linData->g_aTxBufferLen = sizeof(ACT_DFR_STA); + linData->g_aRxBufferLen = 0; - ACT_DFR_STA *ACT_DFR_STA_ = (ACT_DFR_STA *) env->linData->g_aTxBuffer; + ACT_DFR_STA *ACT_DFR_STA_ = (ACT_DFR_STA *) linData->g_aTxBuffer; ACT_DFR_STA_->BUS_ADR = BUS_ADR; ACT_DFR_STA_->Data1_DFR_STA = 0xFF; @@ -244,7 +257,7 @@ lin_event_id_t DFR_STA_x(tLinTaskActuator *env, uint8_t BUS_ADR) { while (retry) { - res = SEND_ACTUATOR_COM_x(env->linIo->env, DFR_STA); + res = SEND_ACTUATOR_COM_x(linIo, DFR_STA); if (res == LIN_TX_COMPLETED) { break; @@ -256,34 +269,44 @@ lin_event_id_t DFR_STA_x(tLinTaskActuator *env, uint8_t BUS_ADR) { return res; } -lin_event_id_t RFR_STA_x(tLinTaskActuator *env, uint8_t BUS_ADR) { +lin_event_id_t RFR_STA_x(tLinIO *linIo, tLinData *linData, + 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) { lin_event_id_t res; - env->linData->direction = LIN_DIRECTION_GET; + linData->direction = LIN_DIRECTION_GET; - env->linData->g_aTxBufferLen = 0; - env->linData->g_aRxBufferLen = sizeof(ACT_RFR_STA); + linData->g_aTxBufferLen = 0; + linData->g_aRxBufferLen = sizeof(ACT_RFR_STA); - ACT_RFR_STA *ACT_RFR_STA_ = (ACT_RFR_STA *) env->linData->g_aRxBuffer; + ACT_RFR_STA *ACT_RFR_STA_ = (ACT_RFR_STA *) linData->g_aRxBuffer; uint8_t retry = 3; while (retry) { - res = SEND_ACTUATOR_COM_x(env->linIo->env, RFR_STA); + res = SEND_ACTUATOR_COM_x(linIo, RFR_STA); if (res == LIN_RX_COMPLETED) { - env->linStateActuator[BUS_ADR].CPOS_ALL = ACT_RFR_STA_->CPOS_ALL; - env->linStateActuator[BUS_ADR].Emrf_Slave = ACT_RFR_STA_->Emrf_Slave; - env->linStateActuator[BUS_ADR].Mode_Slave = ACT_RFR_STA_->Mode_Slave; - env->linStateActuator[BUS_ADR].Error1_Supply_Slave = ACT_RFR_STA_->Error1_Supply_Slave; - env->linStateActuator[BUS_ADR].Error2_Communication_Slave = ACT_RFR_STA_->Error2_Communication_Slave; - env->linStateActuator[BUS_ADR].Error3_Temperature_Slave = ACT_RFR_STA_->Error3_Temperature_Slave; - env->linStateActuator[BUS_ADR].Error4_Permanent_Electrical_Slave = ACT_RFR_STA_->Error4_Permanent_Electrical_Slave; - env->linStateActuator[BUS_ADR].Stall_Slave = ACT_RFR_STA_->Stall_Slave; - env->linStateActuator[BUS_ADR].Reset_Slave = ACT_RFR_STA_->Reset_Slave; - + *BUS_ADR = ACT_RFR_STA_->BUS_ADR; + *CPOS_ALL = ACT_RFR_STA_->CPOS_ALL; + *Emrf_Slave = ACT_RFR_STA_->Emrf_Slave; + *Mode_Slave = ACT_RFR_STA_->Mode_Slave; + *Error1_Supply_Slave = ACT_RFR_STA_->Error1_Supply_Slave; + *Error2_Communication_Slave = ACT_RFR_STA_->Error2_Communication_Slave; + *Error3_Temperature_Slave = ACT_RFR_STA_->Error3_Temperature_Slave; + *Error4_Permanent_Electrical_Slave = ACT_RFR_STA_->Error4_Permanent_Electrical_Slave; + *Stall_Slave = ACT_RFR_STA_->Stall_Slave; + *Reset_Slave = ACT_RFR_STA_->Reset_Slave; break; } @@ -294,31 +317,30 @@ lin_event_id_t RFR_STA_x(tLinTaskActuator *env, uint8_t BUS_ADR) { return res; } -lin_event_id_t ISSR_x(tLinTaskActuator *env, uint8_t BUS_ADR) { +lin_event_id_t ISSR_x(tLinIO *linIo, tLinData *linData, + uint8_t BUS_ADR, + uint8_t *BLOCK_MT, + uint16_t *CPOS_ALL, + uint8_t *DIAGNOSE_MT) { lin_event_id_t res; - env->linData->direction = LIN_DIRECTION_GET; - env->linData->g_aTxBufferLen = 0; - env->linData->g_aRxBufferLen = sizeof(ACT_RFR_ISSR); + linData->direction = LIN_DIRECTION_GET; + linData->g_aTxBufferLen = 0; + linData->g_aRxBufferLen = sizeof(ACT_RFR_ISSR); uint8_t retry = 3; while (retry) { - res = SEND_ACTUATOR_COM_x(env->linIo->env, BUS_ADR); + res = SEND_ACTUATOR_COM_x(linIo, BUS_ADR); if (res == LIN_RX_COMPLETED) { - ACT_RFR_ISSR *ACT_RFR_ISSR_ = (ACT_RFR_ISSR *) env->linData->g_aRxBuffer; + ACT_RFR_ISSR *ACT_RFR_ISSR_ = (ACT_RFR_ISSR *) linData->g_aRxBuffer; - env->linStateActuator[BUS_ADR].CPOS_ALL = - ACT_RFR_ISSR_->CPOS_1_LSB_MT | (ACT_RFR_ISSR_->CPOS_1_MSB_MT << 8); - - if (ACT_RFR_ISSR_->DIAGNOSE_MT) { - if (DFR_STA_x(env, BUS_ADR) == LIN_TX_COMPLETED) { - RFR_STA_x(env, BUS_ADR); - } - } + *BLOCK_MT = ACT_RFR_ISSR_->BLOCK_MT; + *CPOS_ALL = ACT_RFR_ISSR_->CPOS_1_LSB_MT | (ACT_RFR_ISSR_->CPOS_1_MSB_MT << 8); + *DIAGNOSE_MT = ACT_RFR_ISSR_->DIAGNOSE_MT; break; } @@ -331,14 +353,16 @@ lin_event_id_t ISSR_x(tLinTaskActuator *env, uint8_t BUS_ADR) { } -lin_event_id_t CFR_MOD_x(tLinTaskActuator *env, uint8_t BUS_ADR, eMode_Mod Mode_Slave) { +lin_event_id_t CFR_MOD_x(tLinIO *linIo, tLinData *linData, + uint8_t BUS_ADR, + eMode_Mod Mode_Slave) { lin_event_id_t res; - env->linData->direction = LIN_DIRECTION_SET; - env->linData->g_aTxBufferLen = sizeof(ACT_CFR_MOD); - env->linData->g_aRxBufferLen = 0; + linData->direction = LIN_DIRECTION_SET; + linData->g_aTxBufferLen = sizeof(ACT_CFR_MOD); + linData->g_aRxBufferLen = 0; - ACT_CFR_MOD *ACT_CFR_MOD_ = (ACT_CFR_MOD *) env->linData->g_aTxBuffer; + ACT_CFR_MOD *ACT_CFR_MOD_ = (ACT_CFR_MOD *) linData->g_aTxBuffer; ACT_CFR_MOD_->BUS_ADR = BUS_ADR; ACT_CFR_MOD_->Mode_Slave = Mode_Slave; ACT_CFR_MOD_->Unused = 0xFF; @@ -349,7 +373,7 @@ lin_event_id_t CFR_MOD_x(tLinTaskActuator *env, uint8_t BUS_ADR, eMode_Mod Mode_ while (retry) { - res = SEND_ACTUATOR_COM_x(env->linIo->env, CFR_MOD); + res = SEND_ACTUATOR_COM_x(linIo, CFR_MOD); if (res == LIN_TX_COMPLETED) { break; @@ -361,14 +385,16 @@ lin_event_id_t CFR_MOD_x(tLinTaskActuator *env, uint8_t BUS_ADR, eMode_Mod Mode_ return res; } -lin_event_id_t CFR_INI_x(tLinTaskActuator *env, uint8_t BUS_ADR, uint16 INI_CPOS) { +lin_event_id_t CFR_INI_x(tLinIO *linIo, tLinData *linData, + uint8_t BUS_ADR, + uint16 INI_CPOS) { lin_event_id_t res; - env->linData->direction = LIN_DIRECTION_SET; - env->linData->g_aTxBufferLen = sizeof(ACT_CFR_INI); - env->linData->g_aRxBufferLen = 0; + linData->direction = LIN_DIRECTION_SET; + linData->g_aTxBufferLen = sizeof(ACT_CFR_INI); + linData->g_aRxBufferLen = 0; - ACT_CFR_INI *ACT_CFR_INI_ = (ACT_CFR_INI *) env->linData->g_aTxBuffer; + ACT_CFR_INI *ACT_CFR_INI_ = (ACT_CFR_INI *) linData->g_aTxBuffer; ACT_CFR_INI_->BUS_ADR = BUS_ADR; ACT_CFR_INI_->INI_CPOS = INI_CPOS; ACT_CFR_INI_->unused = 0xFF; @@ -378,7 +404,7 @@ lin_event_id_t CFR_INI_x(tLinTaskActuator *env, uint8_t BUS_ADR, uint16 INI_CPOS while (retry) { - res = SEND_ACTUATOR_COM_x(env->linIo->env, CFR_INI); + res = SEND_ACTUATOR_COM_x(linIo, CFR_INI); if (res == LIN_TX_COMPLETED) { break; @@ -390,7 +416,9 @@ lin_event_id_t CFR_INI_x(tLinTaskActuator *env, uint8_t BUS_ADR, uint16 INI_CPOS return res; } -lin_event_id_t CFR_SET_x(tLinTaskActuator *env, uint8_t BUS_ADR, uint16 FINAL_POS, +lin_event_id_t CFR_SET_x(tLinIO *linIo, tLinData *linData, + uint8_t BUS_ADR, + uint16 FINAL_POS, eStall_SET Stall_SET, eLnoise_SET Lnoise_SET, eAutos_SET Autos_SET, @@ -398,11 +426,11 @@ lin_event_id_t CFR_SET_x(tLinTaskActuator *env, uint8_t BUS_ADR, uint16 FINAL_PO eCoils_Stop_SET Coils_Stop_SET) { lin_event_id_t res; - env->linData->direction = LIN_DIRECTION_SET; - env->linData->g_aTxBufferLen = sizeof(ACT_CFR_SET); - env->linData->g_aRxBufferLen = 0; + linData->direction = LIN_DIRECTION_SET; + linData->g_aTxBufferLen = sizeof(ACT_CFR_SET); + linData->g_aRxBufferLen = 0; - ACT_CFR_SET *ACT_CFR_SET_ = (ACT_CFR_SET *) env->linData->g_aTxBuffer; + ACT_CFR_SET *ACT_CFR_SET_ = (ACT_CFR_SET *) linData->g_aTxBuffer; ACT_CFR_SET_->BUS_ADR = BUS_ADR; ACT_CFR_SET_->FINAL_POS = FINAL_POS; @@ -419,7 +447,49 @@ lin_event_id_t CFR_SET_x(tLinTaskActuator *env, uint8_t BUS_ADR, uint16 FINAL_PO while (retry) { - res = SEND_ACTUATOR_COM_x(env->linIo->env, CFR_INI); + res = SEND_ACTUATOR_COM_x(linIo, CFR_SET); + + if (res == LIN_TX_COMPLETED) { + break; + } + + --retry; + } + + return res; +} + +lin_event_id_t CFR_PRG_x(tLinIO *linIo, tLinData *linData, + uint8_t BUS_ADR, + uint16_t BUS_NEW_ADR, + uint8_t NOTL_DREH_Master, + uint8_t NOTL_ENAB_Master, + uint8_t DREH_Master, + uint8_t Motor, + uint8_t Baudrate, + uint8_t Version_CFR) { + lin_event_id_t res; + + linData->direction = LIN_DIRECTION_SET; + linData->g_aTxBufferLen = sizeof(ACT_CFR_SET); + linData->g_aRxBufferLen = 0; + + ACT_CFR_PRG *ACT_CFR_PRG_ = (ACT_CFR_PRG *) linData->g_aTxBuffer; + ACT_CFR_PRG_->BUS_ADR = BUS_ADR; + ACT_CFR_PRG_->BUS_NEW_ADR = BUS_NEW_ADR; + ACT_CFR_PRG_->NOTL_DREH_Master = NOTL_DREH_Master; + ACT_CFR_PRG_->NOTL_ENAB_Master = NOTL_ENAB_Master; + ACT_CFR_PRG_->DREH_Master = DREH_Master; + ACT_CFR_PRG_->Motor = Motor; + ACT_CFR_PRG_->Baudrate = Baudrate; + ACT_CFR_PRG_->Free = 0xFF; + ACT_CFR_PRG_->Version_CFR = Version_CFR; + + uint8_t retry = 3; + + while (retry) { + + res = SEND_ACTUATOR_COM_x(linIo, CFR_PRG); if (res == LIN_TX_COMPLETED) { break; @@ -443,98 +513,179 @@ void Lin_0_Init(tLinTaskActuator *env, osPriorityNormal); } -void Lin0_Scheduler(tLinTaskActuator *env) { +lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { - if (osMutexAcquire(env->access, 100) == osOK) { + lin_event_id_t ret; - for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { + for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { - if (env->linCommandActuator[i].COM == LIN_ACT_CFR_MOD) { + if (env->linCommandActuator[i].COM == LIN_ACT_CFR_MOD) { - if (CFR_MOD_x(env, env->linCommandActuator[i].BUS_ADR, - env->linCommandActuator[i].MODE) == LIN_TX_COMPLETED) { + ret = CFR_MOD_x(env->linIo, env->linData, env->linCommandActuator[i].BUS_ADR, + env->linCommandActuator[i].MODE); - if (DFR_STA_x(env, i) == LIN_TX_COMPLETED) { - RFR_STA_x(env, i); - } - - } - - if (env->linCommandActuator[i].BUS_ADR & 0x1F) { - break; - } + if (ret == LIN_TX_COMPLETED) { + } else { + return ret; } - } - - for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { - - if (env->linCommandActuator[i].COM == LIN_ACT_CFR_INI) { - - if (CFR_INI_x(env, env->linCommandActuator[i].BUS_ADR, - env->linCommandActuator[i].POS) == LIN_TX_COMPLETED) { - - } - - if (env->linCommandActuator[i].BUS_ADR & 0x1F) { - break; - } + if (env->linCommandActuator[i].BUS_ADR & 0x1F) { + break; } + } - - for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { - - if (env->linCommandActuator[i].COM == LIN_ACT_CFR_SET) { - - if (CFR_SET_x(env, 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) == LIN_TX_COMPLETED) { - - } - - if (env->linCommandActuator[i].BUS_ADR & 0x1F) { - break; - } - - } - } - - /* - - if (DFR_PRG_x(env, i) == LIN_TX_COMPLETED) { - RFR_PRG_x(env, i); - } - - if (DFR_IDE_x(env, i) == LIN_TX_COMPLETED) { - RFR_IDE_x(env, i); - } - - if (DFR_STA_x(env, i) == LIN_TX_COMPLETED) { - RFR_STA_x(env, i); - } - */ - - - - for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { - lin_event_id_t res = ISSR_x(env, i); - } - - - osMutexRelease(env->access); } + for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { + + 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].POS); + + if (ret == LIN_TX_COMPLETED) { + + } else { + return ret; + } + + if (env->linCommandActuator[i].BUS_ADR & 0x1F) { + break; + } + + } + } + + for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { + + 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].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); + + if (ret == LIN_TX_COMPLETED) { + + } else { + return ret; + } + + if (env->linCommandActuator[i].BUS_ADR & 0x1F) { + break; + } + + } + } + + + for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { + + if (env->linCommandActuator[i].COM == LIN_ACT_CFR_PRG) { + + ret = CFR_PRG_x(env->linIo, env->linData, + env->linCommandActuator[i].BUS_ADR, + env->linCommandActuator[i].BUS_NEW_ADR, + env->linCommandActuator[i].NOTL_DREH_Master, + env->linCommandActuator[i].NOTL_ENAB_Master, + env->linCommandActuator[i].DREH_Master, + env->linCommandActuator[i].Motor, + env->linCommandActuator[i].Baudrate, + env->linCommandActuator[i].Version_CFR); + + if (ret == LIN_TX_COMPLETED) { + + ret = DFR_PRG_x(env->linIo, env->linData, i); + + if (ret == LIN_TX_COMPLETED) { + + + uint8_t BUS_ADR; + ret = RFR_PRG_x(env->linIo, env->linData, + &BUS_ADR, + &env->linStateActuator[i].BUS_NEW_ADR, + &env->linStateActuator[i].NOTL_DREH_Master, + &env->linStateActuator[i].NOTL_ENAB_Master, + &env->linStateActuator[i].DREH_Slave, + &env->linStateActuator[i].ParitySlave, + &env->linStateActuator[i].Version_CFR); + + if (ret == LIN_TX_COMPLETED) { + + } else { + return ret; + } + + } else { + return ret; + } + + } else { + return ret; + } + + } + } + + lin_event_id_t res; + + for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) { + res = ISSR_x(env->linIo, env->linData, + i, + &env->linStateActuator[i].BLOCK_MT, + &env->linStateActuator[i].CPOS_ALL, + &env->linStateActuator[i].DIAGNOSE_MT); + + ret = DFR_STA_x(env->linIo, env->linData, i); + + if (ret == LIN_TX_COMPLETED) { + + uint8_t BUS_ADR; + ret = RFR_STA_x(env->linIo, env->linData, + &BUS_ADR, + &env->linStateActuator[i].CPOS_ALL, + &env->linStateActuator[i].Emrf_Slave, + &env->linStateActuator[i].Mode_Slave, + &env->linStateActuator[i].Error1_Supply_Slave, + &env->linStateActuator[i].Error2_Communication_Slave, + &env->linStateActuator[i].Error3_Temperature_Slave, + &env->linStateActuator[i].Error4_Permanent_Electrical_Slave, + &env->linStateActuator[i].Stall_Slave, + &env->linStateActuator[i].Reset_Slave); + + if (ret == LIN_RX_COMPLETED) { + + } else { + return ret; + } + + } else { + return ret; + } + + } + + if ((res == LIN_TX_COMPLETED) || (res == LIN_RX_COMPLETED)) { + + } else { + return ret; + } } static _Noreturn void Lin0_Thread(tLinTaskActuator *env) { for (;;) { - Lin0_Scheduler(env); + if (osMutexAcquire(env->access, 100) == osOK) { + Lin0_Scheduler(env); + osMutexRelease(env->access); + } + } } diff --git a/LinTasks.h b/LinTasks.h index 9be390f..68bf893 100644 --- a/LinTasks.h +++ b/LinTasks.h @@ -364,6 +364,9 @@ typedef struct __attribute__ ((packed)) { typedef struct { + uint8_t BLOCK_MT; + uint8_t DIAGNOSE_MT; + uint16_t CPOS_ALL; eEmrf_Slave_STA Emrf_Slave; eMode_Mod Mode_Slave; @@ -399,6 +402,7 @@ typedef struct { eStall_STA Stall_Slave; eReset_STA Reset_Slave; + } tLinStateActuator; // POS - Позиция @@ -427,6 +431,15 @@ typedef struct { eAutos_SET Autos_SET; eSpeed_SET Speed_SET; eCoils_Stop_SET Coils_Stop_SET; + + uint16_t BUS_NEW_ADR; + uint8_t NOTL_DREH_Master; + uint8_t NOTL_ENAB_Master; + uint8_t DREH_Master; + uint8_t Motor; + uint8_t Baudrate; + uint8_t Version_CFR; + } tLinCommandActuator; typedef struct {