-
Teresa Nunez authoredTeresa Nunez authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Keithley428Class.cpp 20.22 KiB
static const char *ClassId = "$Id: $";
static const char *TagName = "$Name: $";
static const char *CvsPath = "$Source: $";
static const char *SvnPath = "$HeadURL: $";
static const char *HttpServer = "http://www.esrf.fr/computing/cs/tango/tango_doc/ds_doc/";
//+=============================================================================
//
// file : Keithley428Class.cpp
//
// description : C++ source for the Keithley428Class. A singleton
// class derived from DeviceClass. It implements the
// command list and all properties and methods required
// by the Keithley428 once per process.
//
// project : TANGO Device Server
//
// $Author: $
//
// $Revision: $
//
// $Log: $
//
// copyleft : European Synchrotron Radiation Facility
// BP 220, Grenoble 38043
// FRANCE
//
//-=============================================================================
//
// This file is generated by POGO
// (Program Obviously used to Generate tango Object)
//
// (c) - Software Engineering Group - ESRF
//=============================================================================
#include <tango.h>
#include <Keithley428.h>
#include <Keithley428Class.h>
//+----------------------------------------------------------------------------
/**
* Create Keithley428Class singleton and return it in a C function for Python usage
*/
//+----------------------------------------------------------------------------
extern "C" {
#ifdef WIN32
__declspec(dllexport)
#endif
Tango::DeviceClass *_create_Keithley428_class(const char *name) {
return Keithley428_ns::Keithley428Class::init(name);
}
}
namespace Keithley428_ns
{
//+----------------------------------------------------------------------------
//
// method : AutoFilterOffClass::execute()
//
// description : method to trigger the execution of the command.
// PLEASE DO NOT MODIFY this method core without pogo
//
// in : - device : The device on which the command must be executed
// - in_any : The command input data
//
// returns : The command output data (packed in the Any object)
//
//-----------------------------------------------------------------------------
CORBA::Any *AutoFilterOffClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
{
cout2 << "AutoFilterOffClass::execute(): arrived" << endl;
((static_cast<Keithley428 *>(device))->auto_filter_off());
return new CORBA::Any();
}
//+----------------------------------------------------------------------------
//
// method : AutoFilterOnClass::execute()
//
// description : method to trigger the execution of the command.
// PLEASE DO NOT MODIFY this method core without pogo
//
// in : - device : The device on which the command must be executed
// - in_any : The command input data
//
// returns : The command output data (packed in the Any object)
//
//-----------------------------------------------------------------------------
CORBA::Any *AutoFilterOnClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
{
cout2 << "AutoFilterOnClass::execute(): arrived" << endl;
((static_cast<Keithley428 *>(device))->auto_filter_on());
return new CORBA::Any();
}
//+----------------------------------------------------------------------------
//
// method : FilterOffCmd::execute()
//
// description : method to trigger the execution of the command.
// PLEASE DO NOT MODIFY this method core without pogo
//
// in : - device : The device on which the command must be executed
// - in_any : The command input data
//
// returns : The command output data (packed in the Any object)
//
//-----------------------------------------------------------------------------
CORBA::Any *FilterOffCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
{
cout2 << "FilterOffCmd::execute(): arrived" << endl;
((static_cast<Keithley428 *>(device))->filter_off());
return new CORBA::Any();
}
//+----------------------------------------------------------------------------
//
// method : FilterOnCmd::execute()
//
// description : method to trigger the execution of the command.
// PLEASE DO NOT MODIFY this method core without pogo
//
// in : - device : The device on which the command must be executed
// - in_any : The command input data
//
// returns : The command output data (packed in the Any object)
//
//-----------------------------------------------------------------------------
CORBA::Any *FilterOnCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
{
cout2 << "FilterOnCmd::execute(): arrived" << endl;
((static_cast<Keithley428 *>(device))->filter_on());
return new CORBA::Any();
}
//+----------------------------------------------------------------------------
//
// method : PerformZeroCorrectClass::execute()
//
// description : method to trigger the execution of the command.
// PLEASE DO NOT MODIFY this method core without pogo
//
// in : - device : The device on which the command must be executed
// - in_any : The command input data
//
// returns : The command output data (packed in the Any object)
//
//-----------------------------------------------------------------------------
CORBA::Any *PerformZeroCorrectClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
{
cout2 << "PerformZeroCorrectClass::execute(): arrived" << endl;
((static_cast<Keithley428 *>(device))->perform_zero_correct());
return new CORBA::Any();
}
//
//----------------------------------------------------------------
// Initialize pointer for singleton pattern
//----------------------------------------------------------------
//
Keithley428Class *Keithley428Class::_instance = NULL;
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::Keithley428Class(string &s)
//
// description : constructor for the Keithley428Class
//
// in : - s : The class name
//
//-----------------------------------------------------------------------------
Keithley428Class::Keithley428Class(string &s):DeviceClass(s)
{
cout2 << "Entering Keithley428Class constructor" << endl;
set_default_property();
get_class_property();
write_class_property();
cout2 << "Leaving Keithley428Class constructor" << endl;
}
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::~Keithley428Class()
//
// description : destructor for the Keithley428Class
//
//-----------------------------------------------------------------------------
Keithley428Class::~Keithley428Class()
{
_instance = NULL;
}
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::instance
//
// description : Create the object if not already done. Otherwise, just
// return a pointer to the object
//
// in : - name : The class name
//
//-----------------------------------------------------------------------------
Keithley428Class *Keithley428Class::init(const char *name)
{
if (_instance == NULL)
{
try
{
string s(name);
_instance = new Keithley428Class(s);
}
catch (bad_alloc)
{
throw;
}
}
return _instance;
}
Keithley428Class *Keithley428Class::instance()
{
if (_instance == NULL)
{
cerr << "Class is not initialised !!" << endl;
exit(-1);
}
return _instance;
}
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::command_factory
//
// description : Create the command object(s) and store them in the
// command list
//
//-----------------------------------------------------------------------------
void Keithley428Class::command_factory()
{
command_list.push_back(new PerformZeroCorrectClass("PerformZeroCorrect",
Tango::DEV_VOID, Tango::DEV_VOID,
"",
"",
Tango::OPERATOR));
command_list.push_back(new FilterOnCmd("FilterOn",
Tango::DEV_VOID, Tango::DEV_VOID,
"",
"",
Tango::OPERATOR));
command_list.push_back(new FilterOffCmd("FilterOff",
Tango::DEV_VOID, Tango::DEV_VOID,
"",
"",
Tango::OPERATOR));
command_list.push_back(new AutoFilterOnClass("AutoFilterOn",
Tango::DEV_VOID, Tango::DEV_VOID,
"",
"",
Tango::OPERATOR));
command_list.push_back(new AutoFilterOffClass("AutoFilterOff",
Tango::DEV_VOID, Tango::DEV_VOID,
"",
"",
Tango::OPERATOR));
// add polling if any
for (unsigned int i=0 ; i<command_list.size(); i++)
{
}
}
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::get_class_property
//
// description : Get the class property for specified name.
//
// in : string name : The property name
//
//+----------------------------------------------------------------------------
Tango::DbDatum Keithley428Class::get_class_property(string &prop_name)
{
for (unsigned int i=0 ; i<cl_prop.size() ; i++)
if (cl_prop[i].name == prop_name)
return cl_prop[i];
// if not found, return an empty DbDatum
return Tango::DbDatum(prop_name);
}
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::get_default_device_property()
//
// description : Return the default value for device property.
//
//-----------------------------------------------------------------------------
Tango::DbDatum Keithley428Class::get_default_device_property(string &prop_name)
{
for (unsigned int i=0 ; i<dev_def_prop.size() ; i++)
if (dev_def_prop[i].name == prop_name)
return dev_def_prop[i];
// if not found, return an empty DbDatum
return Tango::DbDatum(prop_name);
}
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::get_default_class_property()
//
// description : Return the default value for class property.
//
//-----------------------------------------------------------------------------
Tango::DbDatum Keithley428Class::get_default_class_property(string &prop_name)
{
for (unsigned int i=0 ; i<cl_def_prop.size() ; i++)
if (cl_def_prop[i].name == prop_name)
return cl_def_prop[i];
// if not found, return an empty DbDatum
return Tango::DbDatum(prop_name);
}
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::device_factory
//
// description : Create the device object(s) and store them in the
// device list
//
// in : Tango::DevVarStringArray *devlist_ptr : The device name list
//
//-----------------------------------------------------------------------------
void Keithley428Class::device_factory(const Tango::DevVarStringArray *devlist_ptr)
{
// Create all devices.(Automatic code generation)
//-------------------------------------------------------------
for (unsigned long i=0 ; i < devlist_ptr->length() ; i++)
{
cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl;
// Create devices and add it into the device list
//----------------------------------------------------
device_list.push_back(new Keithley428(this, (*devlist_ptr)[i]));
// Export device to the outside world
// Check before if database used.
//---------------------------------------------
if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false))
export_device(device_list.back());
else
export_device(device_list.back(), (*devlist_ptr)[i]);
}
// End of Automatic code generation
//-------------------------------------------------------------
}
//+----------------------------------------------------------------------------
// Method: Keithley428Class::attribute_factory(vector<Tango::Attr *> &att_list)
//-----------------------------------------------------------------------------
void Keithley428Class::attribute_factory(vector<Tango::Attr *> &att_list)
{
// Attribute : Gain
GainAttrib *gain = new GainAttrib();
Tango::UserDefaultAttrProp gain_prop;
gain_prop.set_unit(" ");
gain_prop.set_format("%d");
gain_prop.set_max_value("11");
gain_prop.set_min_value("0");
gain_prop.set_description("0, 1, 2, 3 -> 10e3 V/A\n4 -> 10e4 V/A\n5 -> 10e5 V/A\n6 -> 10e6 V/A\n7 -> 10e7 V/A\n8 -> 10e8 V/A\n9 -> 10e9 V/A\n10 -> 10e10 V/A\n11 -> 10e11 V/A");
gain->set_default_properties(gain_prop);
gain->set_memorized();
gain->set_memorized_init(true);
att_list.push_back(gain);
// Attribute : GainStr
GainStrAttrib *gain_str = new GainStrAttrib();
att_list.push_back(gain_str);
// Attribute : Overloaded
OverloadedAttrib *overloaded = new OverloadedAttrib();
Tango::UserDefaultAttrProp overloaded_prop;
overloaded_prop.set_unit(" ");
overloaded_prop.set_format("%d");
overloaded_prop.set_description("1 if device is overloaded");
overloaded->set_default_properties(overloaded_prop);
att_list.push_back(overloaded);
// Attribute : Bypass
BypassAttrib *bypass = new BypassAttrib();
Tango::UserDefaultAttrProp bypass_prop;
bypass_prop.set_unit(" ");
bypass_prop.set_format("%d");
bypass_prop.set_max_value("2");
bypass_prop.set_min_value("0");
bypass_prop.set_description("0 -> zero check off, 1 -> zero check on, 2 (only read) zero correction last selected.");
bypass->set_default_properties(bypass_prop);
att_list.push_back(bypass);
// Attribute : filterState
filterStateAttrib *filter_state = new filterStateAttrib();
Tango::UserDefaultAttrProp filter_state_prop;
filter_state_prop.set_description("State of the manual filter");
filter_state->set_default_properties(filter_state_prop);
att_list.push_back(filter_state);
// Attribute : autoFilterState
autoFilterStateAttrib *auto_filter_state = new autoFilterStateAttrib();
Tango::UserDefaultAttrProp auto_filter_state_prop;
auto_filter_state_prop.set_description("State of the auto Filter");
auto_filter_state->set_default_properties(auto_filter_state_prop);
att_list.push_back(auto_filter_state);
// End of Automatic code generation
//-------------------------------------------------------------
}
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::get_class_property()
//
// description : Read the class properties from database.
//
//-----------------------------------------------------------------------------
void Keithley428Class::get_class_property()
{
// Initialize your default values here (if not done with POGO).
//------------------------------------------------------------------
// Read class properties from database.(Automatic code generation)
//------------------------------------------------------------------
// 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;
// End of Automatic code generation
//------------------------------------------------------------------
}
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::set_default_property
//
// description: Set default property (class and device) for wizard.
// For each property, add to wizard property name and description
// If default value has been set, add it to wizard property and
// store it in a DbDatum.
//
//-----------------------------------------------------------------------------
void Keithley428Class::set_default_property()
{
string prop_name;
string prop_desc;
string prop_def;
vector<string> vect_data;
// Set Default Class Properties
// Set Default Device Properties
prop_name = "GpibDevice";
prop_desc = "Name of the gpib device connected to the hardware.";
prop_def = "";
vect_data.clear();
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "GpibDeviceType";
prop_desc = "Type of the Gpib device used to communicate with the Keithley.\nthis can be:\n1 -> Desy GpibDevice (default value)\n2 -> Soleil GpibDeviceServer";
prop_def = "1";
vect_data.clear();
vect_data.push_back("1");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
data << vect_data ;
dev_def_prop.push_back(data);
add_wiz_dev_prop(prop_name, prop_desc, prop_def);
}
else
add_wiz_dev_prop(prop_name, prop_desc);
}
//+----------------------------------------------------------------------------
//
// method : Keithley428Class::write_class_property
//
// description : Set class description as property in database
//
//-----------------------------------------------------------------------------
void Keithley428Class::write_class_property()
{
// First time, check if database used
//--------------------------------------------
if (Tango::Util::_UseDb == false)
return;
Tango::DbData data;
string classname = get_name();
string header;
string::size_type start, end;
// Put title
Tango::DbDatum title("ProjectTitle");
string str_title("Keithley428 Current Amplifier");
title << str_title;
data.push_back(title);
// Put Description
Tango::DbDatum description("Description");
vector<string> str_desc;
str_desc.push_back("Class for controlling the Keithley428 current amplifier.");
description << str_desc;
data.push_back(description);
// put cvs or svn location
string filename(classname);
filename += "Class.cpp";
// Create a string with the class ID to
// get the string into the binary
string class_id(ClassId);
// check for cvs information
string src_path(CvsPath);
start = src_path.find("/");
if (start!=string::npos)
{
end = src_path.find(filename);
if (end>start)
{
string strloc = src_path.substr(start, end-start);
// Check if specific repository
start = strloc.find("/cvsroot/");
if (start!=string::npos && start>0)
{
string repository = strloc.substr(0, start);
if (repository.find("/segfs/")!=string::npos)
strloc = "ESRF:" + strloc.substr(start, strloc.length()-start);
}
Tango::DbDatum cvs_loc("cvs_location");
cvs_loc << strloc;
data.push_back(cvs_loc);
}
}
// check for svn information
else
{
string src_path(SvnPath);
start = src_path.find("://");
if (start!=string::npos)
{
end = src_path.find(filename);
if (end>start)
{
header = "$HeadURL: ";
start = header.length();
string strloc = src_path.substr(start, (end-start));
Tango::DbDatum svn_loc("svn_location");
svn_loc << strloc;
data.push_back(svn_loc);
}
}
}
// Get CVS or SVN revision tag
// CVS tag
string tagname(TagName);
header = "$Name: ";
start = header.length();
string endstr(" $");
end = tagname.find(endstr);
if (end!=string::npos && end>start)
{
string strtag = tagname.substr(start, end-start);
Tango::DbDatum cvs_tag("cvs_tag");
cvs_tag << strtag;
data.push_back(cvs_tag);
}
// SVN tag
string svnpath(SvnPath);
header = "$HeadURL: ";
start = header.length();
end = svnpath.find(endstr);
if (end!=string::npos && end>start)
{
string strloc = svnpath.substr(start, end-start);
string tagstr ("/tags/");
start = strloc.find(tagstr);
if ( start!=string::npos )
{
start = start + tagstr.length();
end = strloc.find(filename);
string strtag = strloc.substr(start, end-start-1);
Tango::DbDatum svn_tag("svn_tag");
svn_tag << strtag;
data.push_back(svn_tag);
}
}
// Get URL location
string httpServ(HttpServer);
if (httpServ.length()>0)
{
Tango::DbDatum db_doc_url("doc_url");
db_doc_url << httpServ;
data.push_back(db_doc_url);
}
// Put inheritance
Tango::DbDatum inher_datum("InheritedFrom");
vector<string> inheritance;
inheritance.push_back("Device_4Impl");
inher_datum << inheritance;
data.push_back(inher_datum);
// Call database and and values
//--------------------------------------------
get_db_class()->put_property(data);
}
} // namespace