From d8ee35c36dfa9841c38b19e4bb198392c444e19b Mon Sep 17 00:00:00 2001 From: David Rebbe Date: Mon, 9 Dec 2024 10:25:23 -0500 Subject: [PATCH] added icsneo_can_message_set_dlc_on_wire and icsneo_can_message_set_remote --- api/icsneo/icsneo.cpp | 34 +++++++++++++++++++++++++++++++++- include/icsneo/icsneo.h | 22 +++++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/api/icsneo/icsneo.cpp b/api/icsneo/icsneo.cpp index 0595fb5..315260b 100644 --- a/api/icsneo/icsneo.cpp +++ b/api/icsneo/icsneo.cpp @@ -605,7 +605,7 @@ ICSNEO_API icsneo_error_t icsneo_can_message_get_arbid(icsneo_device_t* device, } ICSNEO_API icsneo_error_t icsneo_can_message_set_arbid(icsneo_device_t* device, icsneo_message_t* message, uint32_t value) { - if (!device || !message) { + if (!device || !message) { return icsneo_error_invalid_parameters; } // TODO: Check if device is valid @@ -636,6 +636,22 @@ ICSNEO_API icsneo_error_t icsneo_can_message_get_dlc_on_wire(icsneo_device_t* de return icsneo_error_success; } +ICSNEO_API icsneo_error_t icsneo_can_message_set_dlc_on_wire(icsneo_device_t* device, icsneo_message_t* message, uint32_t value) { + if (!device || !message) { + return icsneo_error_invalid_parameters; + } + // TODO: Check if device is valid + // TODO: Check if message is valid + auto* const can_message = dynamic_cast(message->message.get()); + if (!can_message) { + return icsneo_error_invalid_type; + } + + can_message->dlcOnWire = static_cast(value); + + return icsneo_error_success; +} + ICSNEO_API icsneo_error_t icsneo_can_message_is_remote(icsneo_device_t* device, icsneo_message_t* message, bool* value) { if (!device || !message || !value) { return icsneo_error_invalid_parameters; @@ -652,6 +668,22 @@ ICSNEO_API icsneo_error_t icsneo_can_message_is_remote(icsneo_device_t* device, return icsneo_error_success; } +ICSNEO_API icsneo_error_t icsneo_can_message_set_remote(icsneo_device_t* device, icsneo_message_t* message, bool value) { + if (!device || !message) { + return icsneo_error_invalid_parameters; + } + // TODO: Check if device is valid + // TODO: Check if message is valid + auto* const can_message = dynamic_cast(message->message.get()); + if (!can_message) { + return icsneo_error_invalid_type; + } + + can_message->isRemote = value; + + return icsneo_error_success; +} + ICSNEO_API icsneo_error_t icsneo_can_message_is_extended(icsneo_device_t* device, icsneo_message_t* message, bool* value) { if (!device || !message || !value) { return icsneo_error_invalid_parameters; diff --git a/include/icsneo/icsneo.h b/include/icsneo/icsneo.h index 4e6204b..d42ec01 100644 --- a/include/icsneo/icsneo.h +++ b/include/icsneo/icsneo.h @@ -449,7 +449,17 @@ ICSNEO_API icsneo_error_t icsneo_can_message_set_arbid(icsneo_device_t* device, */ ICSNEO_API icsneo_error_t icsneo_can_message_get_dlc_on_wire(icsneo_device_t* device, icsneo_message_t* message, uint32_t* value); -/** @brief Get the remote status of a CAN message +/** @brief Set the DLC on wire of a CAN message + * + * @param[in] icsneo_device_t* device The device to check against. + * @param[in] icsneo_message_t* message The message to check. + * @param[out] uint32_t value DLC to set. + * + * @return icsneo_error_t icsneo_error_success if successful, icsneo_error_invalid_parameters otherwise. +*/ +ICSNEO_API icsneo_error_t icsneo_can_message_set_dlc_on_wire(icsneo_device_t* device, icsneo_message_t* message, uint32_t value); + +/** @brief Get the Remote Transmission Request (RTR) status of a CAN message * * @param[in] icsneo_device_t* device The device to check against. * @param[in] icsneo_message_t* message The message to check. @@ -459,6 +469,16 @@ ICSNEO_API icsneo_error_t icsneo_can_message_get_dlc_on_wire(icsneo_device_t* de */ ICSNEO_API icsneo_error_t icsneo_can_message_is_remote(icsneo_device_t* device, icsneo_message_t* message, bool* value); +/** @brief Set the Remote Transmission Request (RTR) of a CAN message + * + * @param[in] icsneo_device_t* device The device to check against. + * @param[in] icsneo_message_t* message The message to modify. + * @param[out] bool value Remote status to set. + * + * @return icsneo_error_t icsneo_error_success if successful, icsneo_error_invalid_parameters otherwise. +*/ +ICSNEO_API icsneo_error_t icsneo_can_message_set_remote(icsneo_device_t* device, icsneo_message_t* message, bool* value); + /** @brief Get the extended status of a CAN message * * @param[in] icsneo_device_t* device The device to check against.