Обновление
This commit is contained in:
parent
78262f3062
commit
854cb82eea
|
|
@ -64,12 +64,15 @@ typedef enum {
|
|||
XCP_ALLOC_ODT = 0xD4,
|
||||
XCP_ALLOC_ODT_ENTRY = 0xD3,
|
||||
|
||||
|
||||
|
||||
|
||||
XCP_SET_DAQ_PTR = 0xE2,
|
||||
XCP_WRITE_DAQ = 0xE1,
|
||||
XCP_SET_DAQ_LIST_MODE = 0xE0,
|
||||
XCP_START_STOP_DAQ_LIST = 0xDE,
|
||||
XCP_START_STOP_SYNCH = 0xDD,
|
||||
|
||||
} eXcpTypeCommand;
|
||||
|
||||
|
||||
typedef enum {
|
||||
XCP_STANDBY = 0
|
||||
|
||||
|
|
@ -193,17 +196,30 @@ typedef struct __attribute__ ((packed)) {
|
|||
uint8_t COUNT;
|
||||
} eXcpCommand_Download;
|
||||
|
||||
typedef struct __attribute__ ((packed)) {
|
||||
eXcpTypeCommand COM;
|
||||
uint16_t DAQ_LIST_NUMBER;
|
||||
} eXcpCommand_Get_DAQ_List_Info_Request;
|
||||
|
||||
typedef struct __attribute__ ((packed)) {
|
||||
eXcpTypeCommand COM;
|
||||
uint8_t RESERVED;
|
||||
uint16_t DAQ_LIST_NUMBER;
|
||||
uint8_t ODT_NUMBER;
|
||||
uint8_t ODT_ENTRY_NUMBER;
|
||||
} eXcpCommand_SET_DAQ_PTR;
|
||||
|
||||
#define MAX_DAO 1
|
||||
#define MAX_ODT 50
|
||||
#define MAX_ODT_ENTRIES 14
|
||||
#define MAX_ODT_ENTRIES_SIZE 14
|
||||
|
||||
typedef struct {
|
||||
uint8_t ODT_ENTRIES_COUNT;
|
||||
uint32_t ODT_ENTRIES[MAX_ODT_ENTRIES];
|
||||
uint8_t ODT_ENTRIES_SIZE[MAX_ODT_ENTRIES_SIZE];
|
||||
uint32_t ODT_ENTRIES_ADR[MAX_ODT_ENTRIES_SIZE];
|
||||
} tXCP_ODT_ENTRIES;
|
||||
|
||||
typedef struct {
|
||||
uint8_t ODT_ENTRIES_COUNT[MAX_ODT];
|
||||
tXCP_ODT_ENTRIES ODT_NUMBER[MAX_ODT];
|
||||
} tXCP_DAQ;
|
||||
|
||||
|
|
@ -231,6 +247,31 @@ typedef struct __attribute__ ((packed)) {
|
|||
uint8_t ODT_ENTRIES_COUNT;
|
||||
} eXcpCommand_DAQ_Alloc_ODR_Entry;
|
||||
|
||||
typedef struct __attribute__ ((packed)) {
|
||||
eXcpTypeCommand COM;
|
||||
uint8_t BIT_OFFSET;
|
||||
uint16_t ODT_ENTRY_SIZE;
|
||||
uint8_t ADR_EXT;
|
||||
uint32_t ADR;
|
||||
} eXcpCommand_WRITE_DAQ;
|
||||
|
||||
typedef struct __attribute__ ((packed)) {
|
||||
eXcpTypeCommand COM;
|
||||
|
||||
uint8_t ALTERNATING: 1;
|
||||
uint8_t DIRECTION: 1;
|
||||
uint8_t RESERVED1: 1;
|
||||
uint8_t DTO_CTR: 1;
|
||||
uint8_t TIMESTAMP: 1;
|
||||
uint8_t PID_OFF: 1;
|
||||
uint8_t RESERVED2: 1;
|
||||
uint8_t RESERVED3: 1;
|
||||
|
||||
uint16_t DAQ_LIST_NUMBER;
|
||||
uint16_t EVENT_CHANNEL_NUMBER;
|
||||
uint8_t TRANSMISSION_RATE_PRESCALER;
|
||||
uint8_t DAQ_LIST_PRIORITY;
|
||||
} eXcpCommand_SET_DAQ_LIST_MODE;
|
||||
|
||||
typedef struct {
|
||||
tSerialPortFrameIO *ioCanFrame;
|
||||
|
|
@ -240,12 +281,14 @@ typedef struct {
|
|||
uint8_t ADR_EXT;
|
||||
uint32_t ADR_MTA;
|
||||
|
||||
uint16_t DAQ_LIST_NUMBER;
|
||||
uint8_t ODT_NUMBER;
|
||||
uint8_t ODT_ENTRY_NUMBER;
|
||||
|
||||
can_rx_message_type canFrame;
|
||||
bool isTransmitResponse;
|
||||
bool isTransmitResponseError;
|
||||
uint8_t downloadRemaining;
|
||||
uint8_t response[8];
|
||||
uint8_t responseSize;
|
||||
|
||||
tXCP_DAQ DAQ[MAX_DAO];
|
||||
|
||||
|
|
@ -253,6 +296,9 @@ typedef struct {
|
|||
|
||||
} tCanSerialPortFrameXCP;
|
||||
|
||||
typedef uint8_t (*xcp_func_ptr)(tCanSerialPortFrameXCP *env);
|
||||
|
||||
|
||||
void CanSerialPortFrameXcpInit(
|
||||
tCanSerialPortFrameXCP *env,
|
||||
tSerialPortFrameIO *ioCanFrame,
|
||||
|
|
|
|||
|
|
@ -43,21 +43,7 @@ void CanSerialPortFrameXcpInit(
|
|||
InitThreadBlock(env->T_can_Listener_XCP, "CanListenerXCP", osPriorityNormal);
|
||||
}
|
||||
|
||||
eXcpResult vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeout) {
|
||||
|
||||
uint16_t recv = env->ioCanFrame->receive(env->ioCanFrame->env, PROTOCOL_XCP, (uint8_t *) &env->canFrame, 1,
|
||||
timeout);
|
||||
|
||||
if (recv == 0)
|
||||
return XCP_STANDBY;
|
||||
|
||||
env->isTransmitResponse = true;
|
||||
env->isTransmitResponseError = false;
|
||||
|
||||
eXcpTypeCommand com = env->canFrame.data[0];
|
||||
|
||||
switch (com) {
|
||||
case XCP_COMMAND_CONNECT: {
|
||||
uint8_t XCP_COMMAND_CONNECT_255(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_CONNECT *xcpCommand_CONNECT = (eXcpCommand_CONNECT *) env->response;
|
||||
|
||||
xcpCommand_CONNECT->COM = XCP_COMMAND_CONNECT;
|
||||
|
|
@ -86,17 +72,15 @@ eXcpResult vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 tim
|
|||
xcpCommand_CONNECT->XCP_PROTOCOL_VER = 1;
|
||||
xcpCommand_CONNECT->XCP_TRANSPORT_VER = 1;
|
||||
|
||||
env->responseSize = 8;
|
||||
return 8;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
uint8_t XCP_COMMAND_DISCONNECT_254(tCanSerialPortFrameXCP *env) {
|
||||
|
||||
case XCP_COMMAND_DISCONNECT: {
|
||||
env->isTransmitResponse = false;
|
||||
break;
|
||||
};
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XCP_COMMAND_GET_STATUS: {
|
||||
uint8_t XCP_COMMAND_GET_STATUS_253(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_GET_STATUS *xcpCommand_GET_STATUS = (eXcpCommand_GET_STATUS *) env->response;
|
||||
|
||||
xcpCommand_GET_STATUS->COM = XCP_COMMAND_CONNECT;
|
||||
|
|
@ -123,22 +107,18 @@ eXcpResult vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 tim
|
|||
|
||||
xcpCommand_GET_STATUS->SESSION_CONFIGURATION_ID = 0;
|
||||
|
||||
env->responseSize = 8;
|
||||
return 8;
|
||||
}
|
||||
|
||||
break;
|
||||
};
|
||||
|
||||
case XCP_COMMAND_SYNCH: {
|
||||
uint8_t XCP_COMMAND_SYNCH_252(tCanSerialPortFrameXCP *env) {
|
||||
env->response[0] = XCP_COMMAND_DISCONNECT;
|
||||
env->response[1] = XCP_ERR_CMD_SYNCH;
|
||||
|
||||
env->responseSize = 2;
|
||||
return 2;
|
||||
}
|
||||
|
||||
break;
|
||||
};
|
||||
uint8_t XCP_GET_COMM_MODE_INFO_251(tCanSerialPortFrameXCP *env) {
|
||||
|
||||
|
||||
case XCP_GET_COMM_MODE_INFO: {
|
||||
eXcpCommand_GET_COMM_MODE_INFO *xcpCommand_GET_COMM_MODE_INFO = (eXcpCommand_GET_COMM_MODE_INFO *) env->response;
|
||||
|
||||
xcpCommand_GET_COMM_MODE_INFO->RESERVED1 = 0;
|
||||
|
|
@ -153,31 +133,23 @@ eXcpResult vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 tim
|
|||
xcpCommand_GET_COMM_MODE_INFO->QUEUE_SIZE = 0;
|
||||
xcpCommand_GET_COMM_MODE_INFO->VERSION = 1;
|
||||
|
||||
env->responseSize = 8;
|
||||
break;
|
||||
}
|
||||
return 8;
|
||||
}
|
||||
|
||||
case XCP_GET_SEED: {
|
||||
uint8_t XCP_GET_SEED_248(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_REQ_GET_SEED *request = (eXcpCommand_REQ_GET_SEED *) env->canFrame.data;
|
||||
|
||||
if (request->MODE == 0) {
|
||||
|
||||
eXcpCommand_GET_SEED *xcpCommand_GET_SEED = (eXcpCommand_GET_SEED *) env->response;
|
||||
|
||||
xcpCommand_GET_SEED->COM = XCP_COMMAND_CONNECT;
|
||||
xcpCommand_GET_SEED->LEN = 4;
|
||||
xcpCommand_GET_SEED->KEY = 0x11223344;
|
||||
|
||||
env->RND = request->RESOURCE;
|
||||
|
||||
env->responseSize = 6;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case XCP_UNLOCK: {
|
||||
return 6;
|
||||
}
|
||||
|
||||
uint8_t XCP_UNLOCK_247(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_REQ_UNLOCK *request = (eXcpCommand_REQ_UNLOCK *) env->canFrame.data;
|
||||
|
||||
uint32_t securitySeedMy = SeedToKeyHVAC_NAMI(env->RND, 0x11223344);
|
||||
|
|
@ -185,33 +157,28 @@ eXcpResult vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 tim
|
|||
if (securitySeedMy != request->KEY) {
|
||||
env->response[0] = XCP_COMMAND_DISCONNECT;
|
||||
env->response[1] = XCP_ERR_ACCESS_LOCKED;
|
||||
env->responseSize = 2;
|
||||
} else {
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
env->response[1] = 0;
|
||||
env->responseSize = 2;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
|
||||
case XCP_COMMAND_SET_MTA: {
|
||||
uint8_t XCP_COMMAND_SET_MTA_246(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_SET_MTA *request = (eXcpCommand_SET_MTA *) env->canFrame.data;
|
||||
|
||||
env->ADR_EXT = request->ADR_EX;
|
||||
env->ADR_MTA = request->ADR;
|
||||
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
env->responseSize = 1;
|
||||
|
||||
break;
|
||||
};
|
||||
return 1;
|
||||
}
|
||||
|
||||
case XCP_COMMAND_UPLOAD: {
|
||||
uint8_t XCP_COMMAND_UPLOAD_245(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_Upload *request = (eXcpCommand_Upload *) env->canFrame.data;
|
||||
|
||||
env->isTransmitResponse = false;
|
||||
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
|
||||
uint8_t fullBlock = request->COUNT / 7;
|
||||
|
|
@ -220,37 +187,37 @@ eXcpResult vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 tim
|
|||
for (uint8_t i = 0; i < fullBlock; ++i) {
|
||||
memcpy(&env->response[1], (uint8_t *) (env->ADR_MTA), request->COUNT);
|
||||
env->ADR_MTA += 7;
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7, timeout);
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7, 1000);
|
||||
}
|
||||
|
||||
if (tailBlock > 0) {
|
||||
memcpy(&env->response[1], (uint8_t *) (env->ADR_MTA), tailBlock);
|
||||
env->ADR_MTA += tailBlock;
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, tailBlock, timeout);
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, tailBlock, 1000);
|
||||
}
|
||||
|
||||
break;
|
||||
};
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XCP_COMMAND_SHORT_UPLOAD: {
|
||||
uint8_t XCP_COMMAND_SHORT_UPLOAD_244(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_SHORT_UPLOAD *request = (eXcpCommand_SHORT_UPLOAD *) env->canFrame.data;
|
||||
|
||||
if (request->COUNT > (MAX_CTO - 1)) {
|
||||
env->response[0] = XCP_COMMAND_DISCONNECT;
|
||||
env->response[1] = XCP_ERR_OUT_OF_RANGE;
|
||||
break;
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
|
||||
memcpy(&env->response[1], (uint8_t *) request->ADR, request->COUNT);
|
||||
|
||||
env->responseSize = request->COUNT + 1;
|
||||
break;
|
||||
};
|
||||
return request->COUNT + 1;
|
||||
}
|
||||
|
||||
uint8_t XCP_COMMAND_DOWNLOAD_240(tCanSerialPortFrameXCP *env) {
|
||||
|
||||
case XCP_COMMAND_DOWNLOAD: {
|
||||
eXcpCommand_Download *request = (eXcpCommand_Download *) env->canFrame.data;
|
||||
|
||||
uint8_t COUNT = env->canFrame.dlc - 2;
|
||||
|
|
@ -259,14 +226,13 @@ eXcpResult vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 tim
|
|||
env->ADR_MTA += COUNT;
|
||||
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
env->responseSize = 1;
|
||||
|
||||
env->downloadRemaining = request->COUNT - COUNT;
|
||||
|
||||
break;
|
||||
};
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t XCP_COMMAND_DOWNLOAD_NEXT_239(tCanSerialPortFrameXCP *env) {
|
||||
|
||||
case XCP_COMMAND_DOWNLOAD_NEXT: {
|
||||
eXcpCommand_Download *request = (eXcpCommand_Download *) env->canFrame.data;
|
||||
|
||||
uint8_t COUNT = env->canFrame.dlc - 2;
|
||||
|
|
@ -277,7 +243,8 @@ eXcpResult vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 tim
|
|||
if (request->COUNT != env->downloadRemaining) {
|
||||
env->response[0] = XCP_COMMAND_DISCONNECT;
|
||||
env->response[1] = XCP_ERR_SEQUENCE;
|
||||
break;
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
env->downloadRemaining -= COUNT;
|
||||
|
|
@ -287,74 +254,416 @@ eXcpResult vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 tim
|
|||
if (env->downloadRemaining == 0) {
|
||||
env->isTransmitResponse = true;
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
env->responseSize = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
break;
|
||||
};
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t XCP_COMMAND_DOWNLOAD_MAX_238(tCanSerialPortFrameXCP *env) {
|
||||
|
||||
case XCP_COMMAND_DOWNLOAD_MAX: {
|
||||
uint8_t COUNT = env->canFrame.dlc - 1;
|
||||
|
||||
memcpy((uint8_t *) (env->ADR_MTA), &env->response[1], COUNT);
|
||||
env->ADR_MTA += COUNT;
|
||||
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
env->responseSize = 1;
|
||||
|
||||
break;
|
||||
};
|
||||
return 1;
|
||||
}
|
||||
|
||||
case XCP_CLEAR_DAQ_LIST: {
|
||||
|
||||
break;
|
||||
uint8_t XCP_CLEAR_DAQ_LIST_227(tCanSerialPortFrameXCP *env) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
uint8_t XCP_GET_DAQ_LIST_INFO_216(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_Get_DAQ_List_Info_Request *request = (eXcpCommand_Get_DAQ_List_Info_Request *) env->canFrame.data;
|
||||
|
||||
if (request->DAQ_LIST_NUMBER > MAX_DAO) {
|
||||
env->response[0] = XCP_COMMAND_DISCONNECT;
|
||||
env->response[1] = XCP_ERR_OUT_OF_RANGE;
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
case XCP_GET_DAQ_LIST_INFO: {
|
||||
eXcpCommand_Get_DAQ_List_Info *xcpCommand_Get_DAQ_List_Info = (eXcpCommand_Get_DAQ_List_Info *) env->response;
|
||||
|
||||
xcpCommand_Get_DAQ_List_Info->COM = XCP_COMMAND_CONNECT;
|
||||
|
||||
xcpCommand_Get_DAQ_List_Info-> PREDEFINED = ;
|
||||
xcpCommand_Get_DAQ_List_Info-> EVENT_FIXED = ;
|
||||
xcpCommand_Get_DAQ_List_Info-> DAQ = ;
|
||||
xcpCommand_Get_DAQ_List_Info-> STIM = ;
|
||||
xcpCommand_Get_DAQ_List_Info-> RESERVER = 0;
|
||||
xcpCommand_Get_DAQ_List_Info->PREDEFINED = 0;
|
||||
xcpCommand_Get_DAQ_List_Info->EVENT_FIXED = 0;
|
||||
xcpCommand_Get_DAQ_List_Info->DAQ = 1;
|
||||
xcpCommand_Get_DAQ_List_Info->STIM = 1;
|
||||
xcpCommand_Get_DAQ_List_Info->RESERVER = 0;
|
||||
|
||||
xcpCommand_Get_DAQ_List_Info->MAX_ODT_ = MAX_ODT;
|
||||
xcpCommand_Get_DAQ_List_Info->MAX_ODT_ENTRIES_ = MAX_ODT_ENTRIES;
|
||||
xcpCommand_Get_DAQ_List_Info->MAX_ODT_ENTRIES_ = MAX_ODT_ENTRIES_SIZE;
|
||||
xcpCommand_Get_DAQ_List_Info->FIXED_EVENT = 0;
|
||||
|
||||
env->responseSize = 6;
|
||||
break;
|
||||
}
|
||||
return 6;
|
||||
}
|
||||
|
||||
case XCP_FREE_DAQ: {
|
||||
break;
|
||||
}
|
||||
uint8_t XCP_FREE_DAQ_214(tCanSerialPortFrameXCP *env) {
|
||||
|
||||
case XCP_ALLOC_DAQ: {
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XCP_ALLOC_ODT: {
|
||||
break;
|
||||
}
|
||||
uint8_t XCP_ALLOC_DAQ_213(tCanSerialPortFrameXCP *env) {
|
||||
|
||||
case XCP_ALLOC_ODT_ENTRY: {
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t XCP_ALLOC_ODT_212(tCanSerialPortFrameXCP *env) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
uint8_t XCP_ALLOC_ODT_ENTRY_211(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_DAQ_Alloc_ODR_Entry *request = (eXcpCommand_DAQ_Alloc_ODR_Entry *) env->canFrame.data;
|
||||
env->DAQ[request->DAQ_LIST_NUMBER].ODT_NUMBER[request->DAQ_LIST_NUMBER].ODT_ENTRIES_COUNT = request->ODT_ENTRIES_COUNT;
|
||||
break;
|
||||
env->DAQ[request->DAQ_LIST_NUMBER].ODT_ENTRIES_COUNT[request->DAQ_LIST_NUMBER] = request->ODT_ENTRIES_COUNT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
uint8_t XCP_SET_DAQ_PTR_226(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_SET_DAQ_PTR *request = (eXcpCommand_SET_DAQ_PTR *) env->canFrame.data;
|
||||
|
||||
if ((request->DAQ_LIST_NUMBER > MAX_DAO) ||
|
||||
(request->ODT_NUMBER > MAX_ODT) ||
|
||||
(request->ODT_ENTRY_NUMBER > MAX_ODT_ENTRIES_SIZE)) {
|
||||
|
||||
env->response[0] = XCP_COMMAND_DISCONNECT;
|
||||
env->response[1] = XCP_ERR_OUT_OF_RANGE;
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
env->DAQ_LIST_NUMBER = request->DAQ_LIST_NUMBER;
|
||||
env->ODT_NUMBER = request->ODT_NUMBER;
|
||||
env->ODT_ENTRY_NUMBER = request->ODT_ENTRY_NUMBER;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t XCP_WRITE_DAQ_225(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_WRITE_DAQ *request = (eXcpCommand_WRITE_DAQ *) env->canFrame.data;
|
||||
|
||||
if (request->ODT_ENTRY_SIZE > MAX_ODT_ENTRIES_SIZE) {
|
||||
|
||||
env->response[0] = XCP_COMMAND_DISCONNECT;
|
||||
env->response[1] = XCP_ERR_OUT_OF_RANGE;
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
env->DAQ[env->DAQ_LIST_NUMBER].ODT_NUMBER[env->ODT_NUMBER].ODT_ENTRIES_ADR[env->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;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t XCP_SET_DAQ_LIST_MODE_224(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_SET_DAQ_LIST_MODE *request = (eXcpCommand_SET_DAQ_LIST_MODE *) env->canFrame.data;
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const xcp_func_ptr fXcp_func_ptr[256] = {
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
XCP_ALLOC_ODT_ENTRY_211,
|
||||
XCP_ALLOC_ODT_212,
|
||||
XCP_ALLOC_DAQ_213,
|
||||
XCP_FREE_DAQ_214,
|
||||
NULL,
|
||||
XCP_GET_DAQ_LIST_INFO_216,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
XCP_SET_DAQ_LIST_MODE_224,
|
||||
XCP_WRITE_DAQ_225,
|
||||
XCP_SET_DAQ_PTR_226,
|
||||
XCP_CLEAR_DAQ_LIST_227,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
XCP_COMMAND_DOWNLOAD_MAX_238,
|
||||
XCP_COMMAND_DOWNLOAD_NEXT_239,
|
||||
XCP_COMMAND_DOWNLOAD_240,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
XCP_COMMAND_SHORT_UPLOAD_244,
|
||||
XCP_COMMAND_UPLOAD_245,
|
||||
XCP_COMMAND_SET_MTA_246,
|
||||
XCP_UNLOCK_247,
|
||||
XCP_GET_SEED_248,
|
||||
NULL,
|
||||
NULL,
|
||||
XCP_GET_COMM_MODE_INFO_251,
|
||||
XCP_COMMAND_SYNCH_252,
|
||||
XCP_COMMAND_GET_STATUS_253,
|
||||
XCP_COMMAND_DISCONNECT_254,
|
||||
XCP_COMMAND_CONNECT_255
|
||||
};
|
||||
|
||||
|
||||
eXcpResult vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeout) {
|
||||
|
||||
uint16_t recv = env->ioCanFrame->receive(env->ioCanFrame->env, PROTOCOL_XCP, (uint8_t *) &env->canFrame, 1,
|
||||
timeout);
|
||||
|
||||
if (recv == 0)
|
||||
return XCP_STANDBY;
|
||||
|
||||
env->isTransmitResponse = true;
|
||||
|
||||
eXcpTypeCommand com = env->canFrame.data[0];
|
||||
|
||||
if (fXcp_func_ptr[com] != NULL) {
|
||||
|
||||
uint8_t response_size = fXcp_func_ptr[com](env);
|
||||
|
||||
if (response_size) {
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, timeout);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (env->isTransmitResponse) {
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, env->responseSize, timeout);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_Noreturn void CanXcpProcessing_ListenerTask(tCanSerialPortFrameXCP *env) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue