message: Fix copying all bytes but the last one 63/23463/3
authorRomain Forlot <romain.forlot@iot.bzh>
Thu, 19 Dec 2019 10:29:07 +0000 (11:29 +0100)
committerRomain Forlot <romain.forlot@iot.bzh>
Thu, 9 Jan 2020 15:25:36 +0000 (16:25 +0100)
Change-Id: I8c2fce0f8080f213fda26a054f691ba3ed457bda
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
low-can-binding/can/message/can-message.cpp
low-can-binding/can/message/message.cpp
low-can-binding/can/message/message.hpp

index a8843b9..2d530f5 100644 (file)
@@ -191,56 +191,33 @@ struct canfd_frame can_message_t::convert_to_canfd_frame()
 struct std::vector<canfd_frame> can_message_t::convert_to_canfd_frame_vector()
 {
        std::vector<canfd_frame> ret;
+       int i = 0;
+
        if(is_correct_to_send())
        {
-               if(flags_ & CAN_FD_FRAME)
+               while (i < length_)
                {
-                       int i=0;
-                       do
+                       canfd_frame frame;
+                       frame.can_id = id_;
+                       if(flags_ & CAN_FD_FRAME)
                        {
-                               canfd_frame frame;
-                               frame.can_id = id_;
-                               frame.len = 64;
-                               std::vector<uint8_t> data = get_data_vector((i*64),(i*64)+63);
-                               if(data.size()<64)
-                               {
-                                       ::memset(frame.data, 0, sizeof(frame.data));
-                                       ::memcpy(frame.data, data.data(), data.size());
-                               }
-                               else
-                               {
-                                       ::memcpy(frame.data, data.data(), 64);
-                               }
-                               ret.push_back(frame);
-                               i++;
-                       } while (i<(length_ >> 6));
-               }
-               else
-               {
-                       int i=0;
-                       do
+                               frame.len = (length_ - (i * CANFD_MAX_DLC)) > CANFD_MAX_DLC - 1 ? CANFD_MAX_DLC : (uint8_t)(length_ - (i * CANFD_MAX_DLC));
+                               ::memcpy(frame.data, &data_.data()[i*CANFD_MAX_DLC], frame.len);
+                               i += CANFD_MAX_DLC;
+                       }
+                       else
                        {
-                               canfd_frame frame;
-                               frame.can_id = id_;
-                               frame.len = 8;
-                               std::vector<uint8_t> data = get_data_vector(i*8,(i*8)+7);
-                               if(data.size()<8)
-                               {
-                                       ::memset(frame.data, 0, sizeof(frame.data));
-                                       ::memcpy(frame.data, data.data(), data.size());
-                               }
-                               else
-                               {
-                                       ::memset(frame.data, 0, sizeof(frame.data));
-                                       ::memcpy(frame.data, data.data(), 8);
-                               }
-                               ret.push_back(frame);
-                               i++;
-                       } while (i<(length_ >> 3));
+                               frame.len = (length_ - (i * CAN_MAX_DLC)) > CAN_MAX_DLC - 1 ? CAN_MAX_DLC : (uint8_t)(length_ - (i * CAN_MAX_DLC));
+                               ::memcpy(frame.data, &data_.data()[i*CAN_MAX_DLEN], frame.len);
+                               i += CAN_MAX_DLC;
+                       }
+                       ret.push_back(frame);
                }
        }
        else
+       {
                AFB_ERROR("can_message_t not correctly initialized to be sent");
+       }
 
        return ret;
 }
index 56e9379..c714f50 100644 (file)
@@ -76,28 +76,6 @@ const uint8_t* message_t::get_data() const
        return data_.data();
 }
 
-
-///
-/// @brief Retrieve data_ member value.
-///
-/// @return pointer to the first element
-///  of class member data_
-///
-const std::vector<uint8_t> message_t::get_data_vector(int start, int end) const
-{
-       if ( start > length_ || end > length_ )
-       {
-               AFB_ERROR("Error index to get data vector, [%d-%d] - for length %d", start, end, length_);
-               return data_;
-       }
-
-       std::vector<uint8_t>::const_iterator first = data_.begin() + start;
-       std::vector<uint8_t>::const_iterator last = data_.begin() + end;
-       std::vector<uint8_t> ret(first, last);
-
-       return ret;
-}
-
 ///
 /// @brief Retrieve data_ member whole vector
 ///
index ce488c0..b77ce8b 100644 (file)
@@ -68,7 +68,6 @@ public:
        int get_sub_id() const;
        const uint8_t* get_data() const;
        const std::vector<uint8_t> get_data_vector() const;
-       const std::vector<uint8_t> get_data_vector(int start, int end) const;
        uint32_t get_length() const;
        uint64_t get_timestamp() const;