From: Arthur Guyader Date: Mon, 16 Dec 2019 09:13:01 +0000 (+0100) Subject: low_can_subscription: Add msg_def and create_rx for message X-Git-Tag: 8.99.5~13 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=8c1df02d734676f79807e3a4682fb96ea88c5cb5;p=apps%2Fagl-service-can-low-level.git low_can_subscription: Add msg_def and create_rx for message This commit adds message_definition variable to subscribe to message and not signals. And the function that init rx_filter for message. Also patch the error message Change-Id: I98b0b4dc8fec6ccef6e103fcb8aae136f708aa16 Signed-off-by: Arthur Guyader Signed-off-by: Romain Forlot --- diff --git a/low-can-binding/binding/low-can-subscription.cpp b/low-can-binding/binding/low-can-subscription.cpp index 6cfcb718..99f209be 100644 --- a/low-can-binding/binding/low-can-subscription.cpp +++ b/low-can-binding/binding/low-can-subscription.cpp @@ -280,6 +280,11 @@ std::shared_ptr low_can_subscription_t::get_socket() return socket_; } +std::shared_ptr low_can_subscription_t::get_message_definition() +{ + return message_; +} + /** * @brief Setter for the frequency of the event_filter * @@ -355,6 +360,10 @@ void low_can_subscription_t::set_signal(std::shared_ptr signal) signal_ = signal; } +void low_can_subscription_t::set_message_definition(std::shared_ptr message) +{ + message_ = message; +} /// @brief Based upon which object is a subscribed CAN signal or diagnostic message /// it will open the socket with the required CAN bus device name. @@ -607,6 +616,35 @@ int low_can_subscription_t::create_rx_filter_can(low_can_subscription_t &subscri return create_rx_filter_bcm(subscription, bcm_msg); } + +int low_can_subscription_t::create_rx_filter(std::shared_ptr msg) +{ + std::shared_ptr signal_message = + std::make_shared(signal_t{msg->get_name(), + 0, + msg->get_length() * 8, + 1.00000f, + 0.00000f, + 0, + 0, + frequency_clock_t(0.00000f), + true, + false, + {}, + true, + nullptr, + nullptr, + false, + std::make_pair(false, 0), + static_cast(0), + -1, + ""}); + + signal_message->set_parent(msg); + return create_rx_filter(signal_message); +} + + /** * @brief Create the good socket to read message * depending on the signal @@ -626,7 +664,7 @@ int low_can_subscription_t::create_rx_filter(std::shared_ptr sig) else if(sig->get_message()->is_j1939()) return low_can_subscription_t::create_rx_filter_j1939(*this, sig); #endif - AFB_ERROR("Signal can't be j1939 and isotp"); + AFB_ERROR("Signal can't be created (check config)"); return -1; } diff --git a/low-can-binding/binding/low-can-subscription.hpp b/low-can-binding/binding/low-can-subscription.hpp index 972b6d61..df978861 100644 --- a/low-can-binding/binding/low-can-subscription.hpp +++ b/low-can-binding/binding/low-can-subscription.hpp @@ -56,6 +56,7 @@ private: afb_event_t event_; ///< event_ - application framework event used to push on client /// Signal part + std::shared_ptr message_; std::shared_ptr signal_; ///< signal_ - the CAN signal subscribed vect_ptr_diag_msg_t diagnostic_message_; ///< diagnostic_message_ - diagnostic messages meant to receive OBD2 /// responses. Normal diagnostic request and response are not tested for now. @@ -92,6 +93,7 @@ public: canid_t get_rx_id() const; canid_t get_tx_id() const; std::shared_ptr get_socket(); + std::shared_ptr get_message_definition(); void set_frequency(float freq); void set_min(float min); @@ -101,6 +103,7 @@ public: void set_rx_id(canid_t rx_id); void set_tx_id(canid_t tx_id); void set_signal(std::shared_ptr signal); + void set_message_definition(std::shared_ptr message); static struct bcm_msg make_bcm_head(uint32_t opcode, uint32_t can_id = 0, uint32_t flags = 0, const struct timeval& timeout = {0, 0}, const struct timeval& frequency_thinning = {0, 0}); static void add_one_bcm_frame(struct canfd_frame& cfd, struct bcm_msg& bcm_msg); @@ -109,6 +112,7 @@ public: static int open_socket(low_can_subscription_t &subscription, const std::string& bus_name = "", uint32_t flags = INVALID_FLAG); int create_rx_filter(std::shared_ptr sig); + int create_rx_filter(std::shared_ptr msg); int create_rx_filter(std::shared_ptr sig); static int create_rx_filter_can(low_can_subscription_t &subscription, std::shared_ptr sig); static int create_rx_filter_j1939(low_can_subscription_t &subscription, std::shared_ptr sig);