From 528ffedeb775ae150d233761a84ac49de33b4792 Mon Sep 17 00:00:00 2001 From: David Rebbe Date: Mon, 9 Dec 2024 10:04:49 -0500 Subject: [PATCH] added icsneo_message_set_netid and icsneo_message_set_data --- api/icsneo/icsneo.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ include/icsneo/icsneo.h | 22 +++++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/api/icsneo/icsneo.cpp b/api/icsneo/icsneo.cpp index 5664c1d..11ed7d0 100644 --- a/api/icsneo/icsneo.cpp +++ b/api/icsneo/icsneo.cpp @@ -525,6 +525,47 @@ ICSNEO_API icsneo_error_t icsneo_get_netid_name(icsneo_netid_t netid, const char return safe_str_copy(value, value_length, netid_str) ? icsneo_error_success : icsneo_error_string_copy_failed; } +ICSNEO_API icsneo_error_t icsneo_message_set_netid(icsneo_device_t* device, icsneo_message_t* message, icsneo_netid_t netid) { + if (!device || !message) { + return icsneo_error_invalid_parameters; + } + // TODO: Check if device is valid + // TODO: Check if message is valid + // Make sure the message has the data field, internal and bus currently have this. + if (message->message->getMsgType() != icsneo_msg_type_internal && message->message->getMsgType() != icsneo_msg_type_bus) { + return icsneo_error_invalid_type; + } + auto* internal_message = dynamic_cast(message->message.get()); + if (!internal_message) { + return icsneo_error_invalid_type; + } + internal_message->network = Network(static_cast<_icsneo_netid_t>(netid), true); + + return icsneo_error_success; +} + +ICSNEO_API icsneo_error_t icsneo_message_set_data(icsneo_device_t* device, icsneo_message_t* message, uint8_t* data, uint32_t data_length) { + if (!device || !message | !data) { + return icsneo_error_invalid_parameters; + } + // TODO: Check if device is valid + // TODO: Check if message is valid + // Make sure the message has the data field, internal and bus currently have this. + if (message->message->getMsgType() != icsneo_msg_type_internal && message->message->getMsgType() != icsneo_msg_type_bus) { + return icsneo_error_invalid_type; + } + auto* internal_message = dynamic_cast(message->message.get()); + if (!internal_message) { + return icsneo_error_invalid_type; + } + internal_message->data.clear(); + internal_message->data.resize(data_length); + internal_message->data.shrink_to_fit(); + std::copy(data, data + data_length, internal_message->data.begin()); + + return icsneo_error_success; +} + ICSNEO_API icsneo_error_t icsneo_message_get_data(icsneo_device_t* device, icsneo_message_t* message, uint8_t* data, uint32_t* data_length) { if (!device || !message || !data || !data_length) { return icsneo_error_invalid_parameters; diff --git a/include/icsneo/icsneo.h b/include/icsneo/icsneo.h index 424f7b7..b41c3c6 100644 --- a/include/icsneo/icsneo.h +++ b/include/icsneo/icsneo.h @@ -387,13 +387,33 @@ ICSNEO_API icsneo_error_t icsneo_message_get_netid(icsneo_device_t* device, icsn */ ICSNEO_API icsneo_error_t icsneo_get_netid_name(icsneo_netid_t netid, const char* value, uint32_t* value_length); +/** @brief Set the Network ID (netid) of a bus message + * + * @param[in] icsneo_device_t* device The device to check against. + * @param[in] icsneo_message_t* message The message to check. + * @param[in] icsneo_netid_t netid The netid to set. + * + * @return icsneo_error_t icsneo_error_success if successful, icsneo_error_invalid_parameters otherwise. + */ +ICSNEO_API icsneo_error_t icsneo_message_set_netid(icsneo_device_t* device, icsneo_message_t* message, icsneo_netid_t netid); + +/** @brief Set the data bytes of a message + * + * @param[in] icsneo_device_t* device The device to check against. + * @param[in] icsneo_message_t* message The message to copy the data into. + * @param[out] uint8_t* data Pointer to a uint8_t array to copy from. + * @param[in] uint32_t data_length length of the data. + * + * @return icsneo_error_t icsneo_error_success if successful, icsneo_error_invalid_parameters otherwise. +*/ +ICSNEO_API icsneo_error_t icsneo_message_set_data(icsneo_device_t* device, icsneo_message_t* message, uint8_t* data, uint32_t data_length); /** @brief Get the data bytes of a message * * @param[in] icsneo_device_t* device The device to check against. * @param[in] icsneo_message_t* message The message to check. * @param[out] uint8_t* data Pointer to a uint8_t to copy the data bytes into. - * @param[out] uint32_t* data_length Pointer to a uint32_t to copy the length of the data into. + * @param[in,out] uint32_t* data_length Pointer to a uint32_t to copy the length of the data into. * * @return icsneo_error_t icsneo_error_success if successful, icsneo_error_invalid_parameters otherwise. */