X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=CAN-binder%2Flow-can-binding%2Fcan%2Fcan-message.cpp;h=057bc71f0424a2917ceabf79fed25757a6daaa1c;hb=2a35b45d6bdef8b634de36103e0a33490922dd4e;hp=772734d71953ae134de7ce97c901b4f10290dfe8;hpb=e4a50a3e96aa39346ad7212cae984524276973dd;p=apps%2Fagl-service-can-low-level.git diff --git a/CAN-binder/low-can-binding/can/can-message.cpp b/CAN-binder/low-can-binding/can/can-message.cpp index 772734d7..057bc71f 100644 --- a/CAN-binder/low-can-binding/can/can-message.cpp +++ b/CAN-binder/low-can-binding/can/can-message.cpp @@ -27,7 +27,14 @@ /// Constructor about can_message_t class. /// can_message_t::can_message_t() - : maxdlen_{0}, id_{0}, length_{0}, format_{can_message_format_t::INVALID}, rtr_flag_{false}, flags_{0}, timestamp_{0} + : maxdlen_{0}, + id_{0}, + length_{0}, + format_{can_message_format_t::INVALID}, + rtr_flag_{false}, + flags_{0}, + timestamp_{0}, + sub_id_{-1} {} can_message_t::can_message_t(uint8_t maxdlen, @@ -36,7 +43,7 @@ can_message_t::can_message_t(uint8_t maxdlen, can_message_format_t format, bool rtr_flag, uint8_t flags, - std::vector data, + std::vector& data, uint64_t timestamp) : maxdlen_{maxdlen}, id_{id}, @@ -45,7 +52,8 @@ can_message_t::can_message_t(uint8_t maxdlen, rtr_flag_{rtr_flag}, flags_{flags}, data_{data}, - timestamp_{timestamp} + timestamp_{timestamp}, + sub_id_{-1} {} /// @@ -58,6 +66,11 @@ uint32_t can_message_t::get_id() const return id_; } +int can_message_t::get_sub_id() const +{ + return sub_id_; +} + /// /// @brief Retrieve RTR flag member. /// @@ -71,7 +84,7 @@ bool can_message_t::get_rtr_flag_() const /// /// @brief Retrieve format_ member value. /// -/// @return format_ class member +/// @return format_ class member. Default to INVALID. /// can_message_format_t can_message_t::get_format() const { @@ -121,6 +134,11 @@ uint8_t can_message_t::get_length() const return length_; } +void can_message_t::set_sub_id(int sub_id) +{ + sub_id_ = sub_id; +} + uint64_t can_message_t::get_timestamp() const { return timestamp_; @@ -131,12 +149,10 @@ void can_message_t::set_timestamp(uint64_t timestamp) timestamp_ = timestamp; } -/// /// @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. -/// +/// @return True if object correctly initialized and false if not. bool can_message_t::is_correct_to_send() { if (id_ != 0 && length_ != 0 && format_ != can_message_format_t::INVALID) @@ -149,20 +165,18 @@ bool can_message_t::is_correct_to_send() return false; } -/// /// @brief Set format_ member value. /// /// Preferred way to initialize these members by using /// convert_from_canfd_frame method. /// /// @param[in] new_format - class member -/// void can_message_t::set_format(const can_message_format_t new_format) { if(new_format == can_message_format_t::STANDARD || new_format == can_message_format_t::EXTENDED || new_format == can_message_format_t::INVALID) format_ = new_format; else - ERROR(binder_interface, "%s: Can set format, wrong format chosen", __FUNCTION__); + ERROR("Can set format, wrong format chosen"); } /// @brief Take a canfd_frame struct to initialize class members @@ -173,7 +187,6 @@ void can_message_t::set_format(const can_message_format_t new_format) /// @param[in] nbytes - bytes read from socket read operation. /// /// @return A can_message_t object fully initialized with canfd_frame values. -/// can_message_t can_message_t::convert_from_frame(const struct canfd_frame& frame, size_t nbytes, uint64_t timestamp) { uint8_t maxdlen, length, flags = (uint8_t)NULL; @@ -185,15 +198,15 @@ can_message_t can_message_t::convert_from_frame(const struct canfd_frame& frame, switch(nbytes) { case CANFD_MTU: - DEBUG(binder_interface, "%s: Got an CAN FD frame", __FUNCTION__); + DEBUG("Got an CAN FD frame"); maxdlen = CANFD_MAX_DLEN; break; case CAN_MTU: - DEBUG(binder_interface, "%s: Got a legacy CAN frame", __FUNCTION__); + DEBUG("Got a legacy CAN frame"); maxdlen = CAN_MAX_DLEN; break; default: - ERROR(binder_interface, "%s: unsupported CAN frame", __FUNCTION__); + ERROR("unsupported CAN frame"); break; } @@ -247,13 +260,21 @@ can_message_t can_message_t::convert_from_frame(const struct canfd_frame& frame, data.push_back(frame.data[i]); }; - DEBUG(binder_interface, "%s: Found id: %X, format: %X, length: %X, data %02X%02X%02X%02X%02X%02X%02X%02X", __FUNCTION__, + DEBUG("Found id: %X, format: %X, length: %X, data %02X%02X%02X%02X%02X%02X%02X%02X", id, (uint8_t)format, length, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]); } return can_message_t(maxdlen, id, length, format, rtr_flag, flags, data, timestamp); } +/// @brief Take a can_frame struct to initialize class members +/// +/// This is the preferred way to initialize class members. +/// +/// @param[in] frame - can_frame to convert coming from a read of CAN socket +/// @param[in] nbytes - bytes read from socket read operation. +/// +/// @return A can_message_t object fully initialized with can_frame values. can_message_t can_message_t::convert_from_frame(const struct can_frame& frame, size_t nbytes, uint64_t timestamp) { uint8_t maxdlen, length, flags = (uint8_t)NULL; @@ -264,12 +285,12 @@ can_message_t can_message_t::convert_from_frame(const struct can_frame& frame, s if(nbytes <= CAN_MTU) { - DEBUG(binder_interface, "%s: Got a legacy CAN frame", __FUNCTION__); + DEBUG("Got a legacy CAN frame"); maxdlen = CAN_MAX_DLEN; } else { - ERROR(binder_interface, "%s: unsupported CAN frame", __FUNCTION__); + ERROR("unsupported CAN frame"); } if (frame.can_id & CAN_ERR_FLAG) @@ -318,20 +339,18 @@ can_message_t can_message_t::convert_from_frame(const struct can_frame& frame, s data.push_back(frame.data[i]); }; -// DEBUG(binder_interface, "%s: Found id: %X, format: %X, length: %X, data %02X%02X%02X%02X%02X%02X%02X%02X", __FUNCTION__, +// DEBUG("Found id: %X, format: %X, length: %X, data %02X%02X%02X%02X%02X%02X%02X%02X", // id, (uint8_t)format, length, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]); } return can_message_t(maxdlen, id, length, format, rtr_flag, flags, data, timestamp); } -/// /// @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. -/// struct canfd_frame can_message_t::convert_to_canfd_frame() { canfd_frame frame; @@ -343,11 +362,16 @@ struct canfd_frame can_message_t::convert_to_canfd_frame() ::memcpy(frame.data, get_data(), length_); } else - ERROR(binder_interface, "%s: can_message_t not correctly initialized to be sent", __FUNCTION__); + ERROR("can_message_t not correctly initialized to be sent"); return frame; } +/// @brief Take all initialized class's members and build an +/// can_frame struct that can be use to send a CAN message over +/// the bus. +/// +/// @return can_frame struct built from class members. struct can_frame can_message_t::convert_to_can_frame() { can_frame frame; @@ -359,7 +383,7 @@ struct can_frame can_message_t::convert_to_can_frame() ::memcpy(frame.data, get_data(), length_); } else - ERROR(binder_interface, "%s: can_message_t not correctly initialized to be sent", __FUNCTION__); + ERROR("can_message_t not correctly initialized to be sent"); return frame; }