Обновление после командировки 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;
} }
@ -386,7 +388,7 @@ 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) {
@ -398,7 +400,7 @@ 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;
@ -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;
if (request->COUNT <= 6) {
env->response[0] = XCP_COMMAND_CONNECT;
return 1; 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;
@ -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);
} }