- if( can_signal_ != nullptr)
- {ret = socket_->open(can_signal_->get_message()->get_bus_device_name());}
- else if (! diagnostic_message_ .empty())
- {ret = socket_->open(application_t::instance().get_diagnostic_manager().get_bus_device_name());}
- else if ( ! bus_name.empty())
- { ret = socket_->open(bus_name);}
- index_ = (int)socket_->socket();
+ switch (type)
+ {
+ case socket_type::BCM:
+ {
+ if( subscription.signal_ != nullptr)
+ {
+ subscription.socket_ = std::make_shared<utils::socketcan_bcm_t>();
+ ret = subscription.socket_->open(subscription.signal_->get_message()->get_bus_device_name());
+ }
+ else if (! subscription.diagnostic_message_ .empty())
+ {
+ subscription.socket_ = std::make_shared<utils::socketcan_bcm_t>();
+ ret = subscription.socket_->open(application_t::instance().get_diagnostic_manager().get_bus_device_name());
+ }
+ else if ( !bus_name.empty())
+ {
+ subscription.socket_ = std::make_shared<utils::socketcan_bcm_t>();
+ ret = subscription.socket_->open(bus_name);
+ }
+ subscription.index_ = (int)subscription.socket_->socket();
+ break;
+ }
+#ifdef USE_FEATURE_J1939
+ case socket_type::J1939_ADDR_CLAIM:
+ {
+ pgn_t pgn = J1939_NO_PGN;
+ if(!bus_name.empty())
+ {
+ std::shared_ptr<utils::socketcan_j1939_addressclaiming_t> socket = std::make_shared<utils::socketcan_j1939_addressclaiming_t>();
+ ret = socket->open(bus_name, pgn);
+ subscription.socket_ = socket;
+ }
+ subscription.index_ = (int)subscription.socket_->socket();
+ break;
+ }
+ case socket_type::J1939:
+ {
+ pgn_t pgn = J1939_NO_PGN;
+ if(subscription.signal_ != nullptr)
+ {
+ pgn = subscription.signal_->get_message()->get_id();
+ std::shared_ptr<utils::socketcan_j1939_data_t> socket = std::make_shared<utils::socketcan_j1939_data_t>();
+ ret = socket->open(subscription.signal_->get_message()->get_bus_device_name(), pgn);
+ subscription.socket_ = socket;
+ }
+ else if(!bus_name.empty())
+ {
+ std::shared_ptr<utils::socketcan_j1939_data_t> socket = std::make_shared<utils::socketcan_j1939_data_t>();
+ ret = socket->open(bus_name, pgn);
+ subscription.socket_ = socket;
+ }
+ subscription.index_ = (int)subscription.socket_->socket();
+ break;
+ }
+#endif
+ default:
+ {
+ AFB_ERROR("Socket format not supported");
+ return INVALID_SOCKET;
+ break;
+ }
+ }
+ }
+ else{
+ ret = subscription.socket_->socket();