From 8d1489ef33148aa7f173a4938cd314addedd517b Mon Sep 17 00:00:00 2001 From: gscalamera <graziano.scalamera@elettra.eu> Date: Wed, 22 Apr 2020 09:45:31 +0200 Subject: [PATCH] Add command ReLoadAll --- src/AlarmHandler.cpp | 33 +++++++++++++++++++++++++++++++- src/AlarmHandler.h | 7 +++++++ src/AlarmHandler.xmi | 9 +++++++++ src/AlarmHandlerClass.cpp | 27 ++++++++++++++++++++++++++ src/AlarmHandlerClass.h | 23 ++++++++++++++++++++++ src/AlarmHandlerStateMachine.cpp | 15 +++++++++++++++ 6 files changed, 113 insertions(+), 1 deletion(-) diff --git a/src/AlarmHandler.cpp b/src/AlarmHandler.cpp index bb84f30..dfcdad1 100644 --- a/src/AlarmHandler.cpp +++ b/src/AlarmHandler.cpp @@ -108,6 +108,7 @@ static const char __FILE__rev[] = __FILE__ " $Revision: 1.29 $"; // ResetStatistics | reset_statistics // StopNew | stop_new // GetAlarmInfo | get_alarm_info +// ReLoadAll | re_load_all //================================================================ //================================================================ @@ -927,7 +928,7 @@ void AlarmHandler::read_alarmAudible(Tango::Attribute &attr) //-------------------------------------------------------- void AlarmHandler::read_StatisticsResetTime(Tango::Attribute &attr) { - DEBUG_STREAM << "AlarmHandler::read_StatisticsResetTime(Tango::Attribute &attr) entering... " << endl; + //DEBUG_STREAM << "AlarmHandler::read_StatisticsResetTime(Tango::Attribute &attr) entering... " << endl; /*----- PROTECTED REGION ID(AlarmHandler::read_StatisticsResetTime) ENABLED START -----*/ timespec now; clock_gettime(CLOCK_MONOTONIC, &now); @@ -3199,6 +3200,36 @@ Tango::DevVarStringArray *AlarmHandler::get_alarm_info(const Tango::DevVarString return argout; } //-------------------------------------------------------- +/** + * Command ReLoadAll related method + * Description: Re Load all alarms. + * + */ +//-------------------------------------------------------- +void AlarmHandler::re_load_all() +{ + DEBUG_STREAM << "AlarmHandler::ReLoadAll() - " << device_name << endl; + /*----- PROTECTED REGION ID(AlarmHandler::re_load_all) ENABLED START -----*/ + // Add your own code + vector<string> tmp_alm_vec; + + alarms.get_alarm_list_db(tmp_alm_vec, saved_alarms); + for(vector<string>::iterator it_al = tmp_alm_vec.begin(); it_al!= tmp_alm_vec.end(); it_al++) + { + Tango::DevString arg = Tango::string_dup(it_al->c_str()); + try + { + modify(arg); + } + catch(Tango::DevFailed &e) + { + DEBUG_STREAM << __func__ << ": Exception modifying alarm " << *it_al << " err=" << e.errors[0].desc<<endl; + } + Tango::string_free(arg); + } + /*----- PROTECTED REGION END -----*/ // AlarmHandler::re_load_all +} +//-------------------------------------------------------- /** * Method : AlarmHandler::add_dynamic_commands() * Description : Create the dynamic commands if any diff --git a/src/AlarmHandler.h b/src/AlarmHandler.h index 3b48c7f..137ad66 100644 --- a/src/AlarmHandler.h +++ b/src/AlarmHandler.h @@ -493,6 +493,13 @@ public: */ virtual Tango::DevVarStringArray *get_alarm_info(const Tango::DevVarStringArray *argin); virtual bool is_GetAlarmInfo_allowed(const CORBA::Any &any); + /** + * Command ReLoadAll related method + * Description: Re Load all alarms. + * + */ + virtual void re_load_all(); + virtual bool is_ReLoadAll_allowed(const CORBA::Any &any); //-------------------------------------------------------- diff --git a/src/AlarmHandler.xmi b/src/AlarmHandler.xmi index b4af05f..60c8e86 100644 --- a/src/AlarmHandler.xmi +++ b/src/AlarmHandler.xmi @@ -168,6 +168,15 @@ </argout> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </commands> + <commands name="ReLoadAll" description="Re Load all alarms." execMethod="re_load_all" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false"> + <argin description=""> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description=""> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </commands> <attributes name="alarmAudible" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false"> <dataType xsi:type="pogoDsl:BooleanType"/> <changeEvent fire="true" libCheckCriteria="false"/> diff --git a/src/AlarmHandlerClass.cpp b/src/AlarmHandlerClass.cpp index d53a4c6..02edbc2 100644 --- a/src/AlarmHandlerClass.cpp +++ b/src/AlarmHandlerClass.cpp @@ -406,6 +406,24 @@ CORBA::Any *GetAlarmInfoClass::execute(Tango::DeviceImpl *device, const CORBA::A return insert((static_cast<AlarmHandler *>(device))->get_alarm_info(argin)); } +//-------------------------------------------------------- +/** + * method : ReLoadAllClass::execute() + * description : method to trigger the execution of the command. + * + * @param device The device on which the command must be executed + * @param in_any The command input data + * + * returns The command output data (packed in the Any object) + */ +//-------------------------------------------------------- +CORBA::Any *ReLoadAllClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +{ + cout2 << "ReLoadAllClass::execute(): arrived" << endl; + ((static_cast<AlarmHandler *>(device))->re_load_all()); + return new CORBA::Any(); +} + //=================================================================== // Properties management @@ -1226,6 +1244,15 @@ void AlarmHandlerClass::command_factory() Tango::OPERATOR); command_list.push_back(pGetAlarmInfoCmd); + // Command ReLoadAll + ReLoadAllClass *pReLoadAllCmd = + new ReLoadAllClass("ReLoadAll", + Tango::DEV_VOID, Tango::DEV_VOID, + "", + "", + Tango::OPERATOR); + command_list.push_back(pReLoadAllCmd); + /*----- PROTECTED REGION ID(AlarmHandlerClass::command_factory_after) ENABLED START -----*/ // Add your own code diff --git a/src/AlarmHandlerClass.h b/src/AlarmHandlerClass.h index b17e2a3..fd49b66 100644 --- a/src/AlarmHandlerClass.h +++ b/src/AlarmHandlerClass.h @@ -558,6 +558,29 @@ public: {return (static_cast<AlarmHandler *>(dev))->is_GetAlarmInfo_allowed(any);} }; +// Command ReLoadAll class definition +class ReLoadAllClass : public Tango::Command +{ +public: + ReLoadAllClass(const char *name, + Tango::CmdArgType in, + Tango::CmdArgType out, + const char *in_desc, + const char *out_desc, + Tango::DispLevel level) + :Command(name,in,out,in_desc,out_desc, level) {}; + + ReLoadAllClass(const char *name, + Tango::CmdArgType in, + Tango::CmdArgType out) + :Command(name,in,out) {}; + ~ReLoadAllClass() {}; + + virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any); + virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any) + {return (static_cast<AlarmHandler *>(dev))->is_ReLoadAll_allowed(any);} +}; + /** * The AlarmHandlerClass singleton definition diff --git a/src/AlarmHandlerStateMachine.cpp b/src/AlarmHandlerStateMachine.cpp index 393ac93..0a855a3 100644 --- a/src/AlarmHandlerStateMachine.cpp +++ b/src/AlarmHandlerStateMachine.cpp @@ -484,6 +484,21 @@ bool AlarmHandler::is_GetAlarmInfo_allowed(TANGO_UNUSED(const CORBA::Any &any)) return true; } +//-------------------------------------------------------- +/** + * Method : AlarmHandler::is_ReLoadAll_allowed() + * Description : Execution allowed for ReLoadAll attribute + */ +//-------------------------------------------------------- +bool AlarmHandler::is_ReLoadAll_allowed(TANGO_UNUSED(const CORBA::Any &any)) +{ + // Not any excluded states for ReLoadAll command. + /*----- PROTECTED REGION ID(AlarmHandler::ReLoadAllStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // AlarmHandler::ReLoadAllStateAllowed + return true; +} + /*----- PROTECTED REGION ID(AlarmHandler::AlarmHandlerStateAllowed.AdditionalMethods) ENABLED START -----*/ -- GitLab