Обновление

This commit is contained in:
cfif 2025-11-25 16:18:02 +03:00
parent f69e564c78
commit 5782440e39
2 changed files with 107 additions and 2 deletions

View File

@ -6,6 +6,7 @@
#include "CmsisRtosThreadUtils.h"
#include "CanPorts.h"
#include "fc7xxx_driver_lin.h"
#include "Lins.h"
//начало----------------------------------------- LIN 0 ----------------------------------------------------------------
//начало----------------------------------------- LIN 0 ----------------------------------------------------------------
@ -101,6 +102,99 @@ 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);
SystemDelayMs(20);
return res;
}
lin_event_id_t DFR_STA_x(tLinTaskActuator *env, uint8_t 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_->Data1_DFR_STA = 0xFF;
uint8_t retry = 3;
while (retry) {
res = SEND_ACTUATOR_COM_x(env->linIo->env, DFR_STA);
if (res == LIN_TX_COMPLETED) {
break;
}
--retry;
}
return res;
}
lin_event_id_t RFR_STA_x(tLinTaskActuator *env, uint8_t ADR) {
lin_event_id_t res;
env->linData->direction = LIN_DIRECTION_GET;
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;
uint8_t retry = 3;
while (retry) {
res = SEND_ACTUATOR_COM_x(env->linIo->env, RFR_STA);
if (res == LIN_RX_COMPLETED) {
break;
}
--retry;
}
return res;
}
lin_event_id_t ISSR_x(tLinTaskActuator *env, uint8_t ADR) {
lin_event_id_t res;
env->linData->direction = LIN_DIRECTION_GET;
env->linData->g_aTxBufferLen = 0;
env->linData->g_aRxBufferLen = sizeof(ACT_RFR_ISSR);
uint8_t retry = 3;
while (retry) {
res = SEND_ACTUATOR_COM_x(env->linIo->env, ADR);
if (res == LIN_RX_COMPLETED) {
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);
}
break;
}
--retry;
}
return res;
}
void Lin_0_Init(tLinTaskActuator *env,
tLinData *linData,
@ -118,10 +212,15 @@ void Lin0_Scheduler(tLinTaskActuator *env) {
if (osMutexAcquire(env->access, 100) == osOK) {
for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) {
lin_event_id_t res = ISSR_x(env, i);
}
osMutexRelease(env->access);
}
env->linIo->runCommand(env->linIo->env, 0x11, 1000);
}

View File

@ -114,9 +114,11 @@ typedef enum {
LIN_MODE_STOP = 2
} eMode_Mod;
typedef struct __attribute__ ((packed)) {
uint8_t BUS_ADR;
eMode_Mod Mode;
eMode_Mod Mode_Slave: 2;
uint8_t Unused: 6; // Установить в 0xFF
uint8_t Data2_Mod; // Установить в 0xFF
uint8_t Data3_Mod; // Установить в 0xFF
} ACT_CFR_MOD;
@ -356,6 +358,10 @@ typedef struct __attribute__ ((packed)) {
uint8_t DIAGNOSE_MT: 1;
} ACT_RFR_ISSR;
#define LIN0_ISSR_ALL 0x09
#define LIN1_ISSR_ALL 0x06
#define LIN2_ISSR_ALL 0x08
typedef struct {
tLinIO *linIo;