diff --git a/Src/CanSerialPortFrameXCP.c b/Src/CanSerialPortFrameXCP.c index c64b186..591dabf 100644 --- a/Src/CanSerialPortFrameXCP.c +++ b/Src/CanSerialPortFrameXCP.c @@ -7,6 +7,7 @@ #include "AsciiStringAssmeblingUtils.h" #include "SystemMutexCmsis.h" #include "CanPorts.h" +#include #define LOG_SIGN "CAN_XCP" #define LOGGER env->logger @@ -215,7 +216,8 @@ static uint8_t XCP_COMMAND_UPLOAD_245(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; - env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7 + 1, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, + env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7 + 1, PROTOCOL_CAN_ADR_XCP, + PROTOCOL_CAN_TYPE_XCP, 1000); } @@ -1069,6 +1071,45 @@ const xcp_func_ptr fXcp_func_ptr[256] = { XCP_COMMAND_CONNECT_255 }; +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; @@ -1084,14 +1125,20 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou eXcpTypeCommand com = env->canFrame.data[0]; if (com > 0xBF) { // CMD + char str[80]; - LoggerFormatInfo(LOGGER, LOG_SIGN, "COMMAND (DLC=%d) = %d", env->canFrame.dlc, com) + PrintfDebug(str, env->canFrame.data, env->canFrame.dlc); + LoggerFormatInfo(LOGGER, LOG_SIGN, "> [%d] %s", env->canFrame.dlc, str) if (fXcp_func_ptr[com] != NULL) { response_size = fXcp_func_ptr[com](env); if (response_size) { + + PrintfDebug(str, env->response, response_size); + LoggerFormatInfo(LOGGER, LOG_SIGN, "< [%d] %s", response_size, str) + env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, timeout); }