Обновление
This commit is contained in:
parent
54e0f5f660
commit
2b1199e214
180
LinTasks.c
180
LinTasks.c
|
|
@ -171,7 +171,6 @@ 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 res;
|
||||
|
||||
|
|
@ -312,7 +311,8 @@ lin_event_id_t ISSR_x(tLinTaskActuator *env, uint8_t BUS_ADR) {
|
|||
|
||||
ACT_RFR_ISSR *ACT_RFR_ISSR_ = (ACT_RFR_ISSR *) env->linData->g_aRxBuffer;
|
||||
|
||||
env->linStateActuator[BUS_ADR].CPOS_ALL = ACT_RFR_ISSR_->CPOS_1_LSB_MT | (ACT_RFR_ISSR_->CPOS_1_MSB_MT << 8);
|
||||
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) {
|
||||
|
|
@ -331,6 +331,106 @@ 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 res;
|
||||
|
||||
env->linData->direction = LIN_DIRECTION_SET;
|
||||
env->linData->g_aTxBufferLen = sizeof(ACT_CFR_MOD);
|
||||
env->linData->g_aRxBufferLen = 0;
|
||||
|
||||
ACT_CFR_MOD *ACT_CFR_MOD_ = (ACT_CFR_MOD *) env->linData->g_aTxBuffer;
|
||||
ACT_CFR_MOD_->BUS_ADR = BUS_ADR;
|
||||
ACT_CFR_MOD_->Mode_Slave = Mode_Slave;
|
||||
ACT_CFR_MOD_->Unused = 0xFF;
|
||||
ACT_CFR_MOD_->Data2_Mod = 0xFF;
|
||||
ACT_CFR_MOD_->Data3_Mod = 0xFF;
|
||||
|
||||
uint8_t retry = 3;
|
||||
|
||||
while (retry) {
|
||||
|
||||
res = SEND_ACTUATOR_COM_x(env->linIo->env, CFR_MOD);
|
||||
|
||||
if (res == LIN_TX_COMPLETED) {
|
||||
break;
|
||||
}
|
||||
|
||||
--retry;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
lin_event_id_t CFR_INI_x(tLinTaskActuator *env, 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;
|
||||
|
||||
ACT_CFR_INI *ACT_CFR_INI_ = (ACT_CFR_INI *) env->linData->g_aTxBuffer;
|
||||
ACT_CFR_INI_->BUS_ADR = BUS_ADR;
|
||||
ACT_CFR_INI_->INI_CPOS = INI_CPOS;
|
||||
ACT_CFR_INI_->unused = 0xFF;
|
||||
ACT_CFR_INI_->Not_Used_INI = 0xFF;
|
||||
|
||||
uint8_t retry = 3;
|
||||
|
||||
while (retry) {
|
||||
|
||||
res = SEND_ACTUATOR_COM_x(env->linIo->env, CFR_INI);
|
||||
|
||||
if (res == LIN_TX_COMPLETED) {
|
||||
break;
|
||||
}
|
||||
|
||||
--retry;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
lin_event_id_t CFR_SET_x(tLinTaskActuator *env, uint8_t BUS_ADR, uint16 FINAL_POS,
|
||||
eStall_SET Stall_SET,
|
||||
eLnoise_SET Lnoise_SET,
|
||||
eAutos_SET Autos_SET,
|
||||
eSpeed_SET Speed_SET,
|
||||
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;
|
||||
|
||||
ACT_CFR_SET *ACT_CFR_SET_ = (ACT_CFR_SET *) env->linData->g_aTxBuffer;
|
||||
ACT_CFR_SET_->BUS_ADR = BUS_ADR;
|
||||
|
||||
ACT_CFR_SET_->FINAL_POS = FINAL_POS;
|
||||
ACT_CFR_SET_->unused = 0xFF;
|
||||
ACT_CFR_SET_->Unused_SET = 0xFF;
|
||||
ACT_CFR_SET_->Stall_SET = Stall_SET;
|
||||
ACT_CFR_SET_->Lnoise_SET = Lnoise_SET;
|
||||
ACT_CFR_SET_->Autos_SET = Autos_SET;
|
||||
ACT_CFR_SET_->Speed_SET = Speed_SET;
|
||||
ACT_CFR_SET_->Coils_Stop_SET = Coils_Stop_SET;
|
||||
|
||||
|
||||
uint8_t retry = 3;
|
||||
|
||||
while (retry) {
|
||||
|
||||
res = SEND_ACTUATOR_COM_x(env->linIo->env, CFR_INI);
|
||||
|
||||
if (res == LIN_TX_COMPLETED) {
|
||||
break;
|
||||
}
|
||||
|
||||
--retry;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void Lin_0_Init(tLinTaskActuator *env,
|
||||
tLinData *linData,
|
||||
tLinIO *linIO) {
|
||||
|
|
@ -349,20 +449,78 @@ void Lin0_Scheduler(tLinTaskActuator *env) {
|
|||
|
||||
for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) {
|
||||
|
||||
if (DFR_PRG_x(env, i) == LIN_TX_COMPLETED) {
|
||||
RFR_PRG_x(env, i);
|
||||
}
|
||||
if (env->linCommandActuator[i].COM == LIN_ACT_CFR_MOD) {
|
||||
|
||||
if (DFR_IDE_x(env, i) == LIN_TX_COMPLETED) {
|
||||
RFR_IDE_x(env, i);
|
||||
}
|
||||
if (CFR_MOD_x(env, env->linCommandActuator[i].BUS_ADR,
|
||||
env->linCommandActuator[i].MODE) == LIN_TX_COMPLETED) {
|
||||
|
||||
if (DFR_STA_x(env, i) == LIN_TX_COMPLETED) {
|
||||
RFR_STA_x(env, i);
|
||||
}
|
||||
if (DFR_STA_x(env, i) == LIN_TX_COMPLETED) {
|
||||
RFR_STA_x(env, i);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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_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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
50
LinTasks.h
50
LinTasks.h
|
|
@ -362,10 +362,8 @@ 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;
|
||||
|
|
@ -385,18 +383,62 @@ typedef struct {
|
|||
uint8_t NOTL_ENAB_Master;
|
||||
uint8_t DREH_Slave;
|
||||
uint8_t ParitySlave;
|
||||
uint8_t Free;
|
||||
uint8_t Version_CFR;
|
||||
|
||||
} tLinStateFullActuator;
|
||||
|
||||
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;
|
||||
|
||||
} tLinStateActuator;
|
||||
|
||||
// POS - Позиция
|
||||
|
||||
// BUS_ADR - (3 бита [7..5] - Группа; 5 бит [4..0] - Адрес)
|
||||
// Пример Широковещательный адрес группа 1: 0x20, 0x20, 0x20 .. 0x20
|
||||
// Пример Обычный адрес: 0x01, 0x02, 0x03 .. 0x09
|
||||
// Смешанный тип адреса не допустим
|
||||
|
||||
// COM - Команда
|
||||
|
||||
typedef enum {
|
||||
LIN_ACT_CFR_MOD = 0,
|
||||
LIN_ACT_CFR_INI = 1,
|
||||
LIN_ACT_CFR_SET = 2,
|
||||
LIN_ACT_CFR_PRG = 3,
|
||||
} eLinCOM;
|
||||
|
||||
typedef struct {
|
||||
uint16_t POS;
|
||||
uint8_t BUS_ADR;
|
||||
eMode_Mod MODE;
|
||||
eLinCOM COM; // Является защелкой (триггером), которую контроллер сбросит, когда заберет данные
|
||||
eStall_SET Stall_SET;
|
||||
eLnoise_SET Lnoise_SET;
|
||||
eAutos_SET Autos_SET;
|
||||
eSpeed_SET Speed_SET;
|
||||
eCoils_Stop_SET Coils_Stop_SET;
|
||||
} tLinCommandActuator;
|
||||
|
||||
typedef struct {
|
||||
|
||||
tLinIO *linIo;
|
||||
osMutexId_t access;
|
||||
|
||||
tLinStateActuator linStateActuator[9];
|
||||
uint8_t busy; // Устройство занято
|
||||
uint8_t errorConnect; // Ошибка соединения (устройство не отвечает)
|
||||
|
||||
tLinStateFullActuator linStateActuator[9];
|
||||
tLinCommandActuator linCommandActuator[9];
|
||||
|
||||
tLinData *linData;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue