#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:
- /**
- * @brief Class constructor
- *
- * Constructor about can_message_t class.
- */
can_message_t();
- /**
- * @brief Retrieve id_ member value.
- *
- * @return uint32_t id_ class member
- */
uint32_t get_id() const;
-
- /**
- * @brief Retrieve format_ member value.
- *
- * @return CanMessageFormat format_ class member
- */
+ bool get_rtr_flag_() const;
int get_format() const;
-
- /**
- * @brief Retrieve data_ member value.
- *
- * @return uint8_t data_ pointer class member
- */
+ uint8_t get_flags() const;
const uint8_t* get_data() const;
-
- /**
- * @brief Retrieve length_ member value.
- *
- * @return uint8_t length_ class member
- */
uint8_t get_length() const;
- /**
- * @brief Control whether the object is correctly initialized
- * to be sent over the CAN bus
- *
- * @return true if object correctly initialized and false if not...
- */
- bool is_correct_to_send();
-
- /**
- * @brief Set id_ member value.
- *
- * Preferred way to initialize these members by using
- * convert_from_canfd_frame method.
- *
- * @param uint32_t id_ class member
- */
- void set_id(const uint32_t new_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_format(const CanMessageFormat format);
-
- /**
- * @brief Set data_ member value.
- *
- * Preferred way to initialize these members by using
- * convert_from_canfd_frame method.
- *
- * @param uint8_t data_ array with a max size of 8 elements.
- */
- void set_data(const uint8_t new_data);
-
- /**
- * @brief Set length_ member value.
- *
- * Preferred way to initialize these members by using
- * convert_from_canfd_frame method.
- *
- * @param uint8_t length_ array with a max size of 8 elements.
- */
+ void set_max_data_length(size_t nbytes);
+ void set_id_and_format(const uint32_t new_id);
+ void set_format(const CanMessageFormat new_format);
+ void set_format(const uint32_t can_id);
+ void set_flags(const uint8_t flags);
+ void set_data(const __u8* new_data);
void set_length(const uint8_t new_length);
- /**
- * @brief Take a canfd_frame struct to initialize class members
- *
- * This is the preferred way to initialize class members.
- *
- * @param canfd_frame struct read from can bus device.
- */
- void convert_from_canfd_frame(const canfd_frame& frame);
-
- /**
- * @brief Take all initialized class's members and build an
- * canfd_frame struct that can be use to send a CAN message over
- * the bus.
- *
- * @return canfd_frame struct built from class members.
- */
+ bool is_correct_to_send();
+
+ void convert_from_canfd_frame(const std::pair<struct canfd_frame&, size_t>args);
canfd_frame convert_to_canfd_frame();
};