X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=low-can-binding%2Fdiagnostic%2Fdiagnostic-manager.cpp;h=2b7fa9bacf8b02f1b43f8832e3ccc6b741054f31;hb=368c69724971ec73ac47bd1072204cddcc888355;hp=bc335dfc6b8dc393a39f81d60215074fa8040fb0;hpb=88befdfd812a58fb7a36e090278ad1e70003e925;p=apps%2Fagl-service-can-low-level.git diff --git a/low-can-binding/diagnostic/diagnostic-manager.cpp b/low-can-binding/diagnostic/diagnostic-manager.cpp index bc335dfc..2b7fa9ba 100644 --- a/low-can-binding/diagnostic/diagnostic-manager.cpp +++ b/low-can-binding/diagnostic/diagnostic-manager.cpp @@ -102,29 +102,33 @@ bool diagnostic_manager_t::shims_send(const uint32_t arbitration_id, const uint8 // Make sure that socket has been opened. if(! tx_socket) - tx_socket.open( - dm.get_bus_device_name()); + tx_socket.open(dm.get_bus_device_name()); - struct utils::simple_bcm_msg bcm_msg; - struct can_frame cfd; - - memset(&cfd, 0, sizeof(cfd)); - memset(&bcm_msg.msg_head, 0, sizeof(bcm_msg.msg_head)); + struct bcm_msg bcm_msg; + struct can_frame cf; struct timeval freq = current_adr->get_frequency_clock().get_timeval_from_period(); bcm_msg.msg_head.opcode = TX_SETUP; bcm_msg.msg_head.can_id = arbitration_id; bcm_msg.msg_head.flags = SETTIMER|STARTTIMER|TX_CP_CAN_ID; + bcm_msg.msg_head.count = 0; bcm_msg.msg_head.ival2.tv_sec = freq.tv_sec; bcm_msg.msg_head.ival2.tv_usec = freq.tv_usec; bcm_msg.msg_head.nframes = 1; - cfd.can_dlc = size; - ::memcpy(cfd.data, data, size); + cf.can_dlc = size; + + ::memset(cf.data, 0, sizeof(cf.data)); + ::memcpy(cf.data, data, size); + + bcm_msg.frames[0] = cf; + + + can_message_t msg = can_message_t(); - bcm_msg.frames = cfd; + msg.set_bcm_msg(bcm_msg); - tx_socket << bcm_msg; + tx_socket.write_message(msg); if(tx_socket) return true; return false; @@ -257,7 +261,7 @@ active_diagnostic_request_t* diagnostic_manager_t::find_recurring_request(Diagno } return nullptr; } - +/* /// @brief Add and send a new one-time diagnostic request. DON'T USED AT THIS TIME /// /// A one-time (aka non-recurring) request can existing in parallel with a @@ -314,7 +318,7 @@ active_diagnostic_request_t* diagnostic_manager_t::add_request(DiagnosticRequest } return entry; } - +*/ /// @brief Validate frequency asked don't get higher than the maximum of a classical /// CAN bus OBD2 request. /// @@ -467,13 +471,13 @@ openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_response(active_dia /// @param[in] cm - A raw CAN message. /// /// @return A pointer to a filled openxc_VehicleMessage or a nullptr if nothing has been found. -openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_handle(active_diagnostic_request_t* entry, const can_message_t& cm) +openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_handle(active_diagnostic_request_t* entry, std::shared_ptr m) { - DiagnosticResponse response = diagnostic_receive_can_frame(&shims_, entry->get_handle(), cm.get_id(), cm.get_data(), cm.get_length()); + DiagnosticResponse response = diagnostic_receive_can_frame(&shims_, entry->get_handle(), m->get_id(), m->get_data(), (uint8_t)m->get_length()); if(response.completed && entry->get_handle()->completed) { if(entry->get_handle()->success) - return relay_diagnostic_response(entry, response, cm.get_timestamp()); + return relay_diagnostic_response(entry, response, m->get_timestamp()); } else if(!response.completed && response.multi_frame) { @@ -492,20 +496,20 @@ openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_handle(active_diagn /// @param[in] cm - Raw CAN message received /// /// @return VehicleMessage with decoded value. -openxc_VehicleMessage diagnostic_manager_t::find_and_decode_adr(const can_message_t& cm) +openxc_VehicleMessage diagnostic_manager_t::find_and_decode_adr(std::shared_ptr m) { openxc_VehicleMessage vehicle_message = build_VehicleMessage(); for ( auto entry : non_recurring_requests_) { - vehicle_message = relay_diagnostic_handle(entry, cm); + vehicle_message = relay_diagnostic_handle(entry, m); if (is_valid(vehicle_message)) return vehicle_message; } for ( auto entry : recurring_requests_) { - vehicle_message = relay_diagnostic_handle(entry, cm); + vehicle_message = relay_diagnostic_handle(entry, m); if (is_valid(vehicle_message)) return vehicle_message; } @@ -520,9 +524,12 @@ openxc_VehicleMessage diagnostic_manager_t::find_and_decode_adr(const can_messag /// @param[in] cm - CAN message received from the socket. /// /// @return True if the active diagnostic request match the response. -bool diagnostic_manager_t::is_diagnostic_response(const can_message_t& cm) +bool diagnostic_manager_t::is_diagnostic_response(std::shared_ptr m) { - if (cm.get_id() >= 0x7e8 && cm.get_id() <= 0x7ef) - return true; + if(m->get_id() & CAN_SFF_MASK || m->get_id() & CAN_EFF_MASK) + { + if (m->get_id() >= 0x7e8 && m->get_id() <= 0x7ef) + return true; + } return false; }