Обновление

This commit is contained in:
cfif 2025-12-23 10:06:14 +03:00
parent 30eda237ed
commit 8b103fc1dd
1 changed files with 49 additions and 2 deletions

View File

@ -7,6 +7,7 @@
#include "AsciiStringAssmeblingUtils.h" #include "AsciiStringAssmeblingUtils.h"
#include "SystemMutexCmsis.h" #include "SystemMutexCmsis.h"
#include "CanPorts.h" #include "CanPorts.h"
#include <stdio.h>
#define LOG_SIGN "CAN_XCP" #define LOG_SIGN "CAN_XCP"
#define LOGGER env->logger #define LOGGER env->logger
@ -215,7 +216,8 @@ static uint8_t XCP_COMMAND_UPLOAD_245(tCanSerialPortFrameXCP *env) {
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;
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7 + 1, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7 + 1, PROTOCOL_CAN_ADR_XCP,
PROTOCOL_CAN_TYPE_XCP,
1000); 1000);
} }
@ -1069,6 +1071,45 @@ const xcp_func_ptr fXcp_func_ptr[256] = {
XCP_COMMAND_CONNECT_255 XCP_COMMAND_CONNECT_255
}; };
void PrintfDebug(char *str, uint8_t *data, uint8_t dlc) {
switch (dlc) {
case 0:
sprintf(str, " ");
break;
case 1:
sprintf(str, "0x%02X", data[0]);
break;
case 2:
sprintf(str, "0x%02X:0x%02X", data[0], data[1]);
break;
case 3:
sprintf(str, "0x%02X:0x%02X:0x%02X", data[0], data[1], data[2]);
break;
case 4:
sprintf(str, "0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3]);
break;
case 5:
sprintf(str, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], data[4]);
break;
case 6:
sprintf(str, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], data[4], data[5]);
break;
case 7:
sprintf(str, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], data[4],
data[5], data[6]);
break;
case 8:
sprintf(str, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X", data[0], data[1], data[2], data[3], data[4],
data[5], data[6], data[7]);
break;
default:
sprintf(str, " ");
}
}
uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeout) { uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeout) {
uint8_t response_size = 0; uint8_t response_size = 0;
@ -1084,14 +1125,20 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou
eXcpTypeCommand com = env->canFrame.data[0]; eXcpTypeCommand com = env->canFrame.data[0];
if (com > 0xBF) { // CMD if (com > 0xBF) { // CMD
char str[80];
LoggerFormatInfo(LOGGER, LOG_SIGN, "COMMAND (DLC=%d) = %d", env->canFrame.dlc, com) PrintfDebug(str, env->canFrame.data, env->canFrame.dlc);
LoggerFormatInfo(LOGGER, LOG_SIGN, "> [%d] %s", env->canFrame.dlc, str)
if (fXcp_func_ptr[com] != NULL) { if (fXcp_func_ptr[com] != NULL) {
response_size = fXcp_func_ptr[com](env); response_size = fXcp_func_ptr[com](env);
if (response_size) { if (response_size) {
PrintfDebug(str, env->response, response_size);
LoggerFormatInfo(LOGGER, LOG_SIGN, "< [%d] %s", response_size, str)
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, PROTOCOL_CAN_ADR_XCP, env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, PROTOCOL_CAN_ADR_XCP,
PROTOCOL_CAN_TYPE_XCP, timeout); PROTOCOL_CAN_TYPE_XCP, timeout);
} }