X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=low-can-binding%2Fbinding%2Flow-can-socket.hpp;h=d46f1f8cb44be721f598cb02596f0dad9b86abc8;hb=ea35eabeadce57e4f5015797fea530c5bb219fff;hp=3621a3d67bb7fd05482c6851ab696d0b61f5541a;hpb=3a0d2a4a74e548c3ef19b19c72bf28a3da8796bf;p=apps%2Fagl-service-can-low-level.git diff --git a/low-can-binding/binding/low-can-socket.hpp b/low-can-binding/binding/low-can-socket.hpp index 3621a3d6..d46f1f8c 100644 --- a/low-can-binding/binding/low-can-socket.hpp +++ b/low-can-binding/binding/low-can-socket.hpp @@ -25,18 +25,23 @@ #include "../diagnostic/diagnostic-message.hpp" #include "../utils/socketcan-bcm.hpp" -/// @brief Filtering values. Theses values has to be tested into +#define OBDII_MAX_SIMULTANEOUS_RESPONSES 8 + +/// @brief Filtering values. Theses values have to be tested in /// can_bus_t::apply_filter method. struct event_filter_t { - float frequency; ///< frequency - Maximum frequency which will be received and pushed a subscribed event. - float min; ///< min - Minimum value that the signal don't have to go below to be pushed. - float max; ///< max - Maximum value that the signal don't have to go above to be pushed. - event_filter_t() : frequency{NAN}, min{NAN}, max{NAN} {} + float frequency; ///< frequency - Maximum frequency which will be received and pushed to a subscribed event. + float min; ///< min - Minimum value that the signal doesn't have to go below to be pushed. + float max; ///< max - Maximum value that the signal doesn't have to go above to be pushed. + event_filter_t() : frequency{0}, min{-__FLT_MAX__}, max{__FLT_MAX__} {}; + bool operator==(const event_filter_t& ext) const { + return frequency == ext.frequency && min == ext.min && max == ext.max; + } }; -/// @brief An object storing socket to CAN to be used to write on it. -/// This is a simple access to a CAN bus device without subscriptions attached +/// @brief The object stores socket to CAN to be used to write on it. +/// This is a simple access to a CAN bus device without any subscriptions attached class low_can_socket_t { protected: @@ -45,8 +50,8 @@ protected: /// Signal part std::shared_ptr can_signal_; ///< can_signal_ - the CAN signal subscribed - std::vector > diagnostic_message_; ///< diagnostic_message_ - diagnostic messages meant to received OBD2 responses. - /// normal diagnostic request and response not tested for now. + std::vector > diagnostic_message_; ///< diagnostic_message_ - diagnostic messages meant to receive OBD2 responses. + /// normal diagnostic request and response are not tested for now. utils::socketcan_bcm_t socket_; ///< socket_ - socket_ that receives CAN messages. @@ -62,6 +67,7 @@ public: int get_index() const; const std::shared_ptr get_can_signal() const; + bool is_signal_subscription_corresponding(const std::shared_ptr, const struct event_filter_t& event_filter) const; const std::shared_ptr get_diagnostic_message(uint32_t pid) const; const std::vector > get_diagnostic_message() const; const std::shared_ptr get_diagnostic_message(const std::string& name) const; @@ -72,19 +78,19 @@ public: float get_max() const; utils::socketcan_bcm_t& get_socket(); - void set_event(struct afb_event event); + void set_event(afb_event_t event); void set_frequency(float freq); void set_min(float min); void set_max(float max); - struct utils::simple_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}) const; - void add_bcm_frame(const struct can_frame& cfd, struct utils::simple_bcm_msg& bcm_msg) const; + struct utils::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}) const; + void add_one_bcm_frame(struct canfd_frame& cfd, struct utils::bcm_msg& bcm_msg) const; - int open_socket(); + int open_socket(const std::string& bus_name = ""); int create_rx_filter(std::shared_ptr sig); int create_rx_filter(std::shared_ptr sig); - int create_rx_filter(utils::simple_bcm_msg& bcm_msg); + int create_rx_filter(utils::bcm_msg& bcm_msg); - int tx_send(const struct can_frame& cf, std::shared_ptr sig = nullptr); + int tx_send(struct canfd_frame& cfd, const std::string& bus_name); };