Fix: clear pointer vector before fill it.
[apps/agl-service-can-low-level.git] / src / can-signals.hpp
index a6248f2..547769f 100644 (file)
@@ -23,6 +23,7 @@
 #include <vector>
 #include <string>
 
+#include "obd2-signals.hpp"
 #include "timer.hpp"
 #include "openxc.pb.h"
 #include "can-bus.hpp"
@@ -36,18 +37,17 @@ 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.
  *
@@ -100,7 +100,7 @@ typedef struct CanSignalState CanSignalState;
  */
 struct CanSignal {
        struct CanMessageDefinition* message; /*!< message         - The message this signal is a part of. */
-       const char* genericName; /*!< genericName - The name of the signal to be output over USB.*/
+       const char* generic_name; /*!< generic_name - The name of the signal to be output over USB.*/
        uint8_t bitPosition; /*!< bitPosition - The starting bit of the signal in its CAN message (assuming
                                                *       non-inverted bit numbering, i.e. the most significant bit of
                                                *       each byte is 0) */
@@ -135,9 +135,9 @@ typedef struct CanSignal CanSignal;
 
 /* Public: Return signals from an signals array filtered on name.
  */
-const std::vector<CanSignal> getSignals();
+std::vector<CanSignal>& get_can_signals();
 
-/* Public: Return the length of the array returned by getSignals(). */
+/* Public: Return the length of the array returned by get_can_signals(). */
 size_t getSignalCount();
 
 /**
@@ -149,7 +149,7 @@ size_t getSignalCount();
  *
  * @return std::vector<std::string> return found CanSignal generic name vector.
  */
-std::vector<CanSignal> find_can_signals(const openxc_DynamicField &key);
+void find_can_signals(const openxc_DynamicField &key, std::vector<CanSignal*>& found_signals);
 
 /**
  * @brief Retrieve can arbitration id of a given CanSignal
@@ -158,11 +158,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
+uint32_t get_signal_id(const CanSignal& sig);
\ No newline at end of file