X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=low-can-binding%2Fdiagnostic%2Fdiagnostic-message.hpp;h=eb527aa5dc555af482d4cd80ec2486c9e9166318;hb=1f57e04d955877654ce4ac055dbb533281ce4af5;hp=99c481108feb5f3ef9f7eae5e94ab6f9d03f1796;hpb=32e25cbca210a359b09768537b6f443fe90a3070;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 99c48110..eb527aa5 100644 --- a/low-can-binding/diagnostic/diagnostic-message.hpp +++ b/low-can-binding/diagnostic/diagnostic-message.hpp @@ -21,8 +21,8 @@ #include #include "uds/uds.h" -#include "../can/can-message-set.hpp" -#include "../can/can-message.hpp" +#include "../can/message-set.hpp" +#include "../can/message/can-message.hpp" #include "active-diagnostic-request.hpp" enum UNIT { @@ -39,13 +39,13 @@ enum UNIT { INVALID }; -class can_message_set_t; +class message_set_t; -/// @brief - A representation of an OBD-II PID. +/// @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: - can_message_set_t* parent_; /*!< parent_ - Pointer to the CAN message set holding this diagnostic message */ + 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 */ @@ -60,10 +60,25 @@ 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; @@ -73,8 +88,16 @@ class diagnostic_message_t DiagnosticResponseCallback get_callback() const; bool get_supported() const; + 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); + void set_supported(bool value); - void set_parent(can_message_set_t* parent); + void set_parent(std::shared_ptr parent); const DiagnosticRequest build_diagnostic_request() const; bool is_obd2_response(const can_message_t& can_message);