X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fcan%2Fcan-message.hpp;h=6fe03172f82617c88cc39dbbd0f4d834f547aa3c;hb=d464872942898b7412b389aabe0ebc390f17adc5;hp=090a7d3f9ad12ad77851f2df5a45347e4e6f9f3d;hpb=13ebd041eae4822d05580081cf7cca54dc4ce677;p=apps%2Fagl-service-can-low-level.git diff --git a/src/can/can-message.hpp b/src/can/can-message.hpp index 090a7d3f..6fe03172 100644 --- a/src/can/can-message.hpp +++ b/src/can/can-message.hpp @@ -22,21 +22,22 @@ #include #include -#include "can/can-bus.hpp" -#include "utils/timer.hpp" +#include "../utils/timer.hpp" +#include "can-message-set.hpp" #define CAN_MESSAGE_SIZE 8 +class can_bus_dev_t; + /** - * @enum CanMessageFormat + * @enum can_message_format_t * @brief The ID format for a CAN message. */ -enum CanMessageFormat { +enum class can_message_format_t { STANDARD, /*!< STANDARD - standard 11-bit CAN arbitration ID. */ EXTENDED, /*!< EXTENDED - an extended frame, with a 29-bit arbitration ID. */ ERROR, /*!< ERROR - ERROR code used at initialization to signify that it isn't usable'*/ }; -typedef enum CanMessageFormat CanMessageFormat; /** * @class can_message_t @@ -44,142 +45,31 @@ typedef enum CanMessageFormat CanMessageFormat; * @brief A compact representation of a single CAN message, meant to be used in in/out * buffers. */ - -/************************* - * old CanMessage struct * - ************************* -struct CanMessage { - uint32_t id; - CanMessageFormat format; - uint8_t data[CAN_MESSAGE_SIZE]; - uint8_t length; -}; -typedef struct CanMessage CanMessage; -*/ 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.*/ - std::vector 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: - can_message_t(); - - uint32_t get_id() const; - bool get_rtr_flag_() const; - int get_format() const; - uint8_t get_flags() const; - const uint8_t* get_data() const; - uint8_t get_length() const; - - 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); - - bool is_correct_to_send(); - - void convert_from_canfd_frame(const std::pairargs); - canfd_frame convert_to_canfd_frame(); -}; - -/** - * @struct CanMessageDefinition - * - * @brief The definition of a CAN message. This includes a lot of metadata, so - * to save memory this struct should not be used for storing incoming and - * outgoing CAN messages. - */ -struct CanMessageDefinition { - //can_bus_dev_t bus; /*!< bus - A pointer to the bus this message is on. */ - uint32_t id; /*!< id - The ID of the message.*/ - CanMessageFormat format; /*!< format - the format of the message's ID.*/ - FrequencyClock frequencyClock; /*!< clock - an optional frequency clock to control the output of this - * message, if sent raw, or simply to mark the max frequency for custom - * handlers to retriec++ if ? syntaxve.*/ - bool forceSendChanged; /*!< forceSendChanged - If true, regardless of the frequency, it will send CAN - * message if it has changed when using raw passthrough.*/ - uint8_t lastValue[CAN_MESSAGE_SIZE]; /*!< lastValue - The last received value of the message. Defaults to undefined. - * This is required for the forceSendChanged functionality, as the stack - * needs to compare an incoming CAN message with the previous frame.*/ -}; -typedef struct CanMessageDefinition CanMessageDefinition; - -class can_message_definition_t -{ - private: - can_bus_dev_t& bus_; /*!< bus_ - A pointer to the bus this message is on. */ - uint32_t id_; /*!< id_ - The ID of the message.*/ - CanMessageFormat format_; /*!< format_ - the format of the message's ID.*/ - FrequencyClock clock_; /*!< clock_ - an optional frequency clock to control the output of this - * message, if sent raw, or simply to mark the max frequency for custom - * handlers to retriec++ if ? syntaxve.*/ - bool force_send_changed_; /*!< force_send_changed_ - If true, regardless of the frequency, it will send CAN - * message if it has changed when using raw passthrough.*/ - uint8_t last_value_[CAN_MESSAGE_SIZE]; /*!< last_value_ - The last received value of the message. Defaults to undefined. - * This is required for the forceSendChanged functionality, as the stack - * needs to compare an incoming CAN message with the previous frame.*/ - - public: -}; - -/** - * @struct CanMessageSet - * - * @brief A parent wrapper for a particular set of CAN messages and associated - * CAN buses(e.g. a vehicle or program). - */ - typedef struct { - uint8_t index; /*! data_; /*!< data_ - The message's data field with a size of 8 which is the standard about CAN bus messages.*/ + +public: + can_message_t(); + can_message_t(uint8_t maxdlen, uint32_t id, uint8_t length, can_message_format_t format, bool rtr_flag_, uint8_t flags, std::vector data); + + uint32_t get_id() const; + bool get_rtr_flag_() const; + can_message_format_t get_format() const; + uint8_t get_flags() const; + const uint8_t* get_data() const; + uint8_t get_length() const; + + void set_format(const can_message_format_t new_format); + + bool is_correct_to_send(); + +static can_message_t convert_from_canfd_frame(const struct canfd_frame& frame, size_t nbytes); + canfd_frame convert_to_canfd_frame(); }; - -/** Public: Return the currently active CAN configuration. */ -CanMessageSet* getActiveMessageSet(); - -/** Public: Retrive a list of all possible CAN configurations. - * - * Returns a pointer to an array of all configurations. - */ -CanMessageSet* getMessageSets(); - -/** Public: Return the length of the array returned by getMessageSets() */ -int getMessageSetCount(); - -/* Public: Return an array of all CAN messages to be processed in the active - * configuration. - */ -CanMessageDefinition* getMessages(); - -/* Public: Return the length of the array returned by getMessages(). */ -int getMessageCount(); \ No newline at end of file