summaryrefslogtreecommitdiff
path: root/src/components/transport_manager/src/transport_manager_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/transport_manager/src/transport_manager_impl.cc')
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc70
1 files changed, 51 insertions, 19 deletions
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index 0ee1d3304d..6c3edd7b91 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -32,7 +32,6 @@
#include "transport_manager/transport_manager_impl.h"
-#include <pthread.h>
#include <stdint.h>
#include <cstring>
#include <queue>
@@ -70,22 +69,20 @@ TransportManagerImpl::Connection TransportManagerImpl::convert(
}
TransportManagerImpl::TransportManagerImpl()
- : all_thread_active_(false),
- device_listener_thread_wakeup_(),
- is_initialized_(false),
+ : 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_INFO(logger_, "==============================================");
- pthread_cond_init(&device_listener_thread_wakeup_, NULL);
- LOG4CXX_DEBUG(logger_, "TransportManager object created");
+ LOG4CXX_TRACE(logger_, "TransportManager has created");
}
TransportManagerImpl::~TransportManagerImpl() {
LOG4CXX_DEBUG(logger_, "TransportManager object destroying");
+ message_queue_.Shutdown();
+ event_queue_.Shutdown();
for (std::vector<TransportAdapter*>::iterator it =
transport_adapters_.begin();
@@ -99,7 +96,6 @@ TransportManagerImpl::~TransportManagerImpl() {
delete it->second;
}
- pthread_cond_destroy(&device_listener_thread_wakeup_);
LOG4CXX_INFO(logger_, "TransportManager object destroyed");
}
@@ -226,18 +222,48 @@ 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_TRACE(logger_, "enter");
- if (!all_thread_active_) {
- LOG4CXX_TRACE(logger_,
- "exit with E_TM_IS_NOT_INITIALIZED. Condition: !all_thread_active_");
+ LOG4CXX_AUTO_TRACE(logger_);
+ if (!is_initialized_) {
+ LOG4CXX_WARN(logger_, "TransportManager is not initialized_");
return E_TM_IS_NOT_INITIALIZED;
}
- all_thread_active_ = false;
- pthread_cond_signal(&device_listener_thread_wakeup_);
+ message_queue_.Shutdown();
+ event_queue_.Shutdown();
- LOG4CXX_TRACE(logger_, "exit with E_SUCCESS");
+ DisconnectAllDevices();
+ TerminateAllAdapters();
+
+ is_initialized_ = false;
return E_SUCCESS;
}
@@ -390,12 +416,19 @@ 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;
@@ -478,10 +511,9 @@ void TransportManagerImpl::PostMessage(const ::protocol_handler::RawMessagePtr m
}
void TransportManagerImpl::PostEvent(const TransportAdapterEvent& event) {
- LOG4CXX_TRACE(logger_, "enter. TransportAdapterEvent: " << &event);
+ LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_DEBUG(logger_, "TransportAdapterEvent: " << &event);
event_queue_.PostMessage(event);
- pthread_cond_signal(&device_listener_thread_wakeup_);
- LOG4CXX_TRACE(logger_, "exit");
}
void TransportManagerImpl::AddConnection(const ConnectionInternal& c) {