Обновление
This commit is contained in:
parent
0bac6c3c2d
commit
f789849b2f
660
LinTasks.c
660
LinTasks.c
|
|
@ -25,8 +25,10 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) {
|
|||
|
||||
if (env->direction == LIN_DIRECTION_SET) {
|
||||
LIN_DrvSendFrameNonBlocking(u8LinIndex, env->g_aTxBuffer, env->g_aTxBufferLen);
|
||||
return;
|
||||
} else if (env->direction == LIN_DIRECTION_GET) {
|
||||
LIN_DrvReceiveFrameNonBlocking(u8LinIndex, env->g_aRxBuffer, env->g_aRxBufferLen);
|
||||
return;
|
||||
} else {
|
||||
// Misra check.
|
||||
uint8_t data = LIN_TIMEOUT;
|
||||
|
|
@ -37,12 +39,12 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) {
|
|||
break;
|
||||
case LIN_PID_ERROR:
|
||||
// Go to idle mode
|
||||
LIN_DrvGoToIdleMode(u8LinIndex);
|
||||
// LIN_DrvGoToIdleMode(u8LinIndex);
|
||||
// FCUART_Printf(DEBUG_FCUART_INSTANCE, "Receive PID error!\r\n");
|
||||
break;
|
||||
case LIN_TX_COMPLETED:
|
||||
// Go to IDLE state.
|
||||
LIN_DrvGoToIdleMode(u8LinIndex);
|
||||
// LIN_DrvGoToIdleMode(u8LinIndex);
|
||||
// FCUART_Printf(DEBUG_FCUART_INSTANCE, "This test case will send data to slave node. Send data: \r\n");
|
||||
// for (s_countIndex = 0U; s_countIndex < sizeof(g_aTxBuffer); s_countIndex++) {
|
||||
// FCUART_Printf(DEBUG_FCUART_INSTANCE, " 0x%x ", g_aTxBuffer[s_countIndex]);
|
||||
|
|
@ -51,7 +53,7 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) {
|
|||
break;
|
||||
case LIN_RX_COMPLETED:
|
||||
// Go to idle mode
|
||||
LIN_DrvGoToIdleMode(u8LinIndex);
|
||||
// LIN_DrvGoToIdleMode(u8LinIndex);
|
||||
|
||||
// FCUART_Printf(DEBUG_FCUART_INSTANCE, "Master node receive data:\r\n");
|
||||
//for (s_countIndex = 0U; s_countIndex < sizeof(env->g_aRxBuffer); s_countIndex++) {
|
||||
|
|
@ -81,7 +83,7 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) {
|
|||
break;
|
||||
case LIN_WAKEUP_SIGNAL:
|
||||
// FCUART_Printf(DEBUG_FCUART_INSTANCE, "Wake up signal received!\r\n");
|
||||
LIN_DrvGoToIdleMode(u8LinIndex);
|
||||
//LIN_DrvGoToIdleMode(u8LinIndex);
|
||||
break;
|
||||
case LIN_TIMEOUT:
|
||||
// FCUART_Printf(DEBUG_FCUART_INSTANCE, "LIN transfer timeout occurred!\r\n");
|
||||
|
|
@ -103,8 +105,8 @@ void GetLin0CallbackHandler(tLinData *env, uint8_t u8LinIndex, void *state) {
|
|||
}
|
||||
|
||||
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);
|
||||
lin_event_id_t res = linIo->runCommand(linIo->env, COM_ADR, 40);
|
||||
SystemDelayMs(30);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
@ -121,7 +123,7 @@ lin_event_id_t DFR_PRG_x(tLinIO *linIo, tLinData *linData,
|
|||
ACT_DFR_PRG_->BUS_ADR = BUS_ADR;
|
||||
ACT_DFR_PRG_->Data1_DFR_PRG = 0xFF;
|
||||
|
||||
uint8_t retry = 3;
|
||||
uint8_t retry = 1;
|
||||
|
||||
while (retry) {
|
||||
|
||||
|
|
@ -139,7 +141,7 @@ lin_event_id_t DFR_PRG_x(tLinIO *linIo, tLinData *linData,
|
|||
return res;
|
||||
}
|
||||
|
||||
lin_event_id_t RFR_PRG_x(tLinIO *linIo, tLinData *linData,
|
||||
lin_event_id_t RFR_PRG_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS,
|
||||
uint8_t *BUS_ADR,
|
||||
uint8_t *BUS_NEW_ADR,
|
||||
uint8_t *NOTL_DREH_Master,
|
||||
|
|
@ -149,29 +151,35 @@ lin_event_id_t RFR_PRG_x(tLinIO *linIo, tLinData *linData,
|
|||
uint8_t *Version_CFR) {
|
||||
lin_event_id_t res;
|
||||
|
||||
linData->direction = LIN_DIRECTION_GET;
|
||||
|
||||
linData->g_aTxBufferLen = 0;
|
||||
linData->g_aRxBufferLen = sizeof(ACT_RFR_PRG);
|
||||
|
||||
ACT_RFR_PRG *ACT_RFR_PRG_ = (ACT_RFR_PRG *) linData->g_aRxBuffer;
|
||||
|
||||
uint8_t retry = 3;
|
||||
|
||||
while (retry) {
|
||||
|
||||
res = SEND_ACTUATOR_COM_x(linIo, RFR_PRG);
|
||||
res = DFR_PRG_x(linIo, linData, BUS_ADDRESS);
|
||||
|
||||
if (res == LIN_RX_COMPLETED) {
|
||||
*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;
|
||||
if (res == LIN_TX_COMPLETED) {
|
||||
|
||||
linData->direction = LIN_DIRECTION_GET;
|
||||
|
||||
linData->g_aTxBufferLen = 0;
|
||||
linData->g_aRxBufferLen = sizeof(ACT_RFR_PRG);
|
||||
|
||||
res = SEND_ACTUATOR_COM_x(linIo, RFR_PRG);
|
||||
|
||||
if (res == LIN_RX_COMPLETED) {
|
||||
*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;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
--retry;
|
||||
|
|
@ -193,7 +201,7 @@ lin_event_id_t DFR_IDE_x(tLinIO *linIo, tLinData *linData,
|
|||
ACT_DFR_IDE_->BUS_ADR = BUS_ADR;
|
||||
ACT_DFR_IDE_->Data1_DFR_IDE = 0xFF;
|
||||
|
||||
uint8_t retry = 3;
|
||||
uint8_t retry = 1;
|
||||
|
||||
while (retry) {
|
||||
|
||||
|
|
@ -209,33 +217,39 @@ lin_event_id_t DFR_IDE_x(tLinIO *linIo, tLinData *linData,
|
|||
return res;
|
||||
}
|
||||
|
||||
lin_event_id_t RFR_IDE_x(tLinIO *linIo, tLinData *linData,
|
||||
lin_event_id_t RFR_IDE_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS,
|
||||
uint8_t *BUS_ADR,
|
||||
uint8_t *IDE_ref,
|
||||
uint8_t *IDE_Sup,
|
||||
uint8_t *IDE_Har) {
|
||||
lin_event_id_t res;
|
||||
|
||||
linData->direction = LIN_DIRECTION_GET;
|
||||
|
||||
linData->g_aTxBufferLen = 0;
|
||||
linData->g_aRxBufferLen = sizeof(ACT_RFR_IDE);
|
||||
|
||||
ACT_RFR_IDE *ACT_RFR_IDE_ = (ACT_RFR_IDE *) linData->g_aRxBuffer;
|
||||
|
||||
uint8_t retry = 3;
|
||||
|
||||
while (retry) {
|
||||
|
||||
res = SEND_ACTUATOR_COM_x(linIo, RFR_IDE);
|
||||
res = DFR_IDE_x(linIo, linData, BUS_ADDRESS);
|
||||
|
||||
if (res == LIN_RX_COMPLETED) {
|
||||
*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;
|
||||
if (res == LIN_TX_COMPLETED) {
|
||||
|
||||
linData->direction = LIN_DIRECTION_GET;
|
||||
|
||||
linData->g_aTxBufferLen = 0;
|
||||
linData->g_aRxBufferLen = sizeof(ACT_RFR_IDE);
|
||||
|
||||
res = SEND_ACTUATOR_COM_x(linIo, RFR_IDE);
|
||||
|
||||
if (res == LIN_RX_COMPLETED) {
|
||||
*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;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
--retry;
|
||||
|
|
@ -255,7 +269,7 @@ lin_event_id_t DFR_STA_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADR) {
|
|||
ACT_DFR_STA_->BUS_ADR = BUS_ADR;
|
||||
ACT_DFR_STA_->Data1_DFR_STA = 0xFF;
|
||||
|
||||
uint8_t retry = 3;
|
||||
uint8_t retry = 1;
|
||||
|
||||
while (retry) {
|
||||
|
||||
|
|
@ -271,7 +285,7 @@ lin_event_id_t DFR_STA_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADR) {
|
|||
return res;
|
||||
}
|
||||
|
||||
lin_event_id_t RFR_STA_x(tLinIO *linIo, tLinData *linData,
|
||||
lin_event_id_t RFR_STA_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS,
|
||||
uint8_t *BUS_ADR,
|
||||
uint16_t *CPOS_ALL,
|
||||
eEmrf_Slave_STA *Emrf_Slave,
|
||||
|
|
@ -284,33 +298,40 @@ lin_event_id_t RFR_STA_x(tLinIO *linIo, tLinData *linData,
|
|||
eReset_STA *Reset_Slave) {
|
||||
lin_event_id_t res;
|
||||
|
||||
linData->direction = LIN_DIRECTION_GET;
|
||||
|
||||
linData->g_aTxBufferLen = 0;
|
||||
linData->g_aRxBufferLen = sizeof(ACT_RFR_STA);
|
||||
|
||||
ACT_RFR_STA *ACT_RFR_STA_ = (ACT_RFR_STA *) linData->g_aRxBuffer;
|
||||
|
||||
uint8_t retry = 3;
|
||||
uint8_t retry = 1;
|
||||
|
||||
while (retry) {
|
||||
|
||||
res = SEND_ACTUATOR_COM_x(linIo, RFR_STA);
|
||||
res = DFR_STA_x(linIo, linData, BUS_ADDRESS);
|
||||
|
||||
if (res == LIN_RX_COMPLETED) {
|
||||
if (res == LIN_TX_COMPLETED) {
|
||||
|
||||
linData->direction = LIN_DIRECTION_GET;
|
||||
|
||||
linData->g_aTxBufferLen = 0;
|
||||
linData->g_aRxBufferLen = sizeof(ACT_RFR_STA);
|
||||
|
||||
res = SEND_ACTUATOR_COM_x(linIo, RFR_STA);
|
||||
|
||||
if (res == LIN_RX_COMPLETED) {
|
||||
|
||||
*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;
|
||||
}
|
||||
|
||||
*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;
|
||||
}
|
||||
|
||||
--retry;
|
||||
|
|
@ -319,8 +340,7 @@ lin_event_id_t RFR_STA_x(tLinIO *linIo, tLinData *linData,
|
|||
return res;
|
||||
}
|
||||
|
||||
lin_event_id_t ISSR_x(tLinIO *linIo, tLinData *linData,
|
||||
uint8_t BUS_ADR,
|
||||
lin_event_id_t ISSR_x(tLinIO *linIo, tLinData *linData, uint8_t COM,
|
||||
uint8_t *BLOCK_MT,
|
||||
uint16_t *CPOS_ALL,
|
||||
uint8_t *DIAGNOSE_MT) {
|
||||
|
|
@ -334,14 +354,14 @@ lin_event_id_t ISSR_x(tLinIO *linIo, tLinData *linData,
|
|||
|
||||
while (retry) {
|
||||
|
||||
res = SEND_ACTUATOR_COM_x(linIo, BUS_ADR);
|
||||
res = SEND_ACTUATOR_COM_x(linIo, COM);
|
||||
|
||||
if (res == LIN_RX_COMPLETED) {
|
||||
|
||||
ACT_RFR_ISSR *ACT_RFR_ISSR_ = (ACT_RFR_ISSR *) linData->g_aRxBuffer;
|
||||
|
||||
*BLOCK_MT = ACT_RFR_ISSR_->BLOCK_MT;
|
||||
*CPOS_ALL = ACT_RFR_ISSR_->CPOS_1_LSB_MT | (ACT_RFR_ISSR_->CPOS_1_MSB_MT << 8);
|
||||
*CPOS_ALL = ACT_RFR_ISSR_->CPOS_1_LSB_MT | (ACT_RFR_ISSR_->CPOS_1_MSB_MT << 7);
|
||||
*DIAGNOSE_MT = ACT_RFR_ISSR_->DIAGNOSE_MT;
|
||||
|
||||
break;
|
||||
|
|
@ -355,8 +375,7 @@ lin_event_id_t ISSR_x(tLinIO *linIo, tLinData *linData,
|
|||
|
||||
}
|
||||
|
||||
lin_event_id_t CFR_MOD_x(tLinIO *linIo, tLinData *linData,
|
||||
uint8_t BUS_ADR,
|
||||
lin_event_id_t CFR_MOD_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS,
|
||||
eMode_Mod Mode_Slave) {
|
||||
lin_event_id_t res;
|
||||
|
||||
|
|
@ -365,7 +384,7 @@ lin_event_id_t CFR_MOD_x(tLinIO *linIo, tLinData *linData,
|
|||
linData->g_aRxBufferLen = 0;
|
||||
|
||||
ACT_CFR_MOD *ACT_CFR_MOD_ = (ACT_CFR_MOD *) linData->g_aTxBuffer;
|
||||
ACT_CFR_MOD_->BUS_ADR = BUS_ADR;
|
||||
ACT_CFR_MOD_->BUS_ADR = BUS_ADDRESS;
|
||||
ACT_CFR_MOD_->Mode_Slave = Mode_Slave;
|
||||
ACT_CFR_MOD_->Unused = 0xFF;
|
||||
ACT_CFR_MOD_->Data2_Mod = 0xFF;
|
||||
|
|
@ -387,8 +406,7 @@ lin_event_id_t CFR_MOD_x(tLinIO *linIo, tLinData *linData,
|
|||
return res;
|
||||
}
|
||||
|
||||
lin_event_id_t CFR_INI_x(tLinIO *linIo, tLinData *linData,
|
||||
uint8_t BUS_ADR,
|
||||
lin_event_id_t CFR_INI_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS,
|
||||
uint16 INI_CPOS) {
|
||||
lin_event_id_t res;
|
||||
|
||||
|
|
@ -397,7 +415,7 @@ lin_event_id_t CFR_INI_x(tLinIO *linIo, tLinData *linData,
|
|||
linData->g_aRxBufferLen = 0;
|
||||
|
||||
ACT_CFR_INI *ACT_CFR_INI_ = (ACT_CFR_INI *) linData->g_aTxBuffer;
|
||||
ACT_CFR_INI_->BUS_ADR = BUS_ADR;
|
||||
ACT_CFR_INI_->BUS_ADR = BUS_ADDRESS;
|
||||
ACT_CFR_INI_->INI_CPOS = INI_CPOS;
|
||||
ACT_CFR_INI_->unused = 0xFF;
|
||||
ACT_CFR_INI_->Not_Used_INI = 0xFF;
|
||||
|
|
@ -418,8 +436,7 @@ lin_event_id_t CFR_INI_x(tLinIO *linIo, tLinData *linData,
|
|||
return res;
|
||||
}
|
||||
|
||||
lin_event_id_t CFR_SET_x(tLinIO *linIo, tLinData *linData,
|
||||
uint8_t BUS_ADR,
|
||||
lin_event_id_t CFR_SET_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS,
|
||||
uint16 FINAL_POS,
|
||||
eStall_SET Stall_SET,
|
||||
eLnoise_SET Lnoise_SET,
|
||||
|
|
@ -433,7 +450,7 @@ lin_event_id_t CFR_SET_x(tLinIO *linIo, tLinData *linData,
|
|||
linData->g_aRxBufferLen = 0;
|
||||
|
||||
ACT_CFR_SET *ACT_CFR_SET_ = (ACT_CFR_SET *) linData->g_aTxBuffer;
|
||||
ACT_CFR_SET_->BUS_ADR = BUS_ADR;
|
||||
ACT_CFR_SET_->BUS_ADR = BUS_ADDRESS;
|
||||
|
||||
ACT_CFR_SET_->FINAL_POS = FINAL_POS;
|
||||
ACT_CFR_SET_->unused = 0xFF;
|
||||
|
|
@ -461,8 +478,8 @@ lin_event_id_t CFR_SET_x(tLinIO *linIo, tLinData *linData,
|
|||
return res;
|
||||
}
|
||||
|
||||
lin_event_id_t CFR_PRG_x(tLinIO *linIo, tLinData *linData,
|
||||
uint8_t BUS_ADR,
|
||||
/*
|
||||
lin_event_id_t CFR_PRG_x(tLinIO *linIo, tLinData *linData, uint8_t BUS_ADDRESS,
|
||||
uint16_t BUS_NEW_ADR,
|
||||
uint8_t NOTL_DREH_Master,
|
||||
uint8_t NOTL_ENAB_Master,
|
||||
|
|
@ -477,7 +494,7 @@ lin_event_id_t CFR_PRG_x(tLinIO *linIo, tLinData *linData,
|
|||
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_ADR = BUS_ADDRESS;
|
||||
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;
|
||||
|
|
@ -502,7 +519,7 @@ lin_event_id_t CFR_PRG_x(tLinIO *linIo, tLinData *linData,
|
|||
|
||||
return res;
|
||||
}
|
||||
|
||||
*/
|
||||
void Lin_0_Init(tLinTaskActuator *env,
|
||||
tLinData *linData,
|
||||
tLinIO *linIO) {
|
||||
|
|
@ -511,10 +528,15 @@ void Lin_0_Init(tLinTaskActuator *env,
|
|||
env->linData = linData;
|
||||
env->access = osMutexNew(NULL);
|
||||
|
||||
for (uint8_t i = 0; i < 9; ++i) {
|
||||
env->linCommandActuator[i].COM = LIN_ACT_CFR_MOD;
|
||||
}
|
||||
|
||||
InitThreadAtrStatic(&env->thread.attr, "Lin0", env->thread.controlBlock, env->thread.stack,
|
||||
osPriorityNormal);
|
||||
}
|
||||
|
||||
|
||||
lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
||||
|
||||
lin_event_id_t ret;
|
||||
|
|
@ -530,11 +552,20 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
|||
|
||||
env->linCommandActuator[i].isRFR_STA = 1;
|
||||
|
||||
if (env->linCommandActuator[i].BUS_ADR == 0x20) {
|
||||
|
||||
for (uint8_t j = 0; j < LIN0_ISSR_ALL; ++j) {
|
||||
env->linCommandActuator[j].isRFR_STA = 1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
return ret;
|
||||
// return ret;
|
||||
}
|
||||
|
||||
if (env->linCommandActuator[i].BUS_ADR & 0x1F) {
|
||||
if (env->linCommandActuator[i].BUS_ADR == 0x20) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -549,13 +580,12 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
|||
env->linCommandActuator[i].BUS_ADR,
|
||||
env->linCommandActuator[i].POS);
|
||||
|
||||
if (ret == LIN_TX_COMPLETED) {
|
||||
// if (ret == LIN_TX_COMPLETED) {
|
||||
// } else {
|
||||
// return ret;
|
||||
// }
|
||||
|
||||
} else {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (env->linCommandActuator[i].BUS_ADR & 0x1F) {
|
||||
if (env->linCommandActuator[i].BUS_ADR == 0x20) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -575,13 +605,12 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
|||
env->linCommandActuator[i].Speed_SET,
|
||||
env->linCommandActuator[i].Coils_Stop_SET);
|
||||
|
||||
if (ret == LIN_TX_COMPLETED) {
|
||||
// if (ret == LIN_TX_COMPLETED) {
|
||||
// } else {
|
||||
// return ret;
|
||||
// }
|
||||
|
||||
} else {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (env->linCommandActuator[i].BUS_ADR & 0x1F) {
|
||||
if (env->linCommandActuator[i].BUS_ADR == 0x20) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -589,76 +618,6 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
|||
}
|
||||
|
||||
|
||||
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;
|
||||
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;
|
||||
|
||||
ret = RFR_PRG_x(env->linIo, env->linData,
|
||||
&BUS_ADR,
|
||||
&BUS_NEW_ADR,
|
||||
&NOTL_DREH_Master,
|
||||
&NOTL_ENAB_Master,
|
||||
&DREH_Slave,
|
||||
&ParitySlave,
|
||||
&Version_CFR);
|
||||
|
||||
if (ret == LIN_RX_COMPLETED) {
|
||||
|
||||
if (BUS_ADR != i) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
if (BUS_ADR < LIN0_ISSR_ALL) {
|
||||
env->linStateActuator[BUS_ADR].BUS_NEW_ADR = BUS_NEW_ADR;
|
||||
env->linStateActuator[BUS_ADR].NOTL_DREH_Master = NOTL_DREH_Master;
|
||||
env->linStateActuator[BUS_ADR].NOTL_ENAB_Master = NOTL_ENAB_Master;
|
||||
env->linStateActuator[BUS_ADR].DREH_Slave = DREH_Slave;
|
||||
env->linStateActuator[BUS_ADR].ParitySlave = ParitySlave;
|
||||
env->linStateActuator[BUS_ADR].Version_CFR = Version_CFR;
|
||||
} else {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
} else {
|
||||
return ret;
|
||||
}
|
||||
|
||||
} else {
|
||||
return ret;
|
||||
}
|
||||
|
||||
} else {
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) {
|
||||
|
||||
ret = ISSR_x(env->linIo, env->linData,
|
||||
|
|
@ -673,65 +632,61 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
|||
|
||||
env->linCommandActuator[i].isRFR_STA = 0;
|
||||
|
||||
ret = DFR_STA_x(env->linIo, env->linData, i);
|
||||
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;
|
||||
|
||||
if (ret == LIN_TX_COMPLETED) {
|
||||
ret = RFR_STA_x(env->linIo, env->linData, i | 0x20,
|
||||
&BUS_ADR,
|
||||
&CPOS_ALL,
|
||||
&Emrf_Slave,
|
||||
&Mode_Slave,
|
||||
&Error1_Supply_Slave,
|
||||
&Error2_Communication_Slave,
|
||||
&Error3_Temperature_Slave,
|
||||
&Error4_Permanent_Electrical_Slave,
|
||||
&Stall_Slave,
|
||||
&Reset_Slave);
|
||||
|
||||
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;
|
||||
if (ret == LIN_RX_COMPLETED) {
|
||||
|
||||
ret = RFR_STA_x(env->linIo, env->linData,
|
||||
&BUS_ADR,
|
||||
&CPOS_ALL,
|
||||
&Emrf_Slave,
|
||||
&Mode_Slave,
|
||||
&Error1_Supply_Slave,
|
||||
&Error2_Communication_Slave,
|
||||
&Error3_Temperature_Slave,
|
||||
&Error4_Permanent_Electrical_Slave,
|
||||
&Stall_Slave,
|
||||
&Reset_Slave);
|
||||
BUS_ADR &= 0x1F;
|
||||
|
||||
if (ret == LIN_RX_COMPLETED) {
|
||||
|
||||
if (BUS_ADR != i) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
if (BUS_ADR < LIN0_ISSR_ALL) {
|
||||
env->linStateActuator[BUS_ADR].CPOS_ALL = CPOS_ALL;
|
||||
env->linStateActuator[BUS_ADR].Emrf_Slave = Emrf_Slave;
|
||||
env->linStateActuator[BUS_ADR].Mode_Slave = Mode_Slave;
|
||||
env->linStateActuator[BUS_ADR].Error1_Supply_Slave = Error1_Supply_Slave;
|
||||
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;
|
||||
env->linStateActuator[BUS_ADR].Reset_Slave = Reset_Slave;
|
||||
} else {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
return ret;
|
||||
if (BUS_ADR != i) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
if (BUS_ADR < LIN0_ISSR_ALL) {
|
||||
env->linStateActuator[BUS_ADR].CPOS_ALL = CPOS_ALL;
|
||||
env->linStateActuator[BUS_ADR].Emrf_Slave = Emrf_Slave;
|
||||
env->linStateActuator[BUS_ADR].Mode_Slave = Mode_Slave;
|
||||
env->linStateActuator[BUS_ADR].Error1_Supply_Slave = Error1_Supply_Slave;
|
||||
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;
|
||||
env->linStateActuator[BUS_ADR].Reset_Slave = Reset_Slave;
|
||||
} else {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
// return ret;
|
||||
}
|
||||
|
||||
} else {
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
return ret;
|
||||
// return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -744,6 +699,295 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
|||
return LIN_NO_EVENT;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
||||
|
||||
lin_event_id_t ret;
|
||||
|
||||
|
||||
ret = CFR_MOD_x(env->linIo, env->linData,
|
||||
0x20,
|
||||
LIN_MODE_STOP);
|
||||
|
||||
|
||||
if (ret == LIN_TX_COMPLETED) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
|
||||
ret = CFR_INI_x(env->linIo, env->linData,
|
||||
0x20,
|
||||
6000);
|
||||
|
||||
if (ret == LIN_TX_COMPLETED) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
ret = CFR_MOD_x(env->linIo, env->linData,
|
||||
0x20,
|
||||
LIN_MODE_NORMAL);
|
||||
|
||||
|
||||
if (ret == LIN_TX_COMPLETED) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
asm("nop");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ret = DFR_STA_x(env->linIo, env->linData, 0x27);
|
||||
|
||||
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;
|
||||
|
||||
ret = RFR_STA_x(env->linIo, env->linData,
|
||||
&BUS_ADR,
|
||||
&CPOS_ALL,
|
||||
&Emrf_Slave,
|
||||
&Mode_Slave,
|
||||
&Error1_Supply_Slave,
|
||||
&Error2_Communication_Slave,
|
||||
&Error3_Temperature_Slave,
|
||||
&Error4_Permanent_Electrical_Slave,
|
||||
&Stall_Slave,
|
||||
&Reset_Slave);
|
||||
|
||||
if (ret == LIN_RX_COMPLETED) {
|
||||
asm("nop");
|
||||
} else {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
|
||||
//asm("nop");
|
||||
|
||||
|
||||
ret = CFR_SET_x(env->linIo, env->linData,
|
||||
0x27,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
|
||||
if (ret == LIN_TX_COMPLETED) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
asm("nop");
|
||||
|
||||
ret = ISSR_x(env->linIo, env->linData,
|
||||
7,
|
||||
&env->linStateActuator[7].BLOCK_MT,
|
||||
&env->linStateActuator[7].CPOS_ALL,
|
||||
&env->linStateActuator[7].DIAGNOSE_MT);
|
||||
|
||||
if (ret == LIN_RX_COMPLETED) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
uint8_t BUS_ADR;
|
||||
uint8_t IDE_ref;
|
||||
uint8_t IDE_Sup;
|
||||
uint8_t IDE_Har;
|
||||
|
||||
ret = DFR_IDE_x(env->linIo, env->linData, 7);
|
||||
|
||||
if (ret == LIN_TX_COMPLETED) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
ret = RFR_IDE_x(env->linIo, env->linData,
|
||||
&BUS_ADR,
|
||||
&IDE_ref,
|
||||
&IDE_Sup,
|
||||
&IDE_Har);
|
||||
|
||||
if (ret == LIN_RX_COMPLETED) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
asm("nop");
|
||||
|
||||
|
||||
ret = ISSR_x(env->linIo, env->linData,
|
||||
7,
|
||||
&env->linStateActuator[7].BLOCK_MT,
|
||||
&env->linStateActuator[7].CPOS_ALL,
|
||||
&env->linStateActuator[7].DIAGNOSE_MT);
|
||||
|
||||
if (ret == LIN_RX_COMPLETED) {
|
||||
|
||||
if ((env->linStateActuator[7].DIAGNOSE_MT) || (env->linCommandActuator[7].isRFR_STA)) {
|
||||
|
||||
env->linCommandActuator[7].isRFR_STA = 0;
|
||||
|
||||
ret = DFR_STA_x(env->linIo, env->linData, 7);
|
||||
|
||||
if (ret == LIN_TX_COMPLETED) {
|
||||
|
||||
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;
|
||||
|
||||
ret = RFR_STA_x(env->linIo, env->linData,
|
||||
&BUS_ADR,
|
||||
&CPOS_ALL,
|
||||
&Emrf_Slave,
|
||||
&Mode_Slave,
|
||||
&Error1_Supply_Slave,
|
||||
&Error2_Communication_Slave,
|
||||
&Error3_Temperature_Slave,
|
||||
&Error4_Permanent_Electrical_Slave,
|
||||
&Stall_Slave,
|
||||
&Reset_Slave);
|
||||
|
||||
if (ret == LIN_RX_COMPLETED) {
|
||||
|
||||
if (BUS_ADR != 7) {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
if (BUS_ADR < LIN0_ISSR_ALL) {
|
||||
env->linStateActuator[BUS_ADR].CPOS_ALL = CPOS_ALL;
|
||||
env->linStateActuator[BUS_ADR].Emrf_Slave = Emrf_Slave;
|
||||
env->linStateActuator[BUS_ADR].Mode_Slave = Mode_Slave;
|
||||
env->linStateActuator[BUS_ADR].Error1_Supply_Slave = Error1_Supply_Slave;
|
||||
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;
|
||||
env->linStateActuator[BUS_ADR].Reset_Slave = Reset_Slave;
|
||||
} else {
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
asm("nop");
|
||||
//return ret;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
asm("nop");
|
||||
//return ret;
|
||||
}
|
||||
|
||||
} else {
|
||||
asm("nop");
|
||||
//return ret;
|
||||
}
|
||||
|
||||
|
||||
uint8_t BUS_ADR;
|
||||
uint8_t IDE_ref;
|
||||
uint8_t IDE_Sup;
|
||||
uint8_t IDE_Har;
|
||||
|
||||
ret = DFR_IDE_x(env->linIo, env->linData,7);
|
||||
ret = RFR_IDE_x(env->linIo, env->linData,
|
||||
&BUS_ADR,
|
||||
&IDE_ref,
|
||||
&IDE_Sup,
|
||||
&IDE_Har);
|
||||
|
||||
|
||||
ret = CFR_INI_x(env->linIo, env->linData,
|
||||
0x20,
|
||||
0);
|
||||
|
||||
|
||||
ret = ISSR_x(env->linIo, env->linData,
|
||||
7,
|
||||
&env->linStateActuator[7].BLOCK_MT,
|
||||
&env->linStateActuator[7].CPOS_ALL,
|
||||
&env->linStateActuator[7].DIAGNOSE_MT);
|
||||
|
||||
|
||||
ret = DFR_PRG_x(env->linIo, env->linData, 7);
|
||||
|
||||
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;
|
||||
|
||||
ret = RFR_PRG_x(env->linIo, env->linData,
|
||||
&BUS_ADR,
|
||||
&BUS_NEW_ADR,
|
||||
&NOTL_DREH_Master,
|
||||
&NOTL_ENAB_Master,
|
||||
&DREH_Slave,
|
||||
&ParitySlave,
|
||||
&Version_CFR);
|
||||
|
||||
|
||||
for (uint8_t i = 0; i < 31; ++i) {
|
||||
|
||||
ret = DFR_STA_x(env->linIo, env->linData, i);
|
||||
|
||||
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;
|
||||
|
||||
ret = RFR_STA_x(env->linIo, env->linData,
|
||||
&BUS_ADR,
|
||||
&CPOS_ALL,
|
||||
&Emrf_Slave,
|
||||
&Mode_Slave,
|
||||
&Error1_Supply_Slave,
|
||||
&Error2_Communication_Slave,
|
||||
&Error3_Temperature_Slave,
|
||||
&Error4_Permanent_Electrical_Slave,
|
||||
&Stall_Slave,
|
||||
&Reset_Slave);
|
||||
|
||||
if (ret == LIN_RX_COMPLETED) {
|
||||
asm("nop");
|
||||
} else {
|
||||
asm("nop");
|
||||
}
|
||||
}
|
||||
|
||||
if ((ret == LIN_TX_COMPLETED) || (ret == LIN_RX_COMPLETED)) {
|
||||
|
||||
} else {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return LIN_NO_EVENT;
|
||||
}
|
||||
*/
|
||||
static _Noreturn void Lin0_Thread(tLinTaskActuator *env) {
|
||||
for (;;) {
|
||||
if (osMutexAcquire(env->access, 100) == osOK) {
|
||||
|
|
|
|||
10
LinTasks.h
10
LinTasks.h
|
|
@ -415,10 +415,10 @@ typedef struct {
|
|||
// COM - Команда
|
||||
|
||||
typedef enum {
|
||||
LIN_ACT_CFR_MOD = 0,
|
||||
LIN_ACT_CFR_INI = 1,
|
||||
LIN_ACT_CFR_SET = 2,
|
||||
LIN_ACT_CFR_PRG = 3,
|
||||
LIN_ACT_CFR_NONE = 0,
|
||||
LIN_ACT_CFR_MOD = 1,
|
||||
LIN_ACT_CFR_INI = 2,
|
||||
LIN_ACT_CFR_SET = 3
|
||||
} eLinCOM;
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -459,7 +459,7 @@ typedef struct {
|
|||
|
||||
struct {
|
||||
osThreadId_t id;
|
||||
uint32_t stack[512];
|
||||
uint32_t stack[1024];
|
||||
StaticTask_t controlBlock;
|
||||
osThreadAttr_t attr;
|
||||
} thread;
|
||||
|
|
|
|||
Loading…
Reference in New Issue