diff options
Diffstat (limited to 'src/components/transport_manager/include')
29 files changed, 161 insertions, 134 deletions
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 48d1f15538..4d1d474377 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 4abef3c604..f28147a3b5 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,11 +37,6 @@ #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 0c68c67216..d1bed9b3dc 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,7 +46,9 @@ #include "transport_manager/transport_adapter/device_scanner.h" #include "utils/conditional_variable.h" #include "utils/lock.h" -#include "utils/threads/thread.h" +#include "utils/threads/thread_delegate.h" + +class Thread; 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 e1606da878..3de77ab529 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 075b5da55f..69a588fd37 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 cd319ca543..079494d035 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. * @@ -36,14 +36,15 @@ #ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_DNSSD_SERVICE_BROWSER_H_ #define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_DNSSD_SERVICE_BROWSER_H_ -#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 <string> +#include <vector> + +#include "utils/lock.h" #include "transport_manager/transport_adapter/device_scanner.h" #include "transport_manager/transport_adapter/transport_adapter.h" @@ -74,13 +75,15 @@ class DnssdServiceBrowser : public DeviceScanner { * * @param controller Pointer to the device adapter controller. */ - DnssdServiceBrowser(class TransportAdapterController* controller); + explicit DnssdServiceBrowser(class TransportAdapterController* controller); virtual ~DnssdServiceBrowser(); + protected: virtual TransportAdapter::Error Init(); virtual TransportAdapter::Error Scan(); virtual void Terminate(); virtual bool IsInitialised() const; + private: TransportAdapter::Error CreateAvahiClientAndBrowser(); void AddService(AvahiIfIndex interface, AvahiProtocol protocol, @@ -121,13 +124,12 @@ class DnssdServiceBrowser : public DeviceScanner { typedef std::vector<DnssdServiceRecord> ServiceRecords; ServiceRecords service_records_; - pthread_mutex_t mutex_; + sync_primitives::Lock mutex_; bool initialised_; -} -; +}; -} // namespace -} // namespace +} // namespace transport_adapter +} // namespace transport_manager -#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_DNSSD_SERVICE_BROWSER +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_DNSSD_SERVICE_BROWSER_H_ 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 12eab5a1b5..d5a24f07eb 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" -#include "utils/threads/thread_delegate.h" -#include "utils/threads/thread.h" +class Thread; namespace transport_manager { namespace transport_adapter { @@ -49,8 +49,7 @@ class TransportAdapterController; /** * @brief Listener of device adapter that use TCP transport. */ -class TcpClientListener : public ClientConnectionListener, - public threads::ThreadDelegate { +class TcpClientListener : public ClientConnectionListener { public: /** * @breaf Constructor. @@ -64,14 +63,6 @@ class TcpClientListener : public ClientConnectionListener, bool enable_keepalive); /** - * @brief Start TCP client listener thread. - */ - void threadMain(); - - bool exitThreadMain(); - protected: - - /** * @brief Destructor. */ virtual ~TcpClientListener(); @@ -107,18 +98,29 @@ 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 } // namespace transport_manager -#endif /* TCP_CLIENT_LISTENER_H_ */ +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_CLIENT_LISTENER_H_ 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 fba85aa601..7f238e91ec 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. * @@ -47,14 +47,12 @@ namespace transport_adapter { */ class TcpConnectionFactory : public ServerConnectionFactory { public: - /** * @brief Constructor. * * @param controller Pointer to the device adapter controller. */ - TcpConnectionFactory(TransportAdapterController* controller); - protected: + explicit TcpConnectionFactory(TransportAdapterController* controller); /** * @brief Start TCP connection factory. @@ -69,8 +67,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 @@ -89,6 +87,7 @@ class TcpConnectionFactory : public ServerConnectionFactory { * @brief Destructor. */ virtual ~TcpConnectionFactory(); + private: TransportAdapterController* controller_; }; @@ -96,4 +95,4 @@ class TcpConnectionFactory : public ServerConnectionFactory { } // namespace transport_adapter } // namespace transport_manager -#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_CONNECTION_FACTORY_H_ +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_CONNECTION_FACTORY_H_ 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 08821ab3c4..45bcc405d7 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. * @@ -36,9 +36,6 @@ #ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_DEVICE_H_ #define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_DEVICE_H_ -#include "transport_manager/transport_adapter/device.h" - -#include <map> #include <memory.h> #include <signal.h> #include <errno.h> @@ -47,6 +44,12 @@ #include <sys/types.h> #include <sys/socket.h> +#include <map> +#include <string> + +#include "utils/lock.h" +#include "transport_manager/transport_adapter/device.h" + namespace transport_manager { namespace transport_adapter { @@ -136,7 +139,7 @@ class TcpDevice : public Device { uint16_t port; }; std::map<ApplicationHandle, Application> applications_; - mutable pthread_mutex_t applications_mutex_; + mutable sync_primitives::Lock applications_mutex_; const in_addr_t in_addr_; const std::string name_; ApplicationHandle last_handle_; @@ -145,4 +148,4 @@ class TcpDevice : public Device { } // namespace transport_adapter } // namespace transport_manager -#endif /* TCP_DEVICE_H_ */ +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_DEVICE_H_ 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 8fe7b8e837..432a0aa760 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. * @@ -53,7 +53,6 @@ class TransportAdapterController; */ class TcpSocketConnection : public ThreadedSocketConnection { public: - /** * @brief Constructor. * @@ -69,8 +68,8 @@ class TcpSocketConnection : public ThreadedSocketConnection { * @brief Destructor. */ virtual ~TcpSocketConnection(); - protected: + protected: /** * @brief */ @@ -82,7 +81,6 @@ class TcpSocketConnection : public ThreadedSocketConnection { */ class TcpServerOiginatedSocketConnection : public ThreadedSocketConnection { public: - /** * @brief Constructor. * @@ -98,8 +96,8 @@ class TcpServerOiginatedSocketConnection : public ThreadedSocketConnection { * @brief Destructor. */ virtual ~TcpServerOiginatedSocketConnection(); - protected: + protected: /** * @brief */ @@ -109,4 +107,4 @@ class TcpServerOiginatedSocketConnection : public ThreadedSocketConnection { } // namespace transport_adapter } // namespace transport_manager -#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_SOCKET_CONNECTION_H_ +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_SOCKET_CONNECTION_H_ 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 1319c40eeb..5c1582230a 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. * @@ -33,8 +33,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_ADAPTER_H_ -#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_ADAPTER_H_ +#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_TRANSPORT_ADAPTER_H_ +#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_TRANSPORT_ADAPTER_H_ #include "transport_manager/transport_adapter/transport_adapter_impl.h" @@ -55,8 +55,8 @@ class TcpTransportAdapter : public TransportAdapterImpl { * @brief Destructor. */ virtual ~TcpTransportAdapter(); - protected: + protected: /** * @brief Return type of device. * @@ -80,4 +80,4 @@ class TcpTransportAdapter : public TransportAdapterImpl { } // namespace transport_adapter } // namespace transport_manager -#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_ADAPTER +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_TRANSPORT_ADAPTER_H_ 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 41658fb45f..018dd46810 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,6 +1,4 @@ -/** - * \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 094cb51921..e3f0b3d1d7 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 @@ -39,7 +39,6 @@ #include "transport_manager/transport_adapter/transport_adapter.h" namespace transport_manager { - namespace transport_adapter { /** @@ -48,10 +47,6 @@ namespace transport_adapter { class Connection { public: /** - * @brief Constructor. - */ - Connection() {} - /** * @brief Destructor. **/ virtual ~Connection() {} @@ -71,6 +66,8 @@ class Connection { virtual TransportAdapter::Error Disconnect() = 0; }; +typedef utils::SharedPtr<Connection> ConnectionSPtr; + } // namespace transport_adapter } // namespace transport_manager #endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_ADAPTER_CONNECTION_H_ 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 5b09a726e5..36759a9385 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 d944594d88..19c37aa6a6 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 851f250a88..5e0caa22e8 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,10 +41,12 @@ #include "transport_manager/transport_adapter/connection.h" #include "protocol/common.h" #include "utils/threads/thread_delegate.h" -#include "utils/threads/thread.h" +#include "utils/lock.h" using ::transport_manager::transport_adapter::Connection; +class Thread; + namespace transport_manager { namespace transport_adapter { @@ -53,10 +55,8 @@ class TransportAdapterController; /** * @brief Class responsible for communication over sockets. */ -class ThreadedSocketConnection : public Connection, - public threads::ThreadDelegate { +class ThreadedSocketConnection : public Connection { public: - /** * @brief Send data frame. * @@ -86,8 +86,8 @@ class ThreadedSocketConnection : public Connection, void set_socket(int socket) { socket_ = socket; } - protected: + protected: /** * @brief Constructor. * @@ -104,7 +104,6 @@ class ThreadedSocketConnection : public Connection, */ virtual ~ThreadedSocketConnection(); - virtual bool Establish(ConnectError** error) = 0; /** @@ -129,11 +128,18 @@ class ThreadedSocketConnection : public Connection, } private: + class SocketConnectionDelegate : public threads::ThreadDelegate { + public: + explicit SocketConnectionDelegate(ThreadedSocketConnection* connection); + void threadMain() OVERRIDE; + void exitThreadMain() OVERRIDE; + private: + ThreadedSocketConnection* connection_; + }; int read_fd_; int write_fd_; void threadMain(); - bool exitThreadMain(); void Transmit(); void Finalize(); TransportAdapter::Error Notify() const; @@ -147,7 +153,7 @@ class ThreadedSocketConnection : public Connection, **/ typedef std::queue<protocol_handler::RawMessagePtr> FrameQueue; FrameQueue frames_to_send_; - mutable pthread_mutex_t frames_to_send_mutex_; + mutable sync_primitives::Lock frames_to_send_mutex_; int socket_; bool terminate_flag_; @@ -159,4 +165,4 @@ class ThreadedSocketConnection : public Connection, } // namespace transport_adapter } // namespace transport_manager -#endif //SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_transport_adapter_SOCKET_COMMUNICATION +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_ADAPTER_THREADED_SOCKET_CONNECTION_H_ diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h index aaa1139b9f..f0148ad1af 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h @@ -95,7 +95,7 @@ class TransportAdapterController { * @param device_handle Device unique identifier. * @param app_handle Handle of application. */ - virtual void ConnectionCreated(Connection* connection, + virtual void ConnectionCreated(ConnectionSPtr connection, const DeviceUID& device_handle, const ApplicationHandle& app_handle) = 0; 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 2c27e0d20f..5306a7af5a 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,6 +39,8 @@ #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" @@ -99,6 +101,12 @@ 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. @@ -264,7 +272,7 @@ class TransportAdapterImpl : public TransportAdapter, * @param device_handle Device unique identifier. * @param app_handle Handle of application. */ - virtual void ConnectionCreated(Connection* connection, + virtual void ConnectionCreated(ConnectionSPtr connection, const DeviceUID& device_handle, const ApplicationHandle& app_handle); @@ -405,9 +413,7 @@ class TransportAdapterImpl : public TransportAdapter, virtual TMMetricObserver* GetTimeMetricObserver(); #endif // TIME_TESTER - protected: - /** * @brief Store adapter state where applicable */ @@ -425,6 +431,13 @@ class TransportAdapterImpl : public TransportAdapter, */ virtual bool ToBeAutoConnected(DeviceSptr device) const; + + /** + * @brief Returns true if \a device is to be disconnected automatically when + * all applications will be closed + */ + virtual bool ToBeAutoDisconnected(DeviceSptr device) const; + /** * @brief Find connection that has state - ESTABLISHED. * @@ -433,7 +446,7 @@ class TransportAdapterImpl : public TransportAdapter, * * @return pointer to the connection. */ - Connection* FindEstablishedConnection(const DeviceUID& device_handle, + ConnectionSPtr FindEstablishedConnection(const DeviceUID& device_handle, const ApplicationHandle& app_handle) const; private: @@ -451,6 +464,15 @@ class TransportAdapterImpl : public TransportAdapter, void RemoveDevice(const DeviceUID& device_handle); /** + * Checks whether application is single active on device + * @param device_uid + * @param app_uid + * @return true if this application is the single application on device + */ + bool IsSingleApplication(const DeviceUID& device_uid, + const ApplicationHandle& app_uid); + + /** * @brief Listener for device adapter notifications. **/ TransportAdapterListenerList listeners_; @@ -464,7 +486,7 @@ class TransportAdapterImpl : public TransportAdapter, * @brief Structure that holds information about connection. */ struct ConnectionInfo { - Connection* connection; + ConnectionSPtr connection; DeviceUID device_id; ApplicationHandle app_handle; enum { @@ -493,7 +515,7 @@ class TransportAdapterImpl : public TransportAdapter, /** * @brief Mutex restricting access to device map. **/ - mutable pthread_mutex_t devices_mutex_; + mutable sync_primitives::Lock devices_mutex_; /** * @brief Container(map) of connections. @@ -503,9 +525,16 @@ class TransportAdapterImpl : public TransportAdapter, /** * @brief Mutex restricting access to connections map. **/ - mutable pthread_mutex_t connections_mutex_; + mutable sync_primitives::RWLock connections_lock_; protected: +#ifdef TIME_TESTER + /** + * @brief Pointer to time metric observer + */ + TMMetricObserver* metric_observer_; +#endif // TIME_TESTER + /** * @brief Pointer to the device scanner. */ @@ -520,14 +549,8 @@ 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 62fdb3fa2e..4c38716f3f 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,15 +33,12 @@ #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" @@ -104,6 +101,12 @@ 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. @@ -250,12 +253,6 @@ 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. @@ -263,11 +260,6 @@ 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_; @@ -352,6 +344,9 @@ 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 d1f485c9d5..b90c504a4b 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 fc6af46a47..7c1fbd4551 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 fd6e77013a..215b66f6e3 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,16 +36,17 @@ #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" -namespace transport_manager { +#include "utils/threads/thread.h" + +class Thread; +namespace transport_manager { namespace transport_adapter { class UsbHandler { @@ -71,9 +72,16 @@ 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_; - // TODO(Eamakhov): change to threads::Thread usage - pthread_t thread_; + threads::Thread* 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 939a8fcb3c..ab35f862c6 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 3a0d2f8a26..d55c887bd1 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 <pthread.h> +#include "utils/lock.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_; - pthread_mutex_t out_messages_mutex_; + sync_primitives::Lock 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 26b00087ff..c33e0f2361 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 55fb028ef7..b0d8c1e453 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 ed0fda91ee..ebd25bd37b 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 8c4f8a9d4c..c701a86e0a 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 0937222155..9efb7ba58d 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,8 +38,7 @@ #include <list> -#include <pthread.h> - +#include "utils/lock.h" #include "transport_manager/transport_adapter/device_scanner.h" #include "transport_manager/usb/common.h" @@ -69,7 +68,7 @@ class UsbDeviceScanner : public DeviceScanner, public UsbDeviceListener { typedef std::list<PlatformUsbDevice*> Devices; Devices devices_; - pthread_mutex_t devices_mutex_; + sync_primitives::Lock devices_mutex_; }; } // namespace |