diff --git a/src/AlarmHandler.cpp b/src/AlarmHandler.cpp index bb84f30ceaec5f512bf9ddc45bc72cffc9353e9f..dfcdad1ff5785d18079d49919b28e607a662b586 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 3b48c7f1d16b90212b4835504584c71d68ec467b..137ad66ebc363bc72a99e00f79bd4890b7561084 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 b4af05f8c78f9d573fae2b6f5bab3cc9d193d5ba..60c8e8657eb86258872970859fa3d29bb38f4424 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 d53a4c6c72f8c0af68116d190b7e0f771f8679e7..02edbc2570f08d3c20b62d092fc515e477bdefde 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 b17e2a3b750ae88ef19f67894c20c6bf24cb0c7d..fd49b6636e9d0b5f3910acdb7f052c23e7690024 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 393ac93eba970227509ac4b5eb560e4bd5a89c1a..0a855a31c9674dab54d39b0940761897dbab343d 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 -----*/