/* 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)
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);
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}
{}
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_;
bool isBusActive(can_bus_dev_t* bus);
*/
};
-
-// Make a global variable pointer
-extern configuration_t *config;
-
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);
}
// Interface between the daemon and the binding
const struct afb_binding_interface *binder_interface;
-configuration_t *config;
/********************************************************************************
*
*/
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)
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.");
{
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);
}
{
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());
}