X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=low-can-binding%2Fdiagnostic%2Fdiagnostic-message.hpp;h=eb527aa5dc555af482d4cd80ec2486c9e9166318;hb=f83aef543d0196a56bf4d7706bba79efcd73190d;hp=064904d2cd43d0338dd5f23a008f7f0bdd755e14;hpb=a58d40b5ae336a54408201963b065ee049b43acd;p=apps%2Fagl-service-can-low-level.git diff --git a/low-can-binding/diagnostic/diagnostic-message.hpp b/low-can-binding/diagnostic/diagnostic-message.hpp index 064904d2..eb527aa5 100644 --- a/low-can-binding/diagnostic/diagnostic-message.hpp +++ b/low-can-binding/diagnostic/diagnostic-message.hpp @@ -21,7 +21,8 @@ #include #include "uds/uds.h" -#include "../can/can-message.hpp" +#include "../can/message-set.hpp" +#include "../can/message/can-message.hpp" #include "active-diagnostic-request.hpp" enum UNIT { @@ -38,11 +39,13 @@ enum UNIT { INVALID }; -/// -/// @brief - A representation of an OBD-II PID. -/// -class diagnostic_message_t { +class message_set_t; + +/// @brief - A representation of an OBD-II PID Mode 01 (Note : An OBD-II PID mode 01 contains only one information). +class diagnostic_message_t +{ private: + std::shared_ptr parent_; /*!< parent_ - Pointer to the CAN message set holding this diagnostic message */ uint8_t pid_; /*!< pid_ - The 1 byte PID.*/ std::string generic_name_; /*!< generic_name_ - A human readable name to use for this PID when published.*/ int min_; /*!< min_ - Minimum value that can take this pid */ @@ -57,22 +60,45 @@ class diagnostic_message_t { bool supported_; /*!< supported_ - boolean indicating whether this pid is supported by the vehicle or not.*/ + uint64_t last_timestamp_; /*!< last_timestamp_ - the last time (in microseconds since epoch) + * that the message has been received. */ + + bool received_; /*!< received_ - True if this signal has ever been received. */ + float last_value_; /*!< last_value_ - The last received value of the diagnostic message. + * If 'received_' is false, this value is undefined. */ + public: const char* generic_name = generic_name_.c_str(); - diagnostic_message_t(uint8_t pid, const std::string generic_name, const int min, const int max, enum UNIT unit, float frequency, - DiagnosticResponseDecoder decoder, DiagnosticResponseCallback callback, bool supported); + diagnostic_message_t(uint8_t pid, + const std::string& generic_name, + const int min, + const int max, + enum UNIT unit, + float frequency, + DiagnosticResponseDecoder decoder, + DiagnosticResponseCallback callback, + bool supported, + bool received); uint32_t get_pid(); - const std::string& get_generic_name() const; + const std::string get_generic_name() const; const std::string get_name() const; float get_frequency() const; DiagnosticResponseDecoder get_decoder() const; DiagnosticResponseCallback get_callback() const; bool get_supported() const; - void set_supported(bool value); + bool get_received() const; + float get_last_value() const; + std::pair get_last_value_with_timestamp() const; + + void set_received(bool r); + void set_last_value(float val); + void set_timestamp(uint64_t timestamp); - const DiagnosticRequest build_diagnostic_request(); + void set_supported(bool value); + void set_parent(std::shared_ptr parent); + const DiagnosticRequest build_diagnostic_request() const; bool is_obd2_response(const can_message_t& can_message); bool is_obd2_request(const DiagnosticRequest *request);