Обновление

This commit is contained in:
cfif 2025-12-22 17:57:29 +03:00
parent d03d12d051
commit 30eda237ed
2 changed files with 18 additions and 9 deletions

View File

@ -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,

View File

@ -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);
}