diff --git a/smocore/deviceManager/deviceManager.cpp b/smocore/deviceManager/deviceManager.cpp index 3e8c58f..49c6f09 100644 --- a/smocore/deviceManager/deviceManager.cpp +++ b/smocore/deviceManager/deviceManager.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -26,6 +27,10 @@ std::vector> std::vector DeviceManager::commandLineDASpecs; +DeviceManager::~DeviceManager() +{ +} + const std::string DeviceManager::stringifyDeviceSpecs(void) { std::ostringstream oss; @@ -700,5 +705,20 @@ void DeviceManager::detachAllAttachedDeviceRoles( request.get(), request)); } +void DeviceManager::initializeDeviceReattacher() +{ + deviceReattacher = std::make_unique( + *this, mrntt::mrntt.thread); + + deviceReattacher->start(); +} + +void DeviceManager::finalizeDeviceReattacher() +{ + if (deviceReattacher) { + deviceReattacher->stop(); + } +} + } // namespace device } // namespace smo diff --git a/smocore/include/deviceManager/deviceManager.h b/smocore/include/deviceManager/deviceManager.h index 18f7db5..3aa95ec 100644 --- a/smocore/include/deviceManager/deviceManager.h +++ b/smocore/include/deviceManager/deviceManager.h @@ -13,12 +13,15 @@ #include #include #include +#include #include #include namespace smo { namespace device { +class DeviceReattacher; + class DeviceManager { public: @@ -33,6 +36,9 @@ public: void finalize(void) {}; + void initializeDeviceReattacher(); + void finalizeDeviceReattacher(); + std::string readDapSpecFile(const std::string& filename); void collateAllDapSpecs(void); void parseAllDapSpecs(void); @@ -82,9 +88,9 @@ public: private: DeviceManager() - : qutex("DeviceManager") + : qutex("DeviceManager"), deviceReattacher(nullptr) {} - ~DeviceManager() = default; + ~DeviceManager(); DeviceManager(const DeviceManager&) = delete; DeviceManager& operator=(const DeviceManager&) = delete; @@ -98,6 +104,8 @@ public: static std::vector commandLineDASpecs; private: + std::unique_ptr deviceReattacher; + class NewDeviceAttachmentSpecInd; class RemoveDeviceAttachmentSpecReq; class AttachSenseDeviceReq; diff --git a/smocore/marionette/lifetime.cpp b/smocore/marionette/lifetime.cpp index 471f91e..e45be15 100644 --- a/smocore/marionette/lifetime.cpp +++ b/smocore/marionette/lifetime.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -56,6 +57,7 @@ public: return; } + device::DeviceManager::getInstance().initializeDeviceReattacher(); context->callOriginalCb(success); } @@ -70,6 +72,8 @@ public: + ": Must be executed on Marionette thread"); } + device::DeviceManager::getInstance().finalizeDeviceReattacher(); + smo::mind::globalMind->finalizeReq({context, std::bind( &MrnttLifetimeMgmtOp::finalizeReq2, this, context, std::placeholders::_1)});