X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=low-can-binding%2Futils%2Fsocketcan-j1939%2Fsocketcan-j1939.cpp;h=8ce16fbd18914777be301c112661b686566227d3;hb=cb7af6003d51852dc4d5db84da66c7d761b45f4a;hp=bb74c7666c95339daf6e10ab875b166326c0731b;hpb=4bc8984b3b1f531e9d43a09317485a301a9f5379;p=apps%2Fagl-service-can-low-level.git diff --git a/low-can-binding/utils/socketcan-j1939/socketcan-j1939.cpp b/low-can-binding/utils/socketcan-j1939/socketcan-j1939.cpp index bb74c766..8ce16fbd 100644 --- a/low-can-binding/utils/socketcan-j1939/socketcan-j1939.cpp +++ b/low-can-binding/utils/socketcan-j1939/socketcan-j1939.cpp @@ -21,6 +21,7 @@ #include #include #include + #include "./socketcan-j1939.hpp" #include "socketcan-j1939-addressclaiming.hpp" @@ -50,12 +51,9 @@ namespace utils { filter.name = name; if(name_mask != J1939_NO_NAME) - { filter.name_mask = name_mask; - } else - { + else filter.name_mask = ~0ULL; - } ++filter_on; } @@ -63,30 +61,25 @@ namespace utils { filter.addr = addr; if(addr_mask != J1939_NO_ADDR) - { filter.addr_mask = addr_mask; - } else - { + else filter.addr_mask = ~0; - } + ++filter_on; } if (pgn <= J1939_PGN_MAX) { filter.pgn = pgn; if(pgn_mask != J1939_NO_PGN) - { filter.pgn_mask = pgn_mask; - } else - { + else filter.pgn_mask = ~0; - } + ++filter_on; } + if(filter_on) - { setopt(SOL_CAN_J1939, SO_J1939_FILTER, &filter, sizeof(filter)); - } } /** @@ -98,16 +91,12 @@ namespace utils */ void socketcan_j1939_t::define_opt(bool promisc, bool recv_own_msgs, bool broadcast) { - int promisc_i = 0; - int recv_own_msgs_i = 0; - int broadcast_i = 0; - - if(promisc) promisc_i = 1; - if(recv_own_msgs) recv_own_msgs_i=1; - if(broadcast) broadcast_i = 1; + int promisc_i = promisc ? 1 : 0; + //int recv_own_msgs_i = recv_own_msgs ? 1 : 0; + int broadcast_i = broadcast ? 1 : 0; setopt(SOL_CAN_J1939, SO_J1939_PROMISC, &promisc_i, sizeof(promisc_i)); - setopt(SOL_CAN_J1939, SO_J1939_RECV_OWN, &recv_own_msgs_i, sizeof(recv_own_msgs_i)); + //setopt(SOL_CAN_J1939, SO_J1939_RECV_OWN, &recv_own_msgs_i, sizeof(recv_own_msgs_i)); setopt(SOL_SOCKET, SO_BROADCAST, &broadcast_i, sizeof(broadcast_i)); } @@ -141,32 +130,18 @@ namespace utils if(addr <= 0 || addr >= UINT8_MAX ) - { tx_address_.can_addr.j1939.addr = J1939_NO_ADDR; - } else - { tx_address_.can_addr.j1939.addr = addr; - } - if(name <= 0 || name >= UINT64_MAX ) - { tx_address_.can_addr.j1939.name = J1939_NO_NAME; - } else - { tx_address_.can_addr.j1939.name = name; - } if(pgn <= 0 || pgn > J1939_PGN_MAX) - { tx_address_.can_addr.j1939.pgn = J1939_NO_PGN; - } else - { tx_address_.can_addr.j1939.pgn = pgn; - } - } @@ -233,9 +208,8 @@ namespace utils ssize_t nbytes = recvfrom(socket_, &data, sizeof(data), flag, (struct sockaddr *)&peername, &peernamelen); if(nbytes < 0) - { return nullptr; - } + //AFB_DEBUG("Data available: %i bytes read", (int)nbytes); struct timeval tv; @@ -256,7 +230,7 @@ namespace utils */ int socketcan_j1939_t::write_j1939_message(pgn_t pgn, std::vector &data, uint32_t len_data) { - j1939_message_t msg = j1939_message_t(J1939_MAX_DLEN, len_data, message_format_t::J1939, data, 0, 0, pgn, 0); + j1939_message_t msg = j1939_message_t(len_data, data, 0, 0, pgn, 0); msg.set_sockname(pgn,J1939_NO_NAME,J1939_NO_ADDR); return write_message(msg); } @@ -274,9 +248,7 @@ namespace utils uint8_t data[jm.get_data_vector().size()]; for(int i=0; i