Transport Manager Implementation to include usb
authorJustin Dickow <jjdickow@gmail.com>
Tue, 15 Jul 2014 20:01:29 +0000 (16:01 -0400)
committerJustin Dickow <jjdickow@gmail.com>
Tue, 15 Jul 2014 20:01:29 +0000 (16:01 -0400)
Signed-off-by: Justin Dickow <jjdickow@gmail.com>
src/components/transport_manager/src/transport_manager_default.cc
src/components/transport_manager/src/transport_manager_impl.cc

index b3c2a77..4e8250a 100644 (file)
@@ -1,5 +1,8 @@
 /*
- * Copyright (c) 2014, Ford Motor Company
+ * \file transport_manager_default.cc
+ * \brief TransportManagerDefault class source file.
+ *
+ * Copyright (c) 2013, Ford Motor Company
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,6 +33,8 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "config_profile/profile.h"
+
 #include "transport_manager/transport_manager_default.h"
 #include "transport_manager/tcp/tcp_transport_adapter.h"
 
 #endif
 
 #ifdef USB_SUPPORT
-#include "transport_manager/usb/usb_adapter.h"
+#include "transport_manager/usb/usb_aoa_adapter.h"
+#endif
+
+#ifdef MME_SUPPORT
+#include "transport_manager/mme/mme_transport_adapter.h"
 #endif
 
 
@@ -48,14 +57,33 @@ int TransportManagerDefault::Init() {
   if (E_SUCCESS != TransportManagerImpl::Init()) {
     return E_TM_IS_NOT_INITIALIZED;
   }
-
+  transport_adapter::TransportAdapterImpl* ta;
 #ifdef BLUETOOTH_SUPPORT
-  AddTransportAdapter(new transport_adapter::BluetoothTransportAdapter);
+  ta = new transport_adapter::BluetoothTransportAdapter;
+  if (metric_observer_) {
+    ta->SetTimeMetricObserver(metric_observer_);
+  }
+  AddTransportAdapter(ta);
 #endif
-  const uint16_t kTcpAdapterPort = 12345;
-  AddTransportAdapter(new transport_adapter::TcpTransportAdapter(kTcpAdapterPort));
+  uint16_t port = profile::Profile::instance()->transport_manager_tcp_adapter_port();
+  ta = new transport_adapter::TcpTransportAdapter(port);
+  if (metric_observer_) {
+    ta->SetTimeMetricObserver(metric_observer_);
+  }
+  AddTransportAdapter(ta);
 #ifdef USB_SUPPORT
-  AddTransportAdapter(new transport_adapter::UsbAdapter);
+  ta = new transport_adapter::UsbAoaAdapter();
+  if (metric_observer_) {
+    ta->SetTimeMetricObserver(metric_observer_);
+  }
+  AddTransportAdapter(ta);
+#endif
+#ifdef MME_SUPPORT
+  ta = new transport_adapter::MmeTransportAdapter();
+  if (metric_observer_) {
+    ta->SetTimeMetricObserver(metric_observer_);
+  }
+  AddTransportAdapter(ta);
 #endif
 
   return E_SUCCESS;
index 8a83752..144e146 100644 (file)
@@ -43,6 +43,7 @@
 #include <functional>
 #include <sstream>
 #include "utils/macro.h"
+#include "utils/logger.h"
 #include "protocol_handler/raw_message.h"
 #include "protocol_handler/protocol_packet.h"
 #include "transport_manager/transport_manager_impl.h"
@@ -58,10 +59,7 @@ using ::transport_manager::transport_adapter::TransportAdapter;
 
 namespace transport_manager {
 
-#ifdef ENABLE_LOG
-log4cxx::LoggerPtr TransportManagerImpl::logger_ =
-    log4cxx::LoggerPtr(log4cxx::Logger::getLogger("TransportManager"));
-#endif // ENABLE_LOG
+CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
 
 TransportManagerImpl::Connection TransportManagerImpl::convert(TransportManagerImpl::ConnectionInternal& p) {
   TransportManagerImpl::Connection c;
@@ -181,9 +179,10 @@ int TransportManagerImpl::Disconnect(const ConnectionUID& cid) {
   if (messages_count > 0) {
     connection->messages_count = messages_count;
     connection->shutDown = true;
-    connection->timer->start(
-      profile::Profile::instance()->transport_manager_disconnect_timeout()
-    );
+
+    const uint32_t disconnect_timeout =
+        profile::Profile::instance()->transport_manager_disconnect_timeout();
+    if (disconnect_timeout > 0) connection->timer->start(disconnect_timeout);
   } else {
     connection->transport_adapter->Disconnect(connection->device,
                                               connection->application);
@@ -317,9 +316,6 @@ int TransportManagerImpl::AddTransportAdapter(
       transport_adapter->Init() == TransportAdapter::OK) {
     transport_adapters_.push_back(transport_adapter);
   }
-  if (metric_observer_) {
-    transport_adapter->SetTimeMetricObserver(metric_observer_);
-  }
   return E_SUCCESS;
 }
 
@@ -631,9 +627,10 @@ void TransportManagerImpl::EventListenerThread(void) {
         }
         case TransportAdapterListenerImpl::EventTypeEnum::ON_CONNECT_DONE: {
           LOG4CXX_INFO(logger_, "Event ON_CONNECT_DONE");
-          AddConnection(ConnectionInternal(this, ta, ++connection_id_counter_,
-                                           device_id, app_handle));
           device_handle = converter_.UidToHandle(device_id);
+          AddConnection(ConnectionInternal(this, ta, ++connection_id_counter_,
+                                           device_id, app_handle,
+                                           device_handle));
           RaiseEvent(
               &TransportManagerListener::OnConnectionEstablished,
               DeviceInfo(device_handle, device_id, ta->DeviceName(device_id)),
@@ -866,6 +863,29 @@ void TransportManagerImpl::MessageQueueThread(void) {
   LOG4CXX_INFO(logger_, "Message queue thread finished");
 }
 
+TransportManagerImpl::ConnectionInternal::ConnectionInternal(
+    TransportManagerImpl *transport_manager, TransportAdapter *transport_adapter,
+    const ConnectionUID &id, const DeviceUID &dev_id, const ApplicationHandle &app_id,
+    const DeviceHandle& device_handle)
+  : transport_manager(transport_manager),
+    transport_adapter(transport_adapter),
+    timer(new TimerInternal(this, &ConnectionInternal::DisconnectFailedRoutine)),
+    shutDown(false),
+    device_handle_(device_handle),
+    messages_count(0) {
+  Connection::id = id;
+  Connection::device = dev_id;
+  Connection::application = app_id;
+}
+
+void TransportManagerImpl::ConnectionInternal::DisconnectFailedRoutine() {
+  LOG4CXX_INFO(logger_, "Disconnection failed");
+  transport_manager->RaiseEvent(&TransportManagerListener::OnDisconnectFailed,
+                                device_handle_, DisconnectDeviceError());
+  shutDown = false;
+  timer->stop();
+}
+
 }  // namespace transport_manager