diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2017-06-02 19:45:01 +0200 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2017-06-02 19:45:01 +0200 |
commit | 4ab2164774bdb9a29b2f180a9013c26c0155628d (patch) | |
tree | eb2e92eb8270c6556f58c1fa21d0159a76d4f8b9 /CAN-binder/low-can-binding/binding/low-can-cb.hpp | |
parent | 7929a62962cff8bbb456bd0c3761dc68afc3d766 (diff) |
Get diag manager's socket into subscription obj
Subscription index map is the socket ID which implies the following:
- All diagnostic messages subscriptions are stored into a vector
holding diagnostic_message and there is 1 socket for all like the
diag manager did.
- Reworked workflow to open a BCM socket and adding an RX filter more flexible.
- Separated methods to handle on_no_clients event.
- Cleaning diagnostic manager code to remove all unneeded stuff now.
- Embed diagnostic response in VehicleMessage decoded message to be able
transmits the PID in event push thread. This is needed by to correctly handle case
when there is no clients subscribed to an AFB event. Else we can't find
the diagnostic message to remove from low_can_subscription vector.
Change-Id: Iab13fd556cda3c69827bcd67f3a23a03cb6a2cf2
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'CAN-binder/low-can-binding/binding/low-can-cb.hpp')
-rw-r--r-- | CAN-binder/low-can-binding/binding/low-can-cb.hpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/CAN-binder/low-can-binding/binding/low-can-cb.hpp b/CAN-binder/low-can-binding/binding/low-can-cb.hpp index 3975c679..0efde63a 100644 --- a/CAN-binder/low-can-binding/binding/low-can-cb.hpp +++ b/CAN-binder/low-can-binding/binding/low-can-cb.hpp @@ -41,7 +41,7 @@ private: /// Signal part std::shared_ptr<can_signal_t> can_signal_; - std::shared_ptr<diagnostic_message_t> diagnostic_message_; + std::vector<std::shared_ptr<diagnostic_message_t> > diagnostic_message_; /// Filtering part struct event_filter_t event_filter_; @@ -50,9 +50,9 @@ private: public: low_can_subscription_t(); low_can_subscription_t(struct event_filter_t event_filter); - low_can_subscription_t(struct event_filter_t event_filter, std::shared_ptr<diagnostic_message_t> diagnostic_message); low_can_subscription_t(const low_can_subscription_t& s) = delete; low_can_subscription_t(low_can_subscription_t&& s); + ~low_can_subscription_t(); low_can_subscription_t& operator=(const low_can_subscription_t& s); explicit operator bool() const; @@ -60,8 +60,11 @@ public: int get_index() const; struct afb_event& get_event(); const std::shared_ptr<can_signal_t> get_can_signal() const; - const std::shared_ptr<diagnostic_message_t> get_diagnostic_message() const; + const std::shared_ptr<diagnostic_message_t> get_diagnostic_message(uint32_t pid) const; + const std::vector<std::shared_ptr<diagnostic_message_t> > get_diagnostic_message() const; + const std::shared_ptr<diagnostic_message_t> get_diagnostic_message(const std::string& name) const; const std::string get_name() const; + const std::string get_name(uint32_t pid) const; float get_frequency() const; float get_min() const; float get_max() const; @@ -72,6 +75,11 @@ public: void set_min(float min); void set_max(float max); + struct utils::simple_bcm_msg make_bcm_head(uint32_t can_id, uint32_t flags, const struct timeval& timeout, const struct timeval& frequency_thinning) const; + void add_bcm_frame(const struct can_frame& cfd, struct utils::simple_bcm_msg& bcm_msg) const; + int open_socket(); int create_rx_filter(); int create_rx_filter(std::shared_ptr<can_signal_t> sig); + int create_rx_filter(std::shared_ptr<diagnostic_message_t> sig); + int create_rx_filter(utils::simple_bcm_msg& bcm_msg); }; |