From 7015f42074544ade211fdcbda98d01f54b1c2cbd Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 29 Jun 2026 13:13:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B8=D1=80=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=2029.06.2026?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/CanSerialPortFrameXCP.h | 2 -- Src/CanSerialPortFrameXCP.c | 55 +++++++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/Inc/CanSerialPortFrameXCP.h b/Inc/CanSerialPortFrameXCP.h index 29d545e..ed08429 100644 --- a/Inc/CanSerialPortFrameXCP.h +++ b/Inc/CanSerialPortFrameXCP.h @@ -13,8 +13,6 @@ #include "VarsTabDumpObserver.h" -#define XCP_CAN_HANDLER 1 - typedef enum { XCP_ERR_CMD_SYNCH = 0x00, XCP_ERR_CMD_BUSY = 0x10, diff --git a/Src/CanSerialPortFrameXCP.c b/Src/CanSerialPortFrameXCP.c index c15bc7f..983749e 100644 --- a/Src/CanSerialPortFrameXCP.c +++ b/Src/CanSerialPortFrameXCP.c @@ -36,7 +36,8 @@ static void PrintfDebug(uint8_t *data, uint8_t dlc) { sprintf(strPrintfDebug_XCP, "0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3]); break; case 5: - sprintf(strPrintfDebug_XCP, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], data[4]); + sprintf(strPrintfDebug_XCP, "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_XCP, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], @@ -78,6 +79,7 @@ static bool isUNLOCK(tCanSerialPortFrameXCP *env, eTypeProtect RESOURCE) { return false; } + /* static unsigned long SeedToKeyHVAC_NAMI(unsigned char rnd, unsigned long dwSeedInfo) { #define Mask 0x55F388A6UL @@ -368,7 +370,7 @@ static uint8_t XCP_COMMAND_UPLOAD_F5(tCanSerialPortFrameXCP *env) { #endif env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 1, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, - 1000, XCP_CAN_HANDLER); + 100); return 0; } @@ -378,7 +380,7 @@ static uint8_t XCP_COMMAND_UPLOAD_F5(tCanSerialPortFrameXCP *env) { uint8_t tailBlock = request->COUNT % 7; for (uint8_t i = 0; i < fullBlock; ++i) { - memcpy(&env->response[1], (uint8_t *) (env->ADR_MTA), request->COUNT); + memcpy(&env->response[1], (uint8_t * )(env->ADR_MTA), request->COUNT); env->ADR_MTA += 7; #if (LOG_XCP == 1) PrintfDebug(env->response, 7 + 1); @@ -386,11 +388,11 @@ static uint8_t XCP_COMMAND_UPLOAD_F5(tCanSerialPortFrameXCP *env) { #endif env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7 + 1, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, - 1000, XCP_CAN_HANDLER); + 100); } if (tailBlock > 0) { - memcpy(&env->response[1], (uint8_t *) (env->ADR_MTA), tailBlock); + memcpy(&env->response[1], (uint8_t * )(env->ADR_MTA), tailBlock); env->ADR_MTA += tailBlock; #if (LOG_XCP == 1) @@ -398,12 +400,12 @@ static uint8_t XCP_COMMAND_UPLOAD_F5(tCanSerialPortFrameXCP *env) { LoggerFormatInfo(LOGGER, LOG_SIGN, "< [%d] %s", tailBlock + 1, strPrintfDebug_XCP) #endif env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, tailBlock + 1, PROTOCOL_CAN_ADR_XCP, - PROTOCOL_CAN_TYPE_XCP, 1000, XCP_CAN_HANDLER); + PROTOCOL_CAN_TYPE_XCP, 100); } return 0; } else { - memcpy(&env->response[1], (uint8_t *) (env->ADR_MTA), request->COUNT); + memcpy(&env->response[1], (uint8_t * )(env->ADR_MTA), request->COUNT); env->ADR_MTA += request->COUNT; return request->COUNT + 1; } @@ -439,16 +441,27 @@ static uint8_t XCP_COMMAND_DOWNLOAD_F0(tCanSerialPortFrameXCP *env) { } #endif - uint8_t COUNT = env->canFrame.dlc - 2; +// uint8_t COUNT = env->canFrame.dlc - 2; + uint8_t COUNT; + if (request->COUNT <= 6) { + COUNT = request->COUNT; + } else { + COUNT = 6; + } + // memcpy((uint8_t *) (env->ADR_MTA), &env->response[2], COUNT); - memcpy((uint8_t *) (env->ADR_MTA), &env->canFrame.data[2], COUNT); + memcpy((uint8_t * )(env->ADR_MTA), &env->canFrame.data[2], COUNT); env->ADR_MTA += COUNT; - env->response[0] = XCP_COMMAND_CONNECT; env->downloadRemaining = request->COUNT - COUNT; - return 1; + if (request->COUNT <= 6) { + env->response[0] = XCP_COMMAND_CONNECT; + return 1; + } else { + return 0; + } } static uint8_t XCP_COMMAND_DOWNLOAD_NEXT_EF(tCanSerialPortFrameXCP *env) { @@ -464,12 +477,13 @@ static uint8_t XCP_COMMAND_DOWNLOAD_NEXT_EF(tCanSerialPortFrameXCP *env) { } #endif - uint8_t COUNT = env->canFrame.dlc - 2; + //uint8_t COUNT = env->canFrame.dlc - 2; + uint8_t COUNT = request->COUNT; - memcpy((uint8_t *) (env->ADR_MTA), &env->response[2], COUNT); + memcpy((uint8_t * )(env->ADR_MTA), &env->canFrame.data[2], COUNT); env->ADR_MTA += COUNT; - if (request->COUNT != env->downloadRemaining) { + if (request->COUNT > env->downloadRemaining) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_SEQUENCE; env->response[2] = env->downloadRemaining; @@ -500,7 +514,7 @@ static uint8_t XCP_COMMAND_DOWNLOAD_MAX_EE(tCanSerialPortFrameXCP *env) { uint8_t COUNT = env->canFrame.dlc - 1; - memcpy((uint8_t *) (env->ADR_MTA), &env->response[1], COUNT); + memcpy((uint8_t * )(env->ADR_MTA), &env->response[1], COUNT); env->ADR_MTA += COUNT; env->response[0] = XCP_COMMAND_CONNECT; @@ -1608,7 +1622,7 @@ const eXcp_com xcp_com[256] = { 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, + uint16_t recv = env->ioCanFrame->receive(env->ioCanFrame->env, PROTOCOL_CAN_XCP, (uint8_t * ) & env->canFrame, 1, timeout); @@ -1642,7 +1656,7 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, PROTOCOL_CAN_ADR_XCP, - PROTOCOL_CAN_TYPE_XCP, timeout, XCP_CAN_HANDLER); + PROTOCOL_CAN_TYPE_XCP, 100); } } else { @@ -1658,7 +1672,7 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 2, PROTOCOL_CAN_ADR_XCP, - PROTOCOL_CAN_TYPE_XCP, timeout); + PROTOCOL_CAN_TYPE_XCP, 100); } else { XCP_GET_DAQ_STM(env); } @@ -1674,6 +1688,7 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou return response_size; } + /* _Noreturn void CanXcpProcessing_Service_Dto_Stim_Task(tCanSerialPortFrameXCP *env) { uint8_t size; @@ -1815,7 +1830,7 @@ void Dto_Daq(tCanSerialPortFrameXCP *env, uint16_t channel, uint32_t timeout) { 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); + 100); size += BODY_MAX_LEN; } @@ -1824,7 +1839,7 @@ void Dto_Daq(tCanSerialPortFrameXCP *env, uint16_t channel, uint32_t timeout) { env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, count_size_tail + 2, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, - 1000); + 100); }