diff --git a/HdcpProfile/HdcpProfile.cpp b/HdcpProfile/HdcpProfile.cpp index 3f237804..4179ba00 100644 --- a/HdcpProfile/HdcpProfile.cpp +++ b/HdcpProfile/HdcpProfile.cpp @@ -77,8 +77,6 @@ namespace WPEFramework : PluginHost::JSONRPC() { RegisterAll(); - _engine = Core::ProxyType>::Create(); - _communicatorClient = Core::ProxyType::Create(Core::NodeId("/tmp/communicator"), Core::ProxyType(_engine)); } HdcpProfile::~HdcpProfile() @@ -86,11 +84,11 @@ namespace WPEFramework UnregisterAll(); } - const string HdcpProfile::Initialize(PluginHost::IShell * /* service */) + const string HdcpProfile::Initialize(PluginHost::IShell *service) { HdcpProfile::_instance = this; InitializeIARM(); - InitializePowerManager(); + InitializePowerManager(service); try { device::Manager::Initialize(); @@ -109,27 +107,16 @@ namespace WPEFramework _powerManagerPlugin.Reset(); } - LOGINFO("Disconnect from the COM-RPC socket\n"); - - // Disconnect from the COM-RPC socket - if (_communicatorClient.IsValid()) { - _communicatorClient->Close(RPC::CommunicationTimeOut); - _communicatorClient.Release(); - } - if (_engine.IsValid()) { - _engine.Release(); - } HdcpProfile::_instance = nullptr; // No need to run device::Manager::DeInitialize for individual plugin. As it is a singleton instance // and shared among all wpeframework plugins DeinitializeIARM(); } - void HdcpProfile::InitializePowerManager() + void HdcpProfile::InitializePowerManager(PluginHost::IShell *service) { - _powerManagerPlugin = PowerManagerInterfaceBuilder(_communicatorClient, _T("org.rdk.PowerManager")) - .withTimeout(3000) - .withVersion(~0) + _powerManagerPlugin = PowerManagerInterfaceBuilder(_T("org.rdk.PowerManager")) + .withIShell(service) .createInterface(); } diff --git a/HdcpProfile/HdcpProfile.h b/HdcpProfile/HdcpProfile.h index 6b7bdae9..52340dd9 100644 --- a/HdcpProfile/HdcpProfile.h +++ b/HdcpProfile/HdcpProfile.h @@ -46,8 +46,6 @@ namespace WPEFramework { // We do not allow this plugin to be copied !! HdcpProfile(const HdcpProfile&) = delete; HdcpProfile& operator=(const HdcpProfile&) = delete; - Core::ProxyType > _engine; - Core::ProxyType _communicatorClient; static PowerManagerInterfaceRef _powerManagerPlugin; void InitializeIARM(); @@ -55,7 +53,7 @@ namespace WPEFramework { void RegisterAll(); void UnregisterAll(); - void InitializePowerManager(); + void InitializePowerManager(PluginHost::IShell * service); //Begin methods uint32_t getHDCPStatusWrapper(const JsonObject& parameters, JsonObject& response); diff --git a/HdmiCecSink/HdmiCecSink.cpp b/HdmiCecSink/HdmiCecSink.cpp index 22e3e5f8..b2cf119f 100644 --- a/HdmiCecSink/HdmiCecSink.cpp +++ b/HdmiCecSink/HdmiCecSink.cpp @@ -687,16 +687,14 @@ namespace WPEFramework , _registeredEventHandlers(false) { LOGWARN("Initlaizing HdmiCecSink"); - _engine = Core::ProxyType>::Create(); - _communicatorClient = Core::ProxyType::Create(Core::NodeId("/tmp/communicator"), Core::ProxyType(_engine)); } HdmiCecSink::~HdmiCecSink() { } - const std::string HdmiCecSink::Initialize(PluginHost::IShell * /* service */) + const std::string HdmiCecSink::Initialize(PluginHost::IShell *service) { - InitializePowerManager(); + InitializePowerManager(service); profileType = searchRdkProfile(); if (profileType == STB || profileType == NOT_FOUND) @@ -826,17 +824,6 @@ namespace WPEFramework { _powerManagerPlugin.Reset(); } - LOGINFO("Disconnect from the COM-RPC socket\n"); - // Disconnect from the COM-RPC socket - if (_communicatorClient.IsValid()) - { - _communicatorClient->Close(RPC::CommunicationTimeOut); - _communicatorClient.Release(); - } - if(_engine.IsValid()) - { - _engine.Release(); - } _registeredEventHandlers = false; profileType = searchRdkProfile(); @@ -910,11 +897,10 @@ namespace WPEFramework } } - void HdmiCecSink::InitializePowerManager() + void HdmiCecSink::InitializePowerManager(PluginHost::IShell *service) { - _powerManagerPlugin = PowerManagerInterfaceBuilder(_communicatorClient, _T("org.rdk.PowerManager")) - .withTimeout(3000) - .withVersion(~0) + _powerManagerPlugin = PowerManagerInterfaceBuilder(_T("org.rdk.PowerManager")) + .withIShell(service) .createInterface(); registerEventHandlers(); } diff --git a/HdmiCecSink/HdmiCecSink.h b/HdmiCecSink/HdmiCecSink.h index 1249d362..e3443ad0 100644 --- a/HdmiCecSink/HdmiCecSink.h +++ b/HdmiCecSink/HdmiCecSink.h @@ -646,7 +646,7 @@ namespace WPEFramework { uint32_t getAudioDeviceConnectedStatusWrapper(const JsonObject& parameters, JsonObject& response); uint32_t requestAudioDevicePowerStatusWrapper(const JsonObject& parameters, JsonObject& response); uint32_t setLatencyInfoWrapper(const JsonObject& parameters, JsonObject& response); - void InitializePowerManager(); + void InitializePowerManager(PluginHost::IShell *service); //End methods std::string logicalAddressDeviceType; bool cecSettingEnabled; @@ -690,8 +690,6 @@ namespace WPEFramework { std::vector m_connectedDevices; HdmiCecSinkProcessor *msgProcessor; HdmiCecSinkFrameListener *msgFrameListener; - Core::ProxyType > _engine; - Core::ProxyType _communicatorClient; PowerManagerInterfaceRef _powerManagerPlugin; Core::Sink _pwrMgrNotification; bool _registeredEventHandlers; diff --git a/HdmiCecSource/HdmiCecSource.cpp b/HdmiCecSource/HdmiCecSource.cpp index c44a4799..f0ba0f98 100644 --- a/HdmiCecSource/HdmiCecSource.cpp +++ b/HdmiCecSource/HdmiCecSource.cpp @@ -404,8 +404,6 @@ namespace WPEFramework , _registeredEventHandlers(false) { LOGWARN("ctor"); - _engine = Core::ProxyType>::Create(); - _communicatorClient = Core::ProxyType::Create(Core::NodeId("/tmp/communicator"), Core::ProxyType(_engine)); } HdmiCecSource::~HdmiCecSource() @@ -413,7 +411,7 @@ namespace WPEFramework LOGWARN("dtor"); } - const string HdmiCecSource::Initialize(PluginHost::IShell* /* service */) + const string HdmiCecSource::Initialize(PluginHost::IShell *service) { LOGWARN("Initlaizing CEC_2"); uint32_t res = Core::ERROR_GENERAL; @@ -456,7 +454,7 @@ namespace WPEFramework //CEC plugin functionalities will only work if CECmgr is available. If plugin Initialize failure upper layer will call dtor directly. InitializeIARM(); - InitializePowerManager(); + InitializePowerManager(service); // load persistence setting loadSettings(); @@ -539,17 +537,6 @@ namespace WPEFramework { _powerManagerPlugin.Reset(); } - LOGINFO("Disconnect from the COM-RPC socket\n"); - // Disconnect from the COM-RPC socket - if (_communicatorClient.IsValid()) - { - _communicatorClient->Close(RPC::CommunicationTimeOut); - _communicatorClient.Release(); - } - if(_engine.IsValid()) - { - _engine.Release(); - } _registeredEventHandlers = false; profileType = searchRdkProfile(); @@ -729,12 +716,11 @@ namespace WPEFramework return ret; } - void HdmiCecSource::InitializePowerManager() + void HdmiCecSource::InitializePowerManager(PluginHost::IShell *service) { LOGINFO("Connect the COM-RPC socket\n"); - _powerManagerPlugin = PowerManagerInterfaceBuilder(_communicatorClient, _T("org.rdk.PowerManager")) - .withTimeout(3000) - .withVersion(~0) + _powerManagerPlugin = PowerManagerInterfaceBuilder(_T("org.rdk.PowerManager")) + .withIShell(service) .createInterface(); registerEventHandlers(); } diff --git a/HdmiCecSource/HdmiCecSource.h b/HdmiCecSource/HdmiCecSource.h index 63eb1a0f..30e9d5ad 100644 --- a/HdmiCecSource/HdmiCecSource.h +++ b/HdmiCecSource/HdmiCecSource.h @@ -297,7 +297,7 @@ namespace WPEFramework { HdmiCecSourceProcessor *msgProcessor; HdmiCecSourceFrameListener *msgFrameListener; - void InitializePowerManager(); + void InitializePowerManager(PluginHost::IShell *service); const void InitializeIARM(); void DeinitializeIARM(); static void dsHdmiEventHandler(const char *owner, IARM_EventId_t eventId, void *data, size_t len); @@ -329,8 +329,6 @@ namespace WPEFramework { static void threadHotPlugEventHandler(int data); static void threadCecDaemonInitHandler(); static void threadCecStatusUpdateHandler(int data); - Core::ProxyType > _engine; - Core::ProxyType _communicatorClient; PowerManagerInterfaceRef _powerManagerPlugin; Core::Sink _pwrMgrNotification; bool _registeredEventHandlers; diff --git a/HdmiCec_2/HdmiCec_2.cpp b/HdmiCec_2/HdmiCec_2.cpp index 57579979..ebf6728d 100644 --- a/HdmiCec_2/HdmiCec_2.cpp +++ b/HdmiCec_2/HdmiCec_2.cpp @@ -405,8 +405,6 @@ namespace WPEFramework Register(HDMICEC2_METHOD_GET_ACTIVE_SOURCE_STATUS, &HdmiCec_2::getActiveSourceStatus, this); Register(HDMICEC2_METHOD_SEND_KEY_PRESS,&HdmiCec_2::sendRemoteKeyPressWrapper,this); Register("getDeviceList", &HdmiCec_2::getDeviceList, this); - _engine = Core::ProxyType>::Create(); - _communicatorClient = Core::ProxyType::Create(Core::NodeId("/tmp/communicator"), Core::ProxyType(_engine)); } HdmiCec_2::~HdmiCec_2() @@ -415,7 +413,7 @@ namespace WPEFramework LOGWARN("dtor"); } - const string HdmiCec_2::Initialize(PluginHost::IShell* /* service */) + const string HdmiCec_2::Initialize(PluginHost::IShell* service) { LOGWARN("Initlaizing CEC_2"); string msg; @@ -448,7 +446,7 @@ namespace WPEFramework //CEC plugin functionalities will only work if CECmgr is available. If plugin Initialize failure upper layer will call dtor directly. InitializeIARM(); - InitializePowerManager(); + InitializePowerManager(service); // load persistence setting loadSettings(); @@ -520,17 +518,6 @@ namespace WPEFramework { _powerManagerPlugin.Reset(); } - LOGINFO("Disconnect from the COM-RPC socket\n"); - // Disconnect from the COM-RPC socket - if (_communicatorClient.IsValid()) - { - _communicatorClient->Close(RPC::CommunicationTimeOut); - _communicatorClient.Release(); - } - if(_engine.IsValid()) - { - _engine.Release(); - } _registeredEventHandlers = false; if(true == getEnabled()) { @@ -554,12 +541,11 @@ namespace WPEFramework } } - void HdmiCec_2::InitializePowerManager() + void HdmiCec_2::InitializePowerManager(PluginHost::IShell* service) { LOGINFO("Connect the COM-RPC socket\n"); - _powerManagerPlugin = PowerManagerInterfaceBuilder(_communicatorClient, _T("org.rdk.PowerManager")) - .withTimeout(3000) - .withVersion(~0) + _powerManagerPlugin = PowerManagerInterfaceBuilder(_T("org.rdk.PowerManager")) + .withIShell(service) .createInterface(); registerEventHandlers(); } diff --git a/HdmiCec_2/HdmiCec_2.h b/HdmiCec_2/HdmiCec_2.h index 96fe498f..0882ae7f 100644 --- a/HdmiCec_2/HdmiCec_2.h +++ b/HdmiCec_2/HdmiCec_2.h @@ -294,12 +294,10 @@ namespace WPEFramework { HdmiCec_2Processor *msgProcessor; HdmiCec_2FrameListener *msgFrameListener; - Core::ProxyType > _engine; - Core::ProxyType _communicatorClient; PowerManagerInterfaceRef _powerManagerPlugin; Core::Sink _pwrMgrNotification; bool _registeredEventHandlers; - void InitializePowerManager(); + void InitializePowerManagerPluginHost::IShell *service const void InitializeIARM(); void DeinitializeIARM(); static void cecMgrEventHandler(const char *owner, IARM_EventId_t eventId, void *data, size_t len); diff --git a/helpers/PluginInterfaceBuilder.h b/helpers/PluginInterfaceBuilder.h index 523c7368..d10a7f2b 100644 --- a/helpers/PluginInterfaceBuilder.h +++ b/helpers/PluginInterfaceBuilder.h @@ -34,18 +34,16 @@ namespace Plugin { template class PluginInterfaceRef { INTERFACE* _interface; - PluginHost::IShell* _controller; + PluginHost::IShell* _service; public: PluginInterfaceRef() : _interface(nullptr) - , _controller(nullptr) { } PluginInterfaceRef(INTERFACE* interface, PluginHost::IShell* controller) : _interface(interface) - , _controller(controller) { } @@ -61,19 +59,15 @@ namespace Plugin { // use move PluginInterfaceRef(PluginInterfaceRef&& other) : _interface(other._interface) - , _controller(other._controller) { other._interface = nullptr; - other._controller = nullptr; } PluginInterfaceRef& operator=(PluginInterfaceRef&& other) { if (this != &other) { _interface = other._interface; - _controller = other._controller; other._interface = nullptr; - other._controller = nullptr; } return *this; } @@ -88,22 +82,12 @@ namespace Plugin { return _interface; } - inline PluginHost::IShell* controller() - { - return _controller; - } - void Reset() { if (_interface) { _interface->Release(); _interface = nullptr; } - - if (_controller) { - _controller->Release(); - _controller = nullptr; - } } }; @@ -115,13 +99,13 @@ namespace Plugin { INTERFACE* createInterface(PluginInterfaceBuilder& builder) { WPEFramework::PluginHost::IShell* controller = builder.controller(); - + const std::string& callsign = builder.callSign(); if (!controller) { LOGERR("Invalid controller"); return nullptr; } - auto pluginInterface = controller->QueryInterface(); + auto pluginInterface = controller->QueryInterfaceByCallsign(callsign.c_str()); if (pluginInterface) { pluginInterface->AddRef(); @@ -139,17 +123,15 @@ namespace Plugin { template class PluginInterfaceBuilder { - Core::ProxyType& _communicatorClient; const std::string _callsign; - PluginHost::IShell* _controller; + PluginHost::IShell* _service; uint32_t _version; uint32_t _timeout; public: - PluginInterfaceBuilder(Core::ProxyType& communicatorClient, const char* callsign) - : _communicatorClient(communicatorClient) - , _callsign(callsign) - , _controller(nullptr) + PluginInterfaceBuilder(const char* callsign) + : _callsign(callsign) + , _service(nullptr) , _version(static_cast(~0)) , _timeout(3000) { @@ -170,7 +152,13 @@ namespace Plugin { return *this; } - PluginInterfaceRef createInterface(void) + inline PluginInterfaceBuilder& withIShell(PluginHost::IShell * service) + { + _service = service; + return *this; + } + + PluginInterfaceRef createInterface() { auto* interface = ::WPEFramework::Plugin::createInterface(*this); @@ -179,37 +167,17 @@ namespace Plugin { } // pass on the ownership of controller to interfaceRef - return std::move(PluginInterfaceRef(interface, _controller)); + return std::move(PluginInterfaceRef(interface, _service)); } - inline Core::ProxyType& communicator() + const std::string& callSign() const { - return _communicatorClient; + return _callsign; } WPEFramework::PluginHost::IShell* controller() { - do { - if (!_communicatorClient.IsValid()) { - LOGWARN("Invalid _communicatorClient"); - break; - } - LOGINFO("Connect to COM-RPC socket for %s", _callsign.c_str()); - if (!_controller) { - _controller = _communicatorClient->Open(_callsign.c_str(), _version, _timeout); - } - - if (!_controller) { - LOGERR("Failed to create controller for %s", _callsign.c_str()); - break; - } - - // success case - return _controller; - } while (false); - - // failure case - return nullptr; + return _service; } }; diff --git a/helpers/frontpanel.cpp b/helpers/frontpanel.cpp index fd5bba8b..cd8674a2 100644 --- a/helpers/frontpanel.cpp +++ b/helpers/frontpanel.cpp @@ -84,8 +84,6 @@ namespace WPEFramework static int m_currentBlinkListIndex = 0; static std::vector m_lights; static device::List fpIndicators; - static Core::ProxyType > _engine; - static Core::ProxyType _communicatorClient; static PowerManagerInterfaceRef _powerManagerPlugin; static Core::TimerType blinkTimer(64 * 1024, "BlinkTimer"); @@ -127,19 +125,18 @@ namespace WPEFramework : m_blinkTimer(this) , m_isBlinking(false) { - _engine = Core::ProxyType>::Create(); - _communicatorClient = Core::ProxyType::Create(Core::NodeId("/tmp/communicator"), Core::ProxyType(_engine)); - - _powerManagerPlugin = PowerManagerInterfaceBuilder(_communicatorClient, _T("org.rdk.PowerManager")) - .withTimeout(3000) - .withVersion(~0) - .createInterface(); } - CFrontPanel* CFrontPanel::instance() + CFrontPanel* CFrontPanel::instance(PluginHost::IShell *service) { if (!initDone) { + if (nullptr != service) + { + _powerManagerPlugin = PowerManagerInterfaceBuilder(_T("org.rdk.PowerManager")) + .withIShell(service) + .createInterface(); + } if (!s_instance) s_instance = new CFrontPanel; #ifdef USE_DS diff --git a/helpers/frontpanel.h b/helpers/frontpanel.h index 7df84a55..d9b441ca 100644 --- a/helpers/frontpanel.h +++ b/helpers/frontpanel.h @@ -97,7 +97,7 @@ namespace WPEFramework class CFrontPanel { public: - static CFrontPanel* instance(); + static CFrontPanel* instance(PluginHost::IShell *service = nullptr); bool start(); bool stop(); std::string getLastError();