Instead of a global pointer, config is now a Singleton.
authorRomain Forlot <romain.forlot@iot.bzh>
Fri, 10 Mar 2017 14:14:56 +0000 (15:14 +0100)
committerRomain Forlot <romain.forlot@iot.bzh>
Thu, 16 Mar 2017 16:10:41 +0000 (17:10 +0100)
Change-Id: I0cfc34f330c531ba5f070542a1cb723be4bcc70a
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
src/can/can-bus.cpp
src/configuration.cpp
src/configuration.hpp
src/diagnostic/diagnostic-manager.cpp
src/low-can-binding.cpp
src/utils/signals.cpp
src/utils/signals.hpp

index 4ddf6c8..a8a474c 100644 (file)
@@ -81,7 +81,7 @@ void can_bus_t::can_decode_message()
                /* First we have to found which can_signal_t it is */
                search_key = build_DynamicField((double)can_message.get_id());
                signals.clear();
-               config->find_can_signals(search_key, signals);
+               configuration_t::instance().find_can_signals(search_key, signals);
 
                /* Decoding the message ! Don't kill the messenger ! */
                for(auto& sig : signals)
@@ -96,7 +96,7 @@ void can_bus_t::can_decode_message()
                        DEBUG(binder_interface, "Nb elt matched string: %d", (int)s.count(std::string(sig.generic_name)));*/
                        if( s.find(sig->get_generic_name()) != s.end() && afb_event_is_valid(s[sig->get_generic_name()]))
                        {
-                               decoded_message = decoder_t::translateSignal(*sig, can_message, config->get_can_signals());
+                               decoded_message = decoder_t::translateSignal(*sig, can_message, configuration_t::instance().get_can_signals());
 
                                openxc_SimpleMessage s_message = build_SimpleMessage(sig->get_generic_name(), decoded_message);
                                vehicle_message = build_VehicleMessage_with_SimpleMessage(openxc_DynamicField_Type::openxc_DynamicField_Type_NUM, s_message);
index cfa728e..123f8a1 100644 (file)
@@ -51,6 +51,12 @@ std::vector<std::vector<can_message_definition_t>> CAN_MESSAGES_DEFINTION;
 
 std::vector<std::vector<can_signal_t>> SIGNALS;
 
+configuration_t& configuration_t::instance()
+{
+       static configuration_t config;
+       return config;
+}
+
 configuration_t::configuration_t()
        : can_message_set_{CAN_MESSAGE_SET}, can_signals_{SIGNALS}, obd2_signals_{OBD2_PIDS}, can_message_definition_{CAN_MESSAGES_DEFINTION}
 {}
index 981e69e..9aaf41e 100644 (file)
@@ -45,9 +45,12 @@ class configuration_t
                diagnostic_manager_t diagnostic_manager_;
                uint8_t active_message_set_ = 0;
 
-       public:
+               /// Private constructor with implementation generated by the AGL generator.
                configuration_t();
 
+       public:
+               static configuration_t& instance();
+
                std::vector<can_message_set_t> can_message_set_;
                std::vector<std::vector<can_signal_t>> can_signals_;
                std::vector<std::vector<obd2_signal_t>> obd2_signals_;
@@ -105,7 +108,3 @@ class configuration_t
                bool isBusActive(can_bus_dev_t* bus);
                */
 };
-
-// Make a global variable pointer
-extern configuration_t *config;
-
index 5678dc4..92ce33b 100644 (file)
@@ -246,7 +246,7 @@ bool diagnostic_manager_t::add_recurring_request(DiagnosticRequest* request, con
 
 bool diagnostic_manager_t::shims_send(const uint32_t arbitration_id, const uint8_t* data, const uint8_t size)
 {
-       can_bus_dev_t *can_bus_dev = config->get_diagnostic_manager().get_can_bus_dev();
+       can_bus_dev_t *can_bus_dev = configuration_t::instance().get_diagnostic_manager().get_can_bus_dev();
        return can_bus_dev->shims_send(arbitration_id, data, size);
 }
 
index 9357490..8411b65 100644 (file)
@@ -42,7 +42,6 @@ extern "C"
 
 // Interface between the daemon and the binding
 const struct afb_binding_interface *binder_interface;
-configuration_t *config;
 
 /********************************************************************************
 *
@@ -221,9 +220,7 @@ extern "C"
        */
        int afbBindingV1ServiceInit(struct afb_service service)
        {
-               config = new configuration_t();
-
-               can_bus_t& can_bus_manager = config->get_can_bus_manager();
+               can_bus_t& can_bus_manager = configuration_t::instance().get_can_bus_manager();
 
                /* Open CAN socket */
                if(can_bus_manager.init_can_dev() == 0)
index 7393409..9e71929 100644 (file)
@@ -60,12 +60,12 @@ std::vector<std::string> find_signals(const openxc_DynamicField &key)
        switch(key.type)
        {
                case openxc_DynamicField_Type::openxc_DynamicField_Type_STRING:
-                               lookup_signals_by_name(key.string_value, config->get_can_signals(), found_signals_name);
-                               lookup_signals_by_name(key.string_value, config->get_obd2_signals(), found_signals_name);
+                               lookup_signals_by_name(key.string_value, configuration_t::instance().get_can_signals(), found_signals_name);
+                               lookup_signals_by_name(key.string_value, configuration_t::instance().get_obd2_signals(), found_signals_name);
                        break;
                case openxc_DynamicField_Type::openxc_DynamicField_Type_NUM:
-                               lookup_signals_by_id(key.numeric_value, config->get_can_signals(), found_signals_name);
-                               lookup_signals_by_id(key.numeric_value, config->get_obd2_signals(), found_signals_name);
+                               lookup_signals_by_id(key.numeric_value, configuration_t::instance().get_can_signals(), found_signals_name);
+                               lookup_signals_by_id(key.numeric_value, configuration_t::instance().get_obd2_signals(), found_signals_name);
                        break;
                default:
                        ERROR(binder_interface, "find_signals: wrong openxc_DynamicField specified. Use openxc_DynamicField_Type_NUM or openxc_DynamicField_Type_STRING type only.");
index fe86953..4380045 100644 (file)
@@ -64,7 +64,7 @@ void lookup_signals_by_id(const double key, std::vector<T>& signals, std::vector
 {
        for(T& s : signals)
        {
-               if(config->get_signal_id(s) == key)
+               if(configuration_t::instance().get_signal_id(s) == key)
                {
                        found_signals.push_back(&s);
                }
@@ -76,7 +76,7 @@ void lookup_signals_by_id(const double key, std::vector<T>& signals, std::vector
 {
        for(T& s : signals)
        {
-               if(config->get_signal_id(s) == key)
+               if(configuration_t::instance().get_signal_id(s) == key)
                {
                        found_signals_name.push_back(s.get_generic_name());
                }