Обновление после командировки 29.06.2026

This commit is contained in:
cfif 2026-06-29 13:13:45 +03:00
parent 503c56520f
commit 7015f42074
2 changed files with 35 additions and 22 deletions

View File

@ -13,8 +13,6 @@
#include "VarsTabDumpObserver.h" #include "VarsTabDumpObserver.h"
#define XCP_CAN_HANDLER 1
typedef enum { typedef enum {
XCP_ERR_CMD_SYNCH = 0x00, XCP_ERR_CMD_SYNCH = 0x00,
XCP_ERR_CMD_BUSY = 0x10, XCP_ERR_CMD_BUSY = 0x10,

View File

@ -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]); sprintf(strPrintfDebug_XCP, "0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3]);
break; break;
case 5: 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; break;
case 6: 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], 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; return false;
} }
/* /*
static unsigned long SeedToKeyHVAC_NAMI(unsigned char rnd, unsigned long dwSeedInfo) { static unsigned long SeedToKeyHVAC_NAMI(unsigned char rnd, unsigned long dwSeedInfo) {
#define Mask 0x55F388A6UL #define Mask 0x55F388A6UL
@ -368,7 +370,7 @@ static uint8_t XCP_COMMAND_UPLOAD_F5(tCanSerialPortFrameXCP *env) {
#endif #endif
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 1, PROTOCOL_CAN_ADR_XCP, env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 1, PROTOCOL_CAN_ADR_XCP,
PROTOCOL_CAN_TYPE_XCP, PROTOCOL_CAN_TYPE_XCP,
1000, XCP_CAN_HANDLER); 100);
return 0; return 0;
} }
@ -378,7 +380,7 @@ static uint8_t XCP_COMMAND_UPLOAD_F5(tCanSerialPortFrameXCP *env) {
uint8_t tailBlock = request->COUNT % 7; uint8_t tailBlock = request->COUNT % 7;
for (uint8_t i = 0; i < fullBlock; ++i) { 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; env->ADR_MTA += 7;
#if (LOG_XCP == 1) #if (LOG_XCP == 1)
PrintfDebug(env->response, 7 + 1); PrintfDebug(env->response, 7 + 1);
@ -386,11 +388,11 @@ static uint8_t XCP_COMMAND_UPLOAD_F5(tCanSerialPortFrameXCP *env) {
#endif #endif
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7 + 1, PROTOCOL_CAN_ADR_XCP, env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7 + 1, PROTOCOL_CAN_ADR_XCP,
PROTOCOL_CAN_TYPE_XCP, PROTOCOL_CAN_TYPE_XCP,
1000, XCP_CAN_HANDLER); 100);
} }
if (tailBlock > 0) { 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; env->ADR_MTA += tailBlock;
#if (LOG_XCP == 1) #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) LoggerFormatInfo(LOGGER, LOG_SIGN, "< [%d] %s", tailBlock + 1, strPrintfDebug_XCP)
#endif #endif
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, tailBlock + 1, PROTOCOL_CAN_ADR_XCP, 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; return 0;
} else { } 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; env->ADR_MTA += request->COUNT;
return request->COUNT + 1; return request->COUNT + 1;
} }
@ -439,16 +441,27 @@ static uint8_t XCP_COMMAND_DOWNLOAD_F0(tCanSerialPortFrameXCP *env) {
} }
#endif #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->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->ADR_MTA += COUNT;
env->response[0] = XCP_COMMAND_CONNECT;
env->downloadRemaining = request->COUNT - COUNT; 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) { 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 #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; env->ADR_MTA += COUNT;
if (request->COUNT != env->downloadRemaining) { if (request->COUNT > env->downloadRemaining) {
env->response[0] = XCP_COMMAND_DISCONNECT; env->response[0] = XCP_COMMAND_DISCONNECT;
env->response[1] = XCP_ERR_SEQUENCE; env->response[1] = XCP_ERR_SEQUENCE;
env->response[2] = env->downloadRemaining; 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; 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->ADR_MTA += COUNT;
env->response[0] = XCP_COMMAND_CONNECT; 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 vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeout) {
uint8_t response_size = 0; 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, 1,
timeout); timeout);
@ -1642,7 +1656,7 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size,
PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_ADR_XCP,
PROTOCOL_CAN_TYPE_XCP, timeout, XCP_CAN_HANDLER); PROTOCOL_CAN_TYPE_XCP, 100);
} }
} else { } else {
@ -1658,7 +1672,7 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 2, env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 2,
PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_ADR_XCP,
PROTOCOL_CAN_TYPE_XCP, timeout); PROTOCOL_CAN_TYPE_XCP, 100);
} else { } else {
XCP_GET_DAQ_STM(env); XCP_GET_DAQ_STM(env);
} }
@ -1674,6 +1688,7 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou
return response_size; return response_size;
} }
/* /*
_Noreturn void CanXcpProcessing_Service_Dto_Stim_Task(tCanSerialPortFrameXCP *env) { _Noreturn void CanXcpProcessing_Service_Dto_Stim_Task(tCanSerialPortFrameXCP *env) {
uint8_t size; 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); memcpy(&env->response[2], &env->DATA[size], BODY_MAX_LEN);
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, MAX_DTO, env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, MAX_DTO,
PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP,
1000); 100);
size += BODY_MAX_LEN; 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, env->ioCanFrame->transmit(env->ioCanFrame->env, env->response,
count_size_tail + 2, count_size_tail + 2,
PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP,
1000); 100);
} }