From a6c05be8f1dff29bc755881dee22ae166b69da55 Mon Sep 17 00:00:00 2001 From: cfif Date: Wed, 12 Nov 2025 10:09:23 +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 | 5 +++ Src/CanSerialPortFrameXCP.c | 85 ++++++++++++++++++++++--------------- 2 files changed, 55 insertions(+), 35 deletions(-) diff --git a/Inc/CanSerialPortFrameXCP.h b/Inc/CanSerialPortFrameXCP.h index 0508106..a80b8eb 100644 --- a/Inc/CanSerialPortFrameXCP.h +++ b/Inc/CanSerialPortFrameXCP.h @@ -425,6 +425,11 @@ typedef struct __attribute__ ((packed)) { uint16_t EVENT_CHANNEL_NUMBER; } eXcpCommand_GET_DAQ_EVENT_INFO_GET; +typedef struct __attribute__ ((packed)) { + uint8_t ODT; + uint8_t DAQ; +} eXcpCommand_GET_DAQ_STM; + typedef struct __attribute__ ((packed)) { eXcpTypeCommand COM; diff --git a/Src/CanSerialPortFrameXCP.c b/Src/CanSerialPortFrameXCP.c index 73b8770..9539645 100644 --- a/Src/CanSerialPortFrameXCP.c +++ b/Src/CanSerialPortFrameXCP.c @@ -46,7 +46,7 @@ void CanSerialPortFrameXcpInit( InitThreadBlock(env->T_can_Listener_XCP, "CanListenerXCP", osPriorityNormal); } -uint8_t XCP_COMMAND_CONNECT_255(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_COMMAND_CONNECT_255(tCanSerialPortFrameXCP *env) { eXcpCommand_CONNECT *xcpCommand_CONNECT = (eXcpCommand_CONNECT *) env->response; xcpCommand_CONNECT->COM = XCP_COMMAND_CONNECT; @@ -78,14 +78,14 @@ uint8_t XCP_COMMAND_CONNECT_255(tCanSerialPortFrameXCP *env) { return 8; } -uint8_t XCP_COMMAND_DISCONNECT_254(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_COMMAND_DISCONNECT_254(tCanSerialPortFrameXCP *env) { env->response[0] = XCP_COMMAND_CONNECT; return 1; } -uint8_t XCP_COMMAND_GET_STATUS_253(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_COMMAND_GET_STATUS_253(tCanSerialPortFrameXCP *env) { eXcpCommand_GET_STATUS *xcpCommand_GET_STATUS = (eXcpCommand_GET_STATUS *) env->response; xcpCommand_GET_STATUS->COM = XCP_COMMAND_CONNECT; @@ -115,14 +115,14 @@ uint8_t XCP_COMMAND_GET_STATUS_253(tCanSerialPortFrameXCP *env) { return 8; } -uint8_t XCP_COMMAND_SYNCH_252(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_COMMAND_SYNCH_252(tCanSerialPortFrameXCP *env) { env->response[0] = XCP_COMMAND_DISCONNECT; env->response[1] = XCP_ERR_CMD_SYNCH; return 2; } -uint8_t XCP_GET_COMM_MODE_INFO_251(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_GET_COMM_MODE_INFO_251(tCanSerialPortFrameXCP *env) { eXcpCommand_GET_COMM_MODE_INFO *xcpCommand_GET_COMM_MODE_INFO = (eXcpCommand_GET_COMM_MODE_INFO *) env->response; @@ -141,7 +141,7 @@ uint8_t XCP_GET_COMM_MODE_INFO_251(tCanSerialPortFrameXCP *env) { return 8; } -uint8_t XCP_GET_SEED_248(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_GET_SEED_248(tCanSerialPortFrameXCP *env) { eXcpCommand_REQ_GET_SEED *request = (eXcpCommand_REQ_GET_SEED *) env->canFrame.data; eXcpCommand_GET_SEED *xcpCommand_GET_SEED = (eXcpCommand_GET_SEED *) env->response; @@ -154,7 +154,7 @@ uint8_t XCP_GET_SEED_248(tCanSerialPortFrameXCP *env) { return 6; } -uint8_t XCP_UNLOCK_247(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_UNLOCK_247(tCanSerialPortFrameXCP *env) { eXcpCommand_REQ_UNLOCK *request = (eXcpCommand_REQ_UNLOCK *) env->canFrame.data; uint32_t securitySeedMy = SeedToKeyHVAC_NAMI(env->RND, 0x11223344); @@ -170,7 +170,7 @@ uint8_t XCP_UNLOCK_247(tCanSerialPortFrameXCP *env) { return 2; } -uint8_t XCP_COMMAND_SET_MTA_246(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_COMMAND_SET_MTA_246(tCanSerialPortFrameXCP *env) { eXcpCommand_SET_MTA *request = (eXcpCommand_SET_MTA *) env->canFrame.data; env->ADR_EXT = request->ADR_EX; @@ -181,7 +181,7 @@ uint8_t XCP_COMMAND_SET_MTA_246(tCanSerialPortFrameXCP *env) { return 1; } -uint8_t XCP_COMMAND_UPLOAD_245(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_COMMAND_UPLOAD_245(tCanSerialPortFrameXCP *env) { eXcpCommand_Upload *request = (eXcpCommand_Upload *) env->canFrame.data; env->response[0] = XCP_COMMAND_CONNECT; @@ -204,7 +204,7 @@ uint8_t XCP_COMMAND_UPLOAD_245(tCanSerialPortFrameXCP *env) { return 0; } -uint8_t XCP_COMMAND_SHORT_UPLOAD_244(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_COMMAND_SHORT_UPLOAD_244(tCanSerialPortFrameXCP *env) { eXcpCommand_SHORT_UPLOAD *request = (eXcpCommand_SHORT_UPLOAD *) env->canFrame.data; if (request->COUNT > (MAX_CTO - 1)) { @@ -221,7 +221,7 @@ uint8_t XCP_COMMAND_SHORT_UPLOAD_244(tCanSerialPortFrameXCP *env) { return request->COUNT + 1; } -uint8_t XCP_COMMAND_DOWNLOAD_240(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_COMMAND_DOWNLOAD_240(tCanSerialPortFrameXCP *env) { eXcpCommand_Download *request = (eXcpCommand_Download *) env->canFrame.data; @@ -236,7 +236,7 @@ uint8_t XCP_COMMAND_DOWNLOAD_240(tCanSerialPortFrameXCP *env) { return 1; } -uint8_t XCP_COMMAND_DOWNLOAD_NEXT_239(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_COMMAND_DOWNLOAD_NEXT_239(tCanSerialPortFrameXCP *env) { eXcpCommand_Download *request = (eXcpCommand_Download *) env->canFrame.data; @@ -262,7 +262,7 @@ uint8_t XCP_COMMAND_DOWNLOAD_NEXT_239(tCanSerialPortFrameXCP *env) { return 0; } -uint8_t XCP_COMMAND_DOWNLOAD_MAX_238(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_COMMAND_DOWNLOAD_MAX_238(tCanSerialPortFrameXCP *env) { uint8_t COUNT = env->canFrame.dlc - 1; @@ -275,7 +275,7 @@ uint8_t XCP_COMMAND_DOWNLOAD_MAX_238(tCanSerialPortFrameXCP *env) { } -uint8_t XCP_CLEAR_DAQ_LIST_227(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_CLEAR_DAQ_LIST_227(tCanSerialPortFrameXCP *env) { env->response[0] = XCP_COMMAND_CONNECT; @@ -283,7 +283,7 @@ uint8_t XCP_CLEAR_DAQ_LIST_227(tCanSerialPortFrameXCP *env) { } -uint8_t XCP_GET_DAQ_LIST_INFO_216(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_GET_DAQ_LIST_INFO_216(tCanSerialPortFrameXCP *env) { eXcpCommand_Get_DAQ_List_Info_Request *request = (eXcpCommand_Get_DAQ_List_Info_Request *) env->canFrame.data; if (request->DAQ_LIST_NUMBER > MAX_DAO) { @@ -310,7 +310,7 @@ uint8_t XCP_GET_DAQ_LIST_INFO_216(tCanSerialPortFrameXCP *env) { return 6; } -uint8_t XCP_FREE_DAQ_214(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_FREE_DAQ_214(tCanSerialPortFrameXCP *env) { env->DAQ_COUNT = 0; memset(env->DAQ, 0, sizeof(env->DAQ)); @@ -329,7 +329,7 @@ uint8_t XCP_FREE_DAQ_214(tCanSerialPortFrameXCP *env) { return 1; } -uint8_t XCP_ALLOC_DAQ_213(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_ALLOC_DAQ_213(tCanSerialPortFrameXCP *env) { eXcpCommand_ALLOC_DAQ *request = (eXcpCommand_ALLOC_DAQ *) env->canFrame.data; env->DAQ_COUNT = request->DAQ_COUNT; @@ -338,7 +338,7 @@ uint8_t XCP_ALLOC_DAQ_213(tCanSerialPortFrameXCP *env) { return 1; } -uint8_t XCP_ALLOC_ODT_212(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_ALLOC_ODT_212(tCanSerialPortFrameXCP *env) { eXcpCommand_ALLOC_ODT *request = (eXcpCommand_ALLOC_ODT *) env->canFrame.data; env->DAQ[request->DAQ_LIST_NUMBER].ODT_COUNT = request->ODT_COUNT; @@ -348,7 +348,7 @@ uint8_t XCP_ALLOC_ODT_212(tCanSerialPortFrameXCP *env) { } -uint8_t XCP_ALLOC_ODT_ENTRY_211(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_ALLOC_ODT_ENTRY_211(tCanSerialPortFrameXCP *env) { eXcpCommand_ALLOC_ODT_ENTRY *request = (eXcpCommand_ALLOC_ODT_ENTRY *) env->canFrame.data; env->DAQ[request->DAQ_LIST_NUMBER].ODT_NUMBER[request->ODT_NUMBER].ODT_ENTRIES_COUNT = request->ODT_ENTRIES_COUNT; @@ -358,7 +358,7 @@ uint8_t XCP_ALLOC_ODT_ENTRY_211(tCanSerialPortFrameXCP *env) { } -uint8_t XCP_SET_DAQ_PTR_226(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_SET_DAQ_PTR_226(tCanSerialPortFrameXCP *env) { eXcpCommand_SET_DAQ_PTR *request = (eXcpCommand_SET_DAQ_PTR *) env->canFrame.data; if ((request->DAQ_LIST_NUMBER > MAX_DAO) || @@ -380,7 +380,7 @@ uint8_t XCP_SET_DAQ_PTR_226(tCanSerialPortFrameXCP *env) { return 1; } -uint8_t XCP_WRITE_DAQ_225(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_WRITE_DAQ_225(tCanSerialPortFrameXCP *env) { eXcpCommand_WRITE_DAQ *request = (eXcpCommand_WRITE_DAQ *) env->canFrame.data; if (env->ODT_ENTRY_NUMBER > MAX_ODT_ENTRIES_SIZE) { @@ -402,7 +402,7 @@ uint8_t XCP_WRITE_DAQ_225(tCanSerialPortFrameXCP *env) { return 1; } -uint8_t XCP_SET_DAQ_LIST_MODE_224(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_SET_DAQ_LIST_MODE_224(tCanSerialPortFrameXCP *env) { eXcpCommand_SET_DAQ_LIST_MODE *request = (eXcpCommand_SET_DAQ_LIST_MODE *) env->canFrame.data; if ((request->DAQ_LIST_NUMBER > MAX_DAO) || (request->EVENT_CHANNEL_NUMBER > MAX_EVENT_CHANNEL)) { @@ -429,7 +429,7 @@ uint8_t XCP_SET_DAQ_LIST_MODE_224(tCanSerialPortFrameXCP *env) { return 1; } -uint8_t XCP_START_STOP_DAQ_LIST_222(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_START_STOP_DAQ_LIST_222(tCanSerialPortFrameXCP *env) { eXcpCommand_START_STOP_DAQ_LIST *request = (eXcpCommand_START_STOP_DAQ_LIST *) env->canFrame.data; if (request->DAQ_LIST_NUMBER > MAX_DAO) { @@ -455,7 +455,7 @@ uint8_t XCP_START_STOP_DAQ_LIST_222(tCanSerialPortFrameXCP *env) { return 1; } -uint8_t XCP_START_STOP_SYNCH_221(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_START_STOP_SYNCH_221(tCanSerialPortFrameXCP *env) { eXcpCommand_START_STOP_SYNCH *request = (eXcpCommand_START_STOP_SYNCH *) env->canFrame.data; if (request->MODE == XCP_SYNC_START_SEL) { @@ -484,7 +484,7 @@ uint8_t XCP_START_STOP_SYNCH_221(tCanSerialPortFrameXCP *env) { return 2; } -uint8_t XCP_READ_DAQ_219(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_READ_DAQ_219(tCanSerialPortFrameXCP *env) { eXcpCommand_WRITE_DAQ *response = (eXcpCommand_WRITE_DAQ *) env->response; response->COM = XCP_COMMAND_CONNECT; @@ -498,7 +498,7 @@ uint8_t XCP_READ_DAQ_219(tCanSerialPortFrameXCP *env) { return 8; } -uint8_t XCP_GET_DAQ_PROCESSOR_INFO_218(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_GET_DAQ_PROCESSOR_INFO_218(tCanSerialPortFrameXCP *env) { eXcpCommand_GET_DAQ_PROCESSOR_INFO *response = (eXcpCommand_GET_DAQ_PROCESSOR_INFO *) env->response; @@ -530,7 +530,7 @@ uint8_t XCP_GET_DAQ_PROCESSOR_INFO_218(tCanSerialPortFrameXCP *env) { return 8; } -uint8_t XCP_GET_DAQ_RESOLUTION_INFO_217(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_GET_DAQ_RESOLUTION_INFO_217(tCanSerialPortFrameXCP *env) { eXcpCommand_GET_DAQ_RESOLUTION_INFO *response = (eXcpCommand_GET_DAQ_RESOLUTION_INFO *) env->response; response->COM = XCP_COMMAND_CONNECT; @@ -546,7 +546,7 @@ uint8_t XCP_GET_DAQ_RESOLUTION_INFO_217(tCanSerialPortFrameXCP *env) { } -uint8_t XCP_GET_DAQ_LIST_MODE_223(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_GET_DAQ_LIST_MODE_223(tCanSerialPortFrameXCP *env) { eXcpCommand_GET_DAQ_LIST_MODE_GET *request = (eXcpCommand_GET_DAQ_LIST_MODE_GET *) env->canFrame.data; @@ -579,7 +579,7 @@ uint8_t XCP_GET_DAQ_LIST_MODE_223(tCanSerialPortFrameXCP *env) { } -uint8_t XCP_GET_DAQ_EVENT_INFO_215(tCanSerialPortFrameXCP *env) { +static uint8_t XCP_GET_DAQ_EVENT_INFO_215(tCanSerialPortFrameXCP *env) { eXcpCommand_GET_DAQ_EVENT_INFO_GET *request = (eXcpCommand_GET_DAQ_EVENT_INFO_GET *) env->canFrame.data; @@ -612,6 +612,15 @@ uint8_t XCP_GET_DAQ_EVENT_INFO_215(tCanSerialPortFrameXCP *env) { return 7; } +static uint8_t XCP_GET_DAQ_STM(tCanSerialPortFrameXCP *env) { + eXcpCommand_GET_DAQ_STM *response = (eXcpCommand_GET_DAQ_STM *) env->canFrame.data; + + memcpy(env->DAQ[response->DAQ].ODT_NUMBER[response->ODT].DATA_STM, &env->canFrame.data[3], env->canFrame.dlc - 2); + + + return 0; +} + const xcp_func_ptr fXcp_func_ptr[256] = { NULL, NULL, @@ -885,16 +894,22 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou eXcpTypeCommand com = env->canFrame.data[0]; - if (fXcp_func_ptr[com] != NULL) { + if (com > 0xBF) { // CMD - response_size = fXcp_func_ptr[com](env); + 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); + } + + } else { - if (response_size) { - env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, timeout); } - } else { - + } else { // ODT + XCP_GET_DAQ_STM(env); } osMutexRelease(env->access);