Обновление
This commit is contained in:
parent
d03d12d051
commit
30eda237ed
|
|
@ -3,7 +3,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef CAN_MODULE_CAN_FRAME_XCP_H
|
#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 "SerialPortFrameIO.h"
|
||||||
#include "CanSerialPortFrame.h"
|
#include "CanSerialPortFrame.h"
|
||||||
|
|
@ -11,6 +11,9 @@
|
||||||
#include "CmsisRtosThreadUtils.h"
|
#include "CmsisRtosThreadUtils.h"
|
||||||
#include "SystemMutexCmsis.h"
|
#include "SystemMutexCmsis.h"
|
||||||
|
|
||||||
|
#define PROTOCOL_CAN_ADR_XCP 0x250
|
||||||
|
#define PROTOCOL_CAN_TYPE_XCP 0x0
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
XCP_ERR_CMD_SYNCH = 0x00,
|
XCP_ERR_CMD_SYNCH = 0x00,
|
||||||
XCP_ERR_CMD_BUSY = 0x10,
|
XCP_ERR_CMD_BUSY = 0x10,
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
#include "CanPorts.h"
|
#include "CanPorts.h"
|
||||||
|
|
||||||
#define LOG_SIGN "CAN_XCP"
|
#define LOG_SIGN "CAN_XCP"
|
||||||
#define LOGGER &env->logger
|
#define LOGGER env->logger
|
||||||
|
|
||||||
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
|
||||||
|
|
@ -122,7 +122,7 @@ static uint8_t XCP_COMMAND_GET_STATUS_253(tCanSerialPortFrameXCP *env) {
|
||||||
xcpCommand_GET_STATUS->reserve7 = 0;
|
xcpCommand_GET_STATUS->reserve7 = 0;
|
||||||
xcpCommand_GET_STATUS->reserve8 = 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;
|
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) {
|
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, 1000);
|
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 7 + 1, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP,
|
||||||
|
1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
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;
|
return 0;
|
||||||
|
|
@ -1083,16 +1085,19 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou
|
||||||
|
|
||||||
if (com > 0xBF) { // CMD
|
if (com > 0xBF) { // CMD
|
||||||
|
|
||||||
|
LoggerFormatInfo(LOGGER, LOG_SIGN, "COMMAND (DLC=%d) = %d", env->canFrame.dlc, com)
|
||||||
|
|
||||||
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) {
|
||||||
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 {
|
} else {
|
||||||
|
asm("nop");
|
||||||
}
|
}
|
||||||
|
|
||||||
} else { // ODT
|
} else { // ODT
|
||||||
|
|
@ -1245,14 +1250,15 @@ _Noreturn void CanXcpProcessing_Service_Dto_Daq_Task(tCanSerialPortFrameXCP *env
|
||||||
|
|
||||||
for (uint8_t k = 0; k < count_size; ++k) {
|
for (uint8_t k = 0; k < count_size; ++k) {
|
||||||
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, 1000);
|
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, MAX_DTO,
|
||||||
|
PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, 1000);
|
||||||
size += BODY_MAX_LEN;
|
size += BODY_MAX_LEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count_size_tail) {
|
if (count_size_tail) {
|
||||||
memcpy(&env->response[2], &env->DATA[size], count_size_tail);
|
memcpy(&env->response[2], &env->DATA[size], count_size_tail);
|
||||||
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, count_size_tail,
|
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, count_size_tail,
|
||||||
1000);
|
PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue