diff options
Diffstat (limited to 'CAN-binder/low-can-binding/binding')
-rw-r--r-- | CAN-binder/low-can-binding/binding/low-can-cb.cpp | 30 | ||||
-rw-r--r-- | CAN-binder/low-can-binding/binding/low-can-cb.hpp | 3 |
2 files changed, 23 insertions, 10 deletions
diff --git a/CAN-binder/low-can-binding/binding/low-can-cb.cpp b/CAN-binder/low-can-binding/binding/low-can-cb.cpp index 5f245463..6504acf7 100644 --- a/CAN-binder/low-can-binding/binding/low-can-cb.cpp +++ b/CAN-binder/low-can-binding/binding/low-can-cb.cpp @@ -80,6 +80,11 @@ low_can_subscription_t::operator bool() const return socket_.socket() != INVALID_SOCKET; } +struct afb_event& low_can_subscription_t::get_event() +{ + return event_; +} + int low_can_subscription_t::get_index() const { return index_; @@ -120,6 +125,11 @@ utils::socketcan_bcm_t& low_can_subscription_t::get_socket() return socket_; } +void low_can_subscription_t::set_event(struct afb_event event) +{ + event_ = event; +} + void low_can_subscription_t::set_frequency(float freq) { event_filter_.frequency = freq; @@ -266,10 +276,10 @@ int read_message(sd_event_source *s, int fd, uint32_t revents, void *userdata) /// ///*******************************************************************************/ -static int make_subscription_unsubscription(struct afb_req request, std::shared_ptr<low_can_subscription_t>& can_subscription, std::map<int, std::pair<std::shared_ptr<low_can_subscription_t>, struct afb_event> >& s, bool subscribe) +static int make_subscription_unsubscription(struct afb_req request, std::shared_ptr<low_can_subscription_t>& can_subscription, std::map<int, std::shared_ptr<low_can_subscription_t> >& s, bool subscribe) { /* Make the subscription or unsubscription to the event */ - if (((subscribe ? afb_req_subscribe : afb_req_unsubscribe)(request, s[can_subscription->get_index()].second)) < 0) + if (((subscribe ? afb_req_subscribe : afb_req_unsubscribe)(request, s[can_subscription->get_index()]->get_event())) < 0) { ERROR(binder_interface, "%s: Operation goes wrong for signal: %s", __FUNCTION__, can_subscription->get_name().c_str()); return -1; @@ -277,12 +287,12 @@ static int make_subscription_unsubscription(struct afb_req request, std::shared_ return 0; } -static int create_event_handle(std::shared_ptr<low_can_subscription_t>& can_subscription, std::map<int, std::pair<std::shared_ptr<low_can_subscription_t>, struct afb_event> >& s) +static int create_event_handle(std::shared_ptr<low_can_subscription_t>& can_subscription, std::map<int, std::shared_ptr<low_can_subscription_t> >& s) { int sub_index = can_subscription->get_index(); - struct afb_event event = afb_daemon_make_event(binder_interface->daemon, can_subscription->get_name().c_str()); - s[sub_index] = std::make_pair(can_subscription, event); - if (!afb_event_is_valid(s[sub_index].second)) + can_subscription->set_event(afb_daemon_make_event(binder_interface->daemon, can_subscription->get_name().c_str())); + s[sub_index] = can_subscription; + if (!afb_event_is_valid(s[sub_index]->get_event())) { ERROR(binder_interface, "%s: Can't create an event for %s, something goes wrong.", __FUNCTION__, can_subscription->get_name().c_str()); return -1; @@ -300,10 +310,10 @@ static int subscribe_unsubscribe_signal(struct afb_req request, bool subscribe, utils::signals_manager_t& sm = utils::signals_manager_t::instance(); std::lock_guard<std::mutex> subscribed_signals_lock(sm.get_subscribed_signals_mutex()); - std::map<int, std::pair<std::shared_ptr<low_can_subscription_t>, struct afb_event> >& s = sm.get_subscribed_signals(); + std::map<int, std::shared_ptr<low_can_subscription_t> >& s = sm.get_subscribed_signals(); if (can_subscription && s.find(sub_index) != s.end()) { - if (!afb_event_is_valid(s[sub_index].second) && !subscribe) + if (!afb_event_is_valid(s[sub_index]->get_event()) && !subscribe) { NOTICE(binder_interface, "%s: Event isn't valid, no need to unsubscribed.", __FUNCTION__); ret = -1; @@ -317,8 +327,8 @@ static int subscribe_unsubscribe_signal(struct afb_req request, bool subscribe, else { /* Event doesn't exist , so let's create it */ - struct afb_event empty_event = {nullptr, nullptr}; - s[sub_index] = std::make_pair(can_subscription, empty_event); + can_subscription->set_event({nullptr, nullptr}); + s[sub_index] = can_subscription; ret = create_event_handle(can_subscription, s); } 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 0f276fb7..ad3f74fe 100644 --- a/CAN-binder/low-can-binding/binding/low-can-cb.hpp +++ b/CAN-binder/low-can-binding/binding/low-can-cb.hpp @@ -37,6 +37,7 @@ class low_can_subscription_t { private: int index_; + struct afb_event event_; /// Signal part std::shared_ptr<can_signal_t> can_signal_; @@ -57,6 +58,7 @@ public: explicit operator bool() const; int get_index() const; + struct afb_event& get_event(); const std::shared_ptr<can_signal_t> get_can_signal() const; const std::string get_name() const; float get_frequency() const; @@ -64,6 +66,7 @@ public: float get_max() const; utils::socketcan_bcm_t& get_socket(); + void set_event(struct afb_event event); void set_frequency(float freq); void set_min(float min); void set_max(float max); |