Обновление

This commit is contained in:
cfif 2025-11-26 12:53:39 +03:00
parent 5782440e39
commit 124e14642a
2 changed files with 109 additions and 12 deletions

View File

@ -102,21 +102,80 @@ 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 adr) {
lin_event_id_t res = env->linIo->runCommand(env->linIo->env, adr, 50);
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);
SystemDelayMs(20);
return res;
}
lin_event_id_t DFR_STA_x(tLinTaskActuator *env, uint8_t ADR) {
lin_event_id_t DFR_IDE_x(tLinTaskActuator *env, 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;
ACT_DFR_IDE *ACT_DFR_IDE_ = (ACT_DFR_IDE *) env->linData->g_aTxBuffer;
ACT_DFR_IDE_->BUS_ADR = BUS_ADR;
ACT_DFR_IDE_->Data1_DFR_IDE = 0xFF;
uint8_t retry = 3;
while (retry) {
res = SEND_ACTUATOR_COM_x(env->linIo->env, DFR_IDE);
if (res == LIN_TX_COMPLETED) {
break;
}
--retry;
}
return res;
}
lin_event_id_t RFR_IDE_x(tLinTaskActuator *env, uint8_t BUS_ADR) {
lin_event_id_t res;
env->linData->direction = LIN_DIRECTION_GET;
env->linData->g_aTxBufferLen = 0;
env->linData->g_aRxBufferLen = sizeof(ACT_RFR_IDE);
ACT_RFR_IDE *ACT_RFR_IDE_ = (ACT_RFR_IDE *) env->linData->g_aRxBuffer;
uint8_t retry = 3;
while (retry) {
res = SEND_ACTUATOR_COM_x(env->linIo->env, 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;
break;
}
--retry;
}
return res;
}
lin_event_id_t DFR_STA_x(tLinTaskActuator *env, 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;
ACT_DFR_STA *ACT_DFR_STA_ = (ACT_DFR_STA *)env->linData->g_aTxBuffer;
ACT_DFR_STA_->BUS_ADR = ADR;
ACT_DFR_STA *ACT_DFR_STA_ = (ACT_DFR_STA *) env->linData->g_aTxBuffer;
ACT_DFR_STA_->BUS_ADR = BUS_ADR;
ACT_DFR_STA_->Data1_DFR_STA = 0xFF;
uint8_t retry = 3;
@ -135,7 +194,7 @@ lin_event_id_t DFR_STA_x(tLinTaskActuator *env, uint8_t ADR) {
return res;
}
lin_event_id_t RFR_STA_x(tLinTaskActuator *env, uint8_t ADR) {
lin_event_id_t RFR_STA_x(tLinTaskActuator *env, uint8_t BUS_ADR) {
lin_event_id_t res;
env->linData->direction = LIN_DIRECTION_GET;
@ -143,7 +202,7 @@ lin_event_id_t RFR_STA_x(tLinTaskActuator *env, uint8_t ADR) {
env->linData->g_aTxBufferLen = 0;
env->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 *) env->linData->g_aRxBuffer;
uint8_t retry = 3;
@ -153,6 +212,16 @@ lin_event_id_t RFR_STA_x(tLinTaskActuator *env, uint8_t ADR) {
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;
break;
}
@ -163,7 +232,7 @@ lin_event_id_t RFR_STA_x(tLinTaskActuator *env, uint8_t ADR) {
return res;
}
lin_event_id_t ISSR_x(tLinTaskActuator *env, uint8_t ADR) {
lin_event_id_t ISSR_x(tLinTaskActuator *env, uint8_t BUS_ADR) {
lin_event_id_t res;
env->linData->direction = LIN_DIRECTION_GET;
@ -174,15 +243,16 @@ lin_event_id_t ISSR_x(tLinTaskActuator *env, uint8_t ADR) {
while (retry) {
res = SEND_ACTUATOR_COM_x(env->linIo->env, ADR);
res = SEND_ACTUATOR_COM_x(env->linIo->env, 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 *) env->linData->g_aRxBuffer;
if (ACT_RFR_ISSR_->DIAGNOSE_MT) {
DFR_STA_x(env, ADR);
RFR_STA_x(env, ADR);
if (DFR_STA_x(env, BUS_ADR) == LIN_TX_COMPLETED) {
RFR_STA_x(env, BUS_ADR);
}
}
break;
@ -213,6 +283,10 @@ void Lin0_Scheduler(tLinTaskActuator *env) {
if (osMutexAcquire(env->access, 100) == osOK) {
if (DFR_IDE_x(env, BUS_ADR) == LIN_TX_COMPLETED) {
RFR_IDE_x(env, BUS_ADR);
}
for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) {
lin_event_id_t res = ISSR_x(env, i);
}

View File

@ -362,11 +362,34 @@ typedef struct __attribute__ ((packed)) {
#define LIN1_ISSR_ALL 0x06
#define LIN2_ISSR_ALL 0x08
typedef struct {
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;
uint8_t IDE_ref;
uint8_t IDE_Sup;
uint8_t IDE_Har;
} tLinStateActuator;
typedef struct {
tLinIO *linIo;
osMutexId_t access;
tLinStateActuator linStateActuator[9];
tLinData *linData;
struct {