Change method returned value. Needed with send_request()
[apps/low-level-can-service.git] / src / diagnostic / active-diagnostic-request.cpp
index baa1184..7a43a0d 100644 (file)
@@ -48,7 +48,7 @@ active_diagnostic_request_t::active_diagnostic_request_t()
          in_flight_{false}, frequency_clock_{frequency_clock_t()}, timeout_clock_{frequency_clock_t()}
 {}
 
-active_diagnostic_request_t::active_diagnostic_request_t(can_bus_dev_t* bus, DiagnosticRequest* request,
+active_diagnostic_request_t::active_diagnostic_request_t(std::shared_ptr<can_bus_dev_t> bus, DiagnosticRequest* request,
                const std::string& name, bool wait_for_multiple_responses,
                const DiagnosticResponseDecoder decoder,
                const DiagnosticResponseCallback callback, float frequencyHz)
@@ -57,7 +57,12 @@ active_diagnostic_request_t::active_diagnostic_request_t(can_bus_dev_t* bus, Dia
          in_flight_{false}, frequency_clock_{frequency_clock_t(frequencyHz)}, timeout_clock_{frequency_clock_t(10)}
 {}
 
-can_bus_dev_t* active_diagnostic_request_t::get_can_bus_dev()
+uint32_t active_diagnostic_request_t::get_id() const
+{
+       return id_;
+}
+
+std::shared_ptr<can_bus_dev_t> active_diagnostic_request_t::get_can_bus_dev()
 {
        return bus_;
 }
@@ -77,6 +82,16 @@ bool active_diagnostic_request_t::get_in_flight() const
        return in_flight_;
 }
 
+frequency_clock_t& active_diagnostic_request_t::get_frequency_clock()
+{
+       return frequency_clock_;
+}
+
+frequency_clock_t& active_diagnostic_request_t::get_timeout_clock()
+{
+       return timeout_clock_;
+}
+
 void active_diagnostic_request_t::set_handle(DiagnosticShims& shims, DiagnosticRequest* request)
 {
        handle_ = new DiagnosticRequestHandle(generate_diagnostic_request(&shims, request, nullptr));
@@ -87,6 +102,13 @@ void active_diagnostic_request_t::set_in_flight(bool val)
        in_flight_ = val;
 }
 
+bool active_diagnostic_request_t::should_send()
+{
+       return !get_in_flight() && (
+                       (!get_recurring() && !request_completed()) ||
+                       (get_recurring() && get_frequency_clock().elapsed(true)));
+}
+
 bool active_diagnostic_request_t::timed_out()
 {
        // don't use staggered start with the timeout clock