diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2017-03-02 22:32:53 +0100 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2017-03-02 22:32:53 +0100 |
commit | 17710741242f40c91edb28f29d6e5ef943a4c41b (patch) | |
tree | f062ead4681a8428960c5eb3a5bbacce51bf90c5 /src/can-signals.hpp | |
parent | dff88d0ddd9054add5b8f0760e8e12c27c65c8eb (diff) |
Fix: multiple subscription and maintain subscribed_signals coherence
across usage.
- Transmission of a reference instead of copy.
- Don't use anymore iterator on subscribed_signals map
Change-Id: I5e5b7b0bb8598be3bb0ec59c29418ee937ddcc9e
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'src/can-signals.hpp')
-rw-r--r-- | src/can-signals.hpp | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/src/can-signals.hpp b/src/can-signals.hpp index a6248f29..a95b3a3a 100644 --- a/src/can-signals.hpp +++ b/src/can-signals.hpp @@ -36,19 +36,18 @@ extern "C" #define MESSAGE_SET_ID 0 -/** - * @brief Can signal event map making access to afb_event - * externaly to an openxc existing structure. - * - * @desc Event map is making relation between CanSignal generic name - * and the afb_event struct used by application framework to pushed - * to the subscriber. - */ -static std::map<std::string, struct afb_event> subscribed_signals; - +extern std::mutex subscribed_signals_mutex; std::mutex& get_subscribed_signals_mutex(); /** + * @brief return the subscribed_signals map. + * + * return std::map<std::string, struct afb_event> - map of subscribed signals. + */ +extern std::map<std::string, struct afb_event> subscribed_signals; +std::map<std::string, struct afb_event>& get_subscribed_signals(); + +/** * @brief The type signature for a CAN signal decoder. * * @desc A SignalDecoder transforms a raw floating point CAN signal into a number, @@ -135,7 +134,7 @@ typedef struct CanSignal CanSignal; /* Public: Return signals from an signals array filtered on name. */ -const std::vector<CanSignal> getSignals(); +const std::vector<CanSignal>& getSignals(); /* Public: Return the length of the array returned by getSignals(). */ size_t getSignalCount(); @@ -158,11 +157,4 @@ std::vector<CanSignal> find_can_signals(const openxc_DynamicField &key); * * @return uint32_t - unsigned integer representing the arbitration id. */ -inline uint32_t get_CanSignal_id(const CanSignal& sig); - -/** - * @brief return the subscribed_signals map. - * - * return std::map<std::string, struct afb_event> - map of subscribed signals. - */ -const std::map<std::string, struct afb_event> get_subscribed_signals();
\ No newline at end of file +inline uint32_t get_CanSignal_id(const CanSignal& sig);
\ No newline at end of file |