Skip to content
Snippets Groups Projects
AlarmHandlerClass.cpp 50.2 KiB
Newer Older
	alarmunacknowledgednormal->set_change_event(true, true);
	alarmunacknowledgednormal->set_archive_event(true, true);
	att_list.push_back(alarmunacknowledgednormal);

	//	Attribute : alarmShelved
	alarmShelvedAttrib	*alarmshelved = new alarmShelvedAttrib();
	Tango::UserDefaultAttrProp	alarmshelved_prop;
	alarmshelved_prop.set_description("List of alarms in shelved state");
	//	label	not set for alarmShelved
	//	unit	not set for alarmShelved
	//	standard_unit	not set for alarmShelved
	//	display_unit	not set for alarmShelved
	//	format	not set for alarmShelved
	//	max_value	not set for alarmShelved
	//	min_value	not set for alarmShelved
	//	max_alarm	not set for alarmShelved
	//	min_alarm	not set for alarmShelved
	//	max_warning	not set for alarmShelved
	//	min_warning	not set for alarmShelved
	//	delta_t	not set for alarmShelved
	//	delta_val	not set for alarmShelved
	alarmshelved->set_default_properties(alarmshelved_prop);
	alarmshelved->set_disp_level(Tango::OPERATOR);
	alarmshelved->set_change_event(true, true);
	alarmshelved->set_archive_event(true, true);
	att_list.push_back(alarmshelved);

	//	Attribute : alarmOutOfService
	alarmOutOfServiceAttrib	*alarmoutofservice = new alarmOutOfServiceAttrib();
	Tango::UserDefaultAttrProp	alarmoutofservice_prop;
	alarmoutofservice_prop.set_description("List of alarms in out of service state");
	//	label	not set for alarmOutOfService
	//	unit	not set for alarmOutOfService
	//	standard_unit	not set for alarmOutOfService
	//	display_unit	not set for alarmOutOfService
	//	format	not set for alarmOutOfService
	//	max_value	not set for alarmOutOfService
	//	min_value	not set for alarmOutOfService
	//	max_alarm	not set for alarmOutOfService
	//	min_alarm	not set for alarmOutOfService
	//	max_warning	not set for alarmOutOfService
	//	min_warning	not set for alarmOutOfService
	//	delta_t	not set for alarmOutOfService
	//	delta_val	not set for alarmOutOfService
	alarmoutofservice->set_default_properties(alarmoutofservice_prop);
	alarmoutofservice->set_disp_level(Tango::OPERATOR);
	alarmoutofservice->set_change_event(true, true);
	alarmoutofservice->set_archive_event(true, true);
	att_list.push_back(alarmoutofservice);

	//	Attribute : alarmSilenced
	alarmSilencedAttrib	*alarmsilenced = new alarmSilencedAttrib();
	Tango::UserDefaultAttrProp	alarmsilenced_prop;
	alarmsilenced_prop.set_description("List of alarms in silenced state");
	//	label	not set for alarmSilenced
	//	unit	not set for alarmSilenced
	//	standard_unit	not set for alarmSilenced
	//	display_unit	not set for alarmSilenced
	//	format	not set for alarmSilenced
	//	max_value	not set for alarmSilenced
	//	min_value	not set for alarmSilenced
	//	max_alarm	not set for alarmSilenced
	//	min_alarm	not set for alarmSilenced
	//	max_warning	not set for alarmSilenced
	//	min_warning	not set for alarmSilenced
	//	delta_t	not set for alarmSilenced
	//	delta_val	not set for alarmSilenced
	alarmsilenced->set_default_properties(alarmsilenced_prop);
	alarmsilenced->set_disp_level(Tango::OPERATOR);
	alarmsilenced->set_change_event(true, true);
	alarmsilenced->set_archive_event(true, true);
	att_list.push_back(alarmsilenced);

	//	Attribute : alarmList
	alarmListAttrib	*alarmlist = new alarmListAttrib();
	Tango::UserDefaultAttrProp	alarmlist_prop;
	alarmlist_prop.set_description("List of all alarms");
	//	label	not set for alarmList
	//	unit	not set for alarmList
	//	standard_unit	not set for alarmList
	//	display_unit	not set for alarmList
	//	format	not set for alarmList
	//	max_value	not set for alarmList
	//	min_value	not set for alarmList
	//	max_alarm	not set for alarmList
	//	min_alarm	not set for alarmList
	//	max_warning	not set for alarmList
	//	min_warning	not set for alarmList
	//	delta_t	not set for alarmList
	//	delta_val	not set for alarmList
	alarmlist->set_default_properties(alarmlist_prop);
	alarmlist->set_disp_level(Tango::OPERATOR);
	alarmlist->set_change_event(true, true);
	alarmlist->set_archive_event(true, true);
	att_list.push_back(alarmlist);

	//	Attribute : alarmFrequency
	alarmFrequencyAttrib	*alarmfrequency = new alarmFrequencyAttrib();
	Tango::UserDefaultAttrProp	alarmfrequency_prop;
	alarmfrequency_prop.set_description("List of frequency of evaluation of all alarms");
	//	label	not set for alarmFrequency
	//	unit	not set for alarmFrequency
	//	standard_unit	not set for alarmFrequency
	//	display_unit	not set for alarmFrequency
	//	format	not set for alarmFrequency
	//	max_value	not set for alarmFrequency
	//	min_value	not set for alarmFrequency
	//	max_alarm	not set for alarmFrequency
	//	min_alarm	not set for alarmFrequency
	//	max_warning	not set for alarmFrequency
	//	min_warning	not set for alarmFrequency
	//	delta_t	not set for alarmFrequency
	//	delta_val	not set for alarmFrequency
	alarmfrequency->set_default_properties(alarmfrequency_prop);
	alarmfrequency->set_disp_level(Tango::OPERATOR);
	alarmfrequency->set_change_event(true, true);
	alarmfrequency->set_archive_event(true, true);
	att_list.push_back(alarmfrequency);
	//	Attribute : alarmSummary
	alarmSummaryAttrib	*alarmsummary = new alarmSummaryAttrib();
	Tango::UserDefaultAttrProp	alarmsummary_prop;
	//	description	not set for alarmSummary
	//	label	not set for alarmSummary
	//	unit	not set for alarmSummary
	//	standard_unit	not set for alarmSummary
	//	display_unit	not set for alarmSummary
	//	format	not set for alarmSummary
	//	max_value	not set for alarmSummary
	//	min_value	not set for alarmSummary
	//	max_alarm	not set for alarmSummary
	//	min_alarm	not set for alarmSummary
	//	max_warning	not set for alarmSummary
	//	min_warning	not set for alarmSummary
	//	delta_t	not set for alarmSummary
	//	delta_val	not set for alarmSummary
	
	alarmsummary->set_default_properties(alarmsummary_prop);
	//	Not Polled
	alarmsummary->set_disp_level(Tango::OPERATOR);
	//	Not Memorized
	alarmsummary->set_change_event(true, true);
	alarmsummary->set_archive_event(true, true);
	att_list.push_back(alarmsummary);

	//	Attribute : eventList
	eventListAttrib	*eventlist = new eventListAttrib();
	Tango::UserDefaultAttrProp	eventlist_prop;
	eventlist_prop.set_description("List of all subscribed attributes");
	//	label	not set for eventList
	//	unit	not set for eventList
	//	standard_unit	not set for eventList
	//	display_unit	not set for eventList
	//	format	not set for eventList
	//	max_value	not set for eventList
	//	min_value	not set for eventList
	//	max_alarm	not set for eventList
	//	min_alarm	not set for eventList
	//	max_warning	not set for eventList
	//	min_warning	not set for eventList
	//	delta_t	not set for eventList
	//	delta_val	not set for eventList
	
	eventlist->set_default_properties(eventlist_prop);
	//	Not Polled
	eventlist->set_disp_level(Tango::OPERATOR);
	//	Not Memorized
	att_list.push_back(eventlist);

	//	Attribute : eventSummary
	eventSummaryAttrib	*eventsummary = new eventSummaryAttrib();
	Tango::UserDefaultAttrProp	eventsummary_prop;
	//	description	not set for eventSummary
	//	label	not set for eventSummary
	//	unit	not set for eventSummary
	//	standard_unit	not set for eventSummary
	//	display_unit	not set for eventSummary
	//	format	not set for eventSummary
	//	max_value	not set for eventSummary
	//	min_value	not set for eventSummary
	//	max_alarm	not set for eventSummary
	//	min_alarm	not set for eventSummary
	//	max_warning	not set for eventSummary
	//	min_warning	not set for eventSummary
	//	delta_t	not set for eventSummary
	//	delta_val	not set for eventSummary
	
	eventsummary->set_default_properties(eventsummary_prop);
	//	Not Polled
	eventsummary->set_disp_level(Tango::OPERATOR);
	//	Not Memorized
	att_list.push_back(eventsummary);

	//	Attribute : alarmDisabled
	alarmDisabledAttrib	*alarmdisabled = new alarmDisabledAttrib();
	Tango::UserDefaultAttrProp	alarmdisabled_prop;
	alarmdisabled_prop.set_description("List of alarms in out of service or shelved state");
	//	label	not set for alarmDisabled
	//	unit	not set for alarmDisabled
	//	standard_unit	not set for alarmDisabled
	//	display_unit	not set for alarmDisabled
	//	format	not set for alarmDisabled
	//	max_value	not set for alarmDisabled
	//	min_value	not set for alarmDisabled
	//	max_alarm	not set for alarmDisabled
	//	min_alarm	not set for alarmDisabled
	//	max_warning	not set for alarmDisabled
	//	min_warning	not set for alarmDisabled
	//	delta_t	not set for alarmDisabled
	//	delta_val	not set for alarmDisabled
	
	alarmdisabled->set_default_properties(alarmdisabled_prop);
	//	Not Polled
	alarmdisabled->set_disp_level(Tango::OPERATOR);
	//	Not Memorized
	alarmdisabled->set_change_event(true, true);
	alarmdisabled->set_archive_event(true, true);
	att_list.push_back(alarmdisabled);


	//	Create a list of static attributes
	create_static_attribute_list(get_class_attr()->get_attr_list());
	/*----- PROTECTED REGION ID(AlarmHandlerClass::attribute_factory_after) ENABLED START -----*/
	/*----- PROTECTED REGION END -----*/	//	AlarmHandlerClass::attribute_factory_after
}
//--------------------------------------------------------
/**
 *	Method      : AlarmHandlerClass::pipe_factory()
 *	Description : Create the pipe object(s)
 *                and store them in the pipe list
 */
//--------------------------------------------------------
void AlarmHandlerClass::pipe_factory()
	/*----- PROTECTED REGION ID(AlarmHandlerClass::pipe_factory_before) ENABLED START -----*/
	/*----- PROTECTED REGION END -----*/	//	AlarmHandlerClass::pipe_factory_before
	/*----- PROTECTED REGION ID(AlarmHandlerClass::pipe_factory_after) ENABLED START -----*/
	/*----- PROTECTED REGION END -----*/	//	AlarmHandlerClass::pipe_factory_after
}
//--------------------------------------------------------
/**
 *	Method      : AlarmHandlerClass::command_factory()
 *	Description : Create the command object(s)
 *                and store them in the command list
 */
//--------------------------------------------------------
void AlarmHandlerClass::command_factory()
	/*----- PROTECTED REGION ID(AlarmHandlerClass::command_factory_before) ENABLED START -----*/
	/*----- PROTECTED REGION END -----*/	//	AlarmHandlerClass::command_factory_before


	//	Command Ack
	AckClass	*pAckCmd =
		new AckClass("Ack",
			Tango::DEVVAR_STRINGARRAY, Tango::DEV_VOID,
			"String array containing the alarms to be acknowledged",
			"",
			Tango::OPERATOR);
	command_list.push_back(pAckCmd);

	//	Command Load
	LoadClass	*pLoadCmd =
		new LoadClass("Load",
			Tango::DEV_STRING, Tango::DEV_VOID,
			"Alarm entry",
			"",
			Tango::OPERATOR);
	command_list.push_back(pLoadCmd);

	//	Command Remove
	RemoveClass	*pRemoveCmd =
		new RemoveClass("Remove",
			Tango::DEV_STRING, Tango::DEV_VOID,
			"Alarm name",
			"",
			Tango::OPERATOR);
	command_list.push_back(pRemoveCmd);

	//	Command SearchAlarm
	SearchAlarmClass	*pSearchAlarmCmd =
		new SearchAlarmClass("SearchAlarm",
			Tango::DEV_STRING, Tango::DEVVAR_STRINGARRAY,
			"String containing a filter for output, if empty or * return all alarms",
			"Configured alarms",
	//	Command StopAudible
	StopAudibleClass	*pStopAudibleCmd =
		new StopAudibleClass("StopAudible",
			Tango::DEV_VOID, Tango::DEV_VOID,
			"",
			"",
			Tango::OPERATOR);

	//	Command Silence
	SilenceClass	*pSilenceCmd =
		new SilenceClass("Silence",
			Tango::DEVVAR_STRINGARRAY, Tango::DEV_VOID,
			"String array containing the alarms to be silenced",
			"",
			Tango::OPERATOR);
	command_list.push_back(pSilenceCmd);

	//	Command Modify
	ModifyClass	*pModifyCmd =
		new ModifyClass("Modify",
			Tango::DEV_STRING, Tango::DEV_VOID,
			"Alarm entry",
			"",
			Tango::OPERATOR);
	command_list.push_back(pModifyCmd);

	//	Command Shelve
	ShelveClass	*pShelveCmd =
		new ShelveClass("Shelve",
			Tango::DEVVAR_STRINGARRAY, Tango::DEV_VOID,
			"String array containing alarm to be shelved",
			"",
			Tango::OPERATOR);
	command_list.push_back(pShelveCmd);

	//	Command Enable
	EnableClass	*pEnableCmd =
		new EnableClass("Enable",
			Tango::DEV_STRING, Tango::DEV_VOID,
			"Alarm name",
			"",
			Tango::OPERATOR);
	command_list.push_back(pEnableCmd);

	//	Command Disable
	DisableClass	*pDisableCmd =
		new DisableClass("Disable",
			Tango::DEV_STRING, Tango::DEV_VOID,
			"Alarm name",
			"",
			Tango::OPERATOR);
	command_list.push_back(pDisableCmd);

	//	Command ResetStatistics
	ResetStatisticsClass	*pResetStatisticsCmd =
		new ResetStatisticsClass("ResetStatistics",
			Tango::DEV_VOID, Tango::DEV_VOID,
			"",
			"",
			Tango::OPERATOR);
	command_list.push_back(pResetStatisticsCmd);

	//	Command StopNew
	StopNewClass	*pStopNewCmd =
		new StopNewClass("StopNew",
			Tango::DEV_VOID, Tango::DEV_VOID,
			"",
			"",
			Tango::OPERATOR);
	command_list.push_back(pStopNewCmd);

	//	Command GetAlarmInfo
	GetAlarmInfoClass	*pGetAlarmInfoCmd =
		new GetAlarmInfoClass("GetAlarmInfo",
			Tango::DEVVAR_STRINGARRAY, Tango::DEVVAR_STRINGARRAY,
			"Alarm name followed optionally by wanted key names",
			"Complete attribute info as an array of key=value",
			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 -----*/
	/*----- PROTECTED REGION END -----*/	//	AlarmHandlerClass::command_factory_after
}

//===================================================================
//	Dynamic attributes related methods
//===================================================================

//--------------------------------------------------------
/**
 * method : 		AlarmHandlerClass::create_static_attribute_list
 * description : 	Create the a list of static attributes
 *
 * @param	att_list	the ceated attribute list
 */
//--------------------------------------------------------
void AlarmHandlerClass::create_static_attribute_list(vector<Tango::Attr *> &att_list)
{
	for (unsigned long i=0 ; i<att_list.size() ; i++)
	{
		string att_name(att_list[i]->get_name());
		transform(att_name.begin(), att_name.end(), att_name.begin(), ::tolower);
		defaultAttList.push_back(att_name);
	}

	TANGO_LOG_INFO << defaultAttList.size() << " attributes in default list" << endl;
	/*----- PROTECTED REGION ID(AlarmHandlerClass::create_static_att_list) ENABLED START -----*/
	/*----- PROTECTED REGION END -----*/	//	AlarmHandlerClass::create_static_att_list
}


//--------------------------------------------------------
/**
 * method : 		AlarmHandlerClass::erase_dynamic_attributes
 * description : 	delete the dynamic attributes if any.
 *
 * @param	devlist_ptr	the device list pointer
 * @param	list of all attributes
 */
//--------------------------------------------------------
void AlarmHandlerClass::erase_dynamic_attributes(const Tango::DevVarStringArray *devlist_ptr, vector<Tango::Attr *> &att_list)
{
	Tango::Util *tg = Tango::Util::instance();

	for (unsigned long i=0 ; i<devlist_ptr->length() ; i++)
	{
		Tango::DeviceImpl *dev_impl = tg->get_device_by_name(((string)(*devlist_ptr)[i]).c_str());
		AlarmHandler *dev = static_cast<AlarmHandler *> (dev_impl);

		vector<Tango::Attribute *> &dev_att_list = dev->get_device_attr()->get_attribute_list();
		vector<Tango::Attribute *>::iterator ite_att;
		for (ite_att=dev_att_list.begin() ; ite_att != dev_att_list.end() ; ++ite_att)
		{
			string att_name((*ite_att)->get_name_lower());
			if ((att_name == "state") || (att_name == "status"))
				continue;
			vector<string>::iterator ite_str = find(defaultAttList.begin(), defaultAttList.end(), att_name);
			if (ite_str == defaultAttList.end())
			{
				TANGO_LOG_INFO << att_name << " is a UNWANTED dynamic attribute for device " << (*devlist_ptr)[i] << endl;
				Tango::Attribute &att = dev->get_device_attr()->get_attr_by_name(att_name.c_str());
				dev->remove_attribute(att_list[att.get_attr_idx()], true, false);
				--ite_att;
			}
		}
	}
	/*----- PROTECTED REGION ID(AlarmHandlerClass::erase_dynamic_attributes) ENABLED START -----*/
	/*----- PROTECTED REGION END -----*/	//	AlarmHandlerClass::erase_dynamic_attributes
}

//--------------------------------------------------------
/**
 *	Method      : AlarmHandlerClass::get_attr_object_by_name()
 *	Description : returns Tango::Attr * object found by name
 */
//--------------------------------------------------------
Tango::Attr *AlarmHandlerClass::get_attr_object_by_name(vector<Tango::Attr *> &att_list, string attname)
{
	vector<Tango::Attr *>::iterator it;
	for (it=att_list.begin() ; it<att_list.end() ; ++it)
		if ((*it)->get_name()==attname)
			return (*it);
	//	Attr does not exist
	return NULL;
}


/*----- PROTECTED REGION ID(AlarmHandlerClass::Additional Methods) ENABLED START -----*/
/*----- PROTECTED REGION END -----*/	//	AlarmHandlerClass::Additional Methods