diff --git a/Inc/CanSerialPortFrameXCP.h b/Inc/CanSerialPortFrameXCP.h index dc359af..b5c4108 100644 --- a/Inc/CanSerialPortFrameXCP.h +++ b/Inc/CanSerialPortFrameXCP.h @@ -3,7 +3,7 @@ // #ifndef CAN_MODULE_CAN_FRAME_XCP_H -#define CAN_MODULE_CAN_FRAME_XCP_H +#define CAN_MODULE_CAN_FRAME_XCP_H20 #include "SerialPortFrameIO.h" #include "CanSerialPortFrame.h" @@ -11,6 +11,9 @@ #include "CmsisRtosThreadUtils.h" #include "SystemMutexCmsis.h" +#define PROTOCOL_CAN_ADR_XCP 0x250 +#define PROTOCOL_CAN_TYPE_XCP 0x0 + typedef enum { XCP_ERR_CMD_SYNCH = 0x00, XCP_ERR_CMD_BUSY = 0x10, diff --git a/Src/CanSerialPortFrameXCP.c b/Src/CanSerialPortFrameXCP.c index 6b4e8fc..c64b186 100644 --- a/Src/CanSerialPortFrameXCP.c +++ b/Src/CanSerialPortFrameXCP.c @@ -9,7 +9,7 @@ #include "CanPorts.h" #define LOG_SIGN "CAN_XCP" -#define LOGGER &env->logger +#define LOGGER env->logger static unsigned long SeedToKeyHVAC_NAMI(unsigned char rnd, unsigned long dwSeedInfo) { #define Mask 0x55F388A6UL @@ -122,7 +122,7 @@ static uint8_t XCP_COMMAND_GET_STATUS_253(tCanSerialPortFrameXCP *env) { xcpCommand_GET_STATUS->reserve7 = 0; xcpCommand_GET_STATUS->reserve8 = 0; - xcpCommand_GET_STATUS->STATE_NUMBER = 0; + xcpCommand_GET_STATUS->STATE_NUMBER = 2; xcpCommand_GET_STATUS->SESSION_CONFIGURATION_ID = 0; @@ -215,13 +215,15 @@ 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, 1000); + env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7 + 1, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, + 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, 1000); + env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, tailBlock + 1, PROTOCOL_CAN_ADR_XCP, + PROTOCOL_CAN_TYPE_XCP, 1000); } return 0; @@ -1083,16 +1085,19 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou if (com > 0xBF) { // CMD + LoggerFormatInfo(LOGGER, LOG_SIGN, "COMMAND (DLC=%d) = %d", env->canFrame.dlc, com) + if (fXcp_func_ptr[com] != NULL) { response_size = fXcp_func_ptr[com](env); if (response_size) { - env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, timeout); + env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, PROTOCOL_CAN_ADR_XCP, + PROTOCOL_CAN_TYPE_XCP, timeout); } } else { - + asm("nop"); } } else { // ODT @@ -1245,14 +1250,15 @@ _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, 1000); + env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, MAX_DTO, + 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, - 1000); + PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, 1000); }