From a8ab8d211e22105c8437813d09734e93524cab73 Mon Sep 17 00:00:00 2001 From: Maxime COZZI Date: Thu, 7 Mar 2024 17:36:55 +0100 Subject: [PATCH] use job msg size instead of header msg size when reading message from service --- engine/core/src/luos_engine.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/engine/core/src/luos_engine.c b/engine/core/src/luos_engine.c index b90444dae..24b2f0582 100644 --- a/engine/core/src/luos_engine.c +++ b/engine/core/src/luos_engine.c @@ -264,14 +264,20 @@ error_return_t Luos_ReadFromService(service_t *service, uint16_t id, msg_t *msg_ // Check if our service is concerned by this job if ((*(service_filter_t *)job->phy_data >> service_index & 0x01) && (job->msg_pt->header.source == id)) { + uint16_t msg_size = job->msg_pt->header.size; // This job is for our service, copy the job message to the user message + if (msg_size > MAX_DATA_MSG_SIZE) + { + msg_size = MAX_DATA_MSG_SIZE; + } if (Luos_IsMsgTimstamped(job->msg_pt) == true) { - memcpy(msg_to_write, job->msg_pt, sizeof(header_t) + job->msg_pt->header.size + sizeof(time_luos_t)); + memcpy(msg_to_write, job->msg_pt, sizeof(header_t) + msg_size + sizeof(time_luos_t)); } else { - memcpy(msg_to_write, job->msg_pt, sizeof(header_t) + job->msg_pt->header.size); + // memcpy(msg_to_write, job->msg_pt, sizeof(header_t) + job->msg_pt->header.size); + memcpy(msg_to_write, job->msg_pt, sizeof(header_t) + msg_size); } // Remove this service from the job filter *(service_filter_t *)job->phy_data &= ~(1 << service_index); @@ -305,14 +311,19 @@ error_return_t Luos_ReadFromCmd(service_t *service, uint8_t cmd, msg_t *msg_to_w // Check if our service is concerned by this job and if the command is the one we are looking for if ((*(service_filter_t *)job->phy_data >> service_index & 0x01) && (job->msg_pt->header.cmd == cmd)) { + uint16_t msg_size = job->msg_pt->header.size; // This job is for our service, copy the job message to the user message + if (msg_size > MAX_DATA_MSG_SIZE) + { + msg_size = MAX_DATA_MSG_SIZE; + } if (Luos_IsMsgTimstamped(job->msg_pt) == true) { - memcpy(msg_to_write, job->msg_pt, sizeof(header_t) + job->msg_pt->header.size + sizeof(time_luos_t)); + memcpy(msg_to_write, job->msg_pt, sizeof(header_t) + msg_size + sizeof(time_luos_t)); } else { - memcpy(msg_to_write, job->msg_pt, sizeof(header_t) + job->msg_pt->header.size); + memcpy(msg_to_write, job->msg_pt, sizeof(header_t) + msg_size); } // Remove this service from the job filter *(service_filter_t *)job->phy_data &= ~(1 << service_index);