summaryrefslogtreecommitdiff
path: root/src/components/transport_manager
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/transport_manager')
-rw-r--r--src/components/transport_manager/CMakeLists.txt2
-rw-r--r--src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_connection_factory.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_device.h7
-rw-r--r--src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_device_scanner.h6
-rw-r--r--src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_socket_connection.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_transport_adapter.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/dnssd_service_browser.h6
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h32
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_connection_factory.h7
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_device.h6
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_socket_connection.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/client_connection_listener.h4
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/connection.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/device_scanner.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/server_connection_factory.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h10
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h27
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_manager_impl.h23
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/libusb/platform_usb_device.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/libusb/usb_connection.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/libusb/usb_handler.h20
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/qnx/platform_usb_device.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/qnx/usb_connection.h8
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/qnx/usb_handler.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/usb_aoa_adapter.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/usb_connection_factory.h4
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/usb_control_transfer.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/usb_device_scanner.h7
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_connection_factory.cc2
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_device.cc7
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc70
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc5
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc2
-rw-r--r--src/components/transport_manager/src/tcp/dnssd_service_browser.cc44
-rw-r--r--src/components/transport_manager/src/tcp/tcp_client_listener.cc117
-rw-r--r--src/components/transport_manager/src/tcp/tcp_connection_factory.cc2
-rw-r--r--src/components/transport_manager/src/tcp/tcp_device.cc34
-rw-r--r--src/components/transport_manager/src/tcp/tcp_socket_connection.cc7
-rw-r--r--src/components/transport_manager/src/tcp/tcp_transport_adapter.cc6
-rw-r--r--src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc72
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc159
-rw-r--r--src/components/transport_manager/src/transport_manager_default.cc4
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc70
-rw-r--r--src/components/transport_manager/src/usb/libusb/platform_usb_device.cc2
-rw-r--r--src/components/transport_manager/src/usb/libusb/usb_connection.cc3
-rw-r--r--src/components/transport_manager/src/usb/libusb/usb_handler.cc52
-rw-r--r--src/components/transport_manager/src/usb/qnx/platform_usb_device.cc2
-rw-r--r--src/components/transport_manager/src/usb/qnx/usb_connection.cc15
-rw-r--r--src/components/transport_manager/src/usb/qnx/usb_handler.cc2
-rw-r--r--src/components/transport_manager/src/usb/usb_aoa_adapter.cc2
-rw-r--r--src/components/transport_manager/src/usb/usb_connection_factory.cc2
-rw-r--r--src/components/transport_manager/src/usb/usb_device_scanner.cc84
53 files changed, 443 insertions, 519 deletions
diff --git a/src/components/transport_manager/CMakeLists.txt b/src/components/transport_manager/CMakeLists.txt
index 68358a5f3d..15ecc91619 100644
--- a/src/components/transport_manager/CMakeLists.txt
+++ b/src/components/transport_manager/CMakeLists.txt
@@ -92,4 +92,4 @@ if (BUILD_BT_SUPPORT)
endif()
if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
-endif()
+endif() \ No newline at end of file
diff --git a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_connection_factory.h b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_connection_factory.h
index 4d1d474377..48d1f15538 100644
--- a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_connection_factory.h
+++ b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_connection_factory.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file bluetooth_connection_factory.h
* \brief BluetoothConnectionFactory class header file.
*
diff --git a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_device.h b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_device.h
index f28147a3b5..4abef3c604 100644
--- a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_device.h
+++ b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_device.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file bluetooth_device.h
* \brief BluetoothDevice class header file.
*
@@ -37,6 +37,11 @@
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_BLUETOOTH_BLUETOOTH_DEVICE_H_
#include <bluetooth/bluetooth.h>
+#include <bluetooth/hci.h>
+#include <bluetooth/hci_lib.h>
+#include <bluetooth/sdp.h>
+#include <bluetooth/sdp_lib.h>
+#include <bluetooth/rfcomm.h>
#include <vector>
diff --git a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_device_scanner.h b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_device_scanner.h
index d1bed9b3dc..0c68c67216 100644
--- a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_device_scanner.h
+++ b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_device_scanner.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file bluetooth_device_scanner.h
* \brief BluetoothDeviceScanner class header file.
*
@@ -46,9 +46,7 @@
#include "transport_manager/transport_adapter/device_scanner.h"
#include "utils/conditional_variable.h"
#include "utils/lock.h"
-#include "utils/threads/thread_delegate.h"
-
-class Thread;
+#include "utils/threads/thread.h"
namespace transport_manager {
namespace transport_adapter {
diff --git a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_socket_connection.h b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_socket_connection.h
index 3de77ab529..e1606da878 100644
--- a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_socket_connection.h
+++ b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_socket_connection.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file bluetooth_socket_connection.h
* \brief BluetoothSocketConnection class header file.
*
diff --git a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_transport_adapter.h b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_transport_adapter.h
index 69a588fd37..075b5da55f 100644
--- a/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_transport_adapter.h
+++ b/src/components/transport_manager/include/transport_manager/bluetooth/bluetooth_transport_adapter.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file bluetooth_transport_adapter.h
* \brief BluetoothAdapter class header file.
*
diff --git a/src/components/transport_manager/include/transport_manager/tcp/dnssd_service_browser.h b/src/components/transport_manager/include/transport_manager/tcp/dnssd_service_browser.h
index d31beea26c..cd319ca543 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/dnssd_service_browser.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/dnssd_service_browser.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file dnssd_service_browser.h
* \brief DnssdServiceBrowser class header file.
*
@@ -38,12 +38,12 @@
#include <string>
#include <vector>
+#include <pthread.h>
#include <avahi-client/client.h>
#include <avahi-client/lookup.h>
#include <avahi-common/error.h>
#include <avahi-common/thread-watch.h>
-#include "utils/lock.h"
#include "transport_manager/transport_adapter/device_scanner.h"
#include "transport_manager/transport_adapter/transport_adapter.h"
@@ -121,7 +121,7 @@ class DnssdServiceBrowser : public DeviceScanner {
typedef std::vector<DnssdServiceRecord> ServiceRecords;
ServiceRecords service_records_;
- sync_primitives::Lock mutex_;
+ pthread_mutex_t mutex_;
bool initialised_;
}
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h
index f54e5a8fc2..12eab5a1b5 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file tcp_client_listener.h
* \brief TcpClientListener class header file.
*
@@ -36,10 +36,10 @@
#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_CLIENT_LISTENER_H_
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_CLIENT_LISTENER_H_
-#include "utils/threads/thread_delegate.h"
#include "transport_manager/transport_adapter/client_connection_listener.h"
-class Thread;
+#include "utils/threads/thread_delegate.h"
+#include "utils/threads/thread.h"
namespace transport_manager {
namespace transport_adapter {
@@ -49,7 +49,8 @@ class TransportAdapterController;
/**
* @brief Listener of device adapter that use TCP transport.
*/
-class TcpClientListener : public ClientConnectionListener {
+class TcpClientListener : public ClientConnectionListener,
+ public threads::ThreadDelegate {
public:
/**
* @breaf Constructor.
@@ -63,6 +64,14 @@ class TcpClientListener : public ClientConnectionListener {
bool enable_keepalive);
/**
+ * @brief Start TCP client listener thread.
+ */
+ void threadMain();
+
+ bool exitThreadMain();
+ protected:
+
+ /**
* @brief Destructor.
*/
virtual ~TcpClientListener();
@@ -98,26 +107,15 @@ class TcpClientListener : public ClientConnectionListener {
* @brief Terminate TCP client listener thread.
*/
virtual TransportAdapter::Error StopListening();
-
private:
const uint16_t port_;
const bool enable_keepalive_;
TransportAdapterController* controller_;
+ // TODO(Eamakhov): change to threads::Thread usage
threads::Thread* thread_;
int socket_;
+ bool thread_started_;
bool thread_stop_requested_;
-
- void Loop();
- void StopLoop();
-
- class ListeningThreadDelegate : public threads::ThreadDelegate {
- public:
- explicit ListeningThreadDelegate(TcpClientListener* parent);
- virtual void threadMain();
- void exitThreadMain();
- private:
- TcpClientListener* parent_;
- };
};
} // namespace transport_adapter
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_connection_factory.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_connection_factory.h
index 690c3127bd..fba85aa601 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_connection_factory.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_connection_factory.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file tcp_connection_factory.h
* \brief TcpConnectionFactory class header file.
*
@@ -54,6 +54,7 @@ class TcpConnectionFactory : public ServerConnectionFactory {
* @param controller Pointer to the device adapter controller.
*/
TcpConnectionFactory(TransportAdapterController* controller);
+ protected:
/**
* @brief Start TCP connection factory.
@@ -68,8 +69,8 @@ class TcpConnectionFactory : public ServerConnectionFactory {
*
* @return Error information about possible reason of failure.
*/
- virtual TransportAdapter::Error CreateConnection(
- const DeviceUID& device_uid, const ApplicationHandle& app_handle);
+ virtual TransportAdapter::Error CreateConnection(const DeviceUID& device_uid,
+ const ApplicationHandle& app_handle);
/**
* @brief
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_device.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_device.h
index 2b89e09020..08821ab3c4 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_device.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_device.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file tcp_device.h
* \brief TcpDevice class header file.
*
@@ -47,8 +47,6 @@
#include <sys/types.h>
#include <sys/socket.h>
-#include "utils/lock.h"
-
namespace transport_manager {
namespace transport_adapter {
@@ -138,7 +136,7 @@ class TcpDevice : public Device {
uint16_t port;
};
std::map<ApplicationHandle, Application> applications_;
- mutable sync_primitives::Lock applications_mutex_;
+ mutable pthread_mutex_t applications_mutex_;
const in_addr_t in_addr_;
const std::string name_;
ApplicationHandle last_handle_;
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_socket_connection.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_socket_connection.h
index 9af825ea93..8fe7b8e837 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_socket_connection.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_socket_connection.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file tcp_socket_connection.h
* \brief TcpSocketConnection class header file.
*
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h
index 277194b512..1319c40eeb 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file tcp_transport_adapter.h
* \brief TcpTransportAdapter class header file.
*
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/client_connection_listener.h b/src/components/transport_manager/include/transport_manager/transport_adapter/client_connection_listener.h
index 018dd46810..41658fb45f 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/client_connection_listener.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/client_connection_listener.h
@@ -1,4 +1,6 @@
-/*
+/**
+ * \file client_connection_listener.h
+ * \brief ClientConnectionListener class header file.
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
*
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/connection.h b/src/components/transport_manager/include/transport_manager/transport_adapter/connection.h
index d09e9643b1..094cb51921 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/connection.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/connection.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file connection.h
* \brief Connection class header.
* Copyright (c) 2013, Ford Motor Company
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/device_scanner.h b/src/components/transport_manager/include/transport_manager/transport_adapter/device_scanner.h
index 36759a9385..5b09a726e5 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/device_scanner.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/device_scanner.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file device_scanner.h
* \brief DeviceScanner class header file.
* Copyright (c) 2013, Ford Motor Company
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/server_connection_factory.h b/src/components/transport_manager/include/transport_manager/transport_adapter/server_connection_factory.h
index 19c37aa6a6..d944594d88 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/server_connection_factory.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/server_connection_factory.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file server_connection_factory.h
* \brief ServerConnectionFactory class header file.
* Copyright (c) 2013, Ford Motor Company
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h b/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
index 399ddb1fcf..851f250a88 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file threaded_socket_connection.h
* \brief Header for classes responsible for communication over sockets.
* Copyright (c) 2013, Ford Motor Company
@@ -41,12 +41,10 @@
#include "transport_manager/transport_adapter/connection.h"
#include "protocol/common.h"
#include "utils/threads/thread_delegate.h"
-#include "utils/lock.h"
+#include "utils/threads/thread.h"
using ::transport_manager::transport_adapter::Connection;
-class Thread;
-
namespace transport_manager {
namespace transport_adapter {
@@ -135,7 +133,7 @@ class ThreadedSocketConnection : public Connection,
int read_fd_;
int write_fd_;
void threadMain();
- void exitThreadMain();
+ bool exitThreadMain();
void Transmit();
void Finalize();
TransportAdapter::Error Notify() const;
@@ -149,7 +147,7 @@ class ThreadedSocketConnection : public Connection,
**/
typedef std::queue<protocol_handler::RawMessagePtr> FrameQueue;
FrameQueue frames_to_send_;
- mutable sync_primitives::Lock frames_to_send_mutex_;
+ mutable pthread_mutex_t frames_to_send_mutex_;
int socket_;
bool terminate_flag_;
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
index f66f1c6bb9..2c27e0d20f 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
@@ -39,8 +39,6 @@
#include <memory>
#include <string>
-#include "utils/lock.h"
-#include "utils/rwlock.h"
#include "transport_manager/transport_adapter/transport_adapter.h"
#include "transport_manager/transport_adapter/transport_adapter_controller.h"
#include "transport_manager/transport_adapter/connection.h"
@@ -101,12 +99,6 @@ class TransportAdapterImpl : public TransportAdapter,
virtual TransportAdapter::Error Init();
/**
- * @brief Stops device adapter
- * Called from transport manager to stop device adapter
- */
- virtual void Terminate();
-
- /**
* @brief Add listener to the container(list) of device adapter listeners.
*
* @param listener Pointer to the device adapter listener.
@@ -501,7 +493,7 @@ class TransportAdapterImpl : public TransportAdapter,
/**
* @brief Mutex restricting access to device map.
**/
- mutable sync_primitives::Lock devices_mutex_;
+ mutable pthread_mutex_t devices_mutex_;
/**
* @brief Container(map) of connections.
@@ -511,16 +503,9 @@ class TransportAdapterImpl : public TransportAdapter,
/**
* @brief Mutex restricting access to connections map.
**/
- mutable sync_primitives::RWLock connections_lock_;
+ mutable pthread_mutex_t connections_mutex_;
protected:
-#ifdef TIME_TESTER
- /**
- * @brief Pointer to time metric observer
- */
- TMMetricObserver* metric_observer_;
-#endif // TIME_TESTER
-
/**
* @brief Pointer to the device scanner.
*/
@@ -535,8 +520,14 @@ class TransportAdapterImpl : public TransportAdapter,
* @brief Pointer to the factory of connections initiated from client.
*/
ClientConnectionListener* client_connection_listener_;
-};
+#ifdef TIME_TESTER
+ /**
+ * @brief Pointer to time metric observer
+ */
+ TMMetricObserver* metric_observer_;
+#endif // TIME_TESTER
+};
} // namespace transport_adapter
} // namespace transport_manager
diff --git a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h
index 4c38716f3f..62fdb3fa2e 100644
--- a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h
+++ b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h
@@ -33,12 +33,15 @@
#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_MANAGER_IMPL_H_
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_MANAGER_IMPL_H_
+#include <pthread.h>
+
#include <queue>
#include <map>
#include <list>
#include <algorithm>
#include "utils/timer_thread.h"
+#include "utils/rwlock.h"
#include "transport_manager/transport_manager.h"
#include "transport_manager/transport_manager_listener.h"
@@ -101,12 +104,6 @@ class TransportManagerImpl : public TransportManager,
virtual int Init();
/**
- * Reinitializes transport manager
- * @return Error code
- */
- virtual int Reinit();
-
- /**
* @brief Start scanning for new devices.
*
* @return Code error.
@@ -253,6 +250,12 @@ class TransportManagerImpl : public TransportManager,
**/
void PostEvent(const TransportAdapterEvent& event);
+ /**
+ * @brief flag that indicates that thread is active
+ * if it is false then threads exist main loop
+ **/
+ volatile bool all_thread_active_;
+
typedef std::list<TransportManagerListener*> TransportManagerListenerList;
/**
* @brief listener that would be called when TM's event happened.
@@ -260,6 +263,11 @@ class TransportManagerImpl : public TransportManager,
TransportManagerListenerList transport_manager_listener_;
/**
+ * @brief Condition variable to wake up event
+ **/
+ pthread_cond_t device_listener_thread_wakeup_;
+
+ /**
* @brief Flag that TM is initialized
*/
bool is_initialized_;
@@ -344,9 +352,6 @@ class TransportManagerImpl : public TransportManager,
unsigned char** frame);
void OnDeviceListUpdated(TransportAdapter* ta);
- void DisconnectAllDevices();
- void TerminateAllAdapters();
- int InitAllAdapters();
static Connection convert(const ConnectionInternal& p);
};
// class ;
diff --git a/src/components/transport_manager/include/transport_manager/usb/libusb/platform_usb_device.h b/src/components/transport_manager/include/transport_manager/usb/libusb/platform_usb_device.h
index b90c504a4b..d1f485c9d5 100644
--- a/src/components/transport_manager/include/transport_manager/usb/libusb/platform_usb_device.h
+++ b/src/components/transport_manager/include/transport_manager/usb/libusb/platform_usb_device.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file platform_usb_device.h
* \brief libusb PlatformUsbDevice class header file.
*
diff --git a/src/components/transport_manager/include/transport_manager/usb/libusb/usb_connection.h b/src/components/transport_manager/include/transport_manager/usb/libusb/usb_connection.h
index 7c1fbd4551..fc6af46a47 100644
--- a/src/components/transport_manager/include/transport_manager/usb/libusb/usb_connection.h
+++ b/src/components/transport_manager/include/transport_manager/usb/libusb/usb_connection.h
@@ -49,7 +49,7 @@ class UsbConnection : public Connection {
UsbConnection(const DeviceUID& device_uid,
const ApplicationHandle& app_handle,
TransportAdapterController* controller,
- const UsbHandlerSptr usb_handler, PlatformUsbDevice* device);
+ const UsbHandlerSptr& usb_handler, PlatformUsbDevice* device);
bool Init();
virtual ~UsbConnection();
diff --git a/src/components/transport_manager/include/transport_manager/usb/libusb/usb_handler.h b/src/components/transport_manager/include/transport_manager/usb/libusb/usb_handler.h
index 215b66f6e3..fd6e77013a 100644
--- a/src/components/transport_manager/include/transport_manager/usb/libusb/usb_handler.h
+++ b/src/components/transport_manager/include/transport_manager/usb/libusb/usb_handler.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file usb_handler.h
* \brief libusb USB handler class header file.
*
@@ -36,17 +36,16 @@
#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_USB_LIBUSB_USB_HANDLER_H_
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_USB_LIBUSB_USB_HANDLER_H_
+#include <pthread.h>
+
#include <libusb/libusb.h>
#include "transport_manager/transport_adapter/transport_adapter.h"
#include "transport_manager/usb/usb_control_transfer.h"
#include "transport_manager/usb/libusb/platform_usb_device.h"
-#include "utils/threads/thread.h"
-
-class Thread;
-
namespace transport_manager {
+
namespace transport_adapter {
class UsbHandler {
@@ -72,16 +71,9 @@ class UsbHandler {
friend void UsbTransferSequenceCallback(libusb_transfer* transfer);
private:
- class UsbHandlerDelegate: public threads::ThreadDelegate {
- public:
- explicit UsbHandlerDelegate(UsbHandler* handler);
- void threadMain() OVERRIDE;
- private:
- UsbHandler* handler_;
- };
-
bool shutdown_requested_;
- threads::Thread* thread_;
+ // TODO(Eamakhov): change to threads::Thread usage
+ pthread_t thread_;
friend class UsbDeviceListener;
std::list<class UsbDeviceListener*> usb_device_listeners_;
diff --git a/src/components/transport_manager/include/transport_manager/usb/qnx/platform_usb_device.h b/src/components/transport_manager/include/transport_manager/usb/qnx/platform_usb_device.h
index ab35f862c6..939a8fcb3c 100644
--- a/src/components/transport_manager/include/transport_manager/usb/qnx/platform_usb_device.h
+++ b/src/components/transport_manager/include/transport_manager/usb/qnx/platform_usb_device.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file platform_usb_device.h
* \brief QNX PlatfromUsbDevice class header file.
*
diff --git a/src/components/transport_manager/include/transport_manager/usb/qnx/usb_connection.h b/src/components/transport_manager/include/transport_manager/usb/qnx/usb_connection.h
index d55c887bd1..3a0d2f8a26 100644
--- a/src/components/transport_manager/include/transport_manager/usb/qnx/usb_connection.h
+++ b/src/components/transport_manager/include/transport_manager/usb/qnx/usb_connection.h
@@ -36,7 +36,7 @@
#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_USB_QNX_USB_CONNECTION_H_
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_USB_QNX_USB_CONNECTION_H_
-#include "utils/lock.h"
+#include <pthread.h>
#include "transport_manager/transport_adapter/transport_adapter_controller.h"
#include "transport_manager/transport_adapter/connection.h"
@@ -51,7 +51,7 @@ class UsbConnection : public Connection {
UsbConnection(const DeviceUID& device_uid,
const ApplicationHandle& app_handle,
TransportAdapterController* controller,
- const UsbHandlerSptr libusb_handler,
+ const UsbHandlerSptr& libusb_handler,
PlatformUsbDevice* device);
bool Init();
@@ -82,13 +82,13 @@ class UsbConnection : public Connection {
unsigned char* in_buffer_;
void* out_buffer_;
-
+
usbd_urb* in_urb_;
usbd_urb* out_urb_;
std::list<protocol_handler::RawMessagePtr> out_messages_;
::protocol_handler::RawMessagePtr current_out_message_;
- sync_primitives::Lock out_messages_mutex_;
+ pthread_mutex_t out_messages_mutex_;
size_t bytes_sent_;
bool disconnecting_;
bool pending_in_transfer_;
diff --git a/src/components/transport_manager/include/transport_manager/usb/qnx/usb_handler.h b/src/components/transport_manager/include/transport_manager/usb/qnx/usb_handler.h
index c33e0f2361..26b00087ff 100644
--- a/src/components/transport_manager/include/transport_manager/usb/qnx/usb_handler.h
+++ b/src/components/transport_manager/include/transport_manager/usb/qnx/usb_handler.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file usb_handler.h
* \brief QNX USB handler class header file.
*
diff --git a/src/components/transport_manager/include/transport_manager/usb/usb_aoa_adapter.h b/src/components/transport_manager/include/transport_manager/usb/usb_aoa_adapter.h
index b0d8c1e453..55fb028ef7 100644
--- a/src/components/transport_manager/include/transport_manager/usb/usb_aoa_adapter.h
+++ b/src/components/transport_manager/include/transport_manager/usb/usb_aoa_adapter.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file usb_aoa_adapter.h
* \brief UsbAoaAdapter class header file.
*
diff --git a/src/components/transport_manager/include/transport_manager/usb/usb_connection_factory.h b/src/components/transport_manager/include/transport_manager/usb/usb_connection_factory.h
index ebd25bd37b..ed0fda91ee 100644
--- a/src/components/transport_manager/include/transport_manager/usb/usb_connection_factory.h
+++ b/src/components/transport_manager/include/transport_manager/usb/usb_connection_factory.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file usb_connection_factory.h
* \brief UsbConnectionFactory class header file.
*
@@ -46,7 +46,7 @@ namespace transport_adapter {
class UsbConnectionFactory : public ServerConnectionFactory {
public:
UsbConnectionFactory(TransportAdapterController* controller);
- void SetUsbHandler(const UsbHandlerSptr usb_handler);
+ void SetUsbHandler(const UsbHandlerSptr& usb_handler);
protected:
virtual TransportAdapter::Error Init();
diff --git a/src/components/transport_manager/include/transport_manager/usb/usb_control_transfer.h b/src/components/transport_manager/include/transport_manager/usb/usb_control_transfer.h
index c701a86e0a..8c4f8a9d4c 100644
--- a/src/components/transport_manager/include/transport_manager/usb/usb_control_transfer.h
+++ b/src/components/transport_manager/include/transport_manager/usb/usb_control_transfer.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file aoa_common.h
* \brief Google AOA protocol header file.
*
diff --git a/src/components/transport_manager/include/transport_manager/usb/usb_device_scanner.h b/src/components/transport_manager/include/transport_manager/usb/usb_device_scanner.h
index 9efb7ba58d..0937222155 100644
--- a/src/components/transport_manager/include/transport_manager/usb/usb_device_scanner.h
+++ b/src/components/transport_manager/include/transport_manager/usb/usb_device_scanner.h
@@ -1,4 +1,4 @@
-/*
+/**
* \file usb_device_scanner.h
* \brief UsbDeviceScanner class header file.
*
@@ -38,7 +38,8 @@
#include <list>
-#include "utils/lock.h"
+#include <pthread.h>
+
#include "transport_manager/transport_adapter/device_scanner.h"
#include "transport_manager/usb/common.h"
@@ -68,7 +69,7 @@ class UsbDeviceScanner : public DeviceScanner, public UsbDeviceListener {
typedef std::list<PlatformUsbDevice*> Devices;
Devices devices_;
- sync_primitives::Lock devices_mutex_;
+ pthread_mutex_t devices_mutex_;
};
} // namespace
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_connection_factory.cc b/src/components/transport_manager/src/bluetooth/bluetooth_connection_factory.cc
index 02224baf4e..421104422b 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_connection_factory.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_connection_factory.cc
@@ -1,4 +1,4 @@
-/*
+/**
* \file bluetooth_connection_factory.cc
* \brief BluetoothConnectionFactory class source file.
*
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_device.cc b/src/components/transport_manager/src/bluetooth/bluetooth_device.cc
index c8061a7ac5..1a47f6c7ff 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_device.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_device.cc
@@ -33,13 +33,6 @@
#include "transport_manager/bluetooth/bluetooth_device.h"
-#include <bluetooth/bluetooth.h>
-#include <bluetooth/hci.h>
-#include <bluetooth/hci_lib.h>
-#include <bluetooth/sdp.h>
-#include <bluetooth/sdp_lib.h>
-#include <bluetooth/rfcomm.h>
-
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc b/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
index 0fbb9d2245..547dc463b2 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
@@ -1,4 +1,4 @@
-/*
+/**
* \file bluetooth_device_scanner.cc
* \brief BluetoothDeviceScanner class header file.
*
@@ -52,7 +52,6 @@
#include "transport_manager/bluetooth/bluetooth_device.h"
#include "utils/logger.h"
-#include "utils/threads/thread.h"
namespace transport_manager {
namespace transport_adapter {
@@ -118,45 +117,44 @@ BluetoothDeviceScanner::BluetoothDeviceScanner(
};
sdp_uuid128_create(&smart_device_link_service_uuid_,
smart_device_link_service_uuid_data);
- thread_ = threads::CreateThread("BT Device Scaner",
- new BluetoothDeviceScannerDelegate(this));
+ thread_ = threads::CreateThread("BT Device Scaner", new BluetoothDeviceScannerDelegate(this));
}
BluetoothDeviceScanner::~BluetoothDeviceScanner() {
- thread_->join();
- delete thread_->delegate();
- threads::DeleteThread(thread_);
}
bool BluetoothDeviceScanner::IsInitialised() const {
- return thread_ && thread_->is_running();
+ return thread_->is_running();
}
void BluetoothDeviceScanner::UpdateTotalDeviceList() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
DeviceVector devices;
devices.insert(devices.end(), paired_devices_with_sdl_.begin(),
paired_devices_with_sdl_.end());
devices.insert(devices.end(), found_devices_with_sdl_.begin(),
found_devices_with_sdl_.end());
controller_->SearchDeviceDone(devices);
+ LOG4CXX_TRACE(logger_, "exit");
}
void BluetoothDeviceScanner::DoInquiry() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
const int device_id = hci_get_route(0);
if (device_id < 0) {
LOG4CXX_INFO(logger_, "HCI device is not available");
shutdown_requested_ = true;
controller_->SearchDeviceFailed(SearchDeviceError());
+ LOG4CXX_TRACE(logger_, "exit. Condition: device_id < 0");
return;
}
int device_handle = hci_open_dev(device_id);
if (device_handle < 0) {
controller_->SearchDeviceFailed(SearchDeviceError());
+ LOG4CXX_TRACE(logger_, "exit. Condition: device_handle < 0");
return;
}
@@ -205,6 +203,8 @@ void BluetoothDeviceScanner::DoInquiry() {
LOG4CXX_DEBUG(logger_, "number_of_devices < 0");
controller_->SearchDeviceFailed(SearchDeviceError());
}
+
+ LOG4CXX_TRACE(logger_, "exit");
}
void BluetoothDeviceScanner::CheckSDLServiceOnDevices(
@@ -371,7 +371,7 @@ bool BluetoothDeviceScanner::DiscoverSmartDeviceLinkRFCOMMChannels(
}
void BluetoothDeviceScanner::Thread() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
ready_ = true;
if (auto_repeat_search_) {
while (!shutdown_requested_) {
@@ -394,10 +394,12 @@ void BluetoothDeviceScanner::Thread() {
device_scan_requested_ = false;
}
}
+
+ LOG4CXX_TRACE(logger_, "exit");
}
void BluetoothDeviceScanner::TimedWaitForDeviceScanRequest() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
if (auto_repeat_pause_sec_ == 0) {
LOG4CXX_TRACE(logger_, "exit. Condition: auto_repeat_pause_sec_ == 0");
@@ -415,22 +417,26 @@ void BluetoothDeviceScanner::TimedWaitForDeviceScanRequest() {
}
}
}
+
+ LOG4CXX_TRACE(logger_, "exit");
}
TransportAdapter::Error BluetoothDeviceScanner::Init() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
if(!thread_->start()) {
LOG4CXX_ERROR(logger_, "Bluetooth device scanner thread start failed");
+ LOG4CXX_TRACE(logger_, "exit with TransportAdapter:Fail");
return TransportAdapter::FAIL;
}
LOG4CXX_INFO(logger_, "Bluetooth device scanner thread started");
+ LOG4CXX_TRACE(logger_, "exit with TransportAdapter:OK");
return TransportAdapter::OK;
}
void BluetoothDeviceScanner::Terminate() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
shutdown_requested_ = true;
- if (thread_) {
+ if (thread_->is_running()) {
{
sync_primitives::AutoLock auto_lock(device_scan_requested_lock_);
device_scan_requested_ = false;
@@ -439,30 +445,36 @@ void BluetoothDeviceScanner::Terminate() {
LOG4CXX_INFO(logger_,
"Waiting for bluetooth device scanner thread termination");
thread_->stop();
- LOG4CXX_INFO(logger_, "Bluetooth device scanner thread stopped");
+ LOG4CXX_INFO(logger_, "PASA Bluetooth device scanner thread joined");
}
+ LOG4CXX_TRACE(logger_, "exit");
}
TransportAdapter::Error BluetoothDeviceScanner::Scan() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
if ((!IsInitialised()) || shutdown_requested_) {
- LOG4CXX_WARN(logger_, "BAD_STATE");
+ LOG4CXX_TRACE(logger_, "exit with TransportAdapter::BAD_STATE");
return TransportAdapter::BAD_STATE;
}
if (auto_repeat_pause_sec_ == 0) {
+ LOG4CXX_TRACE(logger_, "exit with TransportAdapter::OK");
return TransportAdapter::OK;
}
TransportAdapter::Error ret = TransportAdapter::OK;
- sync_primitives::AutoLock auto_lock(device_scan_requested_lock_);
- if (!device_scan_requested_) {
- LOG4CXX_TRACE(logger_, "Requesting device Scan");
- device_scan_requested_ = true;
- device_scan_requested_cv_.NotifyOne();
- } else {
- ret = TransportAdapter::BAD_STATE;
- LOG4CXX_WARN(logger_, "BAD_STATE");
+ {
+ sync_primitives::AutoLock auto_lock(device_scan_requested_lock_);
+ if (false == device_scan_requested_) {
+ LOG4CXX_INFO(logger_, "Requesting device Scan");
+ device_scan_requested_ = true;
+ device_scan_requested_cv_.NotifyOne();
+ } else {
+ ret = TransportAdapter::BAD_STATE;
+ LOG4CXX_INFO(logger_, "Device Scan is currently in progress");
+ }
}
+
+ LOG4CXX_TRACE(logger_, "exit with Error: " << ret);
return ret;
}
@@ -471,10 +483,12 @@ BluetoothDeviceScanner::BluetoothDeviceScannerDelegate::BluetoothDeviceScannerDe
: scanner_(scanner) {
}
-void BluetoothDeviceScanner::BluetoothDeviceScannerDelegate::threadMain() {
- LOG4CXX_AUTO_TRACE(logger_);
+void BluetoothDeviceScanner::BluetoothDeviceScannerDelegate::threadMain()
+{
+ LOG4CXX_TRACE_ENTER(logger_);
DCHECK(scanner_);
scanner_->Thread();
+ LOG4CXX_TRACE_EXIT(logger_);
}
} // namespace transport_adapter
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc b/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc
index d6f9f26317..ac1ccecfb5 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc
@@ -1,4 +1,4 @@
-/*
+/**
*
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
@@ -60,8 +60,7 @@ BluetoothSocketConnection::~BluetoothSocketConnection() {
}
bool BluetoothSocketConnection::Establish(ConnectError** error) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "error: " << error);
+ LOG4CXX_TRACE(logger_, "enter. (#" << pthread_self() << "), error: " << error);
DeviceSptr device = controller()->FindDevice(device_handle());
BluetoothDevice* bluetooth_device =
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc b/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc
index 51ceebe5de..7d60213b01 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_transport_adapter.cc
@@ -1,4 +1,4 @@
-/*
+/**
* \file bluetooth_transport_adapter.cc
* \brief BluetoothTransportAdapter class source file.
*
diff --git a/src/components/transport_manager/src/tcp/dnssd_service_browser.cc b/src/components/transport_manager/src/tcp/dnssd_service_browser.cc
index e8ba2ea874..5580585766 100644
--- a/src/components/transport_manager/src/tcp/dnssd_service_browser.cc
+++ b/src/components/transport_manager/src/tcp/dnssd_service_browser.cc
@@ -1,4 +1,4 @@
-/*
+/**
*
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
@@ -56,15 +56,12 @@ void DnssdServiceBrowser::Terminate() {
}
if (0 != avahi_service_browser_) {
avahi_service_browser_free(avahi_service_browser_);
- avahi_service_browser_ = NULL;
}
if (0 != avahi_client_) {
avahi_client_free(avahi_client_);
- avahi_client_ = NULL;
}
if (0 != avahi_threaded_poll_) {
avahi_threaded_poll_free(avahi_threaded_poll_);
- avahi_threaded_poll_ = NULL;
}
LOG4CXX_TRACE(logger_, "exit");
}
@@ -81,9 +78,11 @@ DnssdServiceBrowser::DnssdServiceBrowser(TransportAdapterController* controller)
service_records_(),
mutex_(),
initialised_(false) {
+ pthread_mutex_init(&mutex_, 0);
}
DnssdServiceBrowser::~DnssdServiceBrowser() {
+ pthread_mutex_destroy(&mutex_);
}
void DnssdServiceBrowser::OnClientConnected() {
@@ -173,8 +172,8 @@ void AvahiServiceBrowserCallback(AvahiServiceBrowser* avahi_service_browser,
void DnssdServiceBrowser::ServiceResolved(
const DnssdServiceRecord& service_record) {
- LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock locker(mutex_);
+ LOG4CXX_TRACE(logger_, "enter");
+ pthread_mutex_lock(&mutex_);
ServiceRecords::iterator service_record_it = std::find(
service_records_.begin(), service_records_.end(), service_record);
if (service_record_it != service_records_.end()) {
@@ -182,19 +181,23 @@ void DnssdServiceBrowser::ServiceResolved(
}
DeviceVector device_vector = PrepareDeviceVector();
controller_->SearchDeviceDone(device_vector);
+ pthread_mutex_unlock(&mutex_);
+ LOG4CXX_TRACE(logger_, "exit");
}
void DnssdServiceBrowser::ServiceResolveFailed(
const DnssdServiceRecord& service_record) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_,
+ LOG4CXX_TRACE(logger_, "enter");
+ LOG4CXX_ERROR(logger_,
"AvahiServiceResolver failure for: " << service_record.name);
- sync_primitives::AutoLock locker(mutex_);
+ pthread_mutex_lock(&mutex_);
ServiceRecords::iterator service_record_it = std::find(
service_records_.begin(), service_records_.end(), service_record);
if (service_record_it != service_records_.end()) {
service_records_.erase(service_record_it);
}
+ pthread_mutex_unlock(&mutex_);
+ LOG4CXX_TRACE(logger_, "exit");
}
void AvahiServiceResolverCallback(AvahiServiceResolver* avahi_service_resolver,
@@ -243,11 +246,9 @@ TransportAdapter::Error DnssdServiceBrowser::CreateAvahiClientAndBrowser() {
LOG4CXX_TRACE(logger_, "enter");
if (0 != avahi_service_browser_) {
avahi_service_browser_free(avahi_service_browser_);
- avahi_service_browser_ = NULL;
}
if (0 != avahi_client_) {
avahi_client_free(avahi_client_);
- avahi_client_ = NULL;
}
int avahi_error;
@@ -260,9 +261,9 @@ TransportAdapter::Error DnssdServiceBrowser::CreateAvahiClientAndBrowser() {
return TransportAdapter::FAIL;
}
- mutex_.Acquire();
+ pthread_mutex_lock(&mutex_);
service_records_.clear();
- mutex_.Release();
+ pthread_mutex_unlock(&mutex_);
avahi_service_browser_ = avahi_service_browser_new(
avahi_client_, AVAHI_IF_UNSPEC, /* TODO use only required iface */
@@ -304,8 +305,7 @@ TransportAdapter::Error DnssdServiceBrowser::Scan() {
void DnssdServiceBrowser::AddService(AvahiIfIndex interface,
AvahiProtocol protocol, const char* name,
const char* type, const char* domain) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "interface " << interface << " protocol " << protocol <<
+ LOG4CXX_TRACE(logger_, "enter: interface " << interface << " protocol " << protocol <<
" name " << name << " type " << type << " domain " << domain);
DnssdServiceRecord record;
record.interface = interface;
@@ -314,7 +314,7 @@ void DnssdServiceBrowser::AddService(AvahiIfIndex interface,
record.name = name;
record.type = type;
- sync_primitives::AutoLock locker(mutex_);
+ pthread_mutex_lock(&mutex_);
if (service_records_.end()
== std::find(service_records_.begin(), service_records_.end(), record)) {
service_records_.push_back(record);
@@ -323,14 +323,15 @@ void DnssdServiceBrowser::AddService(AvahiIfIndex interface,
AVAHI_PROTO_INET, static_cast<AvahiLookupFlags>(0),
AvahiServiceResolverCallback, this);
}
+ pthread_mutex_unlock(&mutex_);
+ LOG4CXX_TRACE(logger_, "exit");
}
void DnssdServiceBrowser::RemoveService(AvahiIfIndex interface,
AvahiProtocol protocol,
const char* name, const char* type,
const char* domain) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "interface " << interface << " protocol " << protocol <<
+ LOG4CXX_TRACE(logger_, "enter: interface " << interface << " protocol " << protocol <<
" name " << name << " type " << type << " domain " << domain);
DnssdServiceRecord record;
record.interface = interface;
@@ -339,14 +340,16 @@ void DnssdServiceBrowser::RemoveService(AvahiIfIndex interface,
record.type = type;
record.domain_name = domain;
- sync_primitives::AutoLock locker(mutex_);
+ pthread_mutex_lock(&mutex_);
service_records_.erase(
std::remove(service_records_.begin(), service_records_.end(), record),
service_records_.end());
+ pthread_mutex_unlock(&mutex_);
+ LOG4CXX_TRACE(logger_, "exit");
}
DeviceVector DnssdServiceBrowser::PrepareDeviceVector() const {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
std::map<uint32_t, TcpDevice*> devices;
for (ServiceRecords::const_iterator it = service_records_.begin();
it != service_records_.end(); ++it) {
@@ -369,6 +372,7 @@ DeviceVector DnssdServiceBrowser::PrepareDeviceVector() const {
it != devices.end(); ++it) {
device_vector.push_back(DeviceSptr(it->second));
}
+ LOG4CXX_TRACE(logger_, "exit");
return device_vector;
}
diff --git a/src/components/transport_manager/src/tcp/tcp_client_listener.cc b/src/components/transport_manager/src/tcp/tcp_client_listener.cc
index 954c734d68..c0f39cc490 100644
--- a/src/components/transport_manager/src/tcp/tcp_client_listener.cc
+++ b/src/components/transport_manager/src/tcp/tcp_client_listener.cc
@@ -53,7 +53,7 @@
#include <sstream>
#include "utils/logger.h"
-#include "utils/threads/thread.h"
+
#include "transport_manager/transport_adapter/transport_adapter_controller.h"
#include "transport_manager/tcp/tcp_device.h"
#include "transport_manager/tcp/tcp_socket_connection.h"
@@ -66,35 +66,31 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
TcpClientListener::TcpClientListener(TransportAdapterController* controller,
const uint16_t port,
const bool enable_keepalive)
- : port_(port),
- enable_keepalive_(enable_keepalive),
- controller_(controller),
- thread_(0),
- socket_(-1),
- thread_stop_requested_(false) {
- thread_ = threads::CreateThread("TcpClientListener",
- new ListeningThreadDelegate(this));
-}
+ : port_(port),
+ enable_keepalive_(enable_keepalive),
+ controller_(controller),
+ thread_(threads::CreateThread("TcpClientListener", this)),
+ socket_(-1),
+ thread_stop_requested_(false) { }
TransportAdapter::Error TcpClientListener::Init() {
- LOG4CXX_AUTO_TRACE(logger_);
- thread_stop_requested_ = false;
return TransportAdapter::OK;
}
void TcpClientListener::Terminate() {
- thread_->stop();
+ LOG4CXX_TRACE(logger_, "enter");
+ if (TransportAdapter::OK != StopListening()) {
+ LOG4CXX_ERROR(logger_, "Cannot stop listening TCP");
+ }
+ LOG4CXX_TRACE(logger_, "exit");
}
bool TcpClientListener::IsInitialised() const {
- return thread_;
+ return true;
}
TcpClientListener::~TcpClientListener() {
- LOG4CXX_AUTO_TRACE(logger_);
- thread_->join();
- delete thread_->delegate();
- threads::DeleteThread(thread_);
+ LOG4CXX_INFO(logger_, "destructor");
}
void SetKeepaliveOptions(const int fd) {
@@ -134,7 +130,7 @@ void SetKeepaliveOptions(const int fd) {
mib[3] = TCPCTL_KEEPINTVL;
sysctl(mib, kMidLength, NULL, NULL, &keepintvl, sizeof(keepintvl));
- struct timeval tval = {0};
+ struct timeval tval = { 0 };
tval.tv_sec = keepidle;
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &yes, sizeof(yes));
setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &tval, sizeof(tval));
@@ -142,13 +138,12 @@ void SetKeepaliveOptions(const int fd) {
LOG4CXX_TRACE(logger_, "exit");
}
-void TcpClientListener::Loop() {
+void TcpClientListener::threadMain() {
LOG4CXX_TRACE(logger_, "enter");
while (!thread_stop_requested_) {
sockaddr_in client_address;
socklen_t client_address_size = sizeof(client_address);
- const int connection_fd = accept(socket_,
- (struct sockaddr*) &client_address,
+ const int connection_fd = accept(socket_, (struct sockaddr*)&client_address,
&client_address_size);
if (thread_stop_requested_) {
LOG4CXX_DEBUG(logger_, "thread_stop_requested_");
@@ -162,7 +157,6 @@ void TcpClientListener::Loop() {
if (AF_INET != client_address.sin_family) {
LOG4CXX_DEBUG(logger_, "Address of connected client is invalid");
- close(connection_fd);
continue;
}
@@ -175,16 +169,15 @@ void TcpClientListener::Loop() {
SetKeepaliveOptions(connection_fd);
}
- TcpDevice* tcp_device = new TcpDevice(client_address.sin_addr.s_addr,
- device_name);
+ TcpDevice* tcp_device = new TcpDevice(client_address.sin_addr.s_addr, device_name);
DeviceSptr device = controller_->AddDevice(tcp_device);
tcp_device = static_cast<TcpDevice*>(device.get());
const ApplicationHandle app_handle = tcp_device->AddIncomingApplication(
- connection_fd);
+ connection_fd);
TcpSocketConnection* connection(
- new TcpSocketConnection(device->unique_device_id(), app_handle,
- controller_));
+ new TcpSocketConnection(device->unique_device_id(), app_handle,
+ controller_));
connection->set_socket(connection_fd);
const TransportAdapter::Error error = connection->Start();
if (error != TransportAdapter::OK) {
@@ -194,26 +187,11 @@ void TcpClientListener::Loop() {
LOG4CXX_TRACE(logger_, "exit");
}
-void TcpClientListener::StopLoop() {
- LOG4CXX_AUTO_TRACE(logger_);
- thread_stop_requested_ = true;
- // We need to connect to the listening socket to unblock accept() call
- int byesocket = socket(AF_INET, SOCK_STREAM, 0);
- sockaddr_in server_address = { 0 };
- server_address.sin_family = AF_INET;
- server_address.sin_port = htons(port_);
- server_address.sin_addr.s_addr = INADDR_ANY;
- connect(byesocket, (sockaddr*) &server_address, sizeof(server_address));
- shutdown(byesocket, SHUT_RDWR);
- close(byesocket);
-}
-
TransportAdapter::Error TcpClientListener::StartListening() {
LOG4CXX_TRACE(logger_, "enter");
- if (!thread_ || thread_->is_running()) {
- LOG4CXX_TRACE(
- logger_,
- "exit with TransportAdapter::BAD_STATE. Condition: thread_started_");
+ if (thread_->is_running()) {
+ LOG4CXX_TRACE(logger_,
+ "exit with TransportAdapter::BAD_STATE. Condition: thread_started_");
return TransportAdapter::BAD_STATE;
}
@@ -221,8 +199,7 @@ TransportAdapter::Error TcpClientListener::StartListening() {
if (-1 == socket_) {
LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to create socket");
- LOG4CXX_TRACE(logger_,
- "exit with TransportAdapter::FAIL. Condition: -1 == socket_");
+ LOG4CXX_TRACE(logger_, "exit with TransportAdapter::FAIL. Condition: -1 == socket_");
return TransportAdapter::FAIL;
}
@@ -236,17 +213,15 @@ TransportAdapter::Error TcpClientListener::StartListening() {
if (0 != bind(socket_, (sockaddr*) &server_address, sizeof(server_address))) {
LOG4CXX_ERROR_WITH_ERRNO(logger_, "bind() failed");
- LOG4CXX_TRACE(
- logger_,
- "exit with TransportAdapter::FAIL. Condition: 0 != bind(socket_, (sockaddr*) &server_address, sizeof(server_address))");
+ LOG4CXX_TRACE(logger_,
+ "exit with TransportAdapter::FAIL. Condition: 0 != bind(socket_, (sockaddr*) &server_address, sizeof(server_address))");
return TransportAdapter::FAIL;
}
if (0 != listen(socket_, 128)) {
LOG4CXX_ERROR_WITH_ERRNO(logger_, "listen() failed");
- LOG4CXX_TRACE(
- logger_,
- "exit with TransportAdapter::FAIL. Condition: 0 != listen(socket_, 128)");
+ LOG4CXX_TRACE(logger_,
+ "exit with TransportAdapter::FAIL. Condition: 0 != listen(socket_, 128)");
return TransportAdapter::FAIL;
}
@@ -260,29 +235,33 @@ TransportAdapter::Error TcpClientListener::StartListening() {
return TransportAdapter::OK;
}
-void TcpClientListener::ListeningThreadDelegate::exitThreadMain() {
- parent_->StopLoop();
-}
-
-void TcpClientListener::ListeningThreadDelegate::threadMain() {
- parent_->Loop();
-}
-
-TcpClientListener::ListeningThreadDelegate::ListeningThreadDelegate(
- TcpClientListener* parent)
- : parent_(parent) {
+bool TcpClientListener::exitThreadMain() {
+ StopListening();
+ return true;
}
TransportAdapter::Error TcpClientListener::StopListening() {
- LOG4CXX_AUTO_TRACE(logger_);
- if (!thread_ || !thread_->is_running()) {
- LOG4CXX_TRACE(logger_, "TcpClientListener is not running now");
+ LOG4CXX_TRACE(logger_, "enter");
+ if (!thread_->is_running()) {
+ LOG4CXX_TRACE(logger_,
+ "exit with TransportAdapter::BAD_STATE. Condition !thread_started_");
return TransportAdapter::BAD_STATE;
}
- thread_->stop();
+ thread_stop_requested_ = true;
+ // We need to connect to the listening socket to unblock accept() call
+ int byesocket = socket(AF_INET, SOCK_STREAM, 0);
+ sockaddr_in server_address = { 0 };
+ server_address.sin_family = AF_INET;
+ server_address.sin_port = htons(port_);
+ server_address.sin_addr.s_addr = INADDR_ANY;
+ connect(byesocket, (sockaddr*)&server_address, sizeof(server_address));
+ shutdown(byesocket, SHUT_RDWR);
+ close(byesocket);
+ LOG4CXX_DEBUG(logger_, "Tcp client listener thread terminated");
close(socket_);
socket_ = -1;
+ LOG4CXX_TRACE(logger_, "exit with TransportAdapter::OK");
return TransportAdapter::OK;
}
diff --git a/src/components/transport_manager/src/tcp/tcp_connection_factory.cc b/src/components/transport_manager/src/tcp/tcp_connection_factory.cc
index a8c2bda600..69173a0e06 100644
--- a/src/components/transport_manager/src/tcp/tcp_connection_factory.cc
+++ b/src/components/transport_manager/src/tcp/tcp_connection_factory.cc
@@ -1,4 +1,4 @@
-/*
+/**
*
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
diff --git a/src/components/transport_manager/src/tcp/tcp_device.cc b/src/components/transport_manager/src/tcp/tcp_device.cc
index 130187c384..2540c26ed0 100644
--- a/src/components/transport_manager/src/tcp/tcp_device.cc
+++ b/src/components/transport_manager/src/tcp/tcp_device.cc
@@ -1,4 +1,4 @@
-/*
+/**
*
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
@@ -43,9 +43,9 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
TcpDevice::TcpDevice(const in_addr_t& in_addr, const std::string& name)
:
Device(name, name),
- applications_mutex_(),
in_addr_(in_addr),
last_handle_(0) {
+ pthread_mutex_init(&applications_mutex_, 0);
}
bool TcpDevice::IsSameAs(const Device* other) const {
@@ -63,53 +63,57 @@ bool TcpDevice::IsSameAs(const Device* other) const {
}
ApplicationList TcpDevice::GetApplicationList() const {
- LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock locker(applications_mutex_);
+ LOG4CXX_TRACE(logger_, "enter");
+ pthread_mutex_lock(&applications_mutex_);
ApplicationList app_list;
for (std::map<ApplicationHandle, Application>::const_iterator it =
applications_.begin(); it != applications_.end(); ++it) {
app_list.push_back(it->first);
}
+ pthread_mutex_unlock(&applications_mutex_);
+ LOG4CXX_TRACE(logger_, "exit with app_list. It's size = " << app_list.size());
return app_list;
}
ApplicationHandle TcpDevice::AddIncomingApplication(int socket_fd) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "Socket_fd: " << socket_fd);
+ LOG4CXX_TRACE(logger_, "enter. Socket_fd: " << socket_fd);
Application app;
app.incoming = true;
app.socket = socket_fd;
app.port = 0; // this line removes compiler warning
- sync_primitives::AutoLock locker(applications_mutex_);
+ pthread_mutex_lock(&applications_mutex_);
const ApplicationHandle app_handle = ++last_handle_;
applications_[app_handle] = app;
- LOG4CXX_DEBUG(logger_, "App_handle " << app_handle);
+ pthread_mutex_unlock(&applications_mutex_);
+ LOG4CXX_TRACE(logger_, "exit with app_handle " << app_handle);
return app_handle;
}
ApplicationHandle TcpDevice::AddDiscoveredApplication(int port) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "Port " << port);
+ LOG4CXX_TRACE(logger_, "enter. port " << port);
Application app;
app.incoming = false;
app.socket = 0; // this line removes compiler warning
app.port = port;
- sync_primitives::AutoLock locker(applications_mutex_);
+ pthread_mutex_lock(&applications_mutex_);
const ApplicationHandle app_handle = ++last_handle_;
applications_[app_handle] = app;
- LOG4CXX_DEBUG(logger_, "App_handle " << app_handle);
+ pthread_mutex_unlock(&applications_mutex_);
+ LOG4CXX_TRACE(logger_, "exit with app_handle " << app_handle);
return app_handle;
}
void TcpDevice::RemoveApplication(const ApplicationHandle app_handle) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "ApplicationHandle: " << app_handle);
- sync_primitives::AutoLock locker(applications_mutex_);
+ LOG4CXX_TRACE(logger_, "enter. ApplicationHandle: " << app_handle);
+ pthread_mutex_lock(&applications_mutex_);
applications_.erase(app_handle);
+ pthread_mutex_unlock(&applications_mutex_);
+ LOG4CXX_TRACE(logger_, "exit");
}
TcpDevice::~TcpDevice() {
+ pthread_mutex_destroy(&applications_mutex_);
}
int TcpDevice::GetApplicationSocket(const ApplicationHandle app_handle) const {
diff --git a/src/components/transport_manager/src/tcp/tcp_socket_connection.cc b/src/components/transport_manager/src/tcp/tcp_socket_connection.cc
index a1160a84a8..3b208d8a07 100644
--- a/src/components/transport_manager/src/tcp/tcp_socket_connection.cc
+++ b/src/components/transport_manager/src/tcp/tcp_socket_connection.cc
@@ -1,4 +1,4 @@
-/*
+/**
*
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
@@ -35,12 +35,10 @@
#include "transport_manager/tcp/tcp_socket_connection.h"
#include "transport_manager/tcp/tcp_device.h"
#include "utils/logger.h"
-#include "utils/threads/thread.h"
#include <memory.h>
#include <signal.h>
#include <errno.h>
-#include <unistd.h>
namespace transport_manager {
namespace transport_adapter {
@@ -109,9 +107,6 @@ bool TcpServerOiginatedSocketConnection::Establish(ConnectError** error) {
<< application_handle() << ", error " << errno);
*error = new ConnectError();
LOG4CXX_TRACE(logger_, "exit with FALSE. Condition: failed to connect to application");
-
- ::close(socket);
-
return false;
}
diff --git a/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc b/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
index 6c4ee0cd89..3747225a89 100644
--- a/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
+++ b/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
@@ -1,4 +1,5 @@
-/*
+/**
+ *
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
*
@@ -35,7 +36,6 @@
#include <errno.h>
#include <sstream>
#include <cstdlib>
-#include <stdio.h>
#include "resumption/last_state.h"
@@ -101,7 +101,7 @@ void TcpTransportAdapter::Store() const {
if (port != -1) { // don't want to store incoming applications
Json::Value application_dictionary;
char port_record[12];
- snprintf(port_record, sizeof(port_record), "%d", port);
+ sprintf(port_record, "%d", port);
application_dictionary["port"] = std::string(port_record);
applications_dictionary.append(application_dictionary);
}
diff --git a/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc b/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
index 7bd54d337b..1e189ed101 100644
--- a/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
+++ b/src/components/transport_manager/src/transport_adapter/threaded_socket_connection.cc
@@ -1,4 +1,4 @@
-/*
+/**
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
*
@@ -36,9 +36,7 @@
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
-
#include "utils/logger.h"
-#include "utils/threads/thread.h"
#include "transport_manager/transport_adapter/threaded_socket_connection.h"
#include "transport_manager/transport_adapter/transport_adapter_controller.h"
@@ -57,43 +55,42 @@ ThreadedSocketConnection::ThreadedSocketConnection(
terminate_flag_(false),
unexpected_disconnect_(false),
device_uid_(device_id),
- app_handle_(app_handle),
- thread_(NULL) {
+ app_handle_(app_handle)
+ {
+ pthread_mutex_init(&frames_to_send_mutex_, 0);
}
ThreadedSocketConnection::~ThreadedSocketConnection() {
terminate_flag_ = true;
Notify();
- if (thread_) {
- thread_->join();
- delete thread_->delegate();
- threads::DeleteThread(thread_);
- }
+ pthread_mutex_destroy(&frames_to_send_mutex_);
+
}
void ThreadedSocketConnection::Abort() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
unexpected_disconnect_ = true;
terminate_flag_ = true;
+ LOG4CXX_TRACE(logger_, "exit");
}
TransportAdapter::Error ThreadedSocketConnection::Start() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
int fds[2];
const int pipe_ret = pipe(fds);
if (0 == pipe_ret) {
- LOG4CXX_DEBUG(logger_, "pipe created");
+ LOG4CXX_DEBUG(logger_, "pipe created(#" << pthread_self() << ")");
read_fd_ = fds[0];
write_fd_ = fds[1];
} else {
- LOG4CXX_WARN(logger_, "pipe creation failed");
+ LOG4CXX_WARN(logger_, "pipe creation failed (#" << pthread_self() << ")");
LOG4CXX_TRACE(logger_, "exit with TransportAdapter::FAIL");
return TransportAdapter::FAIL;
}
const int fcntl_ret = fcntl(read_fd_, F_SETFL,
fcntl(read_fd_, F_GETFL) | O_NONBLOCK);
if (0 != fcntl_ret) {
- LOG4CXX_WARN(logger_, "fcntl failed");
+ LOG4CXX_WARN(logger_, "fcntl failed (#" << pthread_self() << ")");
LOG4CXX_TRACE(logger_, "exit with TransportAdapter::FAIL");
return TransportAdapter::FAIL;
}
@@ -102,23 +99,23 @@ TransportAdapter::Error ThreadedSocketConnection::Start() {
thread_ = threads::CreateThread(thread_name.c_str(), this);
if (!thread_->start()) {
- LOG4CXX_WARN(logger_, "thread creation failed");
+ LOG4CXX_WARN(logger_, "thread creation failed (#" << pthread_self() << ")");
LOG4CXX_TRACE(logger_, "exit with TransportAdapter::FAIL");
return TransportAdapter::FAIL;
}
- LOG4CXX_DEBUG(logger_, "thread created");
+ LOG4CXX_DEBUG(logger_, "thread created (#" << pthread_self() << ")");
LOG4CXX_TRACE(logger_, "exit with TransportAdapter::OK");
return TransportAdapter::OK;
}
void ThreadedSocketConnection::Finalize() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
if (unexpected_disconnect_) {
- LOG4CXX_DEBUG(logger_, "unexpected_disconnect");
+ LOG4CXX_DEBUG(logger_, "unexpected_disconnect (#" << pthread_self() << ")");
controller_->ConnectionAborted(device_handle(), application_handle(),
CommunicationError());
} else {
- LOG4CXX_DEBUG(logger_, "not unexpected_disconnect");
+ LOG4CXX_DEBUG(logger_, "not unexpected_disconnect (#" << pthread_self() << ")");
controller_->ConnectionFinished(device_handle(), application_handle());
}
close(socket_);
@@ -148,9 +145,9 @@ TransportAdapter::Error ThreadedSocketConnection::Notify() const {
TransportAdapter::Error ThreadedSocketConnection::SendData(
::protocol_handler::RawMessagePtr message) {
LOG4CXX_TRACE(logger_, "enter");
- frames_to_send_mutex_.Acquire();
+ pthread_mutex_lock(&frames_to_send_mutex_);
frames_to_send_.push(message);
- frames_to_send_mutex_.Release();
+ pthread_mutex_unlock(&frames_to_send_mutex_);
TransportAdapter::Error error = Notify();
LOG4CXX_TRACE(logger_, "exit with error" << error);
return error;
@@ -164,9 +161,10 @@ TransportAdapter::Error ThreadedSocketConnection::Disconnect() {
return error;
}
-void ThreadedSocketConnection::exitThreadMain() {
+bool ThreadedSocketConnection::exitThreadMain() {
terminate_flag_ = true;
Notify();
+ return true;
}
void ThreadedSocketConnection::threadMain() {
@@ -174,15 +172,15 @@ void ThreadedSocketConnection::threadMain() {
controller_->ConnectionCreated(this, device_uid_, app_handle_);
ConnectError* connect_error = NULL;
if (Establish(&connect_error)) {
- LOG4CXX_DEBUG(logger_, "Connection established");
+ LOG4CXX_DEBUG(logger_, "Connection established (#" << pthread_self() << ")");
controller_->ConnectDone(device_handle(), application_handle());
while (!terminate_flag_) {
Transmit();
}
- LOG4CXX_DEBUG(logger_, "Connection is to finalize");
+ LOG4CXX_DEBUG(logger_, "Connection is to finalize (#" << pthread_self() << ")");
Finalize();
while (!frames_to_send_.empty()) {
- LOG4CXX_INFO(logger_, "removing message");
+ LOG4CXX_INFO(logger_, "removing message (#" << pthread_self() << ")");
::protocol_handler::RawMessagePtr message = frames_to_send_.front();
frames_to_send_.pop();
controller_->DataSendFailed(device_handle(), application_handle(),
@@ -190,7 +188,7 @@ void ThreadedSocketConnection::threadMain() {
}
controller_->DisconnectDone(device_handle(), application_handle());
} else {
- LOG4CXX_ERROR(logger_, "Connection Establish failed");
+ LOG4CXX_ERROR(logger_, "Connection Establish failed (#" << pthread_self() << ")");
controller_->ConnectFailed(device_handle(), application_handle(),
*connect_error);
delete connect_error;
@@ -214,14 +212,14 @@ void ThreadedSocketConnection::Transmit() {
poll_fds[1].fd = read_fd_;
poll_fds[1].events = POLLIN | POLLPRI;
- LOG4CXX_DEBUG(logger_, "poll " << this);
+ LOG4CXX_DEBUG(logger_, "poll (#" << pthread_self() << ") " << this);
if (-1 == poll(poll_fds, poll_fds_size, -1)) {
LOG4CXX_ERROR_WITH_ERRNO(logger_, "poll failed for connection " << this);
Abort();
LOG4CXX_TRACE(logger_, "exit. Condition: -1 == poll(poll_fds, poll_fds_size, -1)");
return;
}
- LOG4CXX_DEBUG(logger_, "poll is ok " << this << " revents0:"
+ LOG4CXX_DEBUG(logger_, "poll is ok (#" << pthread_self() << ") " << this << " revents0:"
<<
std::hex << poll_fds[0].revents << " revents1:" << std::hex << poll_fds[1].revents);
// error check
@@ -258,12 +256,12 @@ void ThreadedSocketConnection::Transmit() {
// send data if possible
if (!frames_to_send_.empty() && (poll_fds[0].revents | POLLOUT)) {
- LOG4CXX_DEBUG(logger_, "frames_to_send_ not empty() ");
+ LOG4CXX_DEBUG(logger_, "frames_to_send_ not empty() (#" << pthread_self() << ")");
// send data
const bool send_ok = Send();
if (!send_ok) {
- LOG4CXX_ERROR(logger_, "Send() failed ");
+ LOG4CXX_ERROR(logger_, "Send() failed (#" << pthread_self() << ")");
Abort();
LOG4CXX_TRACE(logger_, "exit. Condition: !send_ok");
return;
@@ -274,7 +272,7 @@ void ThreadedSocketConnection::Transmit() {
if (poll_fds[0].revents & (POLLIN | POLLPRI)) {
const bool receive_ok = Receive();
if (!receive_ok) {
- LOG4CXX_ERROR(logger_, "Receive() failed ");
+ LOG4CXX_ERROR(logger_, "Receive() failed (#" << pthread_self() << ")");
Abort();
LOG4CXX_TRACE(logger_, "exit. Condition: !receive_ok");
return;
@@ -320,19 +318,19 @@ bool ThreadedSocketConnection::Receive() {
bool ThreadedSocketConnection::Send() {
LOG4CXX_TRACE(logger_, "enter");
FrameQueue frames_to_send;
- frames_to_send_mutex_.Acquire();
+ pthread_mutex_lock(&frames_to_send_mutex_);
std::swap(frames_to_send, frames_to_send_);
- frames_to_send_mutex_.Release();
+ pthread_mutex_unlock(&frames_to_send_mutex_);
size_t offset = 0;
while (!frames_to_send.empty()) {
- LOG4CXX_INFO(logger_, "frames_to_send is not empty");
+ LOG4CXX_INFO(logger_, "frames_to_send is not empty" << pthread_self() << ")");
::protocol_handler::RawMessagePtr frame = frames_to_send.front();
const ssize_t bytes_sent = ::send(socket_, frame->data() + offset,
frame->data_size() - offset, 0);
if (bytes_sent >= 0) {
- LOG4CXX_DEBUG(logger_, "bytes_sent >= 0");
+ LOG4CXX_DEBUG(logger_, "bytes_sent >= 0" << pthread_self() << ")");
offset += bytes_sent;
if (offset == frame->data_size()) {
frames_to_send.pop();
@@ -340,7 +338,7 @@ bool ThreadedSocketConnection::Send() {
controller_->DataSendDone(device_handle(), application_handle(), frame);
}
} else {
- LOG4CXX_DEBUG(logger_, "bytes_sent < 0");
+ LOG4CXX_DEBUG(logger_, "bytes_sent < 0" << pthread_self() << ")");
LOG4CXX_ERROR_WITH_ERRNO(logger_, "Send failed for connection " << this);
frames_to_send.pop();
offset = 0;
diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
index 67b2b1ad58..3330e93e31 100644
--- a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
+++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
@@ -53,64 +53,56 @@ TransportAdapterImpl::TransportAdapterImpl(
devices_(),
devices_mutex_(),
connections_(),
- connections_lock_(),
-#ifdef TIME_TESTER
- metric_observer_(NULL),
-#endif // TIME_TESTER
+ connections_mutex_(),
device_scanner_(device_scanner),
server_connection_factory_(server_connection_factory),
- client_connection_listener_(client_connection_listener) {
+ client_connection_listener_(client_connection_listener)
+#ifdef TIME_TESTER
+ , metric_observer_(NULL)
+#endif // TIME_TESTER
+{
+ pthread_mutex_init(&devices_mutex_, 0);
+ pthread_mutex_init(&connections_mutex_, 0);
}
TransportAdapterImpl::~TransportAdapterImpl() {
- Terminate();
-
- if (device_scanner_) {
- LOG4CXX_DEBUG(logger_, "Deleting device_scanner_ " << device_scanner_);
- delete device_scanner_;
- LOG4CXX_DEBUG(logger_, "device_scanner_ deleted.");
- }
- if (server_connection_factory_) {
- LOG4CXX_DEBUG(logger_, "Deleting server_connection_factory " << server_connection_factory_);
- delete server_connection_factory_;
- LOG4CXX_DEBUG(logger_, "server_connection_factory deleted.");
- }
- if (client_connection_listener_) {
- LOG4CXX_DEBUG(logger_, "Deleting client_connection_listener_ " << client_connection_listener_);
- delete client_connection_listener_;
- LOG4CXX_DEBUG(logger_, "client_connection_listener_ deleted.");
- }
-}
-
-void TransportAdapterImpl::Terminate() {
if (device_scanner_) {
device_scanner_->Terminate();
LOG4CXX_DEBUG(logger_, "device_scanner_ " << device_scanner_ << " terminated.");
+ delete device_scanner_;
+ LOG4CXX_DEBUG(logger_, "device_scanner_ " << device_scanner_ << " deleted.");
}
if (server_connection_factory_) {
server_connection_factory_->Terminate();
LOG4CXX_DEBUG(logger_, "server_connection_factory " << server_connection_factory_ << " terminated.");
+ delete server_connection_factory_;
+ LOG4CXX_DEBUG(logger_, "server_connection_factory " << server_connection_factory_ << " deleted.");
}
if (client_connection_listener_) {
client_connection_listener_->Terminate();
LOG4CXX_DEBUG(logger_, "client_connection_listener_ " << client_connection_listener_ << " terminated.");
+ delete client_connection_listener_;
+ LOG4CXX_DEBUG(logger_, "client_connection_listener_ " << client_connection_listener_ << " deleted.");
}
+ pthread_mutex_lock(&connections_mutex_);
ConnectionMap connections;
- connections_lock_.AcquireForWriting();
std::swap(connections, connections_);
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
connections.clear();
LOG4CXX_DEBUG(logger_, "Connections deleted");
- devices_mutex_.Acquire();
+ pthread_mutex_lock(&devices_mutex_);
DeviceMap devices;
std::swap(devices, devices_);
- devices_mutex_.Release();
+ pthread_mutex_unlock(&devices_mutex_);
devices.clear();
LOG4CXX_DEBUG(logger_, "Devices deleted");
+
+ pthread_mutex_destroy(&connections_mutex_);
+ pthread_mutex_destroy(&devices_mutex_);
}
TransportAdapter::Error TransportAdapterImpl::Init() {
@@ -167,7 +159,7 @@ TransportAdapter::Error TransportAdapterImpl::Connect(
return BAD_STATE;
}
- connections_lock_.AcquireForWriting();
+ pthread_mutex_lock(&connections_mutex_);
const bool already_exists =
connections_.end() !=
connections_.find(std::make_pair(device_id, app_handle));
@@ -177,7 +169,7 @@ TransportAdapter::Error TransportAdapterImpl::Connect(
info.device_id = device_id;
info.state = ConnectionInfo::NEW;
}
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
if (already_exists) {
LOG4CXX_TRACE(logger_, "exit with ALREADY_EXISTS");
return ALREADY_EXISTS;
@@ -186,9 +178,9 @@ TransportAdapter::Error TransportAdapterImpl::Connect(
const TransportAdapter::Error err =
server_connection_factory_->CreateConnection(device_id, app_handle);
if (TransportAdapter::OK != err) {
- connections_lock_.AcquireForWriting();
+ pthread_mutex_lock(&connections_mutex_);
connections_.erase(std::make_pair(device_id, app_handle));
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
}
LOG4CXX_TRACE(logger_, "exit with error: " << err);
return err;
@@ -236,25 +228,20 @@ TransportAdapter::Error TransportAdapterImpl::DisconnectDevice(
}
Error error = OK;
+ pthread_mutex_lock(&connections_mutex_);
+ for (ConnectionMap::iterator it = connections_.begin();
+ it != connections_.end(); ++it) {
- std::vector<ConnectionInfo> to_disconnect;
- connections_lock_.AcquireForReading();
- for (ConnectionMap::const_iterator i = connections_.begin(); i != connections_.end(); ++i) {
- ConnectionInfo info = i->second;
- if (info.device_id == device_id && info.state != ConnectionInfo::FINALISING) {
- to_disconnect.push_back(info);
- }
- }
- connections_lock_.Release();
-
- for (std::vector<ConnectionInfo>::const_iterator j = to_disconnect.begin(); j != to_disconnect.end(); ++j) {
- ConnectionInfo info = *j;
- if (OK != info.connection->Disconnect()) {
- error = FAIL;
- LOG4CXX_ERROR(logger_, "Error on disconnect " << error);
+ ConnectionInfo& info = it->second;
+ if (info.device_id == device_id &&
+ info.state != ConnectionInfo::FINALISING) {
+ if (OK != info.connection->Disconnect()) {
+ error = FAIL;
+ LOG4CXX_ERROR(logger_, "Error on disconnect" << error);
+ }
}
}
-
+ pthread_mutex_unlock(&connections_mutex_);
LOG4CXX_TRACE(logger_, "exit with error " << error);
return error;
}
@@ -306,23 +293,19 @@ TransportAdapter::Error TransportAdapterImpl::StopClientListening() {
return BAD_STATE;
}
TransportAdapter::Error err = client_connection_listener_->StopListening();
- for(DeviceMap::iterator it = devices_.begin();
- it != devices_.end();
- ++it) {
- it->second->Stop();
- }
LOG4CXX_TRACE(logger_, "exit with error: " << err);
return err;
}
DeviceList TransportAdapterImpl::GetDeviceList() const {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
DeviceList devices;
- sync_primitives::AutoLock locker(devices_mutex_);
+ pthread_mutex_lock(&devices_mutex_);
for (DeviceMap::const_iterator it = devices_.begin(); it != devices_.end();
++it) {
devices.push_back(it->first);
}
+ pthread_mutex_unlock(&devices_mutex_);
LOG4CXX_TRACE(logger_, "exit with DeviceList. It's' size = " << devices.size());
return devices;
}
@@ -331,7 +314,7 @@ DeviceSptr TransportAdapterImpl::AddDevice(DeviceSptr device) {
LOG4CXX_TRACE(logger_, "enter. device: " << device);
DeviceSptr existing_device;
bool same_device_found = false;
- devices_mutex_.Acquire();
+ pthread_mutex_lock(&devices_mutex_);
for (DeviceMap::const_iterator i = devices_.begin(); i != devices_.end();
++i) {
existing_device = i->second;
@@ -344,7 +327,7 @@ DeviceSptr TransportAdapterImpl::AddDevice(DeviceSptr device) {
if (!same_device_found) {
devices_[device->unique_device_id()] = device;
}
- devices_mutex_.Release();
+ pthread_mutex_unlock(&devices_mutex_);
if (same_device_found) {
LOG4CXX_TRACE(logger_, "exit with TRUE. Condition: same_device_found");
return existing_device;
@@ -369,7 +352,7 @@ void TransportAdapterImpl::SearchDeviceDone(const DeviceVector& devices) {
DeviceSptr device = *it;
bool device_found = false;
- devices_mutex_.Acquire();
+ pthread_mutex_lock(&devices_mutex_);
for (DeviceMap::iterator it = devices_.begin(); it != devices_.end();
++it) {
DeviceSptr existing_device = it->second;
@@ -380,7 +363,7 @@ void TransportAdapterImpl::SearchDeviceDone(const DeviceVector& devices) {
break;
}
}
- devices_mutex_.Release();
+ pthread_mutex_unlock(&devices_mutex_);
if (!device_found) {
LOG4CXX_INFO(logger_, "Adding new device " << device->unique_device_id()
@@ -392,7 +375,7 @@ void TransportAdapterImpl::SearchDeviceDone(const DeviceVector& devices) {
new_devices[device->unique_device_id()] = device;
}
- connections_lock_.AcquireForReading();
+ pthread_mutex_lock(&connections_mutex_);
std::set<DeviceUID> connected_devices;
for (ConnectionMap::const_iterator it = connections_.begin();
it != connections_.end(); ++it) {
@@ -401,10 +384,10 @@ void TransportAdapterImpl::SearchDeviceDone(const DeviceVector& devices) {
connected_devices.insert(info.device_id);
}
}
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
DeviceMap all_devices = new_devices;
- devices_mutex_.Acquire();
+ pthread_mutex_lock(&devices_mutex_);
for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
DeviceSptr existing_device = it->second;
@@ -416,7 +399,7 @@ void TransportAdapterImpl::SearchDeviceDone(const DeviceVector& devices) {
}
}
devices_ = all_devices;
- devices_mutex_.Release();
+ pthread_mutex_unlock(&devices_mutex_);
for (TransportAdapterListenerList::iterator it = listeners_.begin();
it != listeners_.end(); ++it) {
@@ -470,8 +453,9 @@ bool TransportAdapterImpl::IsServerOriginatedConnectSupported() const {
}
bool TransportAdapterImpl::IsClientOriginatedConnectSupported() const {
- LOG4CXX_TRACE(logger_, "IsClientOriginatedConnectSupported");
+ LOG4CXX_TRACE(logger_, "enter");
return client_connection_listener_ != 0;
+ LOG4CXX_TRACE(logger_, "exit");
}
void TransportAdapterImpl::ConnectionCreated(
@@ -479,13 +463,14 @@ void TransportAdapterImpl::ConnectionCreated(
const ApplicationHandle& app_handle) {
LOG4CXX_TRACE(logger_, "enter connection:" << connection << ", device_id: " << &device_id
<< ", app_handle: " << &app_handle);
- connections_lock_.AcquireForReading();
+ pthread_mutex_lock(&connections_mutex_);
ConnectionInfo& info = connections_[std::make_pair(device_id, app_handle)];
info.app_handle = app_handle;
info.device_id = device_id;
info.connection = connection;
info.state = ConnectionInfo::NEW;
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
+ LOG4CXX_TRACE(logger_, "exit");
}
void TransportAdapterImpl::DeviceDisconnected(
@@ -503,18 +488,17 @@ void TransportAdapterImpl::DeviceDisconnected(
}
}
+ pthread_mutex_lock(&connections_mutex_);
for (TransportAdapterListenerList::iterator it = listeners_.begin();
it != listeners_.end(); ++it) {
TransportAdapterListener* listener = *it;
listener->OnDisconnectDeviceDone(this, device_uid);
}
-
- connections_lock_.AcquireForWriting();
for (ApplicationList::const_iterator i = app_list.begin(); i != app_list.end(); ++i) {
ApplicationHandle app_handle = *i;
connections_.erase(std::make_pair(device_uid, app_handle));
}
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
RemoveDevice(device_uid);
LOG4CXX_TRACE(logger_, "exit");
@@ -527,7 +511,7 @@ void TransportAdapterImpl::DisconnectDone(
LOG4CXX_TRACE(logger_, "enter. device_id: " << &device_uid << ", app_handle: " <<
&app_uid);
bool device_disconnected = true;
- connections_lock_.AcquireForReading();
+ pthread_mutex_lock(&connections_mutex_);
for (ConnectionMap::const_iterator it = connections_.begin();
it != connections_.end(); ++it) {
const DeviceUID& current_device_id = it->first.first;
@@ -539,7 +523,7 @@ void TransportAdapterImpl::DisconnectDone(
break;
}
}
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
for (TransportAdapterListenerList::iterator it = listeners_.begin();
it != listeners_.end(); ++it) {
TransportAdapterListener* listener = *it;
@@ -548,9 +532,9 @@ void TransportAdapterImpl::DisconnectDone(
listener->OnDisconnectDeviceDone(this, device_uid);
}
}
- connections_lock_.AcquireForWriting();
+ pthread_mutex_lock(&connections_mutex_);
connections_.erase(std::make_pair(device_uid, app_uid));
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
if (device_disconnected) {
RemoveDevice(device_uid);
@@ -616,13 +600,14 @@ DeviceSptr TransportAdapterImpl::FindDevice(const DeviceUID& device_id) const {
LOG4CXX_TRACE(logger_, "enter. device_id: " << &device_id);
DeviceSptr ret;
LOG4CXX_DEBUG(logger_, "devices_.size() = " << devices_.size());
- sync_primitives::AutoLock locker(devices_mutex_);
+ pthread_mutex_lock(&devices_mutex_);
DeviceMap::const_iterator it = devices_.find(device_id);
if (it != devices_.end()) {
ret = it->second;
} else {
LOG4CXX_WARN(logger_, "Device " << device_id << " not found.");
}
+ pthread_mutex_unlock(&devices_mutex_);
LOG4CXX_TRACE(logger_, "exit with DeviceSptr: " << ret);
return ret;
}
@@ -631,14 +616,14 @@ void TransportAdapterImpl::ConnectDone(const DeviceUID& device_id,
const ApplicationHandle& app_handle) {
LOG4CXX_TRACE(logger_, "enter. device_id: " << &device_id << ", app_handle: " <<
&app_handle);
- connections_lock_.AcquireForReading();
+ pthread_mutex_lock(&connections_mutex_);
ConnectionMap::iterator it_conn =
connections_.find(std::make_pair(device_id, app_handle));
if (it_conn != connections_.end()) {
ConnectionInfo& info = it_conn->second;
info.state = ConnectionInfo::ESTABLISHED;
}
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
for (TransportAdapterListenerList::iterator it = listeners_.begin();
it != listeners_.end(); ++it) {
@@ -655,9 +640,9 @@ void TransportAdapterImpl::ConnectFailed(const DeviceUID& device_handle,
const ApplicationHandle app_uid = app_handle;
LOG4CXX_TRACE(logger_, "enter. device_id: " << &device_uid << ", app_handle: " <<
&app_uid << ", error: " << &error);
- connections_lock_.AcquireForWriting();
+ pthread_mutex_lock(&connections_mutex_);
connections_.erase(std::make_pair(device_uid, app_uid));
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
for (TransportAdapterListenerList::iterator it = listeners_.begin();
it != listeners_.end(); ++it) {
(*it)->OnConnectFailed(this, device_uid, app_uid, error);
@@ -689,14 +674,15 @@ void TransportAdapterImpl::ConnectionFinished(
const DeviceUID& device_id, const ApplicationHandle& app_handle) {
LOG4CXX_TRACE(logger_, "enter. device_id: " << &device_id << ", app_handle: " <<
&app_handle);
- connections_lock_.AcquireForReading();
+ pthread_mutex_lock(&connections_mutex_);
ConnectionMap::iterator it =
connections_.find(std::make_pair(device_id, app_handle));
if (it != connections_.end()) {
ConnectionInfo& info = it->second;
info.state = ConnectionInfo::FINALISING;
}
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
+ LOG4CXX_TRACE(logger_, "exit");
}
void TransportAdapterImpl::ConnectionAborted(
@@ -782,7 +768,7 @@ Connection* TransportAdapterImpl::FindEstablishedConnection(
LOG4CXX_TRACE(logger_, "enter. device_id: " << &device_id << ", app_handle: " <<
&app_handle);
Connection* connection = NULL;
- connections_lock_.AcquireForReading();
+ pthread_mutex_lock(&connections_mutex_);
ConnectionMap::const_iterator it =
connections_.find(std::make_pair(device_id, app_handle));
if (it != connections_.end()) {
@@ -791,7 +777,7 @@ Connection* TransportAdapterImpl::FindEstablishedConnection(
connection = info.connection;
}
}
- connections_lock_.Release();
+ pthread_mutex_unlock(&connections_mutex_);
LOG4CXX_TRACE(logger_, "exit with Connection: " << connection);
return connection;
}
@@ -834,9 +820,8 @@ TransportAdapter::Error TransportAdapterImpl::ConnectDevice(DeviceSptr device) {
}
void TransportAdapterImpl::RemoveDevice(const DeviceUID& device_handle) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "Device_handle: " << &device_handle);
- sync_primitives::AutoLock locker(devices_mutex_);
+ LOG4CXX_TRACE(logger_, "enter. device_handle: " << &device_handle);
+ pthread_mutex_lock(&devices_mutex_);
DeviceMap::iterator i = devices_.find(
device_handle); //ykazakov: there is no erase for const iterator on QNX
if (i != devices_.end()) {
@@ -850,6 +835,8 @@ void TransportAdapterImpl::RemoveDevice(const DeviceUID& device_handle) {
}
}
}
+ pthread_mutex_unlock(&devices_mutex_);
+ LOG4CXX_TRACE(logger_, "exit");
}
diff --git a/src/components/transport_manager/src/transport_manager_default.cc b/src/components/transport_manager/src/transport_manager_default.cc
index 835c2c17ed..ffd1b3d860 100644
--- a/src/components/transport_manager/src/transport_manager_default.cc
+++ b/src/components/transport_manager/src/transport_manager_default.cc
@@ -43,6 +43,7 @@
#include "transport_manager/bluetooth/bluetooth_transport_adapter.h"
#endif
+// CUSTOMER_PASA
#if defined(USB_SUPPORT)
#include "transport_manager/usb/usb_aoa_adapter.h"
@@ -71,8 +72,6 @@ int TransportManagerDefault::Init() {
#endif // TIME_TESTER
AddTransportAdapter(ta);
#endif
-
-
uint16_t port = profile::Profile::instance()->transport_manager_tcp_adapter_port();
ta = new transport_adapter::TcpTransportAdapter(port);
#ifdef TIME_TESTER
@@ -82,6 +81,7 @@ int TransportManagerDefault::Init() {
#endif // TIME_TESTER
AddTransportAdapter(ta);
+// CUSTOMER_PASA
#if defined(USB_SUPPORT)
ta = new transport_adapter::UsbAoaAdapter();
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index 6c3edd7b91..0ee1d3304d 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -32,6 +32,7 @@
#include "transport_manager/transport_manager_impl.h"
+#include <pthread.h>
#include <stdint.h>
#include <cstring>
#include <queue>
@@ -69,20 +70,22 @@ TransportManagerImpl::Connection TransportManagerImpl::convert(
}
TransportManagerImpl::TransportManagerImpl()
- : is_initialized_(false),
+ : all_thread_active_(false),
+ device_listener_thread_wakeup_(),
+ is_initialized_(false),
#ifdef TIME_TESTER
metric_observer_(NULL),
#endif // TIME_TESTER
connection_id_counter_(0),
message_queue_("TM MessageQueue", this),
event_queue_("TM EventQueue", this) {
- LOG4CXX_TRACE(logger_, "TransportManager has created");
+ LOG4CXX_INFO(logger_, "==============================================");
+ pthread_cond_init(&device_listener_thread_wakeup_, NULL);
+ LOG4CXX_DEBUG(logger_, "TransportManager object created");
}
TransportManagerImpl::~TransportManagerImpl() {
LOG4CXX_DEBUG(logger_, "TransportManager object destroying");
- message_queue_.Shutdown();
- event_queue_.Shutdown();
for (std::vector<TransportAdapter*>::iterator it =
transport_adapters_.begin();
@@ -96,6 +99,7 @@ TransportManagerImpl::~TransportManagerImpl() {
delete it->second;
}
+ pthread_cond_destroy(&device_listener_thread_wakeup_);
LOG4CXX_INFO(logger_, "TransportManager object destroyed");
}
@@ -222,48 +226,18 @@ int TransportManagerImpl::AddEventListener(TransportManagerListener* listener) {
return E_SUCCESS;
}
-void TransportManagerImpl::DisconnectAllDevices() {
- LOG4CXX_AUTO_TRACE(logger_);
- for (DeviceInfoList::iterator i = device_list_.begin();
- i != device_list_.end(); ++i) {
- DeviceInfo& device = i->second;
- DisconnectDevice(device.device_handle());
- }
-}
-
-void TransportManagerImpl::TerminateAllAdapters() {
- LOG4CXX_AUTO_TRACE(logger_);
- for (std::vector<TransportAdapter*>::iterator i = transport_adapters_.begin();
- i != transport_adapters_.end(); ++i) {
- (*i)->Terminate();
- }
-}
-
-int TransportManagerImpl::InitAllAdapters() {
- LOG4CXX_AUTO_TRACE(logger_);
- for (std::vector<TransportAdapter*>::iterator i = transport_adapters_.begin();
- i != transport_adapters_.end(); ++i) {
- if ((*i)->Init() != TransportAdapter::OK) {
- return E_ADAPTERS_FAIL;
- }
- }
- return E_SUCCESS;
-}
-
int TransportManagerImpl::Stop() {
- LOG4CXX_AUTO_TRACE(logger_);
- if (!is_initialized_) {
- LOG4CXX_WARN(logger_, "TransportManager is not initialized_");
+ LOG4CXX_TRACE(logger_, "enter");
+ if (!all_thread_active_) {
+ LOG4CXX_TRACE(logger_,
+ "exit with E_TM_IS_NOT_INITIALIZED. Condition: !all_thread_active_");
return E_TM_IS_NOT_INITIALIZED;
}
+ all_thread_active_ = false;
- message_queue_.Shutdown();
- event_queue_.Shutdown();
-
- DisconnectAllDevices();
- TerminateAllAdapters();
+ pthread_cond_signal(&device_listener_thread_wakeup_);
- is_initialized_ = false;
+ LOG4CXX_TRACE(logger_, "exit with E_SUCCESS");
return E_SUCCESS;
}
@@ -416,19 +390,12 @@ int TransportManagerImpl::SearchDevices() {
int TransportManagerImpl::Init() {
LOG4CXX_TRACE(logger_, "enter");
+ all_thread_active_ = true;
is_initialized_ = true;
LOG4CXX_TRACE(logger_, "exit with E_SUCCESS");
return E_SUCCESS;
}
-int TransportManagerImpl::Reinit() {
- LOG4CXX_AUTO_TRACE(logger_);
- DisconnectAllDevices();
- TerminateAllAdapters();
- int ret = InitAllAdapters();
- return ret;
-}
-
int TransportManagerImpl::Visibility(const bool& on_off) const {
LOG4CXX_TRACE(logger_, "enter. On_off: " << &on_off);
TransportAdapter::Error ret;
@@ -511,9 +478,10 @@ void TransportManagerImpl::PostMessage(const ::protocol_handler::RawMessagePtr m
}
void TransportManagerImpl::PostEvent(const TransportAdapterEvent& event) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "TransportAdapterEvent: " << &event);
+ LOG4CXX_TRACE(logger_, "enter. TransportAdapterEvent: " << &event);
event_queue_.PostMessage(event);
+ pthread_cond_signal(&device_listener_thread_wakeup_);
+ LOG4CXX_TRACE(logger_, "exit");
}
void TransportManagerImpl::AddConnection(const ConnectionInternal& c) {
diff --git a/src/components/transport_manager/src/usb/libusb/platform_usb_device.cc b/src/components/transport_manager/src/usb/libusb/platform_usb_device.cc
index 1ca1a54b32..103e03a4f6 100644
--- a/src/components/transport_manager/src/usb/libusb/platform_usb_device.cc
+++ b/src/components/transport_manager/src/usb/libusb/platform_usb_device.cc
@@ -1,4 +1,4 @@
-/*
+/**
*
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
diff --git a/src/components/transport_manager/src/usb/libusb/usb_connection.cc b/src/components/transport_manager/src/usb/libusb/usb_connection.cc
index b8096514bc..40891d3513 100644
--- a/src/components/transport_manager/src/usb/libusb/usb_connection.cc
+++ b/src/components/transport_manager/src/usb/libusb/usb_connection.cc
@@ -30,7 +30,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <pthread.h>
#include <unistd.h>
#include <iomanip>
@@ -52,7 +51,7 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
UsbConnection::UsbConnection(const DeviceUID& device_uid,
const ApplicationHandle& app_handle,
TransportAdapterController* controller,
- const UsbHandlerSptr usb_handler,
+ const UsbHandlerSptr& usb_handler,
PlatformUsbDevice* device)
: device_uid_(device_uid),
app_handle_(app_handle),
diff --git a/src/components/transport_manager/src/usb/libusb/usb_handler.cc b/src/components/transport_manager/src/usb/libusb/usb_handler.cc
index 776bb56c5d..eb0ffdb4dc 100644
--- a/src/components/transport_manager/src/usb/libusb/usb_handler.cc
+++ b/src/components/transport_manager/src/usb/libusb/usb_handler.cc
@@ -1,4 +1,4 @@
-/*
+/**
* \file usb_handler.cc
* \brief UsbHandler class source file.
*
@@ -39,9 +39,7 @@
#include "transport_manager/usb/common.h"
#include "transport_manager/transport_adapter/transport_adapter_impl.h"
-#include "utils/macro.h"
#include "utils/logger.h"
-#include "utils/threads/thread.h"
namespace transport_manager {
namespace transport_adapter {
@@ -77,16 +75,14 @@ class UsbHandler::ControlTransferSequenceState {
UsbHandler::UsbHandler()
: shutdown_requested_(false),
- thread_(NULL),
+ thread_(),
usb_device_listeners_(),
devices_(),
transfer_sequences_(),
device_handles_to_close_(),
libusb_context_(NULL),
arrived_callback_handle_(),
- left_callback_handle_() {
- thread_ = threads::CreateThread("UsbHandler", new UsbHandlerDelegate(this));
-}
+ left_callback_handle_() {}
UsbHandler::~UsbHandler() {
shutdown_requested_ = true;
@@ -95,15 +91,12 @@ UsbHandler::~UsbHandler() {
arrived_callback_handle_);
libusb_hotplug_deregister_callback(libusb_context_, left_callback_handle_);
}
- thread_->stop();
+ pthread_join(thread_, 0);
LOG4CXX_INFO(logger_, "UsbHandler thread finished");
if (libusb_context_) {
libusb_exit(libusb_context_);
libusb_context_ = 0;
}
- thread_->join();
- delete thread_->delegate();
- threads::DeleteThread(thread_);
}
void UsbHandler::DeviceArrived(libusb_device* device_libusb) {
@@ -216,6 +209,11 @@ void UsbHandler::CloseDeviceHandle(libusb_device_handle* device_handle) {
device_handles_to_close_.push_back(device_handle);
}
+void* UsbHandlerThread(void* data) {
+ static_cast<UsbHandler*>(data)->Thread();
+ return 0;
+}
+
int ArrivedCallback(libusb_context* context, libusb_device* device,
libusb_hotplug_event event, void* data) {
LOG4CXX_TRACE(logger_, "enter. libusb device arrived (bus number "
@@ -288,12 +286,19 @@ TransportAdapter::Error UsbHandler::Init() {
return TransportAdapter::FAIL;
}
- if (!thread_->start()) {
- LOG4CXX_ERROR(logger_, "USB device scanner thread start failed, error code");
+ const int thread_start_error =
+ pthread_create(&thread_, 0, &UsbHandlerThread, this);
+ if (0 != thread_start_error) {
+ LOG4CXX_ERROR(logger_, "USB device scanner thread start failed, error code "
+ << thread_start_error);
LOG4CXX_TRACE(logger_,
- "exit with TransportAdapter::FAIL.");
+ "exit with TransportAdapter::FAIL. Condition: 0 !== thread_start_error");
return TransportAdapter::FAIL;
}
+ LOG4CXX_INFO(logger_, "UsbHandler thread started");
+ pthread_setname_np(thread_, "UsbHandler" );
+ LOG4CXX_TRACE(logger_,
+ "exit with TransportAdapter::OK. Condition: 0 == thread_start_error");
return TransportAdapter::OK;
}
@@ -352,13 +357,13 @@ void UsbHandler::SubmitControlTransfer(
assert(transfer->Type() == UsbControlTransfer::VENDOR);
const libusb_request_type request_type = LIBUSB_REQUEST_TYPE_VENDOR;
- libusb_endpoint_direction endpoint_direction = LIBUSB_ENDPOINT_IN;
+ libusb_endpoint_direction endpoint_direction;
if (transfer->Direction() == UsbControlTransfer::IN) {
endpoint_direction = LIBUSB_ENDPOINT_IN;
} else if (transfer->Direction() == UsbControlTransfer::OUT) {
endpoint_direction = LIBUSB_ENDPOINT_OUT;
} else {
- NOTREACHED();
+ assert(0);
}
const uint8_t request = transfer->Request();
const uint16_t value = transfer->Value();
@@ -465,16 +470,5 @@ void UsbHandler::ControlTransferSequenceState::Finish() {
finished_ = true;
}
-UsbHandler::UsbHandlerDelegate::UsbHandlerDelegate(
- UsbHandler* handler)
- : handler_(handler) {
-}
-
-void UsbHandler::UsbHandlerDelegate::threadMain() {
- LOG4CXX_AUTO_TRACE(logger_);
- DCHECK(handler_);
- handler_->Thread();
-}
-
-} // namespace transport_adapter
-} // namespace transport_manager
+} // namespace
+} // namespace
diff --git a/src/components/transport_manager/src/usb/qnx/platform_usb_device.cc b/src/components/transport_manager/src/usb/qnx/platform_usb_device.cc
index 132fe52cae..0f35a16ae7 100644
--- a/src/components/transport_manager/src/usb/qnx/platform_usb_device.cc
+++ b/src/components/transport_manager/src/usb/qnx/platform_usb_device.cc
@@ -1,4 +1,4 @@
-/*
+/**
* \file platform_usb_device.cc
* \brief QNX PlatformUsbDevice class source file.
*
diff --git a/src/components/transport_manager/src/usb/qnx/usb_connection.cc b/src/components/transport_manager/src/usb/qnx/usb_connection.cc
index a3844b2e04..db3cac014d 100644
--- a/src/components/transport_manager/src/usb/qnx/usb_connection.cc
+++ b/src/components/transport_manager/src/usb/qnx/usb_connection.cc
@@ -50,7 +50,7 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
UsbConnection::UsbConnection(const DeviceUID& device_uid,
const ApplicationHandle& app_handle,
TransportAdapterController* controller,
- const UsbHandlerSptr libusb_handler,
+ const UsbHandlerSptr& libusb_handler,
PlatformUsbDevice* device)
: device_uid_(device_uid),
app_handle_(app_handle),
@@ -60,7 +60,6 @@ UsbConnection::UsbConnection(const DeviceUID& device_uid,
in_pipe_(NULL),
out_pipe_(NULL),
in_buffer_(NULL),
- out_buffer_(NULL),
in_urb_(NULL),
out_urb_(NULL),
out_messages_(),
@@ -70,6 +69,7 @@ UsbConnection::UsbConnection(const DeviceUID& device_uid,
disconnecting_(false),
pending_in_transfer_(false),
pending_out_transfer_(false) {
+ pthread_mutex_init(&out_messages_mutex_, 0);
}
UsbConnection::~UsbConnection() {
@@ -89,6 +89,8 @@ UsbConnection::~UsbConnection() {
LOG4CXX_ERROR(logger_, "Failed to close pipe: " << close_pipe_rc);
}
}
+
+ pthread_mutex_destroy(&out_messages_mutex_);
}
void InTransferCallback(usbd_urb* urb, usbd_pipe*, void* data) {
@@ -210,7 +212,7 @@ void UsbConnection::OnOutTransfer(usbd_urb* urb) {
}
}
- sync_primitives::AutoLock locker(out_messages_mutex_);
+ pthread_mutex_lock(&out_messages_mutex_);
if (error) {
LOG4CXX_ERROR(logger_, "USB out transfer failed");
@@ -232,13 +234,14 @@ void UsbConnection::OnOutTransfer(usbd_urb* urb) {
} else {
pending_out_transfer_ = false;
}
+ pthread_mutex_unlock(&out_messages_mutex_);
}
TransportAdapter::Error UsbConnection::SendData(::protocol_handler::RawMessagePtr message) {
if (disconnecting_) {
return TransportAdapter::BAD_STATE;
}
- sync_primitives::AutoLock locker(out_messages_mutex_);
+ pthread_mutex_lock(&out_messages_mutex_);
if (current_out_message_.valid()) {
out_messages_.push_back(message);
} else {
@@ -248,12 +251,13 @@ TransportAdapter::Error UsbConnection::SendData(::protocol_handler::RawMessagePt
DataSendError());
}
}
+ pthread_mutex_unlock(&out_messages_mutex_);
return TransportAdapter::OK;
}
void UsbConnection::Finalise() {
LOG4CXX_INFO(logger_, "Finalising");
- sync_primitives::AutoLock locker(out_messages_mutex_);
+ pthread_mutex_lock(&out_messages_mutex_);
disconnecting_ = true;
usbd_abort_pipe(in_pipe_);
usbd_abort_pipe(out_pipe_);
@@ -261,6 +265,7 @@ void UsbConnection::Finalise() {
it != out_messages_.end(); it = out_messages_.erase(it)) {
controller_->DataSendFailed(device_uid_, app_handle_, *it, DataSendError());
}
+ pthread_mutex_unlock(&out_messages_mutex_);
while (pending_in_transfer_ || pending_out_transfer_) sched_yield();
}
diff --git a/src/components/transport_manager/src/usb/qnx/usb_handler.cc b/src/components/transport_manager/src/usb/qnx/usb_handler.cc
index d78b6c8184..7ab36169b1 100644
--- a/src/components/transport_manager/src/usb/qnx/usb_handler.cc
+++ b/src/components/transport_manager/src/usb/qnx/usb_handler.cc
@@ -1,4 +1,4 @@
-/*
+/**
* \file usb_handler.cc
* \brief UsbHandler class source file.
*
diff --git a/src/components/transport_manager/src/usb/usb_aoa_adapter.cc b/src/components/transport_manager/src/usb/usb_aoa_adapter.cc
index b3ebb104dc..464b9ea35e 100644
--- a/src/components/transport_manager/src/usb/usb_aoa_adapter.cc
+++ b/src/components/transport_manager/src/usb/usb_aoa_adapter.cc
@@ -1,4 +1,4 @@
-/*
+/**
* \file usb_aoa_adapter.cpp
* \brief UsbAoaAdapter class source file.
*
diff --git a/src/components/transport_manager/src/usb/usb_connection_factory.cc b/src/components/transport_manager/src/usb/usb_connection_factory.cc
index 4562473536..d57391ebcc 100644
--- a/src/components/transport_manager/src/usb/usb_connection_factory.cc
+++ b/src/components/transport_manager/src/usb/usb_connection_factory.cc
@@ -54,7 +54,7 @@ TransportAdapter::Error UsbConnectionFactory::Init() {
return TransportAdapter::OK;
}
-void UsbConnectionFactory::SetUsbHandler(const UsbHandlerSptr usb_handler) {
+void UsbConnectionFactory::SetUsbHandler(const UsbHandlerSptr& usb_handler) {
usb_handler_ = usb_handler;
}
diff --git a/src/components/transport_manager/src/usb/usb_device_scanner.cc b/src/components/transport_manager/src/usb/usb_device_scanner.cc
index bddc20dd3c..bf9535941c 100644
--- a/src/components/transport_manager/src/usb/usb_device_scanner.cc
+++ b/src/components/transport_manager/src/usb/usb_device_scanner.cc
@@ -47,8 +47,7 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
class AoaInitSequence : public UsbControlTransferSequence {
public:
AoaInitSequence();
- virtual ~AoaInitSequence() {
- }
+ virtual ~AoaInitSequence() {}
private:
class AoaGetProtocolRequest;
@@ -57,7 +56,7 @@ class AoaInitSequence : public UsbControlTransferSequence {
};
void UsbDeviceScanner::OnDeviceArrived(PlatformUsbDevice* device) {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter. PlatformUsbDevice* " << device);
if (IsAppleDevice(device)) {
SupportedDeviceFound(device);
} else {
@@ -67,13 +66,13 @@ void UsbDeviceScanner::OnDeviceArrived(PlatformUsbDevice* device) {
TurnIntoAccessoryMode(device);
}
}
+ LOG4CXX_TRACE(logger_, "exit");
}
void UsbDeviceScanner::OnDeviceLeft(PlatformUsbDevice* device) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "PlatformUsbDevice " << device);
+ LOG4CXX_TRACE(logger_, "enter. PlatformUsbDevice " << device);
bool list_changed = false;
- devices_mutex_.Acquire();
+ pthread_mutex_lock(&devices_mutex_);
for (Devices::iterator it = devices_.begin(); it != devices_.end(); ++it) {
if (device == *it) {
devices_.erase(it);
@@ -81,22 +80,24 @@ void UsbDeviceScanner::OnDeviceLeft(PlatformUsbDevice* device) {
break;
}
}
- devices_mutex_.Release();
+ pthread_mutex_unlock(&devices_mutex_);
if (list_changed) {
UpdateList();
}
+ LOG4CXX_TRACE(logger_, "exit");
}
UsbDeviceScanner::UsbDeviceScanner(TransportAdapterController* controller)
- : controller_(controller) {
+ : controller_(controller) {
+ pthread_mutex_init(&devices_mutex_, 0);
}
UsbDeviceScanner::~UsbDeviceScanner() {
+ pthread_mutex_destroy(&devices_mutex_);
}
class AoaInitSequence::AoaGetProtocolRequest : public UsbControlInTransfer {
- virtual ~AoaGetProtocolRequest() {
- }
+ virtual ~AoaGetProtocolRequest() {}
virtual RequestType Type() const {
return VENDOR;
}
@@ -114,7 +115,7 @@ class AoaInitSequence::AoaGetProtocolRequest : public UsbControlInTransfer {
}
virtual bool OnCompleted(unsigned char* data) const {
const int protocol_version = data[1] << 8 | data[0];
- LOG4CXX_DEBUG(logger_, "AOA protocol version " << protocol_version);
+ LOG4CXX_INFO(logger_, "AOA protocol version " << protocol_version);
if (protocol_version == 0) {
// AOA protocol not supported
return false;
@@ -126,14 +127,10 @@ class AoaInitSequence::AoaGetProtocolRequest : public UsbControlInTransfer {
class AoaInitSequence::AoaSendIdString : public UsbControlOutTransfer {
public:
AoaSendIdString(uint16_t index, const char* string, uint16_t length)
- : index_(index),
- string_(string),
- length_(length) {
- }
+ : index_(index), string_(string), length_(length) {}
private:
- virtual ~AoaSendIdString() {
- }
+ virtual ~AoaSendIdString() {}
virtual RequestType Type() const {
return VENDOR;
}
@@ -158,8 +155,7 @@ class AoaInitSequence::AoaSendIdString : public UsbControlOutTransfer {
};
class AoaInitSequence::AoaTurnIntoAccessoryMode : public UsbControlOutTransfer {
- virtual ~AoaTurnIntoAccessoryMode() {
- }
+ virtual ~AoaTurnIntoAccessoryMode() {}
virtual RequestType Type() const {
return VENDOR;
}
@@ -187,8 +183,7 @@ static char version[] = "1.0";
static char uri[] = "http://www.ford.com";
static char serial_num[] = "N000000";
-AoaInitSequence::AoaInitSequence()
- : UsbControlTransferSequence() {
+AoaInitSequence::AoaInitSequence() : UsbControlTransferSequence() {
AddTransfer(new AoaGetProtocolRequest);
AddTransfer(new AoaSendIdString(0, manufacturer, sizeof(manufacturer)));
AddTransfer(new AoaSendIdString(1, model_name, sizeof(model_name)));
@@ -200,26 +195,25 @@ AoaInitSequence::AoaInitSequence()
}
void UsbDeviceScanner::TurnIntoAccessoryMode(PlatformUsbDevice* device) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "PlatformUsbDevice: " << device);
+ LOG4CXX_TRACE(logger_, "enter. PlatformUsbDevice: " << device);
GetUsbHandler()->StartControlTransferSequence(new AoaInitSequence, device);
+ LOG4CXX_TRACE(logger_, "exit");
}
void UsbDeviceScanner::SupportedDeviceFound(PlatformUsbDevice* device) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_TRACE(logger_, "PlatformUsbDevice: " << device);
+ LOG4CXX_TRACE(logger_, "enter PlatformUsbDevice: " << device);
- devices_mutex_.Acquire();
+ pthread_mutex_lock(&devices_mutex_);
devices_.push_back(device);
- devices_mutex_.Release();
- LOG4CXX_DEBUG(
- logger_,
- "USB device (bus number " << static_cast<int>(device->bus_number())
- << ", address " << static_cast<int>(device->address())
- << ") identified as: " << device->GetManufacturer()
- << ", " << device->GetProductName()
- << ", serial: " << device->GetSerialNumber());
+ pthread_mutex_unlock(&devices_mutex_);
+ LOG4CXX_INFO(logger_, "USB device (bus number "
+ << static_cast<int>(device->bus_number())
+ << ", address "
+ << static_cast<int>(device->address())
+ << ") identified as: " << device->GetManufacturer()
+ << ", " << device->GetProductName());
UpdateList();
+ LOG4CXX_TRACE(logger_, "exit");
}
TransportAdapter::Error UsbDeviceScanner::Init() {
@@ -231,28 +225,30 @@ TransportAdapter::Error UsbDeviceScanner::Scan() {
}
void UsbDeviceScanner::UpdateList() {
- LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_TRACE(logger_, "enter");
DeviceVector device_vector;
- devices_mutex_.Acquire();
+ pthread_mutex_lock(&devices_mutex_);
for (Devices::const_iterator it = devices_.begin(); it != devices_.end();
- ++it) {
- const std::string device_name = (*it)->GetManufacturer() + " "
- + (*it)->GetProductName();
+ ++it) {
+ const std::string device_name =
+ (*it)->GetManufacturer() + " " + (*it)->GetProductName();
std::ostringstream oss;
oss << (*it)->GetManufacturer() << ":" << (*it)->GetProductName() << ":"
- << (*it)->GetSerialNumber();
+ << (*it)->GetSerialNumber() << ":"
+ << static_cast<int>((*it)->bus_number()) << ":"
+ << static_cast<int>((*it)->address());
const DeviceUID device_uid = oss.str();
DeviceSptr device(new UsbDevice(*it, device_name, device_uid));
device_vector.push_back(device);
}
- devices_mutex_.Release();
+ pthread_mutex_unlock(&devices_mutex_);
- LOG4CXX_DEBUG(logger_, "USB search done " << device_vector.size());
+ LOG4CXX_INFO(logger_, "USB search done " << device_vector.size());
controller_->SearchDeviceDone(device_vector);
+ LOG4CXX_TRACE(logger_, "exit");
}
-void UsbDeviceScanner::Terminate() {
-}
+void UsbDeviceScanner::Terminate() {}
bool UsbDeviceScanner::IsInitialised() const {
return true;