From 9d33e2e261e9c28b421974f74caf8e2e37a264f9 Mon Sep 17 00:00:00 2001 From: gscalamera <graziano.scalamera@elettra.eu> Date: Tue, 14 Apr 2020 18:36:09 +0200 Subject: [PATCH] Add class properties --- src/AlarmHandler.xmi | 20 +++++- src/AlarmHandlerClass.cpp | 111 ++++++++++++++++++++++++++++++- src/AlarmHandlerClass.h | 8 +++ src/AlarmHandlerDynAttrUtils.cpp | 4 +- 4 files changed, 137 insertions(+), 6 deletions(-) diff --git a/src/AlarmHandler.xmi b/src/AlarmHandler.xmi index 71fd54f..b4af05f 100644 --- a/src/AlarmHandler.xmi +++ b/src/AlarmHandler.xmi @@ -1,10 +1,24 @@ <?xml version="1.0" encoding="ASCII"?> <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl"> - <classes name="AlarmHandler" pogoRevision="9.4"> - <description description="Elettra alarm handler device server" title="Elettra alarm handler device server" sourcePath="/home/graziano/ws/alarmhandler/src" language="Cpp" filestogenerate="XMI file,Code files,Protected Regions" license="GPL" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false"> + <classes name="AlarmHandler" pogoRevision="9.6"> + <description description="Elettra alarm handler device server" title="Elettra alarm handler device server" sourcePath="/home/graziano/ws/alarm-handler/src" language="Cpp" filestogenerate="XMI file,Code files,Protected Regions" license="GPL" copyright="" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false"> <inheritances classname="Device_4Impl" sourcePath=""/> <identification contact="at elettra.eu - graziano.scalamera" author="graziano.scalamera" emailDomain="elettra.eu" classFamily="SoftwareSystem" siteSpecific="" platform="Unix Like" bus="Not Applicable" manufacturer="" reference=""/> </description> + <classProperties name="GroupNames" description="Labels for Group mask, first is for mask 0x00"> + <type xsi:type="pogoDsl:StringVectorType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </classProperties> + <classProperties name="SubscribeRetryPeriod" description="Retry subscription period in seconds"> + <type xsi:type="pogoDsl:IntType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <DefaultPropValue>30</DefaultPropValue> + </classProperties> + <classProperties name="StatisticsTimeWindow" description="Time window to compute statistics in seconds"> + <type xsi:type="pogoDsl:IntVectorType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <DefaultPropValue>60</DefaultPropValue> + </classProperties> <deviceProperties name="GroupNames" description="Labels for Group mask, first is for mask 0x00"> <type xsi:type="pogoDsl:StringVectorType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> @@ -281,6 +295,6 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> </dynamicAttributes> - <preferences docHome="./doc_html" makefileHome="/usr/local/tango-9.2.5a/share/pogo/preferences"/> + <preferences docHome="./doc_html" makefileHome="/usr/local/tango-9.3.3/share/pogo/preferences"/> </classes> </pogoDsl:PogoSystem> diff --git a/src/AlarmHandlerClass.cpp b/src/AlarmHandlerClass.cpp index 36c770d..d53a4c6 100644 --- a/src/AlarmHandlerClass.cpp +++ b/src/AlarmHandlerClass.cpp @@ -80,6 +80,7 @@ AlarmHandlerClass::AlarmHandlerClass(string &s):Tango::DeviceClass(s) { cout2 << "Entering AlarmHandlerClass constructor" << endl; set_default_property(); + get_class_property(); write_class_property(); /*----- PROTECTED REGION ID(AlarmHandlerClass::constructor) ENABLED START -----*/ @@ -454,6 +455,73 @@ Tango::DbDatum AlarmHandlerClass::get_default_class_property(string &prop_name) return Tango::DbDatum(prop_name); } +//-------------------------------------------------------- +/** + * Method : AlarmHandlerClass::get_class_property() + * Description : Read database to initialize class property data members. + */ +//-------------------------------------------------------- +void AlarmHandlerClass::get_class_property() +{ + /*----- PROTECTED REGION ID(AlarmHandlerClass::get_class_property_before) ENABLED START -----*/ + + // Initialize class property data members + + /*----- PROTECTED REGION END -----*/ // AlarmHandlerClass::get_class_property_before + // Read class properties from database. + cl_prop.push_back(Tango::DbDatum("GroupNames")); + cl_prop.push_back(Tango::DbDatum("SubscribeRetryPeriod")); + cl_prop.push_back(Tango::DbDatum("StatisticsTimeWindow")); + + // Call database and extract values + if (Tango::Util::instance()->_UseDb==true) + get_db_class()->get_property(cl_prop); + Tango::DbDatum def_prop; + int i = -1; + + // Try to extract GroupNames value + if (cl_prop[++i].is_empty()==false) cl_prop[i] >> groupNames; + else + { + // Check default value for GroupNames + def_prop = get_default_class_property(cl_prop[i].name); + if (def_prop.is_empty()==false) + { + def_prop >> groupNames; + cl_prop[i] << groupNames; + } + } + // Try to extract SubscribeRetryPeriod value + if (cl_prop[++i].is_empty()==false) cl_prop[i] >> subscribeRetryPeriod; + else + { + // Check default value for SubscribeRetryPeriod + def_prop = get_default_class_property(cl_prop[i].name); + if (def_prop.is_empty()==false) + { + def_prop >> subscribeRetryPeriod; + cl_prop[i] << subscribeRetryPeriod; + } + } + // Try to extract StatisticsTimeWindow value + if (cl_prop[++i].is_empty()==false) cl_prop[i] >> statisticsTimeWindow; + else + { + // Check default value for StatisticsTimeWindow + def_prop = get_default_class_property(cl_prop[i].name); + if (def_prop.is_empty()==false) + { + def_prop >> statisticsTimeWindow; + cl_prop[i] << statisticsTimeWindow; + } + } + /*----- PROTECTED REGION ID(AlarmHandlerClass::get_class_property_after) ENABLED START -----*/ + + // Check class property data members init + + /*----- PROTECTED REGION END -----*/ // AlarmHandlerClass::get_class_property_after + +} //-------------------------------------------------------- /** @@ -472,6 +540,47 @@ void AlarmHandlerClass::set_default_property() vector<string> vect_data; // Set Default Class Properties + prop_name = "GroupNames"; + prop_desc = "Labels for Group mask, first is for mask 0x00"; + prop_def = ""; + vect_data.clear(); + if (prop_def.length()>0) + { + Tango::DbDatum data(prop_name); + data << vect_data ; + cl_def_prop.push_back(data); + add_wiz_class_prop(prop_name, prop_desc, prop_def); + } + else + add_wiz_class_prop(prop_name, prop_desc); + prop_name = "SubscribeRetryPeriod"; + prop_desc = "Retry subscription period in seconds"; + prop_def = "30"; + vect_data.clear(); + vect_data.push_back("30"); + if (prop_def.length()>0) + { + Tango::DbDatum data(prop_name); + data << vect_data ; + cl_def_prop.push_back(data); + add_wiz_class_prop(prop_name, prop_desc, prop_def); + } + else + add_wiz_class_prop(prop_name, prop_desc); + prop_name = "StatisticsTimeWindow"; + prop_desc = "Time window to compute statistics in seconds"; + prop_def = "60"; + vect_data.clear(); + vect_data.push_back("60"); + if (prop_def.length()>0) + { + Tango::DbDatum data(prop_name); + data << vect_data ; + cl_def_prop.push_back(data); + add_wiz_class_prop(prop_name, prop_desc, prop_def); + } + else + add_wiz_class_prop(prop_name, prop_desc); // Set Default device Properties prop_name = "GroupNames"; @@ -1195,7 +1304,7 @@ void AlarmHandlerClass::erase_dynamic_attributes(const Tango::DevVarStringArray //-------------------------------------------------------- /** - * Method : AlarmHandlerClass::get_attr_by_name() + * Method : AlarmHandlerClass::get_attr_object_by_name() * Description : returns Tango::Attr * object found by name */ //-------------------------------------------------------- diff --git a/src/AlarmHandlerClass.h b/src/AlarmHandlerClass.h index dab18e9..b17e2a3 100644 --- a/src/AlarmHandlerClass.h +++ b/src/AlarmHandlerClass.h @@ -574,6 +574,14 @@ class AlarmHandlerClass : public Tango::DeviceClass /*----- PROTECTED REGION END -----*/ // AlarmHandlerClass::Additionnal DServer data members + // Class properties data members + public: + // GroupNames: Labels for Group mask, first is for mask 0x00 + vector<string> groupNames; + // SubscribeRetryPeriod: Retry subscription period in seconds + Tango::DevLong subscribeRetryPeriod; + // StatisticsTimeWindow: Time window to compute statistics in seconds + vector<Tango::DevLong> statisticsTimeWindow; public: // write class properties data members Tango::DbData cl_prop; diff --git a/src/AlarmHandlerDynAttrUtils.cpp b/src/AlarmHandlerDynAttrUtils.cpp index f400d91..591b147 100644 --- a/src/AlarmHandlerDynAttrUtils.cpp +++ b/src/AlarmHandlerDynAttrUtils.cpp @@ -128,7 +128,7 @@ void AlarmHandler::add_AlarmState_dynamic_attribute(string attname) //-------------------------------------------------------- void AlarmHandler::remove_AlarmState_dynamic_attribute(string attname) { - remove_attribute(attname, true); + remove_attribute(attname, true, Tango::Util::instance()->_UseDb); map<string,Tango::DevEnum>::iterator ite; if ((ite=AlarmState_data.find(attname))!=AlarmState_data.end()) { @@ -189,7 +189,7 @@ void AlarmHandler::add_AlarmFormula_dynamic_attribute(string attname) //-------------------------------------------------------- void AlarmHandler::remove_AlarmFormula_dynamic_attribute(string attname) { - remove_attribute(attname, true); + remove_attribute(attname, true, Tango::Util::instance()->_UseDb); map<string,Tango::DevString>::iterator ite; if ((ite=AlarmFormula_data.find(attname))!=AlarmFormula_data.end()) { -- GitLab