Обновление
This commit is contained in:
parent
31badb40c3
commit
62cd50c41f
|
|
@ -142,7 +142,7 @@ typedef struct __attribute__ ((packed)) {
|
||||||
|
|
||||||
uint8_t STATE_NUMBER;
|
uint8_t STATE_NUMBER;
|
||||||
|
|
||||||
uint32_t SESSION_CONFIGURATION_ID;
|
uint16_t SESSION_CONFIGURATION_ID;
|
||||||
|
|
||||||
|
|
||||||
} eXcpCommand_GET_STATUS;
|
} eXcpCommand_GET_STATUS;
|
||||||
|
|
@ -583,12 +583,25 @@ typedef struct {
|
||||||
|
|
||||||
//tXCP_DAQ DAQ[MAX_DAO];
|
//tXCP_DAQ DAQ[MAX_DAO];
|
||||||
|
|
||||||
uint16_t DAQ_LIST_NUMBER;
|
struct {
|
||||||
uint8_t ODT_NUMBER;
|
uint8_t STORE_CAL_REQ; // ожидает сохранения в энергонезависимую память
|
||||||
uint8_t ODT_ENTRY_NUMBER;
|
uint8_t STORE_DAQ_REQ; // требуется сохранить DAQ-листы
|
||||||
uint16_t DAQ_COUNT;
|
uint8_t CLEAR_DAQ_REQ; // требуется очистить все DAQ-листы
|
||||||
|
uint8_t DAQ_RUNNING; // минимум один DAQ-лист запущен и работает
|
||||||
|
uint8_t RESUME; // устройство в режиме RESUME
|
||||||
|
} STATE;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
uint16_t DAQ_LIST_NUMBER;
|
||||||
|
uint8_t ODT_NUMBER;
|
||||||
|
uint8_t ODT_ENTRY_NUMBER;
|
||||||
|
uint16_t DAQ_COUNT;
|
||||||
|
} SETUP;
|
||||||
|
|
||||||
tXCP_DAQ *DAQ;
|
tXCP_DAQ *DAQ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
tRtcIO *rtcIO;
|
tRtcIO *rtcIO;
|
||||||
|
|
||||||
osMutexId_t access;
|
osMutexId_t access;
|
||||||
|
|
|
||||||
|
|
@ -113,10 +113,8 @@ void CanSerialPortFrameXcpInit(
|
||||||
}
|
}
|
||||||
|
|
||||||
static void FREE_DAQ(tCanSerialPortFrameXCP *env) {
|
static void FREE_DAQ(tCanSerialPortFrameXCP *env) {
|
||||||
env->DAQ_COUNT = 0;
|
memset(&env->STATE, 0, sizeof(env->STATE));
|
||||||
env->DAQ_LIST_NUMBER = 0;
|
memset(&env->SETUP, 0, sizeof(env->SETUP));
|
||||||
env->ODT_NUMBER = 0;
|
|
||||||
env->ODT_ENTRY_NUMBER = 0;
|
|
||||||
memset(env->DAQ, 0, sizeof(DAQ));
|
memset(env->DAQ, 0, sizeof(DAQ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -164,34 +162,57 @@ static uint8_t XCP_COMMAND_DISCONNECT_FE(tCanSerialPortFrameXCP *env) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void update_STATE(tCanSerialPortFrameXCP *env) {
|
||||||
|
|
||||||
|
env->STATE.STORE_CAL_REQ = 0; // ожидает сохранения в энергонезависимую память
|
||||||
|
env->STATE.STORE_DAQ_REQ = 0; // требуется сохранить DAQ-листы (не загрузить, а сохранить)
|
||||||
|
env->STATE.CLEAR_DAQ_REQ = 0; // требуется очистить все DAQ-листы
|
||||||
|
|
||||||
|
env->STATE.DAQ_RUNNING = 0; // минимум один DAQ-лист запущен и работает
|
||||||
|
|
||||||
|
for (uint16 i = 0; i < env->SETUP.DAQ_COUNT; ++i) {
|
||||||
|
if (env->DAQ[i].RUNNING) {
|
||||||
|
env->STATE.DAQ_RUNNING = 1; // минимум один DAQ-лист запущен и работает
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
env->STATE.RESUME = 0; // устройство в режиме RESUME
|
||||||
|
}
|
||||||
|
|
||||||
static uint8_t XCP_COMMAND_GET_STATUS_FD(tCanSerialPortFrameXCP *env) {
|
static uint8_t XCP_COMMAND_GET_STATUS_FD(tCanSerialPortFrameXCP *env) {
|
||||||
|
|
||||||
|
update_STATE(env);
|
||||||
|
|
||||||
eXcpCommand_GET_STATUS *xcpCommand_GET_STATUS = (eXcpCommand_GET_STATUS *) env->response;
|
eXcpCommand_GET_STATUS *xcpCommand_GET_STATUS = (eXcpCommand_GET_STATUS *) env->response;
|
||||||
|
|
||||||
xcpCommand_GET_STATUS->COM = XCP_COMMAND_CONNECT;
|
xcpCommand_GET_STATUS->COM = XCP_COMMAND_CONNECT;
|
||||||
|
|
||||||
xcpCommand_GET_STATUS->STORE_CAL_REQ = 0;
|
// Статус состояний
|
||||||
|
xcpCommand_GET_STATUS->STORE_CAL_REQ = env->STATE.STORE_CAL_REQ;
|
||||||
xcpCommand_GET_STATUS->reserve1 = 0;
|
xcpCommand_GET_STATUS->reserve1 = 0;
|
||||||
xcpCommand_GET_STATUS->STORE_DAQ_REQ = 0;
|
xcpCommand_GET_STATUS->STORE_DAQ_REQ = env->STATE.STORE_DAQ_REQ;
|
||||||
xcpCommand_GET_STATUS->CLEAR_DAQ_REQ = 0;
|
xcpCommand_GET_STATUS->CLEAR_DAQ_REQ = env->STATE.CLEAR_DAQ_REQ;
|
||||||
xcpCommand_GET_STATUS->reserve2 = 0;
|
xcpCommand_GET_STATUS->reserve2 = 0;
|
||||||
xcpCommand_GET_STATUS->reserve3 = 0;
|
xcpCommand_GET_STATUS->reserve3 = 0;
|
||||||
xcpCommand_GET_STATUS->DAQ_RUNNING = 0;
|
xcpCommand_GET_STATUS->DAQ_RUNNING = env->STATE.DAQ_RUNNING;
|
||||||
xcpCommand_GET_STATUS->RESUME = 0;
|
xcpCommand_GET_STATUS->RESUME = env->STATE.RESUME; // устройство не в режиме RESUME
|
||||||
|
|
||||||
xcpCommand_GET_STATUS->CAL_PAG = 0;
|
// Статус защиты ресурсов
|
||||||
|
xcpCommand_GET_STATUS->CAL_PAG = 1; // защита команд калибровки/пагинации
|
||||||
xcpCommand_GET_STATUS->reserve5 = 0;
|
xcpCommand_GET_STATUS->reserve5 = 0;
|
||||||
xcpCommand_GET_STATUS->DAQ = 0;
|
xcpCommand_GET_STATUS->DAQ = 1; // защита DAQ-команд
|
||||||
xcpCommand_GET_STATUS->STIM = 0;
|
xcpCommand_GET_STATUS->STIM = 1; // защита STIM-команд
|
||||||
xcpCommand_GET_STATUS->PGM = 0;
|
xcpCommand_GET_STATUS->PGM = 1; // защита команд программирования
|
||||||
xcpCommand_GET_STATUS->reserve6 = 0;
|
xcpCommand_GET_STATUS->reserve6 = 0;
|
||||||
xcpCommand_GET_STATUS->reserve7 = 0;
|
xcpCommand_GET_STATUS->reserve7 = 0;
|
||||||
xcpCommand_GET_STATUS->reserve8 = 0;
|
xcpCommand_GET_STATUS->reserve8 = 0;
|
||||||
|
|
||||||
xcpCommand_GET_STATUS->STATE_NUMBER = 2;
|
xcpCommand_GET_STATUS->STATE_NUMBER = 2; // номер состояния ECU
|
||||||
|
|
||||||
xcpCommand_GET_STATUS->SESSION_CONFIGURATION_ID = 0;
|
xcpCommand_GET_STATUS->SESSION_CONFIGURATION_ID = 0; // ID конфигурации сессии
|
||||||
|
|
||||||
return 8;
|
return 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t XCP_COMMAND_SYNCH_FC(tCanSerialPortFrameXCP *env) {
|
static uint8_t XCP_COMMAND_SYNCH_FC(tCanSerialPortFrameXCP *env) {
|
||||||
|
|
@ -440,7 +461,7 @@ static uint8_t XCP_GET_DAQ_LIST_INFO_D8(tCanSerialPortFrameXCP *env) {
|
||||||
static uint8_t XCP_ALLOC_DAQ_D5(tCanSerialPortFrameXCP *env) {
|
static uint8_t XCP_ALLOC_DAQ_D5(tCanSerialPortFrameXCP *env) {
|
||||||
eXcpCommand_ALLOC_DAQ *request = (eXcpCommand_ALLOC_DAQ *) env->canFrame.data;
|
eXcpCommand_ALLOC_DAQ *request = (eXcpCommand_ALLOC_DAQ *) env->canFrame.data;
|
||||||
|
|
||||||
env->DAQ_COUNT = request->DAQ_COUNT;
|
env->SETUP.DAQ_COUNT = request->DAQ_COUNT;
|
||||||
|
|
||||||
env->response[0] = XCP_COMMAND_CONNECT;
|
env->response[0] = XCP_COMMAND_CONNECT;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -486,9 +507,9 @@ static uint8_t XCP_SET_DAQ_PTR_E2(tCanSerialPortFrameXCP *env) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
env->DAQ_LIST_NUMBER = request->DAQ_LIST_NUMBER;
|
env->SETUP.DAQ_LIST_NUMBER = request->DAQ_LIST_NUMBER;
|
||||||
env->ODT_NUMBER = request->ODT_NUMBER;
|
env->SETUP.ODT_NUMBER = request->ODT_NUMBER;
|
||||||
env->ODT_ENTRY_NUMBER = request->ODT_ENTRY_NUMBER;
|
env->SETUP.ODT_ENTRY_NUMBER = request->ODT_ENTRY_NUMBER;
|
||||||
|
|
||||||
|
|
||||||
env->response[0] = XCP_COMMAND_CONNECT;
|
env->response[0] = XCP_COMMAND_CONNECT;
|
||||||
|
|
@ -498,7 +519,7 @@ static uint8_t XCP_SET_DAQ_PTR_E2(tCanSerialPortFrameXCP *env) {
|
||||||
static uint8_t XCP_WRITE_DAQ_E1(tCanSerialPortFrameXCP *env) {
|
static uint8_t XCP_WRITE_DAQ_E1(tCanSerialPortFrameXCP *env) {
|
||||||
eXcpCommand_WRITE_DAQ *request = (eXcpCommand_WRITE_DAQ *) env->canFrame.data;
|
eXcpCommand_WRITE_DAQ *request = (eXcpCommand_WRITE_DAQ *) env->canFrame.data;
|
||||||
|
|
||||||
if (env->ODT_ENTRY_NUMBER > MAX_ODT_ENTRIES_SIZE_DAQ) {
|
if (env->SETUP.ODT_ENTRY_NUMBER > MAX_ODT_ENTRIES_SIZE_DAQ) {
|
||||||
|
|
||||||
env->response[0] = XCP_COMMAND_DISCONNECT;
|
env->response[0] = XCP_COMMAND_DISCONNECT;
|
||||||
env->response[1] = XCP_ERR_OUT_OF_RANGE;
|
env->response[1] = XCP_ERR_OUT_OF_RANGE;
|
||||||
|
|
@ -506,12 +527,12 @@ static uint8_t XCP_WRITE_DAQ_E1(tCanSerialPortFrameXCP *env) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
env->DAQ[env->DAQ_LIST_NUMBER].ODT_NUMBER[env->ODT_NUMBER].BIT_OFFSET[env->ODT_ENTRY_NUMBER] = request->BIT_OFFSET;
|
env->DAQ[env->SETUP.DAQ_LIST_NUMBER].ODT_NUMBER[env->SETUP.ODT_NUMBER].BIT_OFFSET[env->SETUP.ODT_ENTRY_NUMBER] = request->BIT_OFFSET;
|
||||||
env->DAQ[env->DAQ_LIST_NUMBER].ODT_NUMBER[env->ODT_NUMBER].ADR_EXT[env->ODT_ENTRY_NUMBER] = request->ADR_EXT;
|
env->DAQ[env->SETUP.DAQ_LIST_NUMBER].ODT_NUMBER[env->SETUP.ODT_NUMBER].ADR_EXT[env->SETUP.ODT_ENTRY_NUMBER] = request->ADR_EXT;
|
||||||
env->DAQ[env->DAQ_LIST_NUMBER].ODT_NUMBER[env->ODT_NUMBER].ODT_ENTRIES_ADR[env->ODT_ENTRY_NUMBER] = request->ADR;
|
env->DAQ[env->SETUP.DAQ_LIST_NUMBER].ODT_NUMBER[env->SETUP.ODT_NUMBER].ODT_ENTRIES_ADR[env->SETUP.ODT_ENTRY_NUMBER] = request->ADR;
|
||||||
env->DAQ[env->DAQ_LIST_NUMBER].ODT_NUMBER[env->ODT_NUMBER].ODT_ENTRIES_SIZE[env->ODT_ENTRY_NUMBER] = request->ODT_ENTRY_SIZE;
|
env->DAQ[env->SETUP.DAQ_LIST_NUMBER].ODT_NUMBER[env->SETUP.ODT_NUMBER].ODT_ENTRIES_SIZE[env->SETUP.ODT_ENTRY_NUMBER] = request->ODT_ENTRY_SIZE;
|
||||||
|
|
||||||
++env->ODT_ENTRY_NUMBER;
|
++env->SETUP.ODT_ENTRY_NUMBER;
|
||||||
|
|
||||||
env->response[0] = XCP_COMMAND_CONNECT;
|
env->response[0] = XCP_COMMAND_CONNECT;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -606,12 +627,12 @@ static uint8_t XCP_READ_DAQ_DB(tCanSerialPortFrameXCP *env) {
|
||||||
eXcpCommand_WRITE_DAQ *response = (eXcpCommand_WRITE_DAQ *) env->response;
|
eXcpCommand_WRITE_DAQ *response = (eXcpCommand_WRITE_DAQ *) env->response;
|
||||||
|
|
||||||
response->COM = XCP_COMMAND_CONNECT;
|
response->COM = XCP_COMMAND_CONNECT;
|
||||||
response->BIT_OFFSET = env->DAQ[env->DAQ_LIST_NUMBER].ODT_NUMBER[env->ODT_NUMBER].BIT_OFFSET[env->ODT_ENTRY_NUMBER];
|
response->BIT_OFFSET = env->DAQ[env->SETUP.DAQ_LIST_NUMBER].ODT_NUMBER[env->SETUP.ODT_NUMBER].BIT_OFFSET[env->SETUP.ODT_ENTRY_NUMBER];
|
||||||
response->ADR_EXT = env->DAQ[env->DAQ_LIST_NUMBER].ODT_NUMBER[env->ODT_NUMBER].ADR_EXT[env->ODT_ENTRY_NUMBER];
|
response->ADR_EXT = env->DAQ[env->SETUP.DAQ_LIST_NUMBER].ODT_NUMBER[env->SETUP.ODT_NUMBER].ADR_EXT[env->SETUP.ODT_ENTRY_NUMBER];
|
||||||
response->ADR = env->DAQ[env->DAQ_LIST_NUMBER].ODT_NUMBER[env->ODT_NUMBER].ODT_ENTRIES_ADR[env->ODT_ENTRY_NUMBER];
|
response->ADR = env->DAQ[env->SETUP.DAQ_LIST_NUMBER].ODT_NUMBER[env->SETUP.ODT_NUMBER].ODT_ENTRIES_ADR[env->SETUP.ODT_ENTRY_NUMBER];
|
||||||
response->ODT_ENTRY_SIZE = env->DAQ[env->DAQ_LIST_NUMBER].ODT_NUMBER[env->ODT_NUMBER].ODT_ENTRIES_SIZE[env->ODT_ENTRY_NUMBER];
|
response->ODT_ENTRY_SIZE = env->DAQ[env->SETUP.DAQ_LIST_NUMBER].ODT_NUMBER[env->SETUP.ODT_NUMBER].ODT_ENTRIES_SIZE[env->SETUP.ODT_ENTRY_NUMBER];
|
||||||
|
|
||||||
++env->ODT_ENTRY_NUMBER;
|
++env->SETUP.ODT_ENTRY_NUMBER;
|
||||||
|
|
||||||
return 8;
|
return 8;
|
||||||
}
|
}
|
||||||
|
|
@ -1256,7 +1277,7 @@ _Noreturn void CanXcpProcessing_Service_Dto_Stim_Task(tCanSerialPortFrameXCP *en
|
||||||
|
|
||||||
if (osMutexAcquire(env->access, 1000) == osOK) {
|
if (osMutexAcquire(env->access, 1000) == osOK) {
|
||||||
|
|
||||||
for (uint16 i = 0; i < env->DAQ_COUNT; ++i) {
|
for (uint16 i = 0; i < env->SETUP.DAQ_COUNT; ++i) {
|
||||||
|
|
||||||
if ((env->DAQ[i].DIRECTION == 1) &&
|
if ((env->DAQ[i].DIRECTION == 1) &&
|
||||||
(env->DAQ[i].EVENT_CHANNEL == 0) &&
|
(env->DAQ[i].EVENT_CHANNEL == 0) &&
|
||||||
|
|
@ -1348,7 +1369,7 @@ void Dto_Daq(tCanSerialPortFrameXCP *env, uint16_t channel, uint32_t timeout) {
|
||||||
|
|
||||||
if (osMutexAcquire(env->access, 1000) == osOK) {
|
if (osMutexAcquire(env->access, 1000) == osOK) {
|
||||||
|
|
||||||
for (uint16 i = 0; i < env->DAQ_COUNT; ++i) {
|
for (uint16 i = 0; i < env->SETUP.DAQ_COUNT; ++i) {
|
||||||
|
|
||||||
if ((env->DAQ[i].DIRECTION == 0) &&
|
if ((env->DAQ[i].DIRECTION == 0) &&
|
||||||
(env->DAQ[i].EVENT_CHANNEL == channel) &&
|
(env->DAQ[i].EVENT_CHANNEL == channel) &&
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue