X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fcan-message.cpp;h=390594300634f974f78b74133df84f047d56f605;hb=8e9b03928613c75befe059e772e7bdbb3109c350;hp=e27324871ff500c25b03bf31196c82e7da896e7a;hpb=0c9926d385f357e4a0a8bb2932da0aa6e2503b9b;p=apps%2Fagl-service-can-low-level.git diff --git a/src/can-message.cpp b/src/can-message.cpp index e2732487..39059430 100644 --- a/src/can-message.cpp +++ b/src/can-message.cpp @@ -63,22 +63,22 @@ uint8_t can_message_t::get_length() const return length_; } -void can_message_t::set_max_data_length(const struct canfd_frame& frame) +void can_message_t::set_max_data_length(size_t nbytes) { maxdlen_ = 0; - switch(sizeof(frame)) + switch(nbytes) { case CANFD_MTU: - DEBUG(binder_interface, "convert_from_canfd_frame: Got an CAN FD frame with length %d and flags %d", frame.len, frame.flags); + DEBUG(binder_interface, "set_max_data_length: Got an CAN FD frame"); maxdlen_ = CANFD_MAX_DLEN; break; case CAN_MTU: - DEBUG(binder_interface, "convert_from_canfd_frame: Got a legacy CAN frame with length %d", frame.len); + DEBUG(binder_interface, "set_max_data_length: Got a legacy CAN frame"); maxdlen_ = CAN_MAX_DLEN; break; default: - ERROR(binder_interface, "convert_from_canfd_frame: unsupported CAN frame"); + ERROR(binder_interface, "set_max_data_length: unsupported CAN frame"); break; } } @@ -148,28 +148,28 @@ void can_message_t::set_length(const uint8_t new_length) } } -void can_message_t::set_data(const __u8 new_data[], size_t dlen) +void can_message_t::set_data(const __u8* new_data) { - if (dlen > maxdlen_) - ERROR(binder_interface, "Can set data, too big ! It is a CAN frame ?"); - else - { int i; - /* Limiting to 8 bytes message for now, even on 64 bytes from fd frames*/ - for(i=0;iargs) { - set_max_data_length(frame); + // May be it's overkill to assign member of the pair... May be it will change... + struct canfd_frame frame = args.first; + size_t nbytes = args.second; + set_max_data_length(nbytes); set_length(frame.len); set_id_and_format(frame.can_id); - /* standard CAN frames may have RTR enabled. There are no ERR frames with RTR */ + /* Overwrite lenght_ if RTR flags is detected. + * standard CAN frames may have RTR enabled. There are no ERR frames with RTR */ if (frame.can_id & CAN_RTR_FLAG) { rtr_flag_ = true; @@ -182,9 +182,9 @@ void can_message_t::convert_from_canfd_frame(const struct canfd_frame& frame) if(maxdlen_ == CANFD_MAX_DLEN) set_flags(frame.flags); - size_t dlen = sizeof(frame.data)/sizeof(__u8); - data_.reserve(dlen); - set_data(frame.data, dlen); + if ( data_.capacity() < maxdlen_) + data_.reserve(maxdlen_); + set_data(frame.data); DEBUG(binder_interface, "convert_from_canfd_frame: Found id: %X, format: %X, length: %X, data %02X%02X%02X%02X%02X%02X%02X%02X", id_, format_, length_, data_[0], data_[1], data_[2], data_[3], data_[4], data_[5], data_[6], data_[7]);