Обновление
This commit is contained in:
parent
9ee1cb0f5d
commit
010bb1fc15
|
|
@ -220,6 +220,7 @@ typedef struct __attribute__ ((packed)) {
|
|||
|
||||
#define PROGRAM_MASTER_BLOCK_MODE 1
|
||||
#define PROGRAM_MAX_SECTOR 8
|
||||
#define PROGRAM_MAX_BUF 256
|
||||
|
||||
|
||||
#define MAX_CTO 8
|
||||
|
|
@ -529,6 +530,22 @@ typedef struct __attribute__ ((packed)) {
|
|||
uint32_t SECTOR_INFO;
|
||||
} eXcpCommand_RESP_GET_SECTOR_INFO_CD;
|
||||
|
||||
typedef struct __attribute__ ((packed)) {
|
||||
eXcpTypeCommand COM;
|
||||
|
||||
uint8_t ECU: 1;
|
||||
uint8_t XCP: 1;
|
||||
uint8_t RESERVED1: 1;
|
||||
uint8_t RESERVED2: 1;
|
||||
uint8_t RESERVED3: 1;
|
||||
uint8_t RESERVED4: 1;
|
||||
uint8_t RESERVED5: 1;
|
||||
uint8_t ALL: 1;
|
||||
|
||||
uint8_t SEGMENT;
|
||||
uint8_t PAGE;
|
||||
|
||||
} eXcpCommand_SET_CALIBRATION_PAGE_EB;
|
||||
|
||||
typedef bool (xcp_clear_flash_func)(uint32_t firstPageAddr, uint32_t totalSize);
|
||||
typedef bool (xcp_write_flash_func)(uint32_t beginPageAddr, void *sourceRamAddr, uint32_t size);
|
||||
|
|
@ -568,14 +585,24 @@ typedef struct {
|
|||
|
||||
xcp_write_flash_func *write_flash_func;
|
||||
|
||||
uint8_t bufWriteFlash[PROGRAM_MAX_BUF];
|
||||
uint16_t bufWriteFlashCount;
|
||||
uint32_t bufWriteFlashAdr;
|
||||
|
||||
tStaticThreadBlock(512) T_can_Listener_XCP;
|
||||
tStaticThreadBlock(512) T_can_Listener_Dto_Stim_XCP;
|
||||
tStaticThreadBlock(512) T_can_Listener_Dto_Daq_XCP;
|
||||
|
||||
} tCanSerialPortFrameXCP;
|
||||
|
||||
|
||||
typedef uint8_t (*xcp_func_ptr)(tCanSerialPortFrameXCP *env);
|
||||
|
||||
typedef struct {
|
||||
xcp_func_ptr func;
|
||||
char *desc;
|
||||
} eXcp_com;
|
||||
|
||||
void CanSerialPortFrameXcpInit(
|
||||
tCanSerialPortFrameXCP *env,
|
||||
tSerialPortFrameIO *ioCanFrame,
|
||||
|
|
|
|||
|
|
@ -12,6 +12,50 @@
|
|||
#define LOG_SIGN "CAN_XCP"
|
||||
#define LOGGER env->logger
|
||||
|
||||
char strPrintfDebug[80];
|
||||
|
||||
void PrintfDebug(uint8_t *data, uint8_t dlc) {
|
||||
|
||||
switch (dlc) {
|
||||
|
||||
case 0:
|
||||
sprintf(strPrintfDebug, " ");
|
||||
break;
|
||||
case 1:
|
||||
sprintf(strPrintfDebug, "0x%02X", data[0]);
|
||||
break;
|
||||
case 2:
|
||||
sprintf(strPrintfDebug, "0x%02X:0x%02X", data[0], data[1]);
|
||||
break;
|
||||
case 3:
|
||||
sprintf(strPrintfDebug, "0x%02X:0x%02X:0x%02X", data[0], data[1], data[2]);
|
||||
break;
|
||||
case 4:
|
||||
sprintf(strPrintfDebug, "0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3]);
|
||||
break;
|
||||
case 5:
|
||||
sprintf(strPrintfDebug, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], data[4]);
|
||||
break;
|
||||
case 6:
|
||||
sprintf(strPrintfDebug, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3],
|
||||
data[4], data[5]);
|
||||
break;
|
||||
case 7:
|
||||
sprintf(strPrintfDebug, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2],
|
||||
data[3], data[4],
|
||||
data[5], data[6]);
|
||||
break;
|
||||
case 8:
|
||||
sprintf(strPrintfDebug, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1],
|
||||
data[2], data[3], data[4],
|
||||
data[5], data[6], data[7]);
|
||||
break;
|
||||
default:
|
||||
sprintf(strPrintfDebug, " ");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static unsigned long SeedToKeyHVAC_NAMI(unsigned char rnd, unsigned long dwSeedInfo) {
|
||||
#define Mask 0x55F388A6UL
|
||||
|
||||
|
|
@ -123,7 +167,7 @@ static uint8_t XCP_COMMAND_GET_STATUS_FD(tCanSerialPortFrameXCP *env) {
|
|||
xcpCommand_GET_STATUS->reserve7 = 0;
|
||||
xcpCommand_GET_STATUS->reserve8 = 0;
|
||||
|
||||
xcpCommand_GET_STATUS->STATE_NUMBER = 2;
|
||||
xcpCommand_GET_STATUS->STATE_NUMBER = 0;
|
||||
|
||||
xcpCommand_GET_STATUS->SESSION_CONFIGURATION_ID = 0;
|
||||
|
||||
|
|
@ -143,7 +187,7 @@ static uint8_t XCP_GET_COMM_MODE_INFO_FB(tCanSerialPortFrameXCP *env) {
|
|||
|
||||
xcpCommand_GET_COMM_MODE_INFO->RESERVED1 = 0;
|
||||
|
||||
xcpCommand_GET_COMM_MODE_INFO->MASTER_BLOCK_MODE = 1;
|
||||
xcpCommand_GET_COMM_MODE_INFO->MASTER_BLOCK_MODE = 0;
|
||||
xcpCommand_GET_COMM_MODE_INFO->INTERLEAVED_MODE = 0;
|
||||
xcpCommand_GET_COMM_MODE_INFO->RESERVED2 = 0;
|
||||
|
||||
|
|
@ -194,6 +238,9 @@ static uint8_t XCP_COMMAND_SET_MTA_F6(tCanSerialPortFrameXCP *env) {
|
|||
env->response[0] = XCP_COMMAND_DISCONNECT;
|
||||
env->response[1] = XCP_ERR_ACCESS_DENIED;
|
||||
|
||||
|
||||
env->bufWriteFlashCount = 0;
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
|
@ -201,6 +248,7 @@ static uint8_t XCP_COMMAND_SET_MTA_F6(tCanSerialPortFrameXCP *env) {
|
|||
env->ADR_MTA = request->ADR;
|
||||
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
env->bufWriteFlashAdr = env->ADR_MTA;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -216,6 +264,10 @@ static uint8_t XCP_COMMAND_UPLOAD_F5(tCanSerialPortFrameXCP *env) {
|
|||
for (uint8_t i = 0; i < fullBlock; ++i) {
|
||||
memcpy(&env->response[1], (uint8_t *) (env->ADR_MTA), request->COUNT);
|
||||
env->ADR_MTA += 7;
|
||||
|
||||
PrintfDebug(env->response, 7 + 1);
|
||||
LoggerFormatInfo(LOGGER, LOG_SIGN, "< [%d] %s", 7 + 1, strPrintfDebug)
|
||||
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7 + 1, PROTOCOL_CAN_ADR_XCP,
|
||||
PROTOCOL_CAN_TYPE_XCP,
|
||||
1000);
|
||||
|
|
@ -224,6 +276,11 @@ static uint8_t XCP_COMMAND_UPLOAD_F5(tCanSerialPortFrameXCP *env) {
|
|||
if (tailBlock > 0) {
|
||||
memcpy(&env->response[1], (uint8_t *) (env->ADR_MTA), tailBlock);
|
||||
env->ADR_MTA += tailBlock;
|
||||
|
||||
|
||||
PrintfDebug(env->response, tailBlock + 1);
|
||||
LoggerFormatInfo(LOGGER, LOG_SIGN, "< [%d] %s", tailBlock + 1, strPrintfDebug)
|
||||
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, tailBlock + 1, PROTOCOL_CAN_ADR_XCP,
|
||||
PROTOCOL_CAN_TYPE_XCP, 1000);
|
||||
}
|
||||
|
|
@ -719,21 +776,25 @@ static uint8_t XCP_PROGRAM_D0(tCanSerialPortFrameXCP *env) {
|
|||
|
||||
uint8_t COUNT = env->canFrame.dlc - 2;
|
||||
|
||||
env->write_flash_func(env->ADR_MTA, &env->canFrame.data[2], request->COUNT);
|
||||
for (uint8_t i = 0; i < COUNT; ++i) {
|
||||
|
||||
env->bufWriteFlash[env->bufWriteFlashCount] = env->canFrame.data[2 + i];
|
||||
|
||||
++env->bufWriteFlashCount;
|
||||
|
||||
if (env->bufWriteFlashCount >= PROGRAM_MAX_BUF) {
|
||||
bool result = env->write_flash_func(env->bufWriteFlashAdr, env->bufWriteFlash, PROGRAM_MAX_BUF);
|
||||
env->bufWriteFlashAdr += PROGRAM_MAX_BUF;
|
||||
env->bufWriteFlashCount = 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
env->ADR_MTA += request->COUNT;
|
||||
|
||||
#ifndef PROGRAM_MASTER_BLOCK_MODE
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
return 1;
|
||||
#else
|
||||
if (request->COUNT == 0) {
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static uint8_t XCP_PROGRAM_NEXT_CA(tCanSerialPortFrameXCP *env) {
|
||||
|
|
@ -750,6 +811,11 @@ static uint8_t XCP_PROGRAM_NEXT_CA(tCanSerialPortFrameXCP *env) {
|
|||
|
||||
static uint8_t XCP_PROGRAM_RESET_CF(tCanSerialPortFrameXCP *env) {
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
|
||||
if (env->bufWriteFlashCount > 0) {
|
||||
bool result = env->write_flash_func(env->bufWriteFlashAdr, env->bufWriteFlash, env->bufWriteFlashCount);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -782,7 +848,7 @@ static uint8_t XCP_GET_SECTOR_INFO_CD(tCanSerialPortFrameXCP *env) {
|
|||
return 2;
|
||||
}
|
||||
|
||||
eXcpCommand_RESP_GET_SECTOR_INFO_CD *response = (eXcpCommand_RESP_GET_SECTOR_INFO_CD *) env->response;\
|
||||
eXcpCommand_RESP_GET_SECTOR_INFO_CD *response = (eXcpCommand_RESP_GET_SECTOR_INFO_CD *) env->response;
|
||||
response->COM = XCP_COMMAND_CONNECT;
|
||||
response->CLEAR_SEQUENCE_NUMBER = request->SECTOR_NUMBER;
|
||||
response->PROGRAM_SEQUENCE_NUMBER = request->SECTOR_NUMBER;
|
||||
|
|
@ -812,309 +878,278 @@ static uint8_t XCP_GET_SECTOR_INFO_CD(tCanSerialPortFrameXCP *env) {
|
|||
return 8;
|
||||
}
|
||||
|
||||
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,
|
||||
XCP_PROGRAM_NEXT_CA,
|
||||
NULL,
|
||||
NULL,
|
||||
XCP_GET_SECTOR_INFO_CD,
|
||||
XCP_GET_PGM_PROCESSOR_INFO_CE,
|
||||
XCP_PROGRAM_RESET_CF,
|
||||
XCP_PROGRAM_D0,
|
||||
XCP_PROGRAM_CLEAR_D1,
|
||||
XCP_PROGRAM_START_D2,
|
||||
XCP_ALLOC_ODT_ENTRY_D3,
|
||||
XCP_ALLOC_ODT_D4,
|
||||
XCP_ALLOC_DAQ_D5,
|
||||
XCP_FREE_DAQ_D6,
|
||||
XCP_GET_DAQ_EVENT_INFO_D7,
|
||||
XCP_GET_DAQ_LIST_INFO_D8,
|
||||
XCP_GET_DAQ_RESOLUTION_INFO_D9,
|
||||
XCP_GET_DAQ_PROCESSOR_INFO_DA,
|
||||
XCP_READ_DAQ_DB,
|
||||
NULL,
|
||||
XCP_START_STOP_SYNCH_DD,
|
||||
XCP_START_STOP_DAQ_LIST_DE,
|
||||
XCP_GET_DAQ_LIST_MODE_DF,
|
||||
XCP_SET_DAQ_LIST_MODE_E0,
|
||||
XCP_WRITE_DAQ_E1,
|
||||
XCP_SET_DAQ_PTR_E2,
|
||||
XCP_CLEAR_DAQ_LIST_E3,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
XCP_COMMAND_DOWNLOAD_MAX_EE,
|
||||
XCP_COMMAND_DOWNLOAD_NEXT_EF,
|
||||
XCP_COMMAND_DOWNLOAD_F0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
XCP_COMMAND_SHORT_UPLOAD_F4,
|
||||
XCP_COMMAND_UPLOAD_F5,
|
||||
XCP_COMMAND_SET_MTA_F6,
|
||||
XCP_UNLOCK_F7,
|
||||
XCP_GET_SEED_F8,
|
||||
NULL,
|
||||
NULL,
|
||||
XCP_GET_COMM_MODE_INFO_FB,
|
||||
XCP_COMMAND_SYNCH_FC,
|
||||
XCP_COMMAND_GET_STATUS_FD,
|
||||
XCP_COMMAND_DISCONNECT_FE,
|
||||
XCP_COMMAND_CONNECT_FF
|
||||
static uint8_t XCP_SET_CALIBRATION_PAGE_EB(tCanSerialPortFrameXCP *env) {
|
||||
eXcpCommand_SET_CALIBRATION_PAGE_EB *request = (eXcpCommand_SET_CALIBRATION_PAGE_EB *) env->canFrame.data;
|
||||
|
||||
env->response[0] = XCP_COMMAND_CONNECT;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
const eXcp_com xcp_com[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, ""},
|
||||
{XCP_PROGRAM_NEXT_CA, "XCP_PROGRAM_NEXT_CA"},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{XCP_GET_SECTOR_INFO_CD, "XCP_GET_SECTOR_INFO_CD"},
|
||||
{XCP_GET_PGM_PROCESSOR_INFO_CE, "XCP_GET_PGM_PROCESSOR_INFO_CE"},
|
||||
{XCP_PROGRAM_RESET_CF, "XCP_PROGRAM_RESET_CF"},
|
||||
{XCP_PROGRAM_D0, "XCP_PROGRAM_D0"},
|
||||
{XCP_PROGRAM_CLEAR_D1, "XCP_PROGRAM_CLEAR_D1"},
|
||||
{XCP_PROGRAM_START_D2, "XCP_PROGRAM_START_D2"},
|
||||
{XCP_ALLOC_ODT_ENTRY_D3, "XCP_ALLOC_ODT_ENTRY_D3"},
|
||||
{XCP_ALLOC_ODT_D4, "XCP_ALLOC_ODT_D4"},
|
||||
{XCP_ALLOC_DAQ_D5, "XCP_ALLOC_DAQ_D5"},
|
||||
{XCP_FREE_DAQ_D6, "XCP_FREE_DAQ_D6"},
|
||||
{XCP_GET_DAQ_EVENT_INFO_D7, "XCP_GET_DAQ_EVENT_INFO_D7"},
|
||||
{XCP_GET_DAQ_LIST_INFO_D8, "XCP_GET_DAQ_LIST_INFO_D8"},
|
||||
{XCP_GET_DAQ_RESOLUTION_INFO_D9, "XCP_GET_DAQ_RESOLUTION_INFO_D9"},
|
||||
{XCP_GET_DAQ_PROCESSOR_INFO_DA, "XCP_GET_DAQ_PROCESSOR_INFO_DA"},
|
||||
{XCP_READ_DAQ_DB, "XCP_READ_DAQ_DB"},
|
||||
{NULL, ""},
|
||||
{XCP_START_STOP_SYNCH_DD, "XCP_START_STOP_SYNCH_DD"},
|
||||
{XCP_START_STOP_DAQ_LIST_DE, "XCP_START_STOP_DAQ_LIST_DE"},
|
||||
{XCP_GET_DAQ_LIST_MODE_DF, "XCP_GET_DAQ_LIST_MODE_DF"},
|
||||
{XCP_SET_DAQ_LIST_MODE_E0, "XCP_SET_DAQ_LIST_MODE_E0"},
|
||||
{XCP_WRITE_DAQ_E1, "XCP_WRITE_DAQ_E1"},
|
||||
{XCP_SET_DAQ_PTR_E2, "XCP_SET_DAQ_PTR_E2"},
|
||||
{XCP_CLEAR_DAQ_LIST_E3, "XCP_CLEAR_DAQ_LIST_E3"},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{XCP_SET_CALIBRATION_PAGE_EB, "XCP_SET_CALIBRATION_PAGE_EB"},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{XCP_COMMAND_DOWNLOAD_MAX_EE, "XCP_COMMAND_DOWNLOAD_MAX_EE"},
|
||||
{XCP_COMMAND_DOWNLOAD_NEXT_EF, "XCP_COMMAND_DOWNLOAD_NEXT_EF"},
|
||||
{XCP_COMMAND_DOWNLOAD_F0, "XCP_COMMAND_DOWNLOAD_F0"},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{XCP_COMMAND_SHORT_UPLOAD_F4, "XCP_COMMAND_SHORT_UPLOAD_F4"},
|
||||
{XCP_COMMAND_UPLOAD_F5, "XCP_COMMAND_UPLOAD_F5"},
|
||||
{XCP_COMMAND_SET_MTA_F6, "XCP_COMMAND_SET_MTA_F6"},
|
||||
{XCP_UNLOCK_F7, "XCP_UNLOCK_F7"},
|
||||
{XCP_GET_SEED_F8, "XCP_GET_SEED_F8"},
|
||||
{NULL, ""},
|
||||
{NULL, ""},
|
||||
{XCP_GET_COMM_MODE_INFO_FB, "XCP_GET_COMM_MODE_INFO_FB"},
|
||||
{XCP_COMMAND_SYNCH_FC, "XCP_COMMAND_SYNCH_FC"},
|
||||
{XCP_COMMAND_GET_STATUS_FD, "XCP_COMMAND_GET_STATUS_FD"},
|
||||
{XCP_COMMAND_DISCONNECT_FE, "XCP_COMMAND_DISCONNECT_FE"},
|
||||
{XCP_COMMAND_CONNECT_FF, "XCP_COMMAND_CONNECT_FF"}
|
||||
};
|
||||
|
||||
void PrintfDebug(char *str, uint8_t *data, uint8_t dlc) {
|
||||
|
||||
switch (dlc) {
|
||||
|
||||
case 0:
|
||||
sprintf(str, " ");
|
||||
break;
|
||||
case 1:
|
||||
sprintf(str, "0x%02X", data[0]);
|
||||
break;
|
||||
case 2:
|
||||
sprintf(str, "0x%02X:0x%02X", data[0], data[1]);
|
||||
break;
|
||||
case 3:
|
||||
sprintf(str, "0x%02X:0x%02X:0x%02X", data[0], data[1], data[2]);
|
||||
break;
|
||||
case 4:
|
||||
sprintf(str, "0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3]);
|
||||
break;
|
||||
case 5:
|
||||
sprintf(str, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], data[4]);
|
||||
break;
|
||||
case 6:
|
||||
sprintf(str, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], data[4], data[5]);
|
||||
break;
|
||||
case 7:
|
||||
sprintf(str, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], data[4],
|
||||
data[5], data[6]);
|
||||
break;
|
||||
case 8:
|
||||
sprintf(str, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], data[4],
|
||||
data[5], data[6], data[7]);
|
||||
break;
|
||||
default:
|
||||
sprintf(str, " ");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeout) {
|
||||
uint8_t response_size = 0;
|
||||
|
||||
uint16_t recv = env->ioCanFrame->receive(env->ioCanFrame->env, PROTOCOL_CAN_XCP, (uint8_t *) &env->canFrame, 1,
|
||||
uint16_t recv = env->ioCanFrame->receive(env->ioCanFrame->env, PROTOCOL_CAN_XCP, (uint8_t *) &env->canFrame,
|
||||
1,
|
||||
timeout);
|
||||
|
||||
if (recv == 0)
|
||||
|
|
@ -1125,21 +1160,25 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou
|
|||
eXcpTypeCommand com = env->canFrame.data[0];
|
||||
|
||||
if (com > 0xBF) { // CMD
|
||||
char str[80];
|
||||
|
||||
PrintfDebug(str, env->canFrame.data, env->canFrame.dlc);
|
||||
LoggerFormatInfo(LOGGER, LOG_SIGN, "> [%d] %s", env->canFrame.dlc, str)
|
||||
if (com != 0xD0) {
|
||||
PrintfDebug(env->canFrame.data, env->canFrame.dlc);
|
||||
LoggerFormatInfo(LOGGER, LOG_SIGN, "> %s [%d] %s", xcp_com[com].desc, env->canFrame.dlc, strPrintfDebug)
|
||||
}
|
||||
|
||||
if (fXcp_func_ptr[com] != NULL) {
|
||||
if (xcp_com[com].func != NULL) {
|
||||
|
||||
response_size = fXcp_func_ptr[com](env);
|
||||
response_size = xcp_com[com].func(env);
|
||||
|
||||
if (response_size) {
|
||||
if ((response_size) && (env->response[0] != 0xF5)) {
|
||||
|
||||
PrintfDebug(str, env->response, response_size);
|
||||
LoggerFormatInfo(LOGGER, LOG_SIGN, "< [%d] %s", response_size, str)
|
||||
if (com != 0xD0) {
|
||||
PrintfDebug(env->response, response_size);
|
||||
LoggerFormatInfo(LOGGER, LOG_SIGN, "< [%d] %s", response_size, strPrintfDebug)
|
||||
}
|
||||
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, PROTOCOL_CAN_ADR_XCP,
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size,
|
||||
PROTOCOL_CAN_ADR_XCP,
|
||||
PROTOCOL_CAN_TYPE_XCP, timeout);
|
||||
}
|
||||
|
||||
|
|
@ -1298,14 +1337,17 @@ _Noreturn void CanXcpProcessing_Service_Dto_Daq_Task(tCanSerialPortFrameXCP *env
|
|||
for (uint8_t k = 0; k < count_size; ++k) {
|
||||
memcpy(&env->response[2], &env->DATA[size], BODY_MAX_LEN);
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, MAX_DTO,
|
||||
PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, 1000);
|
||||
PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP,
|
||||
1000);
|
||||
size += BODY_MAX_LEN;
|
||||
}
|
||||
|
||||
if (count_size_tail) {
|
||||
memcpy(&env->response[2], &env->DATA[size], count_size_tail);
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, count_size_tail,
|
||||
PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, 1000);
|
||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response,
|
||||
count_size_tail,
|
||||
PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP,
|
||||
1000);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1334,6 +1376,8 @@ _Noreturn void CanXcpProcessing_Service_Dto_Daq_Task(tCanSerialPortFrameXCP *env
|
|||
}
|
||||
|
||||
void CanXcpProcessing_Service_Start(tCanSerialPortFrameXCP *env) {
|
||||
InitThreadBlock(env->T_can_Listener_Dto_Stim_XCP, "Dto_Stim_XCPP", osPriorityNormal);
|
||||
InitThreadBlock(env->T_can_Listener_Dto_Daq_XCP, "Dto_Daq_XCP", osPriorityNormal);
|
||||
ThreadBlock_Start(env->T_can_Listener_Dto_Stim_XCP, env, CanXcpProcessing_Service_Dto_Stim_Task);
|
||||
ThreadBlock_Start(env->T_can_Listener_Dto_Daq_XCP, env, CanXcpProcessing_Service_Dto_Daq_Task);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue