diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2017-06-01 15:55:53 +0200 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2017-06-01 18:40:13 +0200 |
commit | 4ca84d789329dc41aee1bd84a079f13f3d52bf10 (patch) | |
tree | 0d08f038f05e418eab095b07c663f19cf5767e1c /CAN-binder | |
parent | 7f6c164aae3e7dbc558f21679b29c0a2d9d09e21 (diff) |
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 <romain.forlot@iot.bzh>
Diffstat (limited to 'CAN-binder')
-rw-r--r-- | CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp | 10 | ||||
-rw-r--r-- | 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 9b7bf9b..826d26b 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 bb7fbfa..0d5db69 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, ...); |