added icsneo_message_set_netid and icsneo_message_set_data

David Rebbe 2024-12-09 10:04:49 -05:00
parent 1ca9f0fdb4
commit 528ffedeb7
2 changed files with 62 additions and 1 deletions

View File

@ -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<InternalMessage*>(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<InternalMessage*>(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;

View File

@ -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.
*/