#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 {
*/
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
};
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.
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.
*/
virtual std::string DeviceName(const DeviceUID& device_id) const;
+#ifdef TIME_TESTER
/**
* @brief Setup observer for time metric.
*
* @param return pointer to Time metric observer
*/
virtual TMMetricObserver* GetTimeMetricObserver();
+#endif // TIME_TESTER
protected:
*/
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
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.
*
ON_SEARCH_DONE = 0,
ON_SEARCH_FAIL,
ON_DEVICE_LIST_UPDATED,
+ ON_APPLICATION_LIST_UPDATED,
ON_CONNECT_DONE,
ON_CONNECT_FAIL,
ON_DISCONNECT_DONE,
*/
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,
*
* @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.
*
* @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
*
* @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
#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;
*/
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.
* @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
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.
/**
* @Destructor.
*/
- virtual ~TransportManagerListenerEmpty(){};
+ virtual ~TransportManagerListenerEmpty(){}
/**
* @brief Reaction to the event, when the list of devices is updated.
}
/**
+ * @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.
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);
}
}
}
+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)
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);
}
}
+#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 {
}
}
}
+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) {
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
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);
}
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);
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;
}
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();