From d44d247b7f4360ceb310d07e64ba4aa9ca32fe5c Mon Sep 17 00:00:00 2001 From: cfif Date: Fri, 16 Jan 2026 13:30:52 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/CanSerialPortFrameXCP.h | 10 ++-- Src/CanSerialPortFrameXCP.c | 96 +++++++++++++++++++++++++++++++++++-- 2 files changed, 99 insertions(+), 7 deletions(-) diff --git a/Inc/CanSerialPortFrameXCP.h b/Inc/CanSerialPortFrameXCP.h index 2422f68..5dd569a 100644 --- a/Inc/CanSerialPortFrameXCP.h +++ b/Inc/CanSerialPortFrameXCP.h @@ -17,6 +17,11 @@ #define PROTOCOL_CAN_ADR_XCP 0x250 #define PROTOCOL_CAN_TYPE_XCP 0x0 +#define PROTECT_CAL_PAG 1 +#define PROTECT_DAQ 1 +#define PROTECT_STIM 1 +#define PROTECT_PGM 1 + typedef enum { XCP_ERR_CMD_SYNCH = 0x00, XCP_ERR_CMD_BUSY = 0x10, @@ -250,7 +255,7 @@ typedef struct { uint8_t DATA[BODY_MAX_LEN]; } tXCP_DATA_STIM; -typedef struct { +typedef struct { uint8_t ODT_ENTRIES_COUNT; uint8_t DATA_STM_COUNTER; @@ -587,8 +592,8 @@ typedef struct __attribute__ ((packed)) { } eXcpCommand_XCP_GET_CAL_PAGE_EA; - typedef bool (xcp_clear_flash_func)(uint32_t firstPageAddr, uint32_t totalSize); + typedef bool (xcp_write_flash_func)(uint32_t beginPageAddr, void *sourceRamAddr, uint32_t size); @@ -630,7 +635,6 @@ typedef struct { tXCP_DAQ *DAQ; - tRtcIO *rtcIO; osMutexId_t access; diff --git a/Src/CanSerialPortFrameXCP.c b/Src/CanSerialPortFrameXCP.c index d25a254..630b521 100644 --- a/Src/CanSerialPortFrameXCP.c +++ b/Src/CanSerialPortFrameXCP.c @@ -220,11 +220,11 @@ static uint8_t XCP_COMMAND_GET_STATUS_FD(tCanSerialPortFrameXCP *env) { xcpCommand_GET_STATUS->RESUME = env->STATE.RESUME; // устройство не в режиме RESUME // Статус защиты ресурсов - xcpCommand_GET_STATUS->CAL_PAG = 1; // защита команд калибровки/пагинации + xcpCommand_GET_STATUS->CAL_PAG = PROTECT_CAL_PAG; // защита команд калибровки/пагинации xcpCommand_GET_STATUS->reserve5 = 0; - xcpCommand_GET_STATUS->DAQ = 1; // защита DAQ-команд - xcpCommand_GET_STATUS->STIM = 1; // защита STIM-команд - xcpCommand_GET_STATUS->PGM = 1; // защита команд программирования + xcpCommand_GET_STATUS->DAQ = PROTECT_DAQ; // защита DAQ-команд + xcpCommand_GET_STATUS->STIM = PROTECT_STIM; // защита STIM-команд + xcpCommand_GET_STATUS->PGM = PROTECT_PGM; // защита команд программирования xcpCommand_GET_STATUS->reserve6 = 0; xcpCommand_GET_STATUS->reserve7 = 0; xcpCommand_GET_STATUS->reserve8 = 0; @@ -428,12 +428,14 @@ static uint8_t XCP_COMMAND_DOWNLOAD_F0(tCanSerialPortFrameXCP *env) { eXcpCommand_Download *request = (eXcpCommand_Download *) env->canFrame.data; +#if (PROTECT_CAL_PAG == 1) if (isUNLOCK(env, XCP_PROTECT_CAL_PAG) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif uint8_t COUNT = env->canFrame.dlc - 2; @@ -450,12 +452,14 @@ static uint8_t XCP_COMMAND_DOWNLOAD_NEXT_EF(tCanSerialPortFrameXCP *env) { eXcpCommand_Download *request = (eXcpCommand_Download *) env->canFrame.data; +#if (PROTECT_CAL_PAG == 1) if (isUNLOCK(env, XCP_PROTECT_CAL_PAG) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif uint8_t COUNT = env->canFrame.dlc - 2; @@ -482,12 +486,14 @@ static uint8_t XCP_COMMAND_DOWNLOAD_NEXT_EF(tCanSerialPortFrameXCP *env) { static uint8_t XCP_COMMAND_DOWNLOAD_MAX_EE(tCanSerialPortFrameXCP *env) { +#if (PROTECT_CAL_PAG == 1) if (isUNLOCK(env, XCP_PROTECT_CAL_PAG) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif uint8_t COUNT = env->canFrame.dlc - 1; @@ -502,12 +508,14 @@ static uint8_t XCP_COMMAND_DOWNLOAD_MAX_EE(tCanSerialPortFrameXCP *env) { static uint8_t XCP_CLEAR_DAQ_LIST_E3(tCanSerialPortFrameXCP *env) { +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif env->response[0] = XCP_COMMAND_CONNECT; @@ -518,12 +526,15 @@ static uint8_t XCP_CLEAR_DAQ_LIST_E3(tCanSerialPortFrameXCP *env) { static uint8_t XCP_GET_DAQ_LIST_INFO_D8(tCanSerialPortFrameXCP *env) { eXcpCommand_Get_DAQ_List_Info_Request *request = (eXcpCommand_Get_DAQ_List_Info_Request *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if (request->DAQ_LIST_NUMBER > MAX_DAO) { env->response[0] = XCP_COMMAND_DISCONNECT; @@ -552,12 +563,15 @@ static uint8_t XCP_GET_DAQ_LIST_INFO_D8(tCanSerialPortFrameXCP *env) { static uint8_t XCP_ALLOC_DAQ_D5(tCanSerialPortFrameXCP *env) { eXcpCommand_ALLOC_DAQ *request = (eXcpCommand_ALLOC_DAQ *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + env->SETUP.DAQ_COUNT = request->DAQ_COUNT; @@ -567,12 +581,15 @@ static uint8_t XCP_ALLOC_DAQ_D5(tCanSerialPortFrameXCP *env) { static uint8_t XCP_FREE_DAQ_D6(tCanSerialPortFrameXCP *env) { +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + FREE_DAQ(env); @@ -583,12 +600,15 @@ static uint8_t XCP_FREE_DAQ_D6(tCanSerialPortFrameXCP *env) { static uint8_t XCP_ALLOC_ODT_D4(tCanSerialPortFrameXCP *env) { eXcpCommand_ALLOC_ODT *request = (eXcpCommand_ALLOC_ODT *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + env->DAQ[request->DAQ_LIST_NUMBER].ODT_COUNT = request->ODT_COUNT; @@ -600,12 +620,15 @@ static uint8_t XCP_ALLOC_ODT_D4(tCanSerialPortFrameXCP *env) { static uint8_t XCP_ALLOC_ODT_ENTRY_D3(tCanSerialPortFrameXCP *env) { eXcpCommand_ALLOC_ODT_ENTRY *request = (eXcpCommand_ALLOC_ODT_ENTRY *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + env->DAQ[request->DAQ_LIST_NUMBER].ODT_NUMBER[request->ODT_NUMBER].ODT_ENTRIES_COUNT = request->ODT_ENTRIES_COUNT; @@ -617,12 +640,15 @@ static uint8_t XCP_ALLOC_ODT_ENTRY_D3(tCanSerialPortFrameXCP *env) { static uint8_t XCP_SET_DAQ_PTR_E2(tCanSerialPortFrameXCP *env) { eXcpCommand_SET_DAQ_PTR *request = (eXcpCommand_SET_DAQ_PTR *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if ((request->DAQ_LIST_NUMBER > MAX_DAO) || (request->ODT_NUMBER > MAX_ODT) || @@ -646,12 +672,15 @@ static uint8_t XCP_SET_DAQ_PTR_E2(tCanSerialPortFrameXCP *env) { static uint8_t XCP_WRITE_DAQ_E1(tCanSerialPortFrameXCP *env) { eXcpCommand_WRITE_DAQ *request = (eXcpCommand_WRITE_DAQ *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if (env->SETUP.ODT_ENTRY_NUMBER > MAX_ODT_ENTRIES_SIZE_DAQ) { @@ -675,12 +704,15 @@ static uint8_t XCP_WRITE_DAQ_E1(tCanSerialPortFrameXCP *env) { static uint8_t XCP_SET_DAQ_LIST_MODE_E0(tCanSerialPortFrameXCP *env) { eXcpCommand_SET_DAQ_LIST_MODE *request = (eXcpCommand_SET_DAQ_LIST_MODE *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if ((request->DAQ_LIST_NUMBER > MAX_DAO) || (request->EVENT_CHANNEL_NUMBER > MAX_EVENT_CHANNEL)) { env->response[0] = XCP_COMMAND_DISCONNECT; @@ -709,12 +741,15 @@ static uint8_t XCP_SET_DAQ_LIST_MODE_E0(tCanSerialPortFrameXCP *env) { static uint8_t XCP_START_STOP_DAQ_LIST_DE(tCanSerialPortFrameXCP *env) { eXcpCommand_START_STOP_DAQ_LIST *request = (eXcpCommand_START_STOP_DAQ_LIST *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if (request->DAQ_LIST_NUMBER > MAX_DAO) { env->response[0] = XCP_COMMAND_DISCONNECT; @@ -742,12 +777,15 @@ static uint8_t XCP_START_STOP_DAQ_LIST_DE(tCanSerialPortFrameXCP *env) { static uint8_t XCP_START_STOP_SYNCH_DD(tCanSerialPortFrameXCP *env) { eXcpCommand_START_STOP_SYNCH *request = (eXcpCommand_START_STOP_SYNCH *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if (request->MODE == XCP_SYNC_START_SEL) { for (uint16 i = 0; i < MAX_DAO; ++i) { @@ -781,12 +819,15 @@ static uint8_t XCP_START_STOP_SYNCH_DD(tCanSerialPortFrameXCP *env) { static uint8_t XCP_READ_DAQ_DB(tCanSerialPortFrameXCP *env) { eXcpCommand_WRITE_DAQ *response = (eXcpCommand_WRITE_DAQ *) env->response; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + response->COM = XCP_COMMAND_CONNECT; response->BIT_OFFSET = env->DAQ[env->SETUP.DAQ_LIST_NUMBER].ODT_NUMBER[env->SETUP.ODT_NUMBER].BIT_OFFSET[env->SETUP.ODT_ENTRY_NUMBER]; @@ -803,12 +844,15 @@ static uint8_t XCP_GET_DAQ_PROCESSOR_INFO_DA(tCanSerialPortFrameXCP *env) { eXcpCommand_GET_DAQ_PROCESSOR_INFO *response = (eXcpCommand_GET_DAQ_PROCESSOR_INFO *) env->response; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + response->COM = XCP_COMMAND_CONNECT; @@ -841,12 +885,15 @@ static uint8_t XCP_GET_DAQ_PROCESSOR_INFO_DA(tCanSerialPortFrameXCP *env) { static uint8_t XCP_GET_DAQ_RESOLUTION_INFO_D9(tCanSerialPortFrameXCP *env) { eXcpCommand_GET_DAQ_RESOLUTION_INFO *response = (eXcpCommand_GET_DAQ_RESOLUTION_INFO *) env->response; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + response->COM = XCP_COMMAND_CONNECT; @@ -865,12 +912,15 @@ static uint8_t XCP_GET_DAQ_LIST_MODE_DF(tCanSerialPortFrameXCP *env) { eXcpCommand_GET_DAQ_LIST_MODE_GET *request = (eXcpCommand_GET_DAQ_LIST_MODE_GET *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if (request->DAQ_LIST_NUMBER > MAX_DAO) { env->response[0] = XCP_COMMAND_DISCONNECT; @@ -905,12 +955,15 @@ static uint8_t XCP_GET_DAQ_EVENT_INFO_D7(tCanSerialPortFrameXCP *env) { eXcpCommand_GET_DAQ_EVENT_INFO_GET *request = (eXcpCommand_GET_DAQ_EVENT_INFO_GET *) env->canFrame.data; +#if (PROTECT_DAQ == 1) if (isUNLOCK(env, XCP_PROTECT_DAQ) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if (request->EVENT_CHANNEL_NUMBER > MAX_EVENT_CHANNEL) { env->response[0] = XCP_COMMAND_DISCONNECT; @@ -969,12 +1022,14 @@ static uint8_t XCP_GET_DAQ_STM(tCanSerialPortFrameXCP *env) { static uint8_t XCP_PROGRAM_START_D2(tCanSerialPortFrameXCP *env) { eXcpCommand_PROGRAM_START *response = (eXcpCommand_PROGRAM_START *) env->response; +#if (PROTECT_PGM == 1) if (isUNLOCK(env, XCP_PROTECT_PGM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif response->COM = XCP_COMMAND_CONNECT; response->RESERVED1 = 0; @@ -999,12 +1054,15 @@ static uint8_t XCP_PROGRAM_START_D2(tCanSerialPortFrameXCP *env) { static uint8_t XCP_PROGRAM_CLEAR_D1(tCanSerialPortFrameXCP *env) { eXcpCommand_XCP_PROGRAM_CLEAR_D1 *request = (eXcpCommand_XCP_PROGRAM_CLEAR_D1 *) env->canFrame.data; +#if (PROTECT_PGM == 1) if (isUNLOCK(env, XCP_PROTECT_PGM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if (request->MODE == 0) { @@ -1032,12 +1090,15 @@ static uint8_t XCP_PROGRAM_CLEAR_D1(tCanSerialPortFrameXCP *env) { static uint8_t XCP_PROGRAM_D0(tCanSerialPortFrameXCP *env) { eXcpCommand_Program_ProgramNext_D0_CA *request = (eXcpCommand_Program_ProgramNext_D0_CA *) env->canFrame.data; +#if (PROTECT_PGM == 1) if (isUNLOCK(env, XCP_PROTECT_PGM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + uint8_t COUNT = env->canFrame.dlc - 2; @@ -1066,12 +1127,15 @@ static uint8_t XCP_PROGRAM_D0(tCanSerialPortFrameXCP *env) { static uint8_t PROGRAM_VERIFY_C8(tCanSerialPortFrameXCP *env) { eXcpCommand_Program_Verify_C8 *request = (eXcpCommand_Program_Verify_C8 *) env->canFrame.data; +#if (PROTECT_PGM == 1) if (isUNLOCK(env, XCP_PROTECT_PGM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if (env->bufWriteFlashCount > 0) { bool result = env->write_flash_func(env->bufWriteFlashAdr, env->bufWriteFlash, env->bufWriteFlashCount); @@ -1087,12 +1151,15 @@ static uint8_t PROGRAM_VERIFY_C8(tCanSerialPortFrameXCP *env) { static uint8_t XCP_PROGRAM_NEXT_CA(tCanSerialPortFrameXCP *env) { eXcpCommand_Program_ProgramNext_D0_CA *request = (eXcpCommand_Program_ProgramNext_D0_CA *) env->canFrame.data; +#if (PROTECT_PGM == 1) if (isUNLOCK(env, XCP_PROTECT_PGM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + uint8_t COUNT = env->canFrame.dlc - 2; @@ -1107,12 +1174,15 @@ static uint8_t XCP_PROGRAM_NEXT_CA(tCanSerialPortFrameXCP *env) { static uint8_t XCP_PROGRAM_PREPARE_CC(tCanSerialPortFrameXCP *env) { eXcpCommand_Program_Prepare_CC *request = (eXcpCommand_Program_Prepare_CC *) env->canFrame.data; +#if (PROTECT_PGM == 1) if (isUNLOCK(env, XCP_PROTECT_PGM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if ((env->ADR_MTA < env->startFlashAdr) || ((env->ADR_MTA + request->CODESIZE) > env->endFlashAdr)) { @@ -1131,12 +1201,15 @@ static uint8_t XCP_PROGRAM_PREPARE_CC(tCanSerialPortFrameXCP *env) { static uint8_t XCP_PROGRAM_FORMAT_CB(tCanSerialPortFrameXCP *env) { eXcpCommand_Program_Format_CB *request = (eXcpCommand_Program_Format_CB *) env->canFrame.data; +#if (PROTECT_PGM == 1) if (isUNLOCK(env, XCP_PROTECT_PGM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + env->response[0] = XCP_COMMAND_CONNECT; return 1; @@ -1146,12 +1219,15 @@ static uint8_t XCP_PROGRAM_FORMAT_CB(tCanSerialPortFrameXCP *env) { static uint8_t XCP_PROGRAM_RESET_CF(tCanSerialPortFrameXCP *env) { env->response[0] = XCP_COMMAND_CONNECT; +#if (PROTECT_PGM == 1) if (isUNLOCK(env, XCP_PROTECT_PGM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if (env->bufWriteFlashCount > 0) { bool result = env->write_flash_func(env->bufWriteFlashAdr, env->bufWriteFlash, env->bufWriteFlashCount); @@ -1164,12 +1240,15 @@ static uint8_t XCP_PROGRAM_RESET_CF(tCanSerialPortFrameXCP *env) { static uint8_t XCP_GET_PGM_PROCESSOR_INFO_CE(tCanSerialPortFrameXCP *env) { eXcpCommand_PGM_PROCESSOR_INFO_CE *response = (eXcpCommand_PGM_PROCESSOR_INFO_CE *) env->response; +#if (PROTECT_PGM == 1) if (isUNLOCK(env, XCP_PROTECT_PGM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + response->COM = XCP_COMMAND_CONNECT; @@ -1190,12 +1269,15 @@ static uint8_t XCP_GET_PGM_PROCESSOR_INFO_CE(tCanSerialPortFrameXCP *env) { static uint8_t XCP_GET_SECTOR_INFO_CD(tCanSerialPortFrameXCP *env) { eXcpCommand_REQ_GET_SECTOR_INFO_CD *request = (eXcpCommand_REQ_GET_SECTOR_INFO_CD *) env->canFrame.data; +#if (PROTECT_PGM == 1) if (isUNLOCK(env, XCP_PROTECT_PGM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif + if (request->SECTOR_NUMBER > PROGRAM_MAX_SECTOR) { env->response[0] = XCP_COMMAND_DISCONNECT; @@ -1246,12 +1328,14 @@ static uint8_t XCP_SET_CALIBRATION_PAGE_EB(tCanSerialPortFrameXCP *env) { static uint8_t XCP_GET_CAL_PAGE_EA(tCanSerialPortFrameXCP *env) { eXcpCommand_XCP_GET_CAL_PAGE_EA *request = (eXcpCommand_XCP_GET_CAL_PAGE_EA *) env->canFrame.data; +#if (PROTECT_CAL_PAG == 1) if (isUNLOCK(env, XCP_PROTECT_CAL_PAG) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; return 2; } +#endif env->response[0] = XCP_COMMAND_CONNECT; env->response[1] = env->PAGE_ID; @@ -1564,6 +1648,7 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou } else { // ODT +#if (PROTECT_STIM == 1) if (isUNLOCK(env, XCP_PROTECT_STM) == false) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_ACCESS_LOCKED; @@ -1571,6 +1656,9 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, 2, PROTOCOL_CAN_ADR_XCP, PROTOCOL_CAN_TYPE_XCP, timeout); + +#endif + } else { XCP_GET_DAQ_STM(env); }