X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=CAN-binder%2Flow-can-binding%2Futils%2Fsocketcan.cpp;h=71588a6e038bc6e74a3bba2ce535dadbab9c2454;hb=71c41df6cd794b670f9a16ca060a9c4ab054200e;hp=4d22654729384bdb3868b44f68fffe21e9c425c6;hpb=7679cd97dc4c20103f8afb364437dbcfd359befc;p=apps%2Fagl-service-can-low-level.git diff --git a/CAN-binder/low-can-binding/utils/socketcan.cpp b/CAN-binder/low-can-binding/utils/socketcan.cpp index 4d226547..71588a6e 100644 --- a/CAN-binder/low-can-binding/utils/socketcan.cpp +++ b/CAN-binder/low-can-binding/utils/socketcan.cpp @@ -35,14 +35,19 @@ namespace utils socketcan_t::socketcan_t(socketcan_t&& s) : socket_{s.socket_} { - s.socket_ = INVALID_SOCKET; + ::memset(&tx_address_, 0, sizeof(tx_address_)); + } + + socketcan_t& socketcan_t::operator=(const socketcan_t& s) + { + socket_ = std::move(s.socket_); + return *this; } - /// @brief Destruct the socket. socketcan_t::~socketcan_t() { - if(socket_ != INVALID_SOCKET) - ::close(socket_); + close(); + socket_ = INVALID_SOCKET; } const struct sockaddr_can& socketcan_t::get_tx_address() const @@ -89,28 +94,4 @@ namespace utils { return socket_; } - - socketcan_t& operator>>(socketcan_t& s, can_message_t& cm) - { - struct { - struct bcm_msg_head msg_head; - struct can_frame frames; - } msg; - - const struct sockaddr_can& addr = s.get_tx_address(); - socklen_t addrlen = sizeof(addr); - struct ifreq ifr; - - ssize_t nbytes = ::recvfrom(s.socket(), &msg, sizeof(msg), 0, (struct sockaddr*)&addr, &addrlen); - ifr.ifr_ifindex = addr.can_ifindex; - ioctl(s.socket(), SIOCGIFNAME, &ifr); - - DEBUG(binder_interface, "Data available: %i bytes read", (int)nbytes); - DEBUG(binder_interface, "read: Found on bus %s:\n id: %X, length: %X, data %02X%02X%02X%02X%02X%02X%02X%02X", ifr.ifr_name, msg.msg_head.can_id, msg.frames.can_dlc, - msg.frames.data[0], msg.frames.data[1], msg.frames.data[2], msg.frames.data[3], msg.frames.data[4], msg.frames.data[5], msg.frames.data[6], msg.frames.data[7]); - - cm = ::can_message_t::convert_from_frame(msg.frames , nbytes-sizeof(struct bcm_msg_head)); - - return s; - } } \ No newline at end of file