X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fdiagnostic%2Factive-diagnostic-request.cpp;h=7ddf1d5184348e5e7cbb7b49efc4c9de5de5cd04;hb=3aa89d6f3d38ce0513d8698f2ae7b23f8c6edfb9;hp=762cb61c00d731310f878279a3a36d70f83c810e;hpb=7f041a55908c503037df4e3848d325dfdfee6c87;p=apps%2Flow-level-can-service.git diff --git a/src/diagnostic/active-diagnostic-request.cpp b/src/diagnostic/active-diagnostic-request.cpp index 762cb61..7ddf1d5 100644 --- a/src/diagnostic/active-diagnostic-request.cpp +++ b/src/diagnostic/active-diagnostic-request.cpp @@ -15,15 +15,20 @@ * limitations under the License. */ +#include #include #include "active-diagnostic-request.hpp" +#include "../configuration.hpp" + +#define ERROR_PID 0xFF + std::string active_diagnostic_request_t::prefix_ = "diagnostic_messages"; bool active_diagnostic_request_t::operator==(const active_diagnostic_request_t& b) { - return (bus_ == b.bus_ && id_ == b.id_ && handle_ == b.handle_) ? true : false; + return (bus_ == b.bus_ && id_ == b.id_ && handle_ == b.handle_); } active_diagnostic_request_t& active_diagnostic_request_t::operator=(const active_diagnostic_request_t& adr) @@ -52,9 +57,8 @@ 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(std::shared_ptr bus, DiagnosticRequest* request, - const std::string& name, bool wait_for_multiple_responses, - const DiagnosticResponseDecoder decoder, +active_diagnostic_request_t::active_diagnostic_request_t(const std::string& bus, DiagnosticRequest* request, + const std::string& name, bool wait_for_multiple_responses, const DiagnosticResponseDecoder decoder, const DiagnosticResponseCallback callback, float frequencyHz) : bus_{bus}, id_{request->arbitration_id}, handle_{nullptr}, name_{name}, decoder_{decoder}, callback_{callback}, recurring_{frequencyHz ? true : false}, wait_for_multiple_responses_{wait_for_multiple_responses}, @@ -66,9 +70,16 @@ uint32_t active_diagnostic_request_t::get_id() const return id_; } -std::shared_ptr active_diagnostic_request_t::get_can_bus_dev() +const std::shared_ptr active_diagnostic_request_t::get_can_bus_dev() const +{ + return can_bus_t::get_can_device(bus_); +} + +uint16_t active_diagnostic_request_t::get_pid() const { - return bus_; + if (handle_->request.has_pid) + return handle_->request.pid; + return ERROR_PID; } DiagnosticRequestHandle* active_diagnostic_request_t::get_handle() @@ -76,7 +87,7 @@ DiagnosticRequestHandle* active_diagnostic_request_t::get_handle() return handle_; } -std::string& active_diagnostic_request_t::get_name() +const std::string active_diagnostic_request_t::get_name() const { return name_; } @@ -126,11 +137,14 @@ void active_diagnostic_request_t::set_in_flight(bool val) in_flight_ = val; } -/** -* @brief Check if requested signal name is an obd2 pid -* -* @return true if name began with obd2 else false. -*/ +/// +/// @brief Check if requested signal name is a diagnostic message. If the name +/// begin with the diagnostic message prefix then true else false. +/// +/// @param[in] name - A signal name. +/// +/// @return true if name began with the diagnostic message prefix else false. +/// bool active_diagnostic_request_t::is_diagnostic_signal(const std::string& name) { const std::string p = active_diagnostic_request_t::prefix_ + "*"; @@ -139,13 +153,20 @@ bool active_diagnostic_request_t::is_diagnostic_signal(const std::string& name) return false; } +/// @brief Check is the request should be sent or not +/// +/// @return true if the request is not running or recurring nor completed, +/// or it's recurring, its clock elapsed +/// so it's time to send another one. bool active_diagnostic_request_t::should_send() { - return !get_in_flight() && ( - (!get_recurring() && !request_completed()) || - (get_recurring() && get_frequency_clock().elapsed(true))); + return !in_flight_ && ( (!recurring_ && !request_completed()) || + (recurring_ && frequency_clock_.elapsed(true)) ); } +/// @brief check if the timeout clock has elapsed +/// +/// @return true if elapsed, so it is a timeout, else false. bool active_diagnostic_request_t::timed_out() { // don't use staggered start with the timeout clock