From 6db6856856a9580536730afc0981cb0d1dc44309 Mon Sep 17 00:00:00 2001 From: Timo Lotterbach Date: Wed, 28 Nov 2012 02:15:25 -0800 Subject: [PATCH] LayerManagerService: updated IPlugin, PluginBase all plugins are now required to provide their API type and version as well as their name. This allows loading all plugins using the same mechanism and detect their type during runtime. The API version can be used to make sure, that the LayerManagerService supports this verison of the plugin API. The name of the plugin is used for logging. Signed-off-by: Timo Lotterbach --- LayerManagerClient/ilmClient/include/ilm_types.h | 28 ++++++++++++++++++++++++ LayerManagerService/include/IPlugin.h | 6 ++++- LayerManagerService/include/PluginBase.h | 20 ++++++++++++++--- LayerManagerService/src/Layermanager.cpp | 2 +- LayerManagerService/src/PluginBase.cpp | 25 +++++++++++++++++---- 5 files changed, 72 insertions(+), 9 deletions(-) diff --git a/LayerManagerClient/ilmClient/include/ilm_types.h b/LayerManagerClient/ilmClient/include/ilm_types.h index c847281..4713aff 100644 --- a/LayerManagerClient/ilmClient/include/ilm_types.h +++ b/LayerManagerClient/ilmClient/include/ilm_types.h @@ -312,4 +312,32 @@ enum HealthCondition HealthDead }; +/** + * enum for identifying plugin types and versions + * + * All plugins are started in the order defined by their value + * in this enum (lowest first, highest last). + * The plugins are stopped in opposite order (highest first, + * lowest last). + */ +typedef enum PluginApi +{ + Renderer_Api = 0x00010000, + Renderer_Api_v1, + + SceneProvider_Api = 0x00020000, + SceneProvider_Api_v1, + + Communicator_Api = 0x00040000, + Communicator_Api_v1, + + HealthMonitor_Api = 0x00080000, + HealthMonitor_Api_v1 +} ilmPluginApi; + +#define PLUGIN_IS_COMMUNICATOR(x) ((x) & Communicator_Api) +#define PLUGIN_IS_RENDERER(x) ((x) & Renderer_Api) +#define PLUGIN_IS_SCENEPROVIDER(x) ((x) & SceneProvider_Api) +#define PLUGIN_IS_HEALTHMONITOR(x) ((x) & HealthMonitor_Api) + #endif // _ILM_TYPES_H_ diff --git a/LayerManagerService/include/IPlugin.h b/LayerManagerService/include/IPlugin.h index ccc46ae..6d73e2e 100644 --- a/LayerManagerService/include/IPlugin.h +++ b/LayerManagerService/include/IPlugin.h @@ -25,7 +25,11 @@ class IPlugin { public: - virtual HealthCondition getHealth() = 0; + virtual PluginApi pluginGetApi() const = 0; + virtual t_ilm_const_string pluginGetName() const = 0; + virtual HealthCondition pluginGetHealth() = 0; + + virtual ~IPlugin() {} }; #endif // __IPLUGIN_H__ diff --git a/LayerManagerService/include/PluginBase.h b/LayerManagerService/include/PluginBase.h index e4d146f..21fb913 100644 --- a/LayerManagerService/include/PluginBase.h +++ b/LayerManagerService/include/PluginBase.h @@ -21,17 +21,31 @@ #define __PLUGINBASE_H__ #include "IPlugin.h" +#include "ilm_types.h" + +class ICommandExecutor; +class Configuration; class PluginBase : public IPlugin { public: - PluginBase(); - virtual HealthCondition getHealth(); + PluginBase(ICommandExecutor& executor, Configuration& config, ilmPluginApi api); + virtual ~PluginBase(); + + // from IPlugin + virtual PluginApi pluginGetApi() const; + virtual t_ilm_const_string pluginGetName() const; + virtual HealthCondition pluginGetHealth(); + +protected: + void pluginSetHealth(HealthCondition health); protected: - void setHealth(HealthCondition health); + ICommandExecutor& mExecutor; + Configuration& mConfiguration; private: + PluginApi mApi; HealthCondition mHealth; }; diff --git a/LayerManagerService/src/Layermanager.cpp b/LayerManagerService/src/Layermanager.cpp index 34cd2b1..3e31d6c 100644 --- a/LayerManagerService/src/Layermanager.cpp +++ b/LayerManagerService/src/Layermanager.cpp @@ -551,7 +551,7 @@ HealthCondition Layermanager::getHealth() while ((iter != iterEnd) && (HealthRunning == returnValue)) { IPlugin* monitoredPlugin = *iter; - returnValue = monitoredPlugin->getHealth(); + returnValue = monitoredPlugin->pluginGetHealth(); ++iter; } diff --git a/LayerManagerService/src/PluginBase.cpp b/LayerManagerService/src/PluginBase.cpp index dd065ae..b16ed65 100644 --- a/LayerManagerService/src/PluginBase.cpp +++ b/LayerManagerService/src/PluginBase.cpp @@ -21,17 +21,34 @@ #include "ICommandExecutor.h" #include "Scene.h" -PluginBase::PluginBase() -: mHealth(HealthStopped) +PluginBase::PluginBase(ICommandExecutor& executor, Configuration& config, ilmPluginApi api) +: mExecutor(executor) +, mConfiguration(config) +, mApi(api) +, mHealth(HealthStopped) { } -HealthCondition PluginBase::getHealth() +PluginBase::~PluginBase() +{ +} + +PluginApi PluginBase::pluginGetApi() const +{ + return mApi; +} + +t_ilm_const_string PluginBase::pluginGetName() const +{ + return "NoName"; +} + +HealthCondition PluginBase::pluginGetHealth() { return mHealth; } -void PluginBase::setHealth(HealthCondition health) +void PluginBase::pluginSetHealth(HealthCondition health) { mHealth = health; } -- 2.7.4