Обновление
This commit is contained in:
parent
2b1199e214
commit
05830fb4fa
483
LinTasks.c
483
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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
13
LinTasks.h
13
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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue