#pragma once
+#include <vector>
#include <string>
#include <cstdint>
#include <linux/can.h>
class can_message_t {
private:
uint32_t id_; /*!< uint32_t id - The ID of the message. */
+ bool rtr_flag_; /*!< bool rtr_flag - Telling if the frame has RTR flag positionned. Then frame hasn't data field*/
uint8_t length_; /*!< uint8_t length - the length of the data array (max 8). */
+ uint8_t flags_; /*!< unint8_t flags of a CAN FD frame. Needed if we catch FD frames.*/
CanMessageFormat format_; /*!< CanMessageFormat format - the format of the message's ID.*/
- uint8_t data_[CAN_MESSAGE_SIZE]; /*!< uint8_t data - The message's data field with a size of 8 which is the standard about CAN bus messages.*/
+ std::vector<uint8_t> data_; /*!< uint8_t data - The message's data field with a size of 8 which is the standard about CAN bus messages.*/
+
+ uint8_t maxdlen_;
public:
/**
*/
uint32_t get_id() const;
+ /**
+ * @brief Retrieve RTR flag member.
+ *
+ * @return bool rtr_flags_ class member
+ */
+ bool get_rtr_flag_() const;
+
/**
* @brief Retrieve format_ member value.
*
*/
int get_format() const;
+ /**
+ * @brief Retrieve format_ member value.
+ *
+ * @return CanMessageFormat format_ class member
+ */
+ uint8_t get_flags() const;
+
/**
* @brief Retrieve data_ member value.
*
- * @return uint8_t data_ pointer class member
+ * @return uint8_t data_ pointer to the first element
+ * of class member data_
*/
const uint8_t* get_data() const;
* @return uint8_t length_ class member
*/
uint8_t get_length() const;
+
+ void set_max_data_length(size_t nbytes);
/**
* @brief Control whether the object is correctly initialized
*
* @param uint32_t id_ class member
*/
- void set_id(const uint32_t new_id);
+ void set_id_and_format(const uint32_t new_id);
/**
* @brief Set format_ member value.
*
* @param CanMessageFormat format_ class member
*/
- void set_format(const CanMessageFormat format);
+ void set_format(const CanMessageFormat new_format);
+ /**
+ * @brief Set format_ member value. Deducing from the can_id
+ * of a canfd_frame.
+ *
+ * Preferred way to initialize these members by using
+ * convert_from_canfd_frame method.
+ *
+ * @param uint32_t can_id integer from a canfd_frame
+ */
+ void set_format(const uint32_t can_id);
+
+ /**
+ * @brief Set format_ member value.
+ *
+ * Preferred way to initialize these members by using
+ * convert_from_canfd_frame method.
+ *
+ * @param CanMessageFormat format_ class member
+ */
+ void set_flags(const uint8_t flags);
+
/**
* @brief Set data_ member value.
*
*
* @param uint8_t data_ array with a max size of 8 elements.
*/
- void set_data(const uint8_t new_data);
+ void set_data(const __u8* new_data);
/**
* @brief Set length_ member value.
*
* @param canfd_frame struct read from can bus device.
*/
- void convert_from_canfd_frame(const canfd_frame& frame);
+ void convert_from_canfd_frame(const std::pair<struct canfd_frame&, size_t>args);
/**
* @brief Take all initialized class's members and build an