From 4ca84d789329dc41aee1bd84a079f13f3d52bf10 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Thu, 1 Jun 2017 15:55:53 +0200 Subject: Fix: Frequency filter doesn't apply on diagnostic As socket isn't managed by low_can_susbcription yet, create_rx_filter was just using signal frequency setting. Now, it take the frequency asked in argument if provided. Change-Id: If44458b2b0e34df44337670dd9a5b2b58324bfbe Signed-off-by: Romain Forlot --- CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp | 10 +++++----- CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp index 9b7bf9bd..826d26ba 100644 --- a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp +++ b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp @@ -82,16 +82,17 @@ void diagnostic_manager_t::reset() /// listens on CAN ID range 7E8 - 7EF affected to the OBD2 communications. /// /// @return -1 or negative value on error, 0 if ok. -int diagnostic_manager_t::create_rx_filter(uint32_t can_id) +int diagnostic_manager_t::create_rx_filter(uint32_t can_id, float frequency) { // Make sure that socket has been opened. if(! socket_) socket_.open(get_bus_device_name()); struct utils::simple_bcm_msg bcm_msg; - memset(&bcm_msg.msg_head, 0, sizeof(bcm_msg.msg_head)); + memset(&bcm_msg, 0, sizeof(bcm_msg)); - const struct timeval freq = recurring_requests_.back()->get_timeout_clock().get_timeval_from_period(); + const struct timeval freq = (frequency == recurring_requests_.back()->get_frequency_clock().get_frequency() ) ? + recurring_requests_.back()->get_frequency_clock().get_timeval_from_period() : frequency_clock_t(frequency).get_timeval_from_period(); bcm_msg.msg_head.opcode = RX_SETUP; bcm_msg.msg_head.flags = SETTIMER|RX_FILTER_ID; @@ -456,8 +457,7 @@ active_diagnostic_request_t* diagnostic_manager_t::add_recurring_request(Diagnos recurring_requests_.push_back(entry); entry->set_handle(shims_, request); - if(create_rx_filter(OBD2_FUNCTIONAL_BROADCAST_ID) < 0) - { recurring_requests_.pop_back(); } + if(create_rx_filter(OBD2_FUNCTIONAL_BROADCAST_ID, frequencyHz) < 0) else { start_diagnostic_request(&shims_, entry->get_handle()); diff --git a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp index bb7fbfa0..0d5db698 100644 --- a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp +++ b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp @@ -56,7 +56,7 @@ private: void init_diagnostic_shims(); void reset(); - int create_rx_filter(uint32_t can_id); + int create_rx_filter(uint32_t can_id, float frequency); static bool shims_send(const uint32_t arbitration_id, const uint8_t* data, const uint8_t size); static void shims_logger(const char* m, ...); -- cgit 1.2.3-korg