diff options
author | Justin Dickow <jjdickow@gmail.com> | 2014-07-23 13:46:57 -0400 |
---|---|---|
committer | Justin Dickow <jjdickow@gmail.com> | 2014-07-23 13:46:57 -0400 |
commit | 011d467db8b5fb54593175942b5746ba02a76bb3 (patch) | |
tree | 589fda7f0f86c6b3a1e171afcef657891de03a34 | |
parent | e516e434ebf595de7600f3b7247a42795655df31 (diff) | |
download | smartdevicelink-011d467db8b5fb54593175942b5746ba02a76bb3.tar.gz |
transport_manager
Signed-off-by: Justin Dickow <jjdickow@gmail.com>
13 files changed, 126 insertions, 10 deletions
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter.h index 8a1a3a920..11dd0ee48 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter.h @@ -42,7 +42,9 @@ #include "utils/shared_ptr.h" #include "transport_manager/common.h" #include "transport_manager/error.h" +#ifdef TIME_TESTER #include "transport_manager/time_metric_observer.h" +#endif // TIME_TESTER namespace transport_manager { namespace transport_adapter { @@ -245,13 +247,14 @@ class TransportAdapter { */ virtual std::string DeviceName(const DeviceUID& device_id) const = 0; +#ifdef TIME_TESTER /** * @brief Return Time metric observer * * @param return pointer to Time metric observer */ virtual TMMetricObserver* GetTimeMetricObserver() = 0; - +#endif // TIME_TESTER }; 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 20e912304..f87651b24 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 @@ -64,6 +64,13 @@ class TransportAdapterController { virtual void SearchDeviceDone(const DeviceVector& devices) = 0; /** + * @brief Search for application in device done, if it is not there - adds it. + * + * @param device Smart pointers to devices. + */ + virtual void SearchApplicationsDone(const DeviceSptr& device) = 0; + + /** * @brief Launch OnSearchDeviceFailed event in device adapter listener. * * @param error Error class that contains details of this error situation. 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 3ece30077..bba6bf538 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 @@ -238,6 +238,13 @@ class TransportAdapterImpl : public TransportAdapter, virtual void SearchDeviceDone(const DeviceVector& devices); /** + * @brief Search for application in device done, if it is not there - adds it. + * + * @param device Smart pointers to devices. + */ + virtual void SearchApplicationsDone(const DeviceSptr& device); + + /** * @brief Launch OnSearchDeviceFailed event in device adapter listener. * * @param error Error class that contains details of this error situation. @@ -379,6 +386,7 @@ class TransportAdapterImpl : public TransportAdapter, */ virtual std::string DeviceName(const DeviceUID& device_id) const; +#ifdef TIME_TESTER /** * @brief Setup observer for time metric. * @@ -392,6 +400,7 @@ class TransportAdapterImpl : public TransportAdapter, * @param return pointer to Time metric observer */ virtual TMMetricObserver* GetTimeMetricObserver(); +#endif // TIME_TESTER protected: @@ -514,10 +523,12 @@ class TransportAdapterImpl : public TransportAdapter, */ 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_adapter/transport_adapter_listener.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h index 186ed9967..48bb0e59a 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h @@ -86,6 +86,16 @@ class TransportAdapterListener { const TransportAdapter* transport_adapter) = 0; /** + * @brief Reaction on event, when new applications are started on device + * and SDL found this application + * + * @param adapter Current transport adapter + * @param device_handle Unique ID of device with new application list + */ + virtual void OnApplicationListUpdated(const TransportAdapter* adapter, + const DeviceUID& device_handle) = 0; + + /** * @brief Search specified device adapter in the container of shared pointers to device adapters to be sure it is available, * launch event ON_CONNECT_DONE in transport manager. * diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h index df3eebfbe..ac945919a 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h @@ -59,6 +59,7 @@ class TransportAdapterListenerImpl ON_SEARCH_DONE = 0, ON_SEARCH_FAIL, ON_DEVICE_LIST_UPDATED, + ON_APPLICATION_LIST_UPDATED, ON_CONNECT_DONE, ON_CONNECT_FAIL, ON_DISCONNECT_DONE, @@ -113,6 +114,18 @@ class TransportAdapterListenerImpl */ virtual void OnDeviceListUpdated(const TransportAdapter* adapter); + + /** + * @brief Reaction on event, when new applications are started on device + * and SDL found this application + * + * @param adapter Current transport adapter + * @param device_handle Unique ID of device with new application list + */ + + virtual void OnApplicationListUpdated(const TransportAdapter* adapter, + const DeviceUID& device_handle); + /** * @brief Search specified device adapter in the container of shared pointers *to device adapters to be sure it is available, diff --git a/src/components/transport_manager/include/transport_manager/transport_manager.h b/src/components/transport_manager/include/transport_manager/transport_manager.h index deb334ae1..c7c61b97f 100644 --- a/src/components/transport_manager/include/transport_manager/transport_manager.h +++ b/src/components/transport_manager/include/transport_manager/transport_manager.h @@ -78,7 +78,7 @@ class TransportManager { * * @return Code error. **/ - virtual int ConnectDevice(const DeviceHandle &device_id) = 0; + virtual int ConnectDevice(const DeviceHandle& device_id) = 0; /** * @brief Disconnect from all applications connected on device. @@ -87,7 +87,7 @@ class TransportManager { * * @return Code error. **/ - virtual int DisconnectDevice(const DeviceHandle &device_id) = 0; + virtual int DisconnectDevice(const DeviceHandle& device_id) = 0; /** * @brief Disconnect from applications connected on device by connection @@ -157,7 +157,7 @@ class TransportManager { * * @return Code error. **/ - virtual int RemoveDevice(const DeviceHandle &device_handle) = 0; + virtual int RemoveDevice(const DeviceHandle& device_handle) = 0; /** * @brief Turns on or off visibility of SDL to mobile devices 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 d7c55e2c1..786461464 100755 --- a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h +++ b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h @@ -54,7 +54,9 @@ #include "transport_manager/transport_manager.h" #include "transport_manager/transport_manager_listener.h" #include "transport_manager/transport_adapter/transport_adapter_listener_impl.h" +#ifdef TIME_TESTER #include "transport_manager/time_metric_observer.h" +#endif // TIME_TESTER using ::transport_manager::transport_adapter::TransportAdapterListener; @@ -227,13 +229,15 @@ class TransportManagerImpl : public TransportManager { */ void UpdateDeviceList(TransportAdapter* ta); - +#ifdef TIME_TESTER /** * @brief Setup observer for time metric. * * @param observer - pointer to observer */ void SetTimeMetricObserver(TMMetricObserver* observer); +#endif // TIME_TESTER + /** * @brief Constructor. @@ -382,7 +386,9 @@ class TransportManagerImpl : public TransportManager { * @brief Flag that TM is initialized */ bool is_initialized_; +#ifdef TIME_TESTER TMMetricObserver* metric_observer_; +#endif // TIME_TESTER private: /** * @brief Structure that contains conversion functions (Device ID -> Device diff --git a/src/components/transport_manager/include/transport_manager/transport_manager_listener.h b/src/components/transport_manager/include/transport_manager/transport_manager_listener.h index a4b240472..8384504cd 100644 --- a/src/components/transport_manager/include/transport_manager/transport_manager_listener.h +++ b/src/components/transport_manager/include/transport_manager/transport_manager_listener.h @@ -58,6 +58,14 @@ class TransportManagerListener { virtual void OnDeviceListUpdated(const std::vector<DeviceInfo>&) = 0; /** + * @brief Reaction on event, when new applications are started on device + * and SDL found this application + * + * @param device_handle Unique ID of connected device + */ + virtual void OnApplicationListUpdated(DeviceHandle device_handle) = 0; + + /** * @brief Reaction to the event, when the device is found. * * @param device_info Variable that hold information about device. diff --git a/src/components/transport_manager/include/transport_manager/transport_manager_listener_empty.h b/src/components/transport_manager/include/transport_manager/transport_manager_listener_empty.h index 5251a1c50..bd653da16 100644 --- a/src/components/transport_manager/include/transport_manager/transport_manager_listener_empty.h +++ b/src/components/transport_manager/include/transport_manager/transport_manager_listener_empty.h @@ -52,7 +52,7 @@ class TransportManagerListenerEmpty : public TransportManagerListener { /** * @Destructor. */ - virtual ~TransportManagerListenerEmpty(){}; + virtual ~TransportManagerListenerEmpty(){} /** * @brief Reaction to the event, when the list of devices is updated. @@ -63,6 +63,15 @@ class TransportManagerListenerEmpty : public TransportManagerListener { } /** + * @brief Reaction on event, when new applications are started on device + * and SDL found this application + * + * @param device_handle Unique ID of device with new application list + */ + virtual void OnApplicationListUpdated(DeviceHandle device_handle){ + } + + /** * @brief Reaction to the event, when the device is found. * * @param device_info Variable that hold information about device. 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 e2453b749..498c04d4e 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 @@ -57,8 +57,11 @@ TransportAdapterImpl::TransportAdapterImpl( connections_mutex_(), device_scanner_(device_scanner), server_connection_factory_(server_connection_factory), - client_connection_listener_(client_connection_listener), - metric_observer_(NULL) { + 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); } @@ -348,6 +351,12 @@ void TransportAdapterImpl::SearchDeviceDone(const DeviceVector& devices) { } } +void TransportAdapterImpl::SearchApplicationsDone(const DeviceSptr& device) { + for (TransportAdapterListenerList::iterator it = listeners_.begin(); + it != listeners_.end(); ++it) + (*it)->OnApplicationListUpdated(this, device->unique_device_id()); +} + void TransportAdapterImpl::SearchDeviceFailed(const SearchDeviceError& error) { for (TransportAdapterListenerList::iterator it = listeners_.begin(); it != listeners_.end(); ++it) @@ -438,9 +447,11 @@ void TransportAdapterImpl::DisconnectDone(const DeviceUID& device_id, void TransportAdapterImpl::DataReceiveDone(const DeviceUID& device_id, const ApplicationHandle& app_handle, RawMessageSptr message) { +#ifdef TIME_TESTER if (metric_observer_) { metric_observer_->StartRawMsg(message.get()); } +#endif // TIME_TESTER for (TransportAdapterListenerList::iterator it = listeners_.begin(); it != listeners_.end(); ++it) (*it)->OnDataReceiveDone(this, device_id, app_handle, message); @@ -577,13 +588,17 @@ std::string TransportAdapterImpl::DeviceName(const DeviceUID& device_id) const { } } +#ifdef TIME_TESTER void TransportAdapterImpl::SetTimeMetricObserver(TMMetricObserver* observer) { metric_observer_ = observer; } +#endif // TIME_TESTER +#ifdef TIME_TESTER TMMetricObserver* TransportAdapterImpl::GetTimeMetricObserver() { return metric_observer_; } +#endif // TIME_TESTER void TransportAdapterImpl::Store() const { } diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc index b32def07f..2af655cf4 100644 --- a/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc +++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc @@ -89,6 +89,17 @@ void TransportAdapterListenerImpl::OnDeviceListUpdated( } } +void TransportAdapterListenerImpl::OnApplicationListUpdated(const TransportAdapter* adapter, + const DeviceUID& device_handle) { + TransportAdapterEvent event(TransportAdapterListenerImpl::EventTypeEnum::ON_APPLICATION_LIST_UPDATED, + transport_adapter_, device_handle, 0, RawMessageSptr(), NULL); + + if (transport_manager::E_SUCCESS != + transport_manager_impl_->ReceiveEventFromDevice(event)) { + LOG4CXX_WARN(logger_, "Failed to receive event from device"); + } +} + void TransportAdapterListenerImpl::OnConnectDone( const TransportAdapter* adapter, const DeviceUID& device, const ApplicationHandle& application_id) { diff --git a/src/components/transport_manager/src/transport_manager_default.cc b/src/components/transport_manager/src/transport_manager_default.cc index 4e8250ae9..8cf0605ce 100644 --- a/src/components/transport_manager/src/transport_manager_default.cc +++ b/src/components/transport_manager/src/transport_manager_default.cc @@ -60,29 +60,37 @@ int TransportManagerDefault::Init() { transport_adapter::TransportAdapterImpl* ta; #ifdef BLUETOOTH_SUPPORT ta = new transport_adapter::BluetoothTransportAdapter; +#ifdef TIME_TESTER if (metric_observer_) { ta->SetTimeMetricObserver(metric_observer_); } +#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 if (metric_observer_) { ta->SetTimeMetricObserver(metric_observer_); } +#endif // TIME_TESTER AddTransportAdapter(ta); #ifdef USB_SUPPORT ta = new transport_adapter::UsbAoaAdapter(); +#ifdef TIME_TESTER if (metric_observer_) { ta->SetTimeMetricObserver(metric_observer_); } +#endif // TIME_TESTER AddTransportAdapter(ta); #endif #ifdef MME_SUPPORT ta = new transport_adapter::MmeTransportAdapter(); +#ifdef TIME_TESTER if (metric_observer_) { ta->SetTimeMetricObserver(metric_observer_); } +#endif // TIME_TESTER AddTransportAdapter(ta); #endif diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc index 144e1466a..bb7aa24b3 100644 --- a/src/components/transport_manager/src/transport_manager_impl.cc +++ b/src/components/transport_manager/src/transport_manager_impl.cc @@ -76,8 +76,11 @@ TransportManagerImpl::TransportManagerImpl() event_queue_thread_(), device_listener_thread_wakeup_(), is_initialized_(false), - connection_id_counter_(0), - metric_observer_(NULL) { + connection_id_counter_(0) +#ifdef TIME_TESTER + , metric_observer_(NULL) +#endif // TIME_TESTER +{ LOG4CXX_INFO(logger_, "=============================================="); #ifdef USE_RWLOCK pthread_rwlock_init(&message_queue_rwlock_, NULL); @@ -622,9 +625,16 @@ void TransportManagerImpl::EventListenerThread(void) { } case TransportAdapterListenerImpl::EventTypeEnum::ON_DEVICE_LIST_UPDATED : { + LOG4CXX_INFO(logger_, "Event ON_DEVICE_LIST_UPDATED"); OnDeviceListUpdated(ta); break; } + case TransportAdapterListenerImpl::EventTypeEnum::ON_APPLICATION_LIST_UPDATED: { + LOG4CXX_INFO(logger_, "Event ON_APPLICATION_LIST_UPDATED"); + device_handle = converter_.UidToHandle(device_id); + RaiseEvent(&TransportManagerListener::OnApplicationListUpdated, device_handle); + break; + } case TransportAdapterListenerImpl::EventTypeEnum::ON_CONNECT_DONE: { LOG4CXX_INFO(logger_, "Event ON_CONNECT_DONE"); device_handle = converter_.UidToHandle(device_id); @@ -713,9 +723,11 @@ void TransportManagerImpl::EventListenerThread(void) { break; } data->set_connection_key(connection->id); +#ifdef TIME_TESTER if (metric_observer_) { metric_observer_->StopRawMsg(data.get()); } +#endif // TIME_TESTER RaiseEvent(&TransportManagerListener::OnTMMessageReceived, data); break; } @@ -769,9 +781,12 @@ void TransportManagerImpl::EventListenerThread(void) { LOG4CXX_INFO(logger_, "Event listener thread finished"); } +#ifdef TIME_TESTER void TransportManagerImpl::SetTimeMetricObserver(TMMetricObserver* observer) { metric_observer_ = observer; } +#endif // TIME_TESTER + void* TransportManagerImpl::MessageQueueStartThread(void* data) { if (NULL != data) { static_cast<TransportManagerImpl*>(data)->MessageQueueThread(); |