diff --git a/.gitignore b/.gitignore index e39ac2a0deedfa7bf971acf836f46313988af6ab..318be8b2c4b12cbbed7ba2ce323c162c32128235 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .nse_depinfo bin/ obj/ +CVS diff --git a/src/4uhv-srv.multi.xmi b/src/4uhv-srv.multi.xmi index 56f0f9d83d71525176c7954fea0b1ca8b2c1f48a..93caddee2cad2c6eb1f601342cc2c8509ca8cf04 100644 --- a/src/4uhv-srv.multi.xmi +++ b/src/4uhv-srv.multi.xmi @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="ASCII"?> <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl"> - <multiClasses pogoRevision="9.4" name="4uhv-srv" sourcePath="/home/alessio/Sources/cvs-trees/fermi/servers/4uhv/src" description="" filestogenerate="XMI file,Code files,Protected Regions"> + <multiClasses pogoRevision="9.4" name="4uhv-srv" sourcePath="/home/alessio/fermi/servers/4uhv/src" description="" filestogenerate="XMI file,Code files,Protected Regions"> <classes classname="Socket2" sourcePath="../../socket2/src"> <inheritances classname="Device_Impl" sourcePath=""/> </classes> @@ -9,7 +9,7 @@ </classes> <classes classname="Agilent4uhv" sourcePath="./." hasDynamic="true"> <inheritances classname="Device_Impl" sourcePath=""/> - <inheritances classname="Serial2Client" sourcePath="/home/alessio/Sources/cvs-trees/fermi/servers/4uhv/src/././../../serial2/src"/> + <inheritances classname="Serial2Client" sourcePath="/home/alessio/fermi/servers/4uhv/src/././../../serial2/src"/> </classes> <classes classname="Ionpump" sourcePath="../../ionpump/src"> <inheritances classname="Device_4Impl" sourcePath=""/> diff --git a/src/Agilent4uhv.cpp b/src/Agilent4uhv.cpp index c35174f40e3c97a35d54236ffcb642a2e4d906b7..006650f1627f6ef295ff74e962fb7f22767d73e6 100644 --- a/src/Agilent4uhv.cpp +++ b/src/Agilent4uhv.cpp @@ -1,5 +1,5 @@ /*----- PROTECTED REGION ID(Agilent4uhv.cpp) ENABLED START -----*/ -static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.25 2019-04-01 09:14:47 alessio Exp $"; +static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.18 2018-05-10 08:04:51 alessio Exp $"; //============================================================================= // // file : Agilent4uhv.cpp @@ -29,8 +29,8 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.25 2019-04-01 09:14:47 ales // // $Author: alessio $ // -// $Revision: 1.25 $ -// $Date: 2019-04-01 09:14:47 $ +// $Revision: 1.18 $ +// $Date: 2018-05-10 08:04:51 $ // // $HeadURL: $ // @@ -42,8 +42,64 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.25 2019-04-01 09:14:47 ales #include <Agilent4uhv.h> #include <Agilent4uhvClass.h> - -#define MAX_DEVSTRING_LENGTH 255 +#include <iomanip> + +/* Commands */ +#define HVCH1 11 +#define HVCH2 12 +#define HVCH3 13 +#define HVCH4 14 +//#define BAUDRATE 108 +//#define STATUS 205 +#define ERRORCODE 206 +#define MODEL 319 +#define SERIALNUMBER 323 +//#define RS485ADDRESS 503 +//#define SERIALTYPE 504 +#define SETCHANNEL 505 +#define PRESSUREUNIT 600 +#define OPERATINGMODE 601 +#define PROTECT 602 +#define FIXEDSTEP 603 +#define DEVICENUMBERCH1 610 +#define POWERMAXCH1 612 +#define VTARGETCH1 613 +#define IPROTECTCH1 614 +#define SETPOINTCH1 615 +#define DEVICENUMBERCH2 620 +#define POWERMAXCH2 622 +#define VTARGETCH2 623 +#define IPROTECTCH2 624 +#define SETPOINTCH2 625 +#define DEVICENUMBERCH3 630 +#define POWERMAXCH3 632 +#define VTARGETCH3 633 +#define IPROTECTCH3 634 +#define SETPOINTCH3 635 +#define DEVICENUMBERCH4 640 +#define POWERMAXCH4 642 +#define VTARGETCH4 643 +#define IPROTECTCH4 644 +#define SETPOINTCH4 645 +#define TEMPERATUREFAN 800 +#define TEMPERATUREHVCH1 801 +#define TEMPERATUREHVCH2 802 +#define INTERLOCKSTATUS 803 +#define STATUSSETPOINT 804 +#define TEMPERATUREHVCH3 808 +#define TEMPERATUREHVCH4 809 +#define VMEASUREDCH1 810 +#define IMEASUREDCH1 811 +#define PRESSURECH1 812 +#define VMEASUREDCH2 820 +#define IMEASUREDCH2 821 +#define PRESSURECH2 822 +#define VMEASUREDCH3 830 +#define IMEASUREDCH3 831 +#define PRESSURECH3 832 +#define VMEASUREDCH4 840 +#define IMEASUREDCH4 841 +#define PRESSURECH4 842 /*----- PROTECTED REGION END -----*/ // Agilent4uhv.cpp @@ -58,8 +114,16 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.25 2019-04-01 09:14:47 ales // // Command name | Method name //================================================================ +// OffHV1 | off_hv1 +// OffHV2 | off_hv2 +// OnHV1 | on_hv1 +// OnHV2 | on_hv2 // State | Inherited (no method) // Status | Inherited (no method) +// OffHV3 | off_hv3 +// OffHV4 | off_hv4 +// OnHV3 | on_hv3 +// OnHV4 | on_hv4 //================================================================ //================================================================ @@ -68,8 +132,6 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.25 2019-04-01 09:14:47 ales // Model | Tango::DevString Scalar // SerialNumber | Tango::DevString Scalar // Temperature | Tango::DevFloat Scalar -// CRCErrors | Tango::DevLong Scalar -// AutoStart | Tango::DevBoolean Scalar //================================================================ namespace Agilent4uhv_ns @@ -124,21 +186,14 @@ void Agilent4uhv::delete_device() { DEBUG_STREAM << "Agilent4uhv::delete_device() " << device_name << endl; /*----- PROTECTED REGION ID(Agilent4uhv::delete_device) ENABLED START -----*/ + + // Delete device allocated objects if (worker) { worker->stop(); worker->join(NULL); } - // Delete device allocated objects - delete attr_Model_read[0]; - delete attr_SerialNumber_read[0]; - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::delete_device - delete[] attr_Model_read; - delete[] attr_SerialNumber_read; - delete[] attr_Temperature_read; - delete[] attr_CRCErrors_read; - delete[] attr_AutoStart_read; if (Tango::Util::instance()->is_svr_shutting_down()==false && Tango::Util::instance()->is_device_restarting(device_name)==false && @@ -165,9 +220,8 @@ void Agilent4uhv::init_device() nchannel = 0; odd_channel_quirk = false; init_error.clear(); + worker = NULL; - norm_ops.clear(); - prio_ops.clear(); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::init_device_before @@ -177,262 +231,67 @@ void Agilent4uhv::init_device() // If not starting up call init device for inherited object Serial2Client_ns::Serial2Client::init_device(); } - - // Get the device properties from database - get_device_property(); + // No device property to be read from database - attr_Model_read = new Tango::DevString[1]; - attr_SerialNumber_read = new Tango::DevString[1]; - attr_Temperature_read = new Tango::DevFloat[1]; - attr_CRCErrors_read = new Tango::DevLong[1]; - attr_AutoStart_read = new Tango::DevBoolean[1]; // No longer if mandatory property not set. if (mandatoryNotDefined) return; /*----- PROTECTED REGION ID(Agilent4uhv::init_device) ENABLED START -----*/ - // Waiting the device - int retries = 0; - while(get_state2() == 9 && retries++ < 5) { - sleep(1); - } - + // Initialize device try { - attr_Model_read[0] = new char[MAX_DEVSTRING_LENGTH]; - attr_SerialNumber_read[0] = new char[MAX_DEVSTRING_LENGTH]; - attr_CRCErrors_read[0] = 0; - - read_Model(); - read_SerialNumber(); - if (strncmp(attr_Model_read[0], "9299010", 7) == 0 || - strncmp(attr_Model_read[0], "9299011", 7) == 0 || - strncmp(attr_Model_read[0], "9299100", 7) == 0 || - strncmp(attr_Model_read[0], "9299101", 7) == 0 || - strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - nchannel = 1; - } else if (strncmp(attr_Model_read[0], "9299020", 7) == 0 || - strncmp(attr_Model_read[0], "9299021", 7) == 0 || - strncmp(attr_Model_read[0], "9299200", 7) == 0 || - strncmp(attr_Model_read[0], "9299201", 7) == 0 || - strncmp(attr_Model_read[0], "9299022", 7) == 0) { - - read_PowerMaxCh1(); - if (PowerMaxX_data["PowerMax1"] == 200) - odd_channel_quirk = true; + string model; + read(MODEL, model); + model.erase(remove(model.begin(), model.end(), ' '), model.end()); + if (model == "9299010" || model == "9299011" + || model == "9299100" || model == "9299101") + nchannel = 1; + else if (model == "9299020" || model == "9299021" + || model == "9299200" || model == "9299201" + || model == "9299022") nchannel = 2; - } else if (strncmp(attr_Model_read[0], "9299210", 7) == 0 || - strncmp(attr_Model_read[0], "9299211", 7) == 0 || - strncmp(attr_Model_read[0], "9299212", 7) == 0 || - strncmp(attr_Model_read[0], "9299213", 7) == 0) { + else if (model == "9299210" || model == "9299211" + || model == "9299212" || model == "9299213") nchannel = 3; - } else if (strncmp(attr_Model_read[0], "9299400", 7) == 0 || - strncmp(attr_Model_read[0], "9299401", 7) == 0 || - strncmp(attr_Model_read[0], "9299402", 7) == 0) { + else if (model == "9299400" || model == "9299401" + || model == "9299402") nchannel = 4; - } else { + else Tango::Except::throw_exception( "", "Unknown model", "Agilent4uhv::init_device()"); - } - - int pressure_unit; - read("600", pressure_unit); - if (pressure_unit != 1) + Tango::DevUShort powermax; + read(POWERMAXCH1, powermax); + if (powermax == 200) + odd_channel_quirk = true; + + int unit; + read(PRESSUREUNIT, unit); + if (unit != 1) Tango::Except::throw_exception( "", "Pressure unit is wrong", "Agilent4uhv::init_device()"); + + data.state = Tango::INIT; + data.status = "The device is in INIT state"; - if(nchannel >= 1) { - norm_ops.push_back(&Agilent4uhv::read_HVCh1); - norm_ops.push_back(&Agilent4uhv::read_DeviceNumberCh1); - prio_ops.push_back(&Agilent4uhv::read_PressureCh1); - norm_ops.push_back(&Agilent4uhv::read_PowerMaxCh1); - norm_ops.push_back(&Agilent4uhv::read_VTargetCh1); - norm_ops.push_back(&Agilent4uhv::read_IProtectCh1); - norm_ops.push_back(&Agilent4uhv::read_SetPointCh1); - norm_ops.push_back(&Agilent4uhv::read_TemperatureCh1); - norm_ops.push_back(&Agilent4uhv::read_IMeasuredCh1); - norm_ops.push_back(&Agilent4uhv::read_VMeasuredCh1); - norm_ops.push_back(&Agilent4uhv::read_ErrorCodeCh1); - } - - if(nchannel >= 2) { - norm_ops.push_back(&Agilent4uhv::read_HVCh2); - norm_ops.push_back(&Agilent4uhv::read_DeviceNumberCh2); - prio_ops.push_back(&Agilent4uhv::read_PressureCh2); - norm_ops.push_back(&Agilent4uhv::read_PowerMaxCh2); - norm_ops.push_back(&Agilent4uhv::read_VTargetCh2); - norm_ops.push_back(&Agilent4uhv::read_IProtectCh1); - norm_ops.push_back(&Agilent4uhv::read_SetPointCh2); - norm_ops.push_back(&Agilent4uhv::read_TemperatureCh2); - norm_ops.push_back(&Agilent4uhv::read_IMeasuredCh2); - norm_ops.push_back(&Agilent4uhv::read_VMeasuredCh2); - norm_ops.push_back(&Agilent4uhv::read_ErrorCodeCh2); - } - - if(nchannel >= 3) { - norm_ops.push_back(&Agilent4uhv::read_HVCh3); - norm_ops.push_back(&Agilent4uhv::read_DeviceNumberCh3); - prio_ops.push_back(&Agilent4uhv::read_PressureCh3); - norm_ops.push_back(&Agilent4uhv::read_PowerMaxCh3); - norm_ops.push_back(&Agilent4uhv::read_VTargetCh3); - norm_ops.push_back(&Agilent4uhv::read_IProtectCh1); - norm_ops.push_back(&Agilent4uhv::read_SetPointCh3); - norm_ops.push_back(&Agilent4uhv::read_TemperatureCh3); - norm_ops.push_back(&Agilent4uhv::read_IMeasuredCh3); - norm_ops.push_back(&Agilent4uhv::read_VMeasuredCh3); - norm_ops.push_back(&Agilent4uhv::read_ErrorCodeCh3); - } + worker = new Worker(this); + worker->start(); - if(nchannel >= 4) { - norm_ops.push_back(&Agilent4uhv::read_HVCh4); - norm_ops.push_back(&Agilent4uhv::read_DeviceNumberCh4); - prio_ops.push_back(&Agilent4uhv::read_PressureCh4); - norm_ops.push_back(&Agilent4uhv::read_PowerMaxCh4); - norm_ops.push_back(&Agilent4uhv::read_VTargetCh4); - norm_ops.push_back(&Agilent4uhv::read_IProtectCh1); - norm_ops.push_back(&Agilent4uhv::read_SetPointCh4); - norm_ops.push_back(&Agilent4uhv::read_TemperatureCh4); - norm_ops.push_back(&Agilent4uhv::read_IMeasuredCh4); - norm_ops.push_back(&Agilent4uhv::read_VMeasuredCh4); - norm_ops.push_back(&Agilent4uhv::read_ErrorCodeCh4); - } - - // Related to all channels - norm_ops.push_back(&Agilent4uhv::read_FixedStep); - norm_ops.push_back(&Agilent4uhv::read_AutoStart); - norm_ops.push_back(&Agilent4uhv::read_Protect); - norm_ops.push_back(&Agilent4uhv::read_Temperature); - norm_ops.push_back(&Agilent4uhv::read_StatusSetPoint); - /* This must be the latest */ - norm_ops.push_back(&Agilent4uhv::read_Status); - - worker = new Agilent4uhvWorker(this); - worker->start(); } catch(Tango::DevFailed &e) { init_error = "Initialization failed: " + string(e.errors[0].desc); - ERROR_STREAM << init_error << endl; - set_state(Tango::UNKNOWN); - assert(false); + set_state(Tango::FAULT); } catch (...) { - init_error = "Initialization failed: Unknown error"; - ERROR_STREAM << init_error << endl; + init_error = "Initialization failed: Unknown error"; set_state(Tango::UNKNOWN); - assert(false); } /*----- PROTECTED REGION END -----*/ // Agilent4uhv::init_device } -//-------------------------------------------------------- -/** - * Method : Agilent4uhv::get_device_property() - * Description : Read database to initialize property data members. - */ -//-------------------------------------------------------- -void Agilent4uhv::get_device_property() -{ - /*----- PROTECTED REGION ID(Agilent4uhv::get_device_property_before) ENABLED START -----*/ - - // Initialize property data members - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::get_device_property_before - - mandatoryNotDefined = false; - - // Read device properties from database. - Tango::DbData dev_prop; - dev_prop.push_back(Tango::DbDatum("DeviceName")); - dev_prop.push_back(Tango::DbDatum("PollingPause")); - dev_prop.push_back(Tango::DbDatum("PollingPeriod")); - - // is there at least one property to be read ? - if (dev_prop.size()>0) - { - // Call database and extract values - if (Tango::Util::instance()->_UseDb==true) - get_db_device()->get_property(dev_prop); - - // get instance on Agilent4uhvClass to get class property - Tango::DbDatum def_prop, cl_prop; - Agilent4uhvClass *ds_class = - (static_cast<Agilent4uhvClass *>(get_device_class())); - int i = -1; - - // Try to initialize DeviceName from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> deviceName; - else { - // Try to initialize DeviceName from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> deviceName; - } - // And try to extract DeviceName value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> deviceName; - // Property StartDsPath is mandatory, check if has been defined in database. - check_mandatory_property(cl_prop, dev_prop[i]); - - // Try to initialize PollingPause from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> pollingPause; - else { - // Try to initialize PollingPause from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> pollingPause; - } - // And try to extract PollingPause value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> pollingPause; - - // Try to initialize PollingPeriod from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> pollingPeriod; - else { - // Try to initialize PollingPeriod from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> pollingPeriod; - } - // And try to extract PollingPeriod value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> pollingPeriod; - - } - - /*----- PROTECTED REGION ID(Agilent4uhv::get_device_property_after) ENABLED START -----*/ - - // Check device property data members init - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::get_device_property_after -} -//-------------------------------------------------------- -/** - * Method : Agilent4uhv::check_mandatory_property() - * Description : For mandatory properties check if defined in database. - */ -//-------------------------------------------------------- -void Agilent4uhv::check_mandatory_property(Tango::DbDatum &class_prop, Tango::DbDatum &dev_prop) -{ - // Check if all properties are empty - if (class_prop.is_empty() && dev_prop.is_empty()) - { - TangoSys_OMemStream tms; - tms << endl <<"Property \'" << dev_prop.name; - if (Tango::Util::instance()->_UseDb==true) - tms << "\' is mandatory but not defined in database"; - else - tms << "\' is mandatory but cannot be defined without database"; - string status(get_status()); - status += tms.str(); - set_status(status); - mandatoryNotDefined = true; - /*----- PROTECTED REGION ID(Agilent4uhv::check_mandatory_property) ENABLED START -----*/ - cerr << tms.str() << " for " << device_name << endl; - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::check_mandatory_property - } -} - //-------------------------------------------------------- /** @@ -455,11 +314,16 @@ void Agilent4uhv::always_executed_hook() // code always executed before all requests if (! init_error.empty()) { - set_state(Tango::UNKNOWN); + set_state(Tango::FAULT); set_status(init_error); return; } + data_mutex.lock(); + set_state(data.state); + set_status(data.status); + data_mutex.unlock(); + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::always_executed_hook } @@ -479,21 +343,6 @@ void Agilent4uhv::read_attr_hardware(TANGO_UNUSED(vector<long> &attr_list)) /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_attr_hardware } -//-------------------------------------------------------- -/** - * Method : Agilent4uhv::write_attr_hardware() - * Description : Hardware writing for attributes - */ -//-------------------------------------------------------- -void Agilent4uhv::write_attr_hardware(TANGO_UNUSED(vector<long> &attr_list)) -{ - DEBUG_STREAM << "Agilent4uhv::write_attr_hardware(vector<long> &attr_list) entering... " << endl; - /*----- PROTECTED REGION ID(Agilent4uhv::write_attr_hardware) ENABLED START -----*/ - - // Add your own code - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_attr_hardware -} //-------------------------------------------------------- /** @@ -508,7 +357,14 @@ void Agilent4uhv::read_Model(Tango::Attribute &attr) { DEBUG_STREAM << "Agilent4uhv::read_Model(Tango::Attribute &attr) entering... " << endl; /*----- PROTECTED REGION ID(Agilent4uhv::read_Model) ENABLED START -----*/ - attr.set_value(attr_Model_read); + + Tango::DevString *model = new Tango::DevString(); + + data_mutex.lock(); + *model = CORBA::string_dup(data.model.c_str()); + data_mutex.unlock(); + + attr.set_value(model, 1, 0, true); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_Model } @@ -525,7 +381,14 @@ void Agilent4uhv::read_SerialNumber(Tango::Attribute &attr) { DEBUG_STREAM << "Agilent4uhv::read_SerialNumber(Tango::Attribute &attr) entering... " << endl; /*----- PROTECTED REGION ID(Agilent4uhv::read_SerialNumber) ENABLED START -----*/ - attr.set_value(attr_SerialNumber_read); + + Tango::DevString *serial_number = new Tango::DevString(); + + data_mutex.lock(); + *serial_number = CORBA::string_dup(data.serial_number.c_str()); + data_mutex.unlock(); + + attr.set_value(serial_number, 1, 0, true); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_SerialNumber } @@ -542,82 +405,17 @@ void Agilent4uhv::read_Temperature(Tango::Attribute &attr) { DEBUG_STREAM << "Agilent4uhv::read_Temperature(Tango::Attribute &attr) entering... " << endl; /*----- PROTECTED REGION ID(Agilent4uhv::read_Temperature) ENABLED START -----*/ - attr.set_value(attr_Temperature_read); + + Tango::DevFloat *temperature = new Tango::DevFloat(); + + data_mutex.lock(); + *temperature = data.temperature_fan; + data_mutex.unlock(); + + attr.set_value(temperature, 1, 0, true); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_Temperature } -//-------------------------------------------------------- -/** - * Read attribute CRCErrors related method - * Description: CRC Errors - * - * Data type: Tango::DevLong - * Attr type: Scalar - */ -//-------------------------------------------------------- -void Agilent4uhv::read_CRCErrors(Tango::Attribute &attr) -{ - DEBUG_STREAM << "Agilent4uhv::read_CRCErrors(Tango::Attribute &attr) entering... " << endl; - /*----- PROTECTED REGION ID(Agilent4uhv::read_CRCErrors) ENABLED START -----*/ - attr.set_value(attr_CRCErrors_read); - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_CRCErrors -} -//-------------------------------------------------------- -/** - * Read attribute AutoStart related method - * Description: - * - * Data type: Tango::DevBoolean - * Attr type: Scalar - */ -//-------------------------------------------------------- -void Agilent4uhv::read_AutoStart(Tango::Attribute &attr) -{ - DEBUG_STREAM << "Agilent4uhv::read_AutoStart(Tango::Attribute &attr) entering... " << endl; - /*----- PROTECTED REGION ID(Agilent4uhv::read_AutoStart) ENABLED START -----*/ - // Set the attribute value - attr.set_value(attr_AutoStart_read); - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_AutoStart -} -//-------------------------------------------------------- -/** - * Write attribute AutoStart related method - * Description: - * - * Data type: Tango::DevBoolean - * Attr type: Scalar - */ -//-------------------------------------------------------- -void Agilent4uhv::write_AutoStart(Tango::WAttribute &attr) -{ - DEBUG_STREAM << "Agilent4uhv::write_AutoStart(Tango::WAttribute &attr) entering... " << endl; - // Retrieve write value - Tango::DevBoolean w_val; - attr.get_write_value(w_val); - /*----- PROTECTED REGION ID(Agilent4uhv::write_AutoStart) ENABLED START -----*/ - - check_init_error(); - - string newvalue; - if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - if (w_val) - newvalue = "1"; - else - newvalue = "0"; - } else { - newvalue = "000000000"; - if (w_val) - newvalue.push_back('1'); - else - newvalue.push_back('0'); - } - - write("601", newvalue); - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_AutoStart -} //-------------------------------------------------------- /** @@ -633,6 +431,18 @@ void Agilent4uhv::read_HVX(Tango::Attribute &attr) DEBUG_STREAM << "Agilent4uhv::read_HVX(Tango::Attribute &attr) entering... " << endl; Tango::DevState *att_value = get_HVX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_HVX) ENABLED START -----*/ + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + int value; + + data_mutex.lock(); + value = data.hvch[indexn-1]; + data_mutex.unlock(); + + if (value) + *att_value = Tango::ON; + else + *att_value = Tango::OFF; attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_HVX @@ -651,6 +461,13 @@ void Agilent4uhv::read_DeviceNumberX(Tango::Attribute &attr) DEBUG_STREAM << "Agilent4uhv::read_DeviceNumberX(Tango::Attribute &attr) entering... " << endl; Tango::DevLong *att_value = get_DeviceNumberX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_DeviceNumberX) ENABLED START -----*/ + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + data_mutex.lock(); + *att_value = data.device_number[indexn-1]; + data_mutex.unlock(); + attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_DeviceNumberX @@ -671,30 +488,27 @@ void Agilent4uhv::write_DeviceNumberX(Tango::WAttribute &attr) Tango::DevLong w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_DeviceNumberX) ENABLED START -----*/ - + check_init_error(); - int indexn; + Tango::DevUShort indexn; convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - - int newvalue = w_val; - switch (indexn) { case 1: - write("610", newvalue); + write(DEVICENUMBERCH1, w_val); break; case 2: - write("620", newvalue); + write(DEVICENUMBERCH2, w_val); break; case 3: - write("630", newvalue); + write(DEVICENUMBERCH3, w_val); break; case 4: - write("640", newvalue); + write(DEVICENUMBERCH4, w_val); break; } - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_DeviceNumberX } //-------------------------------------------------------- @@ -711,6 +525,13 @@ void Agilent4uhv::read_PowerMaxX(Tango::Attribute &attr) DEBUG_STREAM << "Agilent4uhv::read_PowerMaxX(Tango::Attribute &attr) entering... " << endl; Tango::DevUShort *att_value = get_PowerMaxX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_PowerMaxX) ENABLED START -----*/ + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + data_mutex.lock(); + *att_value = data.power_max[indexn-1]; + data_mutex.unlock(); + attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_PowerMaxX @@ -731,30 +552,27 @@ void Agilent4uhv::write_PowerMaxX(Tango::WAttribute &attr) Tango::DevUShort w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_PowerMaxX) ENABLED START -----*/ - + check_init_error(); - int indexn; + Tango::DevUShort indexn; convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - - int newvalue = w_val; - switch (indexn) { case 1: - write("612", newvalue); + write(POWERMAXCH1, w_val); break; case 2: - write("622", newvalue); + write(POWERMAXCH2, w_val); break; case 3: - write("632", newvalue); + write(POWERMAXCH3, w_val); break; case 4: - write("642", newvalue); + write(POWERMAXCH4, w_val); break; } - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_PowerMaxX } //-------------------------------------------------------- @@ -771,6 +589,14 @@ void Agilent4uhv::read_VTargetX(Tango::Attribute &attr) DEBUG_STREAM << "Agilent4uhv::read_VTargetX(Tango::Attribute &attr) entering... " << endl; Tango::DevUShort *att_value = get_VTargetX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_VTargetX) ENABLED START -----*/ + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + data_mutex.lock(); + *att_value = data.vtarget[indexn-1]; + data_mutex.unlock(); + + *att_value /= 1000; attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_VTargetX @@ -791,30 +617,28 @@ void Agilent4uhv::write_VTargetX(Tango::WAttribute &attr) Tango::DevUShort w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_VTargetX) ENABLED START -----*/ - + check_init_error(); - int indexn; + Tango::DevUShort indexn; convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - - int newvalue = w_val * 1000; - + w_val *= 1000; switch (indexn) { case 1: - write("613", newvalue); + write(VTARGETCH1, w_val); break; case 2: - write("623", newvalue); + write(VTARGETCH2, w_val); break; case 3: - write("633", newvalue); + write(VTARGETCH3, w_val); break; case 4: - write("643", newvalue); + write(VTARGETCH4, w_val); break; } - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_VTargetX } //-------------------------------------------------------- @@ -831,6 +655,13 @@ void Agilent4uhv::read_IProtectX(Tango::Attribute &attr) DEBUG_STREAM << "Agilent4uhv::read_IProtectX(Tango::Attribute &attr) entering... " << endl; Tango::DevUShort *att_value = get_IProtectX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_IProtectX) ENABLED START -----*/ + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + data_mutex.lock(); + *att_value = data.iprotect[indexn-1]; + data_mutex.unlock(); + attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_IProtectX @@ -851,35 +682,27 @@ void Agilent4uhv::write_IProtectX(Tango::WAttribute &attr) Tango::DevUShort w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_IProtectX) ENABLED START -----*/ - + check_init_error(); - int indexn; + Tango::DevUShort indexn; convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - - int newvalue; - if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - newvalue = w_val * 1000; - } else { - newvalue = w_val; - } - switch (indexn) { case 1: - write("614", newvalue); + write(IPROTECTCH1, w_val); break; case 2: - write("624", newvalue); + write(IPROTECTCH2, w_val); break; case 3: - write("634", newvalue); + write(IPROTECTCH3, w_val); break; case 4: - write("644", newvalue); + write(IPROTECTCH4, w_val); break; } - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_IProtectX } //-------------------------------------------------------- @@ -896,6 +719,13 @@ void Agilent4uhv::read_SetPointX(Tango::Attribute &attr) DEBUG_STREAM << "Agilent4uhv::read_SetPointX(Tango::Attribute &attr) entering... " << endl; Tango::DevDouble *att_value = get_SetPointX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_SetPointX) ENABLED START -----*/ + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + data_mutex.lock(); + *att_value = data.setpoint[indexn-1]; + data_mutex.unlock(); + attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_SetPointX @@ -919,36 +749,29 @@ void Agilent4uhv::write_SetPointX(Tango::WAttribute &attr) check_init_error(); - int indexn; + Tango::DevUShort indexn; convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - - string newvalue; - if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - char buffer[ALPHANUMERIC_LENGTH_IPCMINI+1]; - int len = snprintf(buffer, ALPHANUMERIC_LENGTH_IPCMINI+1, "% *.1E", ALPHANUMERIC_LENGTH_IPCMINI, w_val); - newvalue = string(buffer, len); - } else { - char buffer[ALPHANUMERIC_LENGTH_4UHV+1]; - int len = snprintf(buffer, ALPHANUMERIC_LENGTH_4UHV+1, "% *.1E", ALPHANUMERIC_LENGTH_4UHV, w_val); - newvalue = string(buffer, len); - } - + stringstream ss; + ss.precision(1); + ss << scientific << uppercase << w_val << flush; + string w_val_s; + w_val_s = ss.str(); switch (indexn) { case 1: - write("615", newvalue); + write(SETPOINTCH1, w_val_s); break; case 2: - write("625", newvalue); + write(SETPOINTCH2, w_val_s); break; case 3: - write("635", newvalue); + write(SETPOINTCH3, w_val_s); break; case 4: - write("645", newvalue); + write(SETPOINTCH4, w_val_s); break; } - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_SetPointX } //-------------------------------------------------------- @@ -965,6 +788,13 @@ void Agilent4uhv::read_TemperatureHVX(Tango::Attribute &attr) DEBUG_STREAM << "Agilent4uhv::read_TemperatureHVX(Tango::Attribute &attr) entering... " << endl; Tango::DevFloat *att_value = get_TemperatureHVX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_TemperatureHVX) ENABLED START -----*/ + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + data_mutex.lock(); + *att_value = data.temperaturehv[indexn-1]; + data_mutex.unlock(); + attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_TemperatureHVX @@ -983,6 +813,13 @@ void Agilent4uhv::read_VoltageX(Tango::Attribute &attr) DEBUG_STREAM << "Agilent4uhv::read_VoltageX(Tango::Attribute &attr) entering... " << endl; Tango::DevDouble *att_value = get_VoltageX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_VoltageX) ENABLED START -----*/ + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + data_mutex.lock(); + *att_value = data.vmeasured[indexn-1]; + data_mutex.unlock(); + attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_VoltageX @@ -1001,6 +838,13 @@ void Agilent4uhv::read_CurrentX(Tango::Attribute &attr) DEBUG_STREAM << "Agilent4uhv::read_CurrentX(Tango::Attribute &attr) entering... " << endl; Tango::DevDouble *att_value = get_CurrentX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_CurrentX) ENABLED START -----*/ + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + data_mutex.lock(); + *att_value = data.imeasured[indexn-1]; + data_mutex.unlock(); + attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_CurrentX @@ -1019,6 +863,13 @@ void Agilent4uhv::read_PressureX(Tango::Attribute &attr) DEBUG_STREAM << "Agilent4uhv::read_PressureX(Tango::Attribute &attr) entering... " << endl; Tango::DevDouble *att_value = get_PressureX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_PressureX) ENABLED START -----*/ + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + data_mutex.lock(); + *att_value = data.pressure[indexn-1]; + data_mutex.unlock(); + attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_PressureX @@ -1039,16 +890,31 @@ void Agilent4uhv::read_StateX(Tango::Attribute &attr) /*----- PROTECTED REGION ID(Agilent4uhv::read_StateX) ENABLED START -----*/ // Set the attribute value - string indexs = attr.get_name().substr(attr.get_name().size()-1); - int indexn; - convert(indexs, indexn); + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + vector<unsigned char> errcodes; - if (errorcode[indexn-1] != 0) { - *att_value = Tango::FAULT; - } else { - *att_value = HVX_data["HV" + indexs]; + data_mutex.lock(); + int value = data.hvch[indexn-1]; + errcodes = data.ec; + data_mutex.unlock(); + + switch(value) + { + case 0: + *att_value = Tango::OFF; + break; + case 1: + *att_value = Tango::ON; + break; + default: + assert(false); } + if (errcodes[6-indexn] != '0') + *att_value = Tango::FAULT; + attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_StateX @@ -1069,56 +935,59 @@ void Agilent4uhv::read_StatusX(Tango::Attribute &attr) /*----- PROTECTED REGION ID(Agilent4uhv::read_StatusX) ENABLED START -----*/ // Set the attribute value - string indexs = attr.get_name().substr(attr.get_name().size()-1); - int indexn; + Tango::DevUShort indexn; convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + vector<unsigned char> errcodes; + + data_mutex.lock(); + int value = data.hvch[indexn-1]; + errcodes = data.ec; + data_mutex.unlock(); + string status; - if (HVX_data["HV" + indexs] == Tango::ON) - status = "The device is in ON state"; - else - status = "The device is in OFF state"; - - int err = errorcode[indexn-1]; - if (err != 0) + switch(value) + { + case 0: + status = "The device is in OFF state"; + break; + case 1: + status = "The device is in ON state"; + break; + default: + assert(false); + } + + int errcode = (int)errcodes[6-indexn] - 48; + + if (errcode != 0) { status = ""; - if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - if (err & 0x4) - status += "Over Temperature "; - if (err & 0x20) - status += "Interlock cable "; - if (err & 0x40) - status += "ShortCircuit "; - if (err & 0x80) - status += "Protect "; - } else { - if (err & 0x1) - status += "FAN error "; - if (err & 0x2) - status += "Power input error from HV "; - if (err & 0x4) - status += "Power input error from PFC "; - if (err & 0x8) - status += "Overtemp PFC "; - if (err & 0x10) - status += "Error communication CPU-HV "; - if (err & 0x20) - status += "Interlock cable "; - if (err & 0x40) - status += "Overtemp HV "; - if (err & 0x80) - status += "Protect "; - if (err & 0x100) - status += "Measurement error "; - if (err & 0x200) - status += "HV out error "; - if (err & 0x400) - status += "Short circuit "; - if (err & 0x800) - status += "HV disabled "; - } + if (errcode & 0x1) + status += "FAN error "; + if (errcode & 0x2) + status += "Power input error from HV "; + if (errcode & 0x4) + status += "Power input error from PFC "; + if (errcode & 0x8) + status += "Overtemp PFC "; + if (errcode & 0x10) + status += "Error communication CPU-HV "; + if (errcode & 0x20) + status += "Interlock cable "; + if (errcode & 0x40) + status += "Overtemp HV "; + if (errcode & 0x80) + status += "Protect "; + if (errcode & 0x100) + status += "Measurement error "; + if (errcode & 0x200) + status += "HV out error "; + if (errcode & 0x400) + status += "Short circuit "; + if (errcode & 0x800) + status += "HV disabled "; } @@ -1132,144 +1001,206 @@ void Agilent4uhv::read_StatusX(Tango::Attribute &attr) } //-------------------------------------------------------- /** - * Read attribute ProtectX related method + * Read attribute AutoStartX related method * Description: * * Data type: Tango::DevBoolean * Attr type: Scalar */ //-------------------------------------------------------- -void Agilent4uhv::read_ProtectX(Tango::Attribute &attr) +void Agilent4uhv::read_AutoStartX(Tango::Attribute &attr) { - DEBUG_STREAM << "Agilent4uhv::read_ProtectX(Tango::Attribute &attr) entering... " << endl; - Tango::DevBoolean *att_value = get_ProtectX_data_ptr(attr.get_name()); - /*----- PROTECTED REGION ID(Agilent4uhv::read_ProtectX) ENABLED START -----*/ + DEBUG_STREAM << "Agilent4uhv::read_AutoStartX(Tango::Attribute &attr) entering... " << endl; + Tango::DevBoolean *att_value = get_AutoStartX_data_ptr(attr.get_name()); + /*----- PROTECTED REGION ID(Agilent4uhv::read_AutoStartX) ENABLED START -----*/ // Set the attribute value - attr.set_value(att_value); + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_ProtectX + vector<unsigned char> autostart; + data_mutex.lock(); + autostart = data.autostart; + data_mutex.unlock(); + + if (autostart[10-indexn] == '0') + *att_value = false; + else + *att_value = true; + + attr.set_value(att_value); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_AutoStartX } //-------------------------------------------------------- /** - * Write attribute ProtectX related method + * Write attribute AutoStartX related method * Description: * * Data type: Tango::DevBoolean * Attr type: Scalar */ //-------------------------------------------------------- -void Agilent4uhv::write_ProtectX(Tango::WAttribute &attr) +void Agilent4uhv::write_AutoStartX(Tango::WAttribute &attr) { - DEBUG_STREAM << "Agilent4uhv::write_ProtectX(Tango::WAttribute &attr) entering... " << endl; + DEBUG_STREAM << "Agilent4uhv::write_AutoStartX(Tango::WAttribute &attr) entering... " << endl; // Retrieve write value Tango::DevBoolean w_val; attr.get_write_value(w_val); - /*----- PROTECTED REGION ID(Agilent4uhv::write_ProtectX) ENABLED START -----*/ + /*----- PROTECTED REGION ID(Agilent4uhv::write_AutoStartX) ENABLED START -----*/ check_init_error(); - int indexn; + Tango::DevUShort indexn; convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - string newvalue; - if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - if (w_val) - newvalue = "1"; - else - newvalue = "0"; - } else { - read_Protect(); - newvalue = "0000000000"; - for(int i=1; i<5; ++i) { - if (i == indexn) { - if (w_val) - newvalue[10-i] = '1'; - else - newvalue[10-i] = '0'; - } else { - stringstream ss; - ss << i; - if (ProtectX_data["Protect" + ss.str()]) - newvalue[10-i] = '1'; - else - newvalue[10-i] = '0'; - } - } - } + vector<unsigned char> autostart; + data_mutex.lock(); + autostart = data.autostart; + data_mutex.unlock(); - write("602", newvalue); + if (w_val) + autostart[10-indexn] = '1'; + else + autostart[10-indexn] = '0'; - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_ProtectX + write(OPERATINGMODE, autostart); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_AutoStartX } //-------------------------------------------------------- /** - * Read attribute FixedStepX related method + * Read attribute ProtectX related method * Description: * * Data type: Tango::DevBoolean * Attr type: Scalar */ //-------------------------------------------------------- -void Agilent4uhv::read_FixedStepX(Tango::Attribute &attr) +void Agilent4uhv::read_ProtectX(Tango::Attribute &attr) { - DEBUG_STREAM << "Agilent4uhv::read_FixedStepX(Tango::Attribute &attr) entering... " << endl; - Tango::DevBoolean *att_value = get_FixedStepX_data_ptr(attr.get_name()); - /*----- PROTECTED REGION ID(Agilent4uhv::read_FixedStepX) ENABLED START -----*/ + DEBUG_STREAM << "Agilent4uhv::read_ProtectX(Tango::Attribute &attr) entering... " << endl; + Tango::DevBoolean *att_value = get_ProtectX_data_ptr(attr.get_name()); + /*----- PROTECTED REGION ID(Agilent4uhv::read_ProtectX) ENABLED START -----*/ // Set the attribute value - attr.set_value(att_value); + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_FixedStepX + vector<unsigned char> protect; + data_mutex.lock(); + protect = data.protect; + data_mutex.unlock(); + + if (protect[10-indexn] == '0') + *att_value = false; + else + *att_value = true; + + attr.set_value(att_value); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_ProtectX } //-------------------------------------------------------- /** - * Write attribute FixedStepX related method + * Write attribute ProtectX related method * Description: * * Data type: Tango::DevBoolean * Attr type: Scalar */ //-------------------------------------------------------- -void Agilent4uhv::write_FixedStepX(Tango::WAttribute &attr) +void Agilent4uhv::write_ProtectX(Tango::WAttribute &attr) { - DEBUG_STREAM << "Agilent4uhv::write_FixedStepX(Tango::WAttribute &attr) entering... " << endl; + DEBUG_STREAM << "Agilent4uhv::write_ProtectX(Tango::WAttribute &attr) entering... " << endl; // Retrieve write value Tango::DevBoolean w_val; attr.get_write_value(w_val); - /*----- PROTECTED REGION ID(Agilent4uhv::write_FixedStepX) ENABLED START -----*/ + /*----- PROTECTED REGION ID(Agilent4uhv::write_ProtectX) ENABLED START -----*/ check_init_error(); - int indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - string newvalue; - if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - if (w_val) - newvalue = "1"; - else - newvalue = "0"; - } else { - read_FixedStep(); - newvalue = "0000000000"; - for(int i=1; i<5; ++i) { - if (i == indexn) { - if (w_val) - newvalue[10-i] = '1'; - else - newvalue[10-i] = '0'; - } else { - stringstream ss; - ss << i; - if (FixedStepX_data["Fixed" + ss.str()]) - newvalue[10-i] = '1'; - else - newvalue[10-i] = '0'; - } - } - } + vector<unsigned char> protect; + data_mutex.lock(); + protect = data.protect; + data_mutex.unlock(); - write("603", newvalue); + if (w_val) + protect[10-indexn] = '1'; + else + protect[10-indexn] = '0'; + write(PROTECT, protect); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_ProtectX +} +//-------------------------------------------------------- +/** + * Read attribute FixedStepX related method + * Description: + * + * Data type: Tango::DevBoolean + * Attr type: Scalar + */ +//-------------------------------------------------------- +void Agilent4uhv::read_FixedStepX(Tango::Attribute &attr) +{ + DEBUG_STREAM << "Agilent4uhv::read_FixedStepX(Tango::Attribute &attr) entering... " << endl; + Tango::DevBoolean *att_value = get_FixedStepX_data_ptr(attr.get_name()); + /*----- PROTECTED REGION ID(Agilent4uhv::read_FixedStepX) ENABLED START -----*/ + // Set the attribute value + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + vector<unsigned char> fs; + data_mutex.lock(); + fs = data.fs; + data_mutex.unlock(); + + if (fs[10-indexn] == '0') + *att_value = true; + else + *att_value = false; + + attr.set_value(att_value); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_FixedStepX +} +//-------------------------------------------------------- +/** + * Write attribute FixedStepX related method + * Description: + * + * Data type: Tango::DevBoolean + * Attr type: Scalar + */ +//-------------------------------------------------------- +void Agilent4uhv::write_FixedStepX(Tango::WAttribute &attr) +{ + DEBUG_STREAM << "Agilent4uhv::write_FixedStepX(Tango::WAttribute &attr) entering... " << endl; + // Retrieve write value + Tango::DevBoolean w_val; + attr.get_write_value(w_val); + /*----- PROTECTED REGION ID(Agilent4uhv::write_FixedStepX) ENABLED START -----*/ + + check_init_error(); + + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + vector<unsigned char> fs; + data_mutex.lock(); + fs = data.fs; + data_mutex.unlock(); + + if (w_val) + fs[10-indexn] = '0'; + else + fs[10-indexn] = '1'; + + write(FIXEDSTEP, fs); + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_FixedStepX } //-------------------------------------------------------- @@ -1287,11 +1218,56 @@ void Agilent4uhv::read_StatusSetPointX(Tango::Attribute &attr) Tango::DevBoolean *att_value = get_StatusSetPointX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_StatusSetPointX) ENABLED START -----*/ // Set the attribute value - attr.set_value(att_value); + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + vector<unsigned char> ssp; + data_mutex.lock(); + ssp = data.ssp; + data_mutex.unlock(); + if (ssp[10-indexn] == '0') + *att_value = false; + else + *att_value = true; + + attr.set_value(att_value); + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_StatusSetPointX } //-------------------------------------------------------- +/** + * Read attribute InterlockStatusX related method + * Description: + * + * Data type: Tango::DevBoolean + * Attr type: Scalar + */ +//-------------------------------------------------------- +void Agilent4uhv::read_InterlockStatusX(Tango::Attribute &attr) +{ + DEBUG_STREAM << "Agilent4uhv::read_InterlockStatusX(Tango::Attribute &attr) entering... " << endl; + Tango::DevBoolean *att_value = get_InterlockStatusX_data_ptr(attr.get_name()); + /*----- PROTECTED REGION ID(Agilent4uhv::read_InterlockStatusX) ENABLED START -----*/ + // Set the attribute value + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + + vector<unsigned char> is; + data_mutex.lock(); + is = data.is; + data_mutex.unlock(); + + if (is[10-indexn] == '0') + *att_value = false; + else + *att_value = true; + + attr.set_value(att_value); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_InterlockStatusX +} +//-------------------------------------------------------- /** * Read attribute StatMaskX related method * Description: @@ -1307,26 +1283,41 @@ void Agilent4uhv::read_StatMaskX(Tango::Attribute &attr) /*----- PROTECTED REGION ID(Agilent4uhv::read_StatMaskX) ENABLED START -----*/ // Set the attribute value - string indexs = attr.get_name().substr(attr.get_name().size()-1); - int indexn; - convert(indexs, indexn); + Tango::DevUShort indexn; + convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - *att_value = 0; + vector<unsigned char> errcodes; + vector<unsigned char> fs; + + data_mutex.lock(); + int value = data.hvch[indexn-1]; + errcodes = data.ec; + fs = data.fs; + data_mutex.unlock(); - if (HVX_data["HV" + indexs]) - *att_value |= 0x1; + *att_value = 0; + switch(value) + { + case 0: + break; + case 1: + *att_value |= 0x1; + break; + default: + assert(false); + } // FIXME How provides locale/remote bit (1)? *att_value |= 0x1 << 1; - if (errorcode[indexn-1] != 0) + if (errcodes[6-indexn] != '0') *att_value |= 0x1 << 2; - if (FixedStepX_data["Fixed" + indexs] == true) + if (fs[10-indexn] == '1') *att_value |= 0x1 << 3; // FIXME bit 4,5,6 and 7 aren't implemented - + attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_StatMaskX @@ -1354,21 +1345,25 @@ void Agilent4uhv::add_dynamic_attributes() // add_PressureX_dynamic_attribute("MyPressureXAttribute"); // add_StateX_dynamic_attribute("MyStateXAttribute"); // add_StatusX_dynamic_attribute("MyStatusXAttribute"); + // add_AutoStartX_dynamic_attribute("MyAutoStartXAttribute"); // add_ProtectX_dynamic_attribute("MyProtectXAttribute"); // add_FixedStepX_dynamic_attribute("MyFixedStepXAttribute"); // add_StatusSetPointX_dynamic_attribute("MyStatusSetPointXAttribute"); + // add_InterlockStatusX_dynamic_attribute("MyInterlockStatusXAttribute"); // add_StatMaskX_dynamic_attribute("MyStatMaskXAttribute"); /*----- PROTECTED REGION ID(Agilent4uhv::add_dynamic_attributes) ENABLED START -----*/ // Add your own code to create and add dynamic attributes if any - for (unsigned short i=1; i <= nchannel; ++i) + for (unsigned short cn=1; cn <= nchannel; ++cn) { stringstream ssname; string sname; + int i = cn; - if (odd_channel_quirk && i > 1) + if (odd_channel_quirk && cn > 1) ++i; + ssname.str(""); ssname.clear(); ssname << "HV" << i << flush; sname = ssname.str(); @@ -1431,6 +1426,11 @@ void Agilent4uhv::add_dynamic_attributes() Tango::DevString *att_value = get_StatusX_data_ptr(sname); *att_value = NULL; + ssname.str(""); ssname.clear(); + ssname << "AutoStart" << i << flush; + sname = ssname.str(); + add_AutoStartX_dynamic_attribute(sname); + ssname.str(""); ssname.clear(); ssname << "Protect" << i << flush; sname = ssname.str(); @@ -1446,6 +1446,11 @@ void Agilent4uhv::add_dynamic_attributes() sname = ssname.str(); add_StatusSetPointX_dynamic_attribute(sname); + ssname.str(""); ssname.clear(); + ssname << "InterlockStatus" << i << flush; + sname = ssname.str(); + add_InterlockStatusX_dynamic_attribute(sname); + ssname.str(""); ssname.clear(); ssname << "StatMask" << i << flush; sname = ssname.str(); @@ -1457,75 +1462,163 @@ void Agilent4uhv::add_dynamic_attributes() //-------------------------------------------------------- /** - * Command OnHVX related method + * Command OffHV1 related method + * Description: + * + */ +//-------------------------------------------------------- +void Agilent4uhv::off_hv1() +{ + DEBUG_STREAM << "Agilent4uhv::OffHV1() - " << device_name << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::off_hv1) ENABLED START -----*/ + + // Add your own code + check_init_error(); + + int new_state = 0; + write(HVCH1, new_state); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::off_hv1 +} +//-------------------------------------------------------- +/** + * Command OffHV2 related method * Description: * */ //-------------------------------------------------------- -void Agilent4uhv::on_hvx(Tango::Command &command) +void Agilent4uhv::off_hv2() { - DEBUG_STREAM << "Agilent4uhv::" << command.get_name() << " - " << device_name << endl; - /*----- PROTECTED REGION ID(Agilent4uhv::on_hvx) ENABLED START -----*/ + DEBUG_STREAM << "Agilent4uhv::OffHV2() - " << device_name << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::off_hv2) ENABLED START -----*/ // Add your own code - check_init_error(); + check_init_error(); - int indexn; - convert(command.get_name().substr(command.get_name().size()-1), indexn); + int new_state = 0; + write(HVCH2, new_state); - bool new_state = true; - switch(indexn) { - case 1: - write("011", new_state); - break; - case 2: - write("012", new_state); - break; - case 3: - write("013", new_state); - break; - case 4: - write("014", new_state); - break; - } + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::off_hv2 +} +//-------------------------------------------------------- +/** + * Command OnHV1 related method + * Description: + * + */ +//-------------------------------------------------------- +void Agilent4uhv::on_hv1() +{ + DEBUG_STREAM << "Agilent4uhv::OnHV1() - " << device_name << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::on_hv1) ENABLED START -----*/ + + // Add your own code + check_init_error(); - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::on_hvx + int new_state = 1; + write(HVCH1, new_state); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::on_hv1 } //-------------------------------------------------------- /** - * Command OffHVX related method + * Command OnHV2 related method * Description: * */ //-------------------------------------------------------- -void Agilent4uhv::off_hvx(Tango::Command &command) +void Agilent4uhv::on_hv2() { - DEBUG_STREAM << "Agilent4uhv::" << command.get_name() << " - " << device_name << endl; - /*----- PROTECTED REGION ID(Agilent4uhv::off_hvx) ENABLED START -----*/ + DEBUG_STREAM << "Agilent4uhv::OnHV2() - " << device_name << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::on_hv2) ENABLED START -----*/ // Add your own code - check_init_error(); + check_init_error(); - int indexn; - convert(command.get_name().substr(command.get_name().size()-1), indexn); + int new_state = 1; + write(HVCH2, new_state); - bool new_state = false; - switch(indexn) { - case 1: - write("011", new_state); - break; - case 2: - write("012", new_state); - break; - case 3: - write("013", new_state); - break; - case 4: - write("014", new_state); - break; - } + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::on_hv2 +} +//-------------------------------------------------------- +/** + * Command OffHV3 related method + * Description: + * + */ +//-------------------------------------------------------- +void Agilent4uhv::off_hv3() +{ + DEBUG_STREAM << "Agilent4uhv::OffHV3() - " << device_name << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::off_hv3) ENABLED START -----*/ + + // Add your own code + check_init_error(); - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::off_hvx + int new_state = 0; + write(HVCH3, new_state); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::off_hv3 +} +//-------------------------------------------------------- +/** + * Command OffHV4 related method + * Description: + * + */ +//-------------------------------------------------------- +void Agilent4uhv::off_hv4() +{ + DEBUG_STREAM << "Agilent4uhv::OffHV4() - " << device_name << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::off_hv4) ENABLED START -----*/ + + // Add your own code + check_init_error(); + + int new_state = 0; + write(HVCH4, new_state); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::off_hv4 +} +//-------------------------------------------------------- +/** + * Command OnHV3 related method + * Description: + * + */ +//-------------------------------------------------------- +void Agilent4uhv::on_hv3() +{ + DEBUG_STREAM << "Agilent4uhv::OnHV3() - " << device_name << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::on_hv3) ENABLED START -----*/ + + // Add your own code + check_init_error(); + + int new_state = 1; + write(HVCH3, new_state); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::on_hv3 +} +//-------------------------------------------------------- +/** + * Command OnHV4 related method + * Description: + * + */ +//-------------------------------------------------------- +void Agilent4uhv::on_hv4() +{ + DEBUG_STREAM << "Agilent4uhv::OnHV4() - " << device_name << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::on_hv4) ENABLED START -----*/ + + // Add your own code + check_init_error(); + + int new_state = 1; + write(HVCH4, new_state); + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::on_hv4 } //-------------------------------------------------------- /** @@ -1536,23 +1629,9 @@ void Agilent4uhv::off_hvx(Tango::Command &command) //-------------------------------------------------------- void Agilent4uhv::add_dynamic_commands() { - // Example to add dynamic command: - // Copy inside the folowing protected area to instanciate at startup. - // add_OnHVX_dynamic_command("MyOnHVXCommand", true); - // add_OffHVX_dynamic_command("MyOffHVXCommand", true); - /*----- PROTECTED REGION ID(Agilent4uhv::add_dynamic_commands) ENABLED START -----*/ // Add your own code to create and add dynamic commands if any - for (unsigned short i=1; i <= nchannel; ++i) { - if (odd_channel_quirk && i > 1) - ++i; - - stringstream ss; - ss << i; - add_OnHVX_dynamic_command("OnHV" + ss.str(), true); - add_OffHVX_dynamic_command("OffHV" + ss.str(), true); - } /*----- PROTECTED REGION END -----*/ // Agilent4uhv::add_dynamic_commands } @@ -1560,110 +1639,163 @@ void Agilent4uhv::add_dynamic_commands() /*----- PROTECTED REGION ID(Agilent4uhv::namespace_ending) ENABLED START -----*/ // Additional Methods -#define CRC_LENGTH 2 +#define STX 0x02 +#define ADDR 0x80 +#define ETX 0x03 +#define WIN_LENGTH 3 +#define CRC_LENGTH 2 #define READ_WINDOW 0x30 #define WRITE_WINDOW 0x31 -struct MessageHeader { - unsigned char stx; - unsigned char addr; - char win[WIN_LENGTH]; - unsigned char com; -}; +void Agilent4uhv::write(const int win, string &value) +{ + vector<unsigned char> data; -struct MessageFooter { - unsigned char etx; - unsigned char crc[CRC_LENGTH]; -}; + for (unsigned int i=0; i<value.size(); ++i) + data.push_back(value[i]); -struct ResponseHeader { - unsigned char stx; - unsigned char addr; - unsigned char ack; -}; + write(win, data); + DEBUG_STREAM << "Written " << value.size() << " byte(s): " + << value << endl; +} -void Agilent4uhv::write_message(const char window[WIN_LENGTH], - const unsigned char com, const char * const data, - const size_t data_length) +void Agilent4uhv::read(const int win, string &value) { - vector<unsigned char> message(sizeof(MessageHeader) + - data_length + sizeof(MessageFooter)); + vector<unsigned char> answer; - MessageHeader *header = (MessageHeader*)&message[0]; - MessageFooter *footer = (MessageFooter*)(&message[0] - + sizeof(MessageHeader) + data_length); + read(win, answer); - header->stx = 0x02; - header->addr = 0x80; - memcpy(header->win, window, WIN_LENGTH); - header->com = com; + stringstream ss; + for (unsigned int i=0; i<answer.size(); ++i) + ss << (char)answer[i]; + ss << flush; + value = ss.str(); - memcpy(&message[0] + sizeof(MessageHeader), - data, data_length); + DEBUG_STREAM << "Readed " << value.size() << " byte(s): " + << value << endl; +} - footer->etx = 0x03; +void Agilent4uhv::write(const int win, vector<unsigned char> &data) +{ + stringstream win_ss; + win_ss.width(WIN_LENGTH); + win_ss.fill('0'); + win_ss << win << flush; + string win_s; + win_ss >> win_s; + if (win_ss.fail()) + Tango::Except::throw_exception( "", + "Conversion fail " + win_ss.str(), + "Agilent4uhv::write()"); - char crc_with_term[CRC_LENGTH+1]; - snprintf(crc_with_term, CRC_LENGTH+1, "%02X", - calc_crc(&message[1] /* Skip STX */, - sizeof(MessageHeader) + data_length)); - memcpy(footer->crc, crc_with_term, CRC_LENGTH); + vector<unsigned char> discarded; - Serial2Client::write(message); + iomutex.lock(); + try { + write_message(win_s, WRITE_WINDOW, data); + read_answer(win_s, WRITE_WINDOW, discarded); + iomutex.unlock(); + } catch(...) { + iomutex.unlock(); + throw; + } } -string Agilent4uhv::read_answer() +void Agilent4uhv::read(const int win, vector<unsigned char> &answer) { - vector<unsigned char> answer, crc; - size_t data_length; - string ret; + stringstream win_ss; + win_ss.width(WIN_LENGTH); + win_ss.fill('0'); + win_ss << win << flush; + string win_s; + win_ss >> win_s; + if (win_ss.fail()) + Tango::Except::throw_exception( "", + "Conversion fail " + win_ss.str(), + "Agilent4uhv::read()"); - Serial2Client::read_until(0x03, answer); - Serial2Client::read(2, crc); - - data_length = answer.size() - sizeof(MessageHeader) - 1 /* Skip ETX */; + vector<unsigned char> discarded; + + iomutex.lock(); + try { + write_message(win_s, READ_WINDOW, discarded); + read_answer(win_s, READ_WINDOW, answer); + iomutex.unlock(); + } catch(...) { + iomutex.unlock(); + throw; + } +} + +// Message: +// <STX>+<ADDR>+<WIN>+<COM>+<DATA>+<ETX>+<CRC> +void Agilent4uhv::write_message(const string win_s, const unsigned char com, + vector<unsigned char> &data) +{ + vector<unsigned char> message; + + message.push_back(STX); + message.push_back(ADDR); + + for (int i=0; i<WIN_LENGTH; ++i) + message.push_back(win_s[i]); + + message.push_back(com); + + for (vector<char>::size_type i=0; i<data.size(); ++i) + message.push_back(data[i]); - char expected_crc[CRC_LENGTH+1]; - snprintf(expected_crc, CRC_LENGTH+1, "%02X", - calc_crc(&answer[1] /* Skip STX */, - answer.size()-1 /* Skip ETX */)); + message.push_back(ETX); + unsigned char crc_ = calc_crc(message); - if(memcmp(&crc[0], expected_crc, CRC_LENGTH) != 0) { - attr_CRCErrors_read[0]++; + stringstream crc_ss; + crc_ss.width(CRC_LENGTH); + crc_ss.fill('0'); + crc_ss << hex << uppercase << (int)crc_ << flush; + string crc_s; + crc_ss >> crc_s; + if (crc_ss.fail()) Tango::Except::throw_exception( "", - "CRC check failed", - "Agilent4uhv::read_answer()"); - } + "Conversion fail " + crc_ss.str(), + "Agilent4uhv::write_message()"); + + for (int i=0; i<CRC_LENGTH; ++i) + message.push_back(crc_s[i]); + + Serial2Client::write(message); +} + +void Agilent4uhv::read_answer(const string win_s, const unsigned char com, + vector<unsigned char> &answer) +{ + vector<unsigned char> answer_, crc; + Serial2Client::read_until(ETX, answer_); + Serial2Client::read(2, crc); + + if (answer_.size() == 4) + { + // Thus data is 1 byte length and it could be an error or Logic datatype! - if (answer.size() == 4) { - ResponseHeader *header = (ResponseHeader*)&answer[0]; - string err_mesg; - switch ((int)header->ack) + switch ((int)answer_[2]) { - case 0x06: /* ACK */ - break; - case 0x15: /* NACK */ + case 0x06: + // Ok + return; + case 0x15: err_mesg = "Execution of the command has failed"; break; - case 0x32: /* Unknown Window */ - err_mesg = "The window specified in the command" - " is not a valid window"; + case 0x32: + err_mesg = "The window specified in the command is not a valid window"; break; - case 0x33: /* Data Type Error */ - err_mesg = "The data type specified in the command" - " (Logic, Numeric or Alphanumeric) is not" - " in agreement with the Window specified"; + case 0x33: + err_mesg = "The data type specified in the command (Logic, Numeric or " + "Alphanumeric) is not in agreement with the Window specified"; break; - case 0x35: /* Win Disabled */ - err_mesg = "The window specified is Read Only or" - " is temporarily disabled"; - break; - default: - // "Out of Range" perhaps? - err_mesg = "Unknown error"; + case 0x35: + err_mesg = "The window specified is Read Only or is temporarily disabled"; break; } @@ -1671,40 +1803,43 @@ string Agilent4uhv::read_answer() Tango::Except::throw_exception( "", err_mesg, "Agilent4uhv::read_answer()"); - } else { - ret = string((char*)(&answer[0] + sizeof(MessageHeader)), data_length); } - return ret; -} -string Agilent4uhv::read(const char window[WIN_LENGTH]) -{ - omni_mutex_lock l(io_mutex); - try { - write_message(window, READ_WINDOW, NULL, 0); - return read_answer(); - } catch(...) { - throw; - } -} + stringstream win_rr; + win_rr << answer_[2] << answer_[3] << answer_[4] << flush; + string win_r; + win_rr >> win_r; + if (win_rr.fail()) + Tango::Except::throw_exception( "", + "Conversion fail " + win_rr.str(), + "Agilent4uhv::read_answer()"); -void Agilent4uhv::write(const char window[WIN_LENGTH], const char * const data, - const size_t data_length) -{ - omni_mutex_lock l(io_mutex); - try { - write_message(window, WRITE_WINDOW, data, data_length); - (void)read_answer(); - } catch(...) { - throw; - } + unsigned char crc_c = calc_crc(answer_); + + stringstream crc_rr; + crc_rr << hex << uppercase << crc[0] << crc[1] << flush; + int crc_r; + crc_rr >> crc_r; + if (crc_rr.fail()) + Tango::Except::throw_exception( "", + "Conversion fail " + crc_rr.str(), + "Agilent4uhv::read_answer()"); + + if (answer_[0] != STX /*|| answer_[1] != ADDR + 1*/ || com != answer_[5] + || win_s != win_r || crc_c != crc_r) + Tango::Except::throw_exception( "", + "Answer malformed", + "Agilent4uhv::read_answer()"); + + answer.resize(answer_.size() - 7); + copy(answer_.begin() + 6, answer_.end() - 1, answer.begin()); } -int Agilent4uhv::calc_crc(unsigned char *contents, size_t count) +unsigned char Agilent4uhv::calc_crc(const vector<unsigned char> &message) { - int ret = 0; - for (size_t i = 0; i < count; ++i) - ret ^= contents[i]; + unsigned char ret = 0; + for (vector<unsigned char>::size_type i=1 /*Skip STX*/; i<message.size(); ++i) + ret ^= message[i]; return ret; } @@ -1716,523 +1851,280 @@ void Agilent4uhv::check_init_error(void) "Agilent4uhv::check_init_error()"); } -void Agilent4uhv::read(const char window[WIN_LENGTH], string &data) { - data = read(window); -} - -void Agilent4uhv::read(const char window[WIN_LENGTH], bool &data) { - string tmp = read(window); - convert(tmp, data); -} - -void Agilent4uhv::read(const char window[WIN_LENGTH], int &data) { - string tmp = read(window); - convert(tmp, data); -} - -void Agilent4uhv::write(const char window[WIN_LENGTH], const string &data) { - if (strcmp(attr_Model_read[0], "X3602-64010") == 0) { - write(window, data.c_str(), ALPHANUMERIC_LENGTH_IPCMINI > data.size()? - data.size() : ALPHANUMERIC_LENGTH_IPCMINI); - } else { - write(window, data.c_str(), ALPHANUMERIC_LENGTH_4UHV > data.size()? - data.size() : ALPHANUMERIC_LENGTH_4UHV); - } -} - -void Agilent4uhv::write(const char window[WIN_LENGTH], const bool data) { - char data_[LOGIC_LENGTH+1]; - snprintf(data_, LOGIC_LENGTH+1, "%0*d", LOGIC_LENGTH, data); - write(window, data_, LOGIC_LENGTH); -} - -void Agilent4uhv::write(const char window[WIN_LENGTH], const int data) { - char data_[NUMERIC_LENGTH+1]; - snprintf(data_, NUMERIC_LENGTH+1, "%0*d", NUMERIC_LENGTH, data); - write(window, data_, NUMERIC_LENGTH); -} - -void Agilent4uhv::read_Status() { - int val; - read("205", val); - - if (val == 0) { - set_state(Tango::ON); - set_status("The device is in ON state"); - } else { - set_state(Tango::FAULT); - set_status("The device is in FAULT state"); - } -} - -void Agilent4uhv::read_Model() { - string val; - read("319", val); - strncpy(attr_Model_read[0], val.c_str(), - MAX_DEVSTRING_LENGTH > val.size()? - val.size() : MAX_DEVSTRING_LENGTH); -} - -void Agilent4uhv::read_PowerMaxCh1() { - int val; - read("612", val); - PowerMaxX_data["PowerMax1"] = val; -} - -void Agilent4uhv::read_PowerMaxCh2() { - int val; - read("622", val); - PowerMaxX_data["PowerMax2"] = val; -} - -void Agilent4uhv::read_PowerMaxCh3() { - int val; - read("632", val); - PowerMaxX_data["PowerMax3"] = val; -} - -void Agilent4uhv::read_PowerMaxCh4() { - int val; - read("642", val); - PowerMaxX_data["PowerMax4"] = val; -} - -void Agilent4uhv::read_PressureCh1() { - string val; - read("812", val); - double val2; - convert(val, val2); - PressureX_data["Pressure1"] = val2; -} +void* Worker::run_undetached(void *ptr) +{ + (void)ptr; -void Agilent4uhv::read_PressureCh2() { - string val; - read("822", val); - double val2; - convert(val, val2); - PressureX_data["Pressure2"] = val2; -} + DEBUG_STREAM << "Worker::run_undetached() - enter" << endl; -void Agilent4uhv::read_PressureCh3() { - string val; - read("832", val); - double val2; - convert(val, val2); - PressureX_data["Pressure3"] = val2; -} + Data data; + vector<unsigned char> channels(6, '0'); -void Agilent4uhv::read_PressureCh4() { - string val; - read("842", val); - double val2; - convert(val, val2); - PressureX_data["Pressure4"] = val2; -} + while(cont) { + DEBUG_STREAM << "Worker::run_undetached() - loop" << endl; -void Agilent4uhv::read_HVCh1() { - bool val; - read("011", val); - - if (val) - HVX_data["HV1"] = Tango::ON; - else - HVX_data["HV1"] = Tango::OFF; -} + // Retrieve data + try { + device->read(MODEL, data.model); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_HVCh2() { - bool val; - read("012", val); - - if (val) - HVX_data["HV2"] = Tango::ON; - else - HVX_data["HV2"] = Tango::OFF; -} + device->read(SERIALNUMBER, data.serial_number); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_HVCh3() { - bool val; - read("013", val); - - if (val) - HVX_data["HV3"] = Tango::ON; - else - HVX_data["HV3"] = Tango::OFF; -} + device->read(TEMPERATUREFAN, data.temperature_fan); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_HVCh4() { - bool val; - read("014", val); - - if (val) - HVX_data["HV4"] = Tango::ON; - else - HVX_data["HV4"] = Tango::OFF; -} + device->read(HVCH1, data.hvch[0]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_ErrorCodeCh1() { - int val; - if (nchannel > 1) - write("505", 1); - read("206", val); - errorcode[0] = val; -} + device->read(HVCH2, data.hvch[1]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_ErrorCodeCh2() { - int val; - write("505", 2); - read("206", val); - errorcode[1] = val; -} + device->read(HVCH3, data.hvch[2]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_ErrorCodeCh3() { - int val; - write("505", 3); - read("206", val); - errorcode[2] = val; -} + device->read(HVCH4, data.hvch[3]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_ErrorCodeCh4() { - int val; - write("505", 4); - read("206", val); - errorcode[3] = val; -} + device->read(DEVICENUMBERCH1, data.device_number[0]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_SerialNumber() { - string val; - read("323", val); - strncpy(attr_SerialNumber_read[0], val.c_str(), - MAX_DEVSTRING_LENGTH > val.size()? - val.size() : MAX_DEVSTRING_LENGTH); -} + device->read(DEVICENUMBERCH2, data.device_number[1]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_FixedStep() { - string val; - read("603", val); - - if (val.size() == 1) { - if (val[0] == '0') { - FixedStepX_data["Fixed1"] = false; - } else { - FixedStepX_data["Fixed1"] = true; - } - } else { - int j = 1; - for (int i = val.size(); i > ((int)val.size() - 4) /* Max channels */; --i) { - stringstream ss; - ss << j++; - if (val[i-1] == '0') { - FixedStepX_data["Fixed" + ss.str()] = false; - } else { - FixedStepX_data["Fixed" + ss.str()] = true; - } - } - } -} + device->read(DEVICENUMBERCH3, data.device_number[2]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_AutoStart() { - string val; - read("601", val); - - if (val[val.size()-1] == '1') { - attr_AutoStart_read[0] = true; - } else { - attr_AutoStart_read[0] = false; - } -} + device->read(DEVICENUMBERCH4, data.device_number[3]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_Protect() { - string val; - read("602", val); - - if (val.size() == 1) { - if (val[0] == '0') { - ProtectX_data["Protect1"] = false; - } else { - ProtectX_data["Protect1"] = true; - } - } else { - int j = 1; - for (int i = val.size(); i > ((int)val.size() - 4) /* Max channels */; --i) { - stringstream ss; - ss << j++; - if (val[i-1] == '0') { - ProtectX_data["Protect" + ss.str()] = false; - } else { - ProtectX_data["Protect" + ss.str()] = true; - } - } - } -} + device->read(POWERMAXCH1, data.power_max[0]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_StatusSetPoint() { - string val; - read("804", val); + device->read(POWERMAXCH2, data.power_max[1]); + if(! cont) + break; + wait(10); - if (val.size() == 1) { - if (val[0] == '0') { - StatusSetPointX_data["StatusSetPoint1"] = false; - } else { - StatusSetPointX_data["StatusSetPoint1"] = true; - } - } else { - int j = 1; - for (int i = val.size(); i > ((int)val.size() - 4) /* Max channels */; --i) { - stringstream ss; - ss << j++; - if (val[i-1] == '0') { - StatusSetPointX_data["StatusSetPoint" + ss.str()] = false; - } else { - StatusSetPointX_data["StatusSetPoint" + ss.str()] = true; - } - } - } -} + device->read(POWERMAXCH3, data.power_max[2]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_DeviceNumberCh1() { - int val; - read("610", val); - DeviceNumberX_data["DeviceNumber1"] = val; -} + device->read(POWERMAXCH4, data.power_max[3]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_DeviceNumberCh2() { - int val; - read("620", val); - DeviceNumberX_data["DeviceNumber2"] = val; -} + device->read(VTARGETCH1, data.vtarget[0]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_DeviceNumberCh3() { - int val; - read("630", val); - DeviceNumberX_data["DeviceNumber3"] = val; -} + device->read(VTARGETCH2, data.vtarget[1]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_DeviceNumberCh4() { - int val; - read("640", val); - DeviceNumberX_data["DeviceNumber4"] = val; -} + device->read(VTARGETCH3, data.vtarget[2]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_VTargetCh1() { - int val; - read("613", val); - VTargetX_data["VTarget1"] = val / 1000; -} + device->read(VTARGETCH4, data.vtarget[3]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_VTargetCh2() { - int val; - read("623", val); - VTargetX_data["VTarget2"] = val / 1000; -} + device->read(IPROTECTCH1, data.iprotect[0]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_VTargetCh3() { - int val; - read("633", val); - VTargetX_data["VTarget3"] = val / 1000; -} + device->read(IPROTECTCH2, data.iprotect[1]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_VTargetCh4() { - int val; - read("643", val); - VTargetX_data["VTarget4"] = val / 1000; -} + device->read(IPROTECTCH3, data.iprotect[2]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_IProtectCh1() { - int val; - read("614", val); - if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - IProtectX_data["IProtect1"] = val / 1000; - } else { - IProtectX_data["IProtect1"] = val; - } -} + device->read(IPROTECTCH4, data.iprotect[3]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_IProtectCh2() { - int val; - read("624", val); - if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - IProtectX_data["IProtect2"] = val / 1000; - } else { - IProtectX_data["IProtect2"] = val; - } -} + device->read(SETPOINTCH1, data.setpoint[0]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_IProtectCh3() { - int val; - read("634", val); - if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - IProtectX_data["IProtect3"] = val / 1000; - } else { - IProtectX_data["IProtect3"] = val; - } -} + device->read(SETPOINTCH2, data.setpoint[1]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_IProtectCh4() { - int val; - read("644", val); - if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) { - IProtectX_data["IProtect4"] = val / 1000; - } else { - IProtectX_data["IProtect4"] = val; - } -} + device->read(SETPOINTCH3, data.setpoint[2]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_SetPointCh1() { - string val; - read("615", val); - convert(val, SetPointX_data["SetPoint1"]); -} + device->read(SETPOINTCH4, data.setpoint[3]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_SetPointCh2() { - string val; - read("625", val); - convert(val, SetPointX_data["SetPoint2"]); -} + device->read(TEMPERATUREHVCH1, data.temperaturehv[0]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_SetPointCh3() { - string val; - read("635", val); - convert(val, SetPointX_data["SetPoint3"]); -} + device->read(TEMPERATUREHVCH2, data.temperaturehv[1]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_SetPointCh4() { - string val; - read("645", val); - convert(val, SetPointX_data["SetPoint4"]); -} + device->read(TEMPERATUREHVCH3, data.temperaturehv[2]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_Temperature() { - int val; - read("800", val); - attr_Temperature_read[0] = val; -} + device->read(TEMPERATUREHVCH4, data.temperaturehv[3]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_TemperatureCh1() { - int val; - read("801", val); - TemperatureHVX_data["TemperatureHV1"] = val; -} + device->read(VMEASUREDCH1, data.vmeasured[0]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_TemperatureCh2() { - int val; - read("802", val); - TemperatureHVX_data["TemperatureHV2"] = val; -} + device->read(VMEASUREDCH2, data.vmeasured[1]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_TemperatureCh3() { - int val; - read("808", val); - TemperatureHVX_data["TemperatureHV3"] = val; -} + device->read(VMEASUREDCH3, data.vmeasured[2]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_TemperatureCh4() { - int val; - read("809", val); - TemperatureHVX_data["TemperatureHV4"] = val; -} + device->read(VMEASUREDCH4, data.vmeasured[3]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_IMeasuredCh1() { - string val; - read("811", val); - convert(val, CurrentX_data["Current1"]); -} + device->read(IMEASUREDCH1, data.imeasured[0]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_IMeasuredCh2() { - string val; - read("821", val); - convert(val, CurrentX_data["Current2"]); -} + device->read(IMEASUREDCH2, data.imeasured[1]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_IMeasuredCh3() { - string val; - read("831", val); - convert(val, CurrentX_data["Current3"]); -} + device->read(IMEASUREDCH3, data.imeasured[2]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_IMeasuredCh4() { - string val; - read("841", val); - convert(val, CurrentX_data["Current4"]); -} + device->read(IMEASUREDCH4, data.imeasured[3]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_VMeasuredCh1() { - int val; - read("810", val); - VoltageX_data["Voltage1"] = val; -} + device->read(PRESSURECH1, data.pressure[0]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_VMeasuredCh2() { - int val; - read("820", val); - VoltageX_data["Voltage2"] = val; -} + device->read(PRESSURECH2, data.pressure[1]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_VMeasuredCh3() { - int val; - read("830", val); - VoltageX_data["Voltage3"] = val; -} + device->read(PRESSURECH3, data.pressure[2]); + if(! cont) + break; + wait(10); -void Agilent4uhv::read_VMeasuredCh4() { - int val; - read("840", val); - VoltageX_data["Voltage4"] = val; -} + device->read(PRESSURECH4, data.pressure[3]); + if(! cont) + break; + wait(10); -void* Agilent4uhvWorker::run_undetached(void * /*ptr*/) -{ - DEBUG_STREAM << "Agilent4uhvWorker::run_undetached() - enter" << endl; + device->read(OPERATINGMODE, data.autostart); + if(! cont) + break; + wait(10); - string error; - vector<ptrFunction>::iterator norm_it = device->norm_ops.begin(); - vector<ptrFunction>::iterator prio_it = device->prio_ops.begin(); + device->read(PROTECT, data.protect); + if(! cont) + break; + wait(10); - while(cont) { - try { - error.clear(); - - // Retrieve priority data - (device->*(*prio_it))(); - if(++prio_it == device->prio_ops.end()) - prio_it = device->prio_ops.begin(); - - // A chance to exit from while loop + device->read(FIXEDSTEP, data.fs); if(! cont) break; + wait(10); - usleep(device->pollingPause * 1000); + device->read(STATUSSETPOINT, data.ssp); + if(! cont) + break; + wait(10); - // A chance to exit from while loop + device->read(INTERLOCKSTATUS, data.is); if(! cont) break; - - // Retrieve normal data - (device->*(*norm_it))(); - if(++norm_it == device->norm_ops.end()) - norm_it = device->norm_ops.begin(); - - // A chance to exit from while loop + wait(10); + + device->write(SETCHANNEL, channels); + device->read(ERRORCODE, data.ec); if(! cont) break; + wait(10); - usleep(device->pollingPause * 1000); + data.state = Tango::ON; + data.status = "The device is in ON state"; } catch(Tango::DevFailed &e) { - error = string(e.errors[0].desc); - } catch(...) { - error = "Unknown error"; + data.state = Tango::FAULT; + data.status = string(e.errors[0].desc); } - if(! error.empty()) { - ERROR_STREAM << error << endl; - device->set_state(Tango::UNKNOWN); - device->set_status(error); - assert(false); - } - - usleep(device->pollingPeriod * 1000); + // Copy data + device->data_mutex.lock(); + device->data = data; + device->data_mutex.unlock(); } - DEBUG_STREAM << "Agilent4uhvWorker::run_undetached() - exit" << endl; + DEBUG_STREAM << "Worker::run_undetached() - exit" << endl; return NULL; } diff --git a/src/Agilent4uhv.h b/src/Agilent4uhv.h index f2bd6bddc3757558cd5a7f6c0a8a90ad6c60d872..e627befa07d19503fdb0479dc6f51b1e8c6349b4 100644 --- a/src/Agilent4uhv.h +++ b/src/Agilent4uhv.h @@ -24,8 +24,8 @@ // // $Author: alessio $ // -// $Revision: 1.13 $ -// $Date: 2019-04-01 09:14:47 $ +// $Revision: 1.9 $ +// $Date: 2018-05-10 08:04:51 $ // // $HeadURL: $ // @@ -53,12 +53,32 @@ namespace Agilent4uhv_ns /*----- PROTECTED REGION ID(Agilent4uhv::Additional Class Declarations) ENABLED START -----*/ // Additional Class Declarations - -#define WIN_LENGTH 3 - -class Agilent4uhv; -class Agilent4uhvWorker; -typedef void(Agilent4uhv::*ptrFunction)(void); +class Worker; +struct Data { + string model; + string serial_number; + Tango::DevFloat temperature_fan; + int hvch[4]; + Tango::DevLong device_number[4]; + Tango::DevUShort power_max[4]; + Tango::DevUShort vtarget[4]; + Tango::DevUShort iprotect[4]; + Tango::DevDouble setpoint[4]; + Tango::DevFloat temperaturehv[4]; + Tango::DevDouble vmeasured[4]; + Tango::DevDouble imeasured[4]; + Tango::DevDouble pressure[4]; + + vector<unsigned char> autostart; + vector<unsigned char> protect; + vector<unsigned char> fs; + vector<unsigned char> ssp; + vector<unsigned char> is; + vector<unsigned char> ec; + + Tango::DevState state; + string status; +}; /*----- PROTECTED REGION END -----*/ // Agilent4uhv::Additional Class Declarations @@ -70,31 +90,19 @@ class Agilent4uhv : public Serial2Client_ns::Serial2Client // Add your own data members Tango::DevUShort nchannel; string init_error; - - /* - * 4UHV con 2 canali x 80W--> attivi canali 1 e 2 - * 4UHV con 4 canali x 80W--> attivi canali da 1 a 4 - * 4UHV con 2 canali x 200W--> attivi canali 1 e 3 - */ bool odd_channel_quirk; - omni_mutex io_mutex; - - Agilent4uhvWorker *worker; - - int errorcode[4]; + omni_mutex iomutex; public: - vector<ptrFunction> norm_ops, prio_ops; + Worker *worker; + Data data; + omni_mutex data_mutex; /*----- PROTECTED REGION END -----*/ // Agilent4uhv::Data Members // Device property data members public: - // PollingPause: Milliseconds between two command issued by internal poller in the same cycle - Tango::DevLong pollingPause; - // PollingPeriod: Milliseconds between two cycle of the internal poller - Tango::DevLong pollingPeriod; bool mandatoryNotDefined; @@ -103,8 +111,6 @@ public: Tango::DevString *attr_Model_read; Tango::DevString *attr_SerialNumber_read; Tango::DevFloat *attr_Temperature_read; - Tango::DevLong *attr_CRCErrors_read; - Tango::DevBoolean *attr_AutoStart_read; // Constructors and destructors public: @@ -146,10 +152,6 @@ public: * Initialize the device */ virtual void init_device(); - /* - * Read the device properties from database - */ - void get_device_property(); /* * Always executed method before execution command method. */ @@ -169,13 +171,6 @@ public: */ //-------------------------------------------------------- virtual void read_attr_hardware(vector<long> &attr_list); - //-------------------------------------------------------- - /* - * Method : Agilent4uhv::write_attr_hardware() - * Description : Hardware writing for attributes. - */ - //-------------------------------------------------------- - virtual void write_attr_hardware(vector<long> &attr_list); /** * Attribute Model related methods @@ -204,25 +199,6 @@ public: */ virtual void read_Temperature(Tango::Attribute &attr); virtual bool is_Temperature_allowed(Tango::AttReqType type); -/** - * Attribute CRCErrors related methods - * Description: CRC Errors - * - * Data type: Tango::DevLong - * Attr type: Scalar - */ - virtual void read_CRCErrors(Tango::Attribute &attr); - virtual bool is_CRCErrors_allowed(Tango::AttReqType type); -/** - * Attribute AutoStart related methods - * Description: - * - * Data type: Tango::DevBoolean - * Attr type: Scalar - */ - virtual void read_AutoStart(Tango::Attribute &attr); - virtual void write_AutoStart(Tango::WAttribute &attr); - virtual bool is_AutoStart_allowed(Tango::AttReqType type); // Dynamic attribute methods public: @@ -400,6 +376,21 @@ public: Tango::DevString *get_StatusX_data_ptr(string &name); map<string,Tango::DevString> StatusX_data; + /** + * Attribute AutoStartX related methods + * Description: + * + * Data type: Tango::DevBoolean + * Attr type: Scalar + */ + virtual void read_AutoStartX(Tango::Attribute &attr); + virtual void write_AutoStartX(Tango::WAttribute &attr); + virtual bool is_AutoStartX_allowed(Tango::AttReqType type); + void add_AutoStartX_dynamic_attribute(string attname); + void remove_AutoStartX_dynamic_attribute(string attname); + Tango::DevBoolean *get_AutoStartX_data_ptr(string &name); + map<string,Tango::DevBoolean> AutoStartX_data; + /** * Attribute ProtectX related methods * Description: @@ -444,6 +435,20 @@ public: Tango::DevBoolean *get_StatusSetPointX_data_ptr(string &name); map<string,Tango::DevBoolean> StatusSetPointX_data; + /** + * Attribute InterlockStatusX related methods + * Description: + * + * Data type: Tango::DevBoolean + * Attr type: Scalar + */ + virtual void read_InterlockStatusX(Tango::Attribute &attr); + virtual bool is_InterlockStatusX_allowed(Tango::AttReqType type); + void add_InterlockStatusX_dynamic_attribute(string attname); + void remove_InterlockStatusX_dynamic_attribute(string attname); + Tango::DevBoolean *get_InterlockStatusX_data_ptr(string &name); + map<string,Tango::DevBoolean> InterlockStatusX_data; + /** * Attribute StatMaskX related methods * Description: @@ -471,27 +476,63 @@ public: // Command related methods public: - -// Dynamic commands methods -public: /** - * Command OnHVX related method + * Command OffHV1 related method + * Description: + * + */ + virtual void off_hv1(); + virtual bool is_OffHV1_allowed(const CORBA::Any &any); + /** + * Command OffHV2 related method + * Description: + * + */ + virtual void off_hv2(); + virtual bool is_OffHV2_allowed(const CORBA::Any &any); + /** + * Command OnHV1 related method + * Description: + * + */ + virtual void on_hv1(); + virtual bool is_OnHV1_allowed(const CORBA::Any &any); + /** + * Command OnHV2 related method + * Description: + * + */ + virtual void on_hv2(); + virtual bool is_OnHV2_allowed(const CORBA::Any &any); + /** + * Command OffHV3 related method + * Description: + * + */ + virtual void off_hv3(); + virtual bool is_OffHV3_allowed(const CORBA::Any &any); + /** + * Command OffHV4 related method + * Description: + * + */ + virtual void off_hv4(); + virtual bool is_OffHV4_allowed(const CORBA::Any &any); + /** + * Command OnHV3 related method * Description: * */ - virtual void on_hvx(Tango::Command &command); - virtual bool is_OnHVX_allowed(const CORBA::Any &any); - void add_OnHVX_dynamic_command(string cmdname, bool device); - void remove_OnHVX_dynamic_command(string cmdname); + virtual void on_hv3(); + virtual bool is_OnHV3_allowed(const CORBA::Any &any); /** - * Command OffHVX related method + * Command OnHV4 related method * Description: * */ - virtual void off_hvx(Tango::Command &command); - virtual bool is_OffHVX_allowed(const CORBA::Any &any); - void add_OffHVX_dynamic_command(string cmdname, bool device); - void remove_OffHVX_dynamic_command(string cmdname); + virtual void on_hv4(); + virtual bool is_OnHV4_allowed(const CORBA::Any &any); + //-------------------------------------------------------- /** @@ -504,129 +545,100 @@ public: /*----- PROTECTED REGION ID(Agilent4uhv::Additional Method prototypes) ENABLED START -----*/ // Additional Method prototypes -private: - void write_message(const char window[WIN_LENGTH], const unsigned char com, - const char * const data, const size_t data_length); - string read_answer(); - - void write(const char window[WIN_LENGTH], const char * const data, - const size_t data_length); - string read(const char window[WIN_LENGTH]); - - template<typename T> void convert(const string &data, T &result) { - stringstream ss; - ss << data; - ss >> result; - if (ss.fail()) - Tango::Except::throw_exception( "", - "Conversion fail of " + data, + void write(const int win, string &value); + template<typename T> void write(const int win, T &value) + { + string data; + convert(value, data); + write(win, data); + } + + void read(const int win, string &value); + template<typename T> void read(const int win, T &value) + { + string answer; + read(win, answer); + convert(answer, value); + } + + void write(const int win, vector<unsigned char> &data); + void read(const int win, vector<unsigned char> &answer); + void check_ack(); + void write_message(const string win_s, const unsigned char com, vector<unsigned char> &data); + void read_answer(const string win_s, const unsigned char com, vector<unsigned char> &answer); + unsigned char calc_crc(const vector<unsigned char> &message); + template<typename F, typename T> void convert(const F &reply, T &reply_converted) + { + stringstream conv; + convert(reply, conv); + conv >> reply_converted; + + if (conv.fail()) + Tango::Except::throw_exception( + "API_ConverionError", + "Conversion fail " + conv.str(), "Agilent4uhv::convert()"); } - - template<typename T> void convert(const T &data, string &result) { - stringstream ss; - ss << data; - result = ss.str(); - if (ss.fail()) - Tango::Except::throw_exception( "", - "Conversion fail of " + data, + template<typename F> void convert(const F &reply, stringstream &conv) + { + conv << reply << flush; + + if (conv.fail()) + Tango::Except::throw_exception( + "API_ConverionError", + "Conversion fail " + conv.str(), "Agilent4uhv::convert()"); } - - int calc_crc(unsigned char *contents, size_t count); + template<typename F> void convert(const F &reply, string &reply_converted) + { + stringstream conv; + convert(reply, conv); + reply_converted = conv.str(); + } void check_init_error(void); -#define ALPHANUMERIC_LENGTH_4UHV 10 -#define ALPHANUMERIC_LENGTH_IPCMINI 48 -#define LOGIC_LENGTH 1 -#define NUMERIC_LENGTH 6 - - void read(const char window[WIN_LENGTH], string &data); - void read(const char window[WIN_LENGTH], bool &data); - void read(const char window[WIN_LENGTH], int &data); - void write(const char window[WIN_LENGTH], const string &data); - void write(const char window[WIN_LENGTH], const bool data); - void write(const char window[WIN_LENGTH], const int data); - -public: - void read_Status(); - void read_Model(); - void read_PowerMaxCh1(); - void read_PowerMaxCh2(); - void read_PowerMaxCh3(); - void read_PowerMaxCh4(); - void read_PressureCh1(); - void read_PressureCh2(); - void read_PressureCh3(); - void read_PressureCh4(); - void read_HVCh1(); - void read_HVCh2(); - void read_HVCh3(); - void read_HVCh4(); - void read_ErrorCodeCh1(); - void read_ErrorCodeCh2(); - void read_ErrorCodeCh3(); - void read_ErrorCodeCh4(); - void read_SerialNumber(); - void read_FixedStep(); - void read_AutoStart(); - void read_Protect(); - void read_DeviceNumberCh1(); - void read_DeviceNumberCh2(); - void read_DeviceNumberCh3(); - void read_DeviceNumberCh4(); - void read_VTargetCh1(); - void read_VTargetCh2(); - void read_VTargetCh3(); - void read_VTargetCh4(); - void read_IProtectCh1(); - void read_IProtectCh2(); - void read_IProtectCh3(); - void read_IProtectCh4(); - void read_SetPointCh1(); - void read_SetPointCh2(); - void read_SetPointCh3(); - void read_SetPointCh4(); - void read_Temperature(); - void read_TemperatureCh1(); - void read_TemperatureCh2(); - void read_TemperatureCh3(); - void read_TemperatureCh4(); - void read_IMeasuredCh1(); - void read_IMeasuredCh2(); - void read_IMeasuredCh3(); - void read_IMeasuredCh4(); - void read_VMeasuredCh1(); - void read_VMeasuredCh2(); - void read_VMeasuredCh3(); - void read_VMeasuredCh4(); - void read_StatusSetPoint(); - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::Additional Method prototypes }; /*----- PROTECTED REGION ID(Agilent4uhv::Additional Classes Definitions) ENABLED START -----*/ // Additional Classes Definitions -class Agilent4uhvWorker : public omni_thread, public Tango::LogAdapter { +class Worker : public omni_thread, public Tango::LogAdapter +{ Agilent4uhv *device; void* run_undetached(void*); bool cont; -public: - Agilent4uhvWorker(Agilent4uhv *device_) : - LogAdapter((Tango::DeviceImpl*)device_), - device(device_), cont(false) {} - void start() { - cont = true; + public: + void start(void) { start_undetached(); } - void stop() { + void stop(void) { cont = false; } + + void wait(unsigned int millisecs) + { + while(cont && millisecs) { + if (millisecs >= 250) { + omni_thread::self()->sleep(0, 250000000); + millisecs -= 250; + } else { + omni_thread::self()->sleep(0, millisecs * 1000000); + millisecs = 0; + } + } + } + + Worker(Agilent4uhv *device_) : + LogAdapter((Tango::DeviceImpl*)device_), + device(device_) { + cont = true; + } }; + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::Additional Classes Definitions } // End of namespace diff --git a/src/Agilent4uhv.xmi b/src/Agilent4uhv.xmi index 7d2682699abdfedf7654d341d6e59195a0e5d8ef..ca871eacd56e327682ca2823ab20f66afaac4ae5 100644 --- a/src/Agilent4uhv.xmi +++ b/src/Agilent4uhv.xmi @@ -1,7 +1,7 @@ <?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="Agilent4uhv" pogoRevision="9.4"> - <description description="" title="" sourcePath="/home/alessio/Sources/cvs-trees/fermi/servers/4uhv/src" language="Cpp" filestogenerate="XMI file,Code files,Protected Regions" license="GPL" hasMandatoryProperty="true" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false"> + <description description="" title="" sourcePath="/home/alessio/fermi/servers/4uhv/src" language="Cpp" filestogenerate="XMI file,Code files,Protected Regions" license="GPL" hasMandatoryProperty="true" hasConcreteProperty="false" hasAbstractCommand="false" hasAbstractAttribute="false"> <inheritances classname="Device_Impl" sourcePath=""/> <inheritances classname="Serial2Client" sourcePath="../../serial2/src"/> <identification contact="at elettra.eu> - Alessio Igor Bogani <alessio.bogani" author="Alessio Igor Bogani <alessio.bogani" emailDomain="elettra.eu>" classFamily="Vacuum" siteSpecific="" platform="Unix Like" bus="Serial Line" manufacturer="Agilent Technologies" reference="4UHV Ion Pump Controller"/> @@ -10,16 +10,54 @@ <type xsi:type="pogoDsl:StringType"/> <status abstract="false" inherited="true" concrete="true"/> </deviceProperties> - <deviceProperties name="PollingPause" description="Milliseconds between two command issued by internal poller in the same cycle"> - <type xsi:type="pogoDsl:IntType"/> + <commands name="OffHV1" description="" execMethod="off_hv1" displayLevel="OPERATOR" polledPeriod="0"> + <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"/> - <DefaultPropValue>0</DefaultPropValue> - </deviceProperties> - <deviceProperties name="PollingPeriod" description="Milliseconds between two cycle of the internal poller"> - <type xsi:type="pogoDsl:IntType"/> + <excludedStates>UNKNOWN</excludedStates> + <excludedStates>FAULT</excludedStates> + <excludedStates>INIT</excludedStates> + </commands> + <commands name="OffHV2" description="" execMethod="off_hv2" displayLevel="OPERATOR" polledPeriod="0"> + <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"/> - <DefaultPropValue>1000</DefaultPropValue> - </deviceProperties> + <excludedStates>UNKNOWN</excludedStates> + <excludedStates>FAULT</excludedStates> + <excludedStates>INIT</excludedStates> + </commands> + <commands name="OnHV1" description="" execMethod="on_hv1" displayLevel="OPERATOR" polledPeriod="0"> + <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"/> + <excludedStates>UNKNOWN</excludedStates> + <excludedStates>FAULT</excludedStates> + <excludedStates>INIT</excludedStates> + </commands> + <commands name="OnHV2" description="" execMethod="on_hv2" displayLevel="OPERATOR" polledPeriod="0"> + <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"/> + <excludedStates>UNKNOWN</excludedStates> + <excludedStates>FAULT</excludedStates> + <excludedStates>INIT</excludedStates> + </commands> <commands name="State" description="This command gets the device state (stored in its device_state data member) and returns it to the caller." execMethod="dev_state" displayLevel="OPERATOR" polledPeriod="0"> <argin description="none"> <type xsi:type="pogoDsl:VoidType"/> @@ -38,7 +76,7 @@ </argout> <status abstract="true" inherited="true" concrete="true"/> </commands> - <dynamicCommands name="OnHVX" description="" execMethod="on_hvx" displayLevel="OPERATOR" polledPeriod="0" isDynamic="true"> + <commands name="OffHV3" description="" execMethod="off_hv3" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false"> <argin description=""> <type xsi:type="pogoDsl:VoidType"/> </argin> @@ -47,8 +85,10 @@ </argout> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <excludedStates>UNKNOWN</excludedStates> - </dynamicCommands> - <dynamicCommands name="OffHVX" description="" execMethod="off_hvx" displayLevel="OPERATOR" polledPeriod="0" isDynamic="true"> + <excludedStates>FAULT</excludedStates> + <excludedStates>INIT</excludedStates> + </commands> + <commands name="OffHV4" description="" execMethod="off_hv4" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false"> <argin description=""> <type xsi:type="pogoDsl:VoidType"/> </argin> @@ -57,8 +97,34 @@ </argout> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <excludedStates>UNKNOWN</excludedStates> - </dynamicCommands> - <attributes name="Model" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false"> + <excludedStates>FAULT</excludedStates> + <excludedStates>INIT</excludedStates> + </commands> + <commands name="OnHV3" description="" execMethod="on_hv3" 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"/> + <excludedStates>UNKNOWN</excludedStates> + <excludedStates>FAULT</excludedStates> + <excludedStates>INIT</excludedStates> + </commands> + <commands name="OnHV4" description="" execMethod="on_hv4" 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"/> + <excludedStates>UNKNOWN</excludedStates> + <excludedStates>FAULT</excludedStates> + <excludedStates>INIT</excludedStates> + </commands> + <attributes name="Model" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="false"> <dataType xsi:type="pogoDsl:StringType"/> <changeEvent fire="false" libCheckCriteria="false"/> <archiveEvent fire="false" libCheckCriteria="false"/> @@ -66,8 +132,10 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </attributes> - <attributes name="SerialNumber" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false"> + <attributes name="SerialNumber" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="false"> <dataType xsi:type="pogoDsl:StringType"/> <changeEvent fire="false" libCheckCriteria="false"/> <archiveEvent fire="false" libCheckCriteria="false"/> @@ -75,8 +143,10 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </attributes> - <attributes name="Temperature" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false"> + <attributes name="Temperature" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="false"> <dataType xsi:type="pogoDsl:FloatType"/> <changeEvent fire="false" libCheckCriteria="false"/> <archiveEvent fire="false" libCheckCriteria="false"/> @@ -84,25 +154,8 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="C" standardUnit="" displayUnit="" format="" maxValue="200" minValue="0" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> - </attributes> - <attributes name="CRCErrors" attType="Scalar" rwType="READ" displayLevel="EXPERT" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false"> - <dataType xsi:type="pogoDsl:IntType"/> - <changeEvent fire="false" libCheckCriteria="false"/> - <archiveEvent fire="false" libCheckCriteria="false"/> - <dataReadyEvent fire="false" libCheckCriteria="true"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - <properties description="CRC Errors" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> - <readExcludedStates>UNKNOWN</readExcludedStates> - </attributes> - <attributes name="AutoStart" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false"> - <dataType xsi:type="pogoDsl:BooleanType"/> - <changeEvent fire="false" libCheckCriteria="false"/> - <archiveEvent fire="false" libCheckCriteria="false"/> - <dataReadyEvent fire="false" libCheckCriteria="true"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> - <readExcludedStates>UNKNOWN</readExcludedStates> - <writeExcludedStates>UNKNOWN</writeExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </attributes> <dynamicAttributes name="HVX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:StateType"/> @@ -112,6 +165,8 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </dynamicAttributes> <dynamicAttributes name="DeviceNumberX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:IntType"/> @@ -121,7 +176,11 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> <writeExcludedStates>UNKNOWN</writeExcludedStates> + <writeExcludedStates>FAULT</writeExcludedStates> + <writeExcludedStates>INIT</writeExcludedStates> </dynamicAttributes> <dynamicAttributes name="PowerMaxX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:UShortType"/> @@ -129,9 +188,13 @@ <archiveEvent fire="false" libCheckCriteria="false"/> <dataReadyEvent fire="false" libCheckCriteria="true"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - <properties description="" label="" unit="W" standardUnit="" displayUnit="" format="" maxValue="80" minValue="10" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> + <properties description="" label="" unit="W" standardUnit="" displayUnit="" format="" maxValue="80" minValue="20" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> <writeExcludedStates>UNKNOWN</writeExcludedStates> + <writeExcludedStates>FAULT</writeExcludedStates> + <writeExcludedStates>INIT</writeExcludedStates> </dynamicAttributes> <dynamicAttributes name="VTargetX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:UShortType"/> @@ -141,7 +204,11 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="kV" standardUnit="" displayUnit="" format="" maxValue="7" minValue="3" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> <writeExcludedStates>UNKNOWN</writeExcludedStates> + <writeExcludedStates>FAULT</writeExcludedStates> + <writeExcludedStates>INIT</writeExcludedStates> </dynamicAttributes> <dynamicAttributes name="IProtectX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:UShortType"/> @@ -151,7 +218,11 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="mA" standardUnit="" displayUnit="" format="" maxValue="100" minValue="1" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> <writeExcludedStates>UNKNOWN</writeExcludedStates> + <writeExcludedStates>FAULT</writeExcludedStates> + <writeExcludedStates>INIT</writeExcludedStates> </dynamicAttributes> <dynamicAttributes name="SetPointX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:DoubleType"/> @@ -161,7 +232,11 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> <writeExcludedStates>UNKNOWN</writeExcludedStates> + <writeExcludedStates>FAULT</writeExcludedStates> + <writeExcludedStates>INIT</writeExcludedStates> </dynamicAttributes> <dynamicAttributes name="TemperatureHVX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:FloatType"/> @@ -171,6 +246,8 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="C" standardUnit="" displayUnit="" format="" maxValue="200" minValue="0" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </dynamicAttributes> <dynamicAttributes name="VoltageX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:DoubleType"/> @@ -180,6 +257,8 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="V" standardUnit="" displayUnit="" format="" maxValue="10000" minValue="0" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </dynamicAttributes> <dynamicAttributes name="CurrentX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:DoubleType"/> @@ -189,6 +268,8 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="A" standardUnit="" displayUnit="" format="" maxValue="9E-1" minValue="1E-10" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </dynamicAttributes> <dynamicAttributes name="PressureX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:DoubleType"/> @@ -198,6 +279,8 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="mbar" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </dynamicAttributes> <dynamicAttributes name="StateX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:StateType"/> @@ -207,6 +290,8 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </dynamicAttributes> <dynamicAttributes name="StatusX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:StringType"/> @@ -216,6 +301,22 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> + </dynamicAttributes> + <dynamicAttributes name="AutoStartX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> + <dataType xsi:type="pogoDsl:BooleanType"/> + <changeEvent fire="false" libCheckCriteria="false"/> + <archiveEvent fire="false" libCheckCriteria="false"/> + <dataReadyEvent fire="false" libCheckCriteria="true"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> + <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> + <writeExcludedStates>UNKNOWN</writeExcludedStates> + <writeExcludedStates>FAULT</writeExcludedStates> + <writeExcludedStates>INIT</writeExcludedStates> </dynamicAttributes> <dynamicAttributes name="ProtectX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:BooleanType"/> @@ -225,7 +326,11 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> <writeExcludedStates>UNKNOWN</writeExcludedStates> + <writeExcludedStates>FAULT</writeExcludedStates> + <writeExcludedStates>INIT</writeExcludedStates> </dynamicAttributes> <dynamicAttributes name="FixedStepX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:BooleanType"/> @@ -235,7 +340,11 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> <writeExcludedStates>UNKNOWN</writeExcludedStates> + <writeExcludedStates>FAULT</writeExcludedStates> + <writeExcludedStates>INIT</writeExcludedStates> </dynamicAttributes> <dynamicAttributes name="StatusSetPointX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:BooleanType"/> @@ -245,6 +354,19 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> + </dynamicAttributes> + <dynamicAttributes name="InterlockStatusX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> + <dataType xsi:type="pogoDsl:BooleanType"/> + <changeEvent fire="false" libCheckCriteria="false"/> + <archiveEvent fire="false" libCheckCriteria="false"/> + <dataReadyEvent fire="false" libCheckCriteria="true"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> + <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </dynamicAttributes> <dynamicAttributes name="StatMaskX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> <dataType xsi:type="pogoDsl:IntType"/> @@ -254,6 +376,8 @@ <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> + <readExcludedStates>FAULT</readExcludedStates> + <readExcludedStates>INIT</readExcludedStates> </dynamicAttributes> <states name="ON" description=""> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> @@ -261,10 +385,13 @@ <states name="ALARM" description=""> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </states> + <states name="UNKNOWN" description=""> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </states> <states name="FAULT" description=""> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </states> - <states name="UNKNOWN" description=""> + <states name="INIT" description=""> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </states> <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/> diff --git a/src/Agilent4uhvClass.cpp b/src/Agilent4uhvClass.cpp index c2fe0e15988e4021ceb23c4aa3704b35d9c06381..17fe26cc39fc2e8a6d3a45a4e0ecd377fe3daca5 100644 --- a/src/Agilent4uhvClass.cpp +++ b/src/Agilent4uhvClass.cpp @@ -1,6 +1,6 @@ /*----- PROTECTED REGION ID(Agilent4uhvClass.cpp) ENABLED START -----*/ -static const char *RcsId = "$Id: Agilent4uhvClass.cpp,v 1.6 2019-04-01 09:14:47 alessio Exp $"; -static const char *TagName = "Agilent4uhv $Name: $"; +static const char *RcsId = "$Id: Agilent4uhvClass.cpp,v 1.3 2016-05-23 07:50:11 alessio Exp $"; +static const char *TagName = "Agilent4uhv $Name: release_06 $"; static const char *CvsPath = "$Source: /home/cvsadm/cvsroot/fermi/servers/4uhv/src/Agilent4uhvClass.cpp,v $"; static const char *SvnPath = "$HeadURL: $"; static const char *HttpServer = "http://www.esrf.eu/computing/cs/tango/tango_doc/ds_doc/"; @@ -33,8 +33,8 @@ static const char *HttpServer = "http://www.esrf.eu/computing/cs/tango/tango_doc // // $Author: alessio $ // -// $Revision: 1.6 $ -// $Date: 2019-04-01 09:14:47 $ +// $Revision: 1.3 $ +// $Date: 2016-05-23 07:50:11 $ // // $HeadURL: $ // @@ -160,7 +160,7 @@ Agilent4uhvClass *Agilent4uhvClass::instance() //=================================================================== //-------------------------------------------------------- /** - * method : OnHVXClass::execute() + * method : OffHV1Class::execute() * description : method to trigger the execution of the command. * * @param device The device on which the command must be executed @@ -169,16 +169,16 @@ Agilent4uhvClass *Agilent4uhvClass::instance() * returns The command output data (packed in the Any object) */ //-------------------------------------------------------- -CORBA::Any *OnHVXClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +CORBA::Any *OffHV1Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - cout2 << "OnHVXClass::execute(): arrived" << endl; - ((static_cast<Agilent4uhv *>(device))->on_hvx(*this)); + cout2 << "OffHV1Class::execute(): arrived" << endl; + ((static_cast<Agilent4uhv *>(device))->off_hv1()); return new CORBA::Any(); } //-------------------------------------------------------- /** - * method : OffHVXClass::execute() + * method : OffHV2Class::execute() * description : method to trigger the execution of the command. * * @param device The device on which the command must be executed @@ -187,10 +187,118 @@ CORBA::Any *OnHVXClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CO * returns The command output data (packed in the Any object) */ //-------------------------------------------------------- -CORBA::Any *OffHVXClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +CORBA::Any *OffHV2Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - cout2 << "OffHVXClass::execute(): arrived" << endl; - ((static_cast<Agilent4uhv *>(device))->off_hvx(*this)); + cout2 << "OffHV2Class::execute(): arrived" << endl; + ((static_cast<Agilent4uhv *>(device))->off_hv2()); + return new CORBA::Any(); +} + +//-------------------------------------------------------- +/** + * method : OnHV1Class::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 *OnHV1Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +{ + cout2 << "OnHV1Class::execute(): arrived" << endl; + ((static_cast<Agilent4uhv *>(device))->on_hv1()); + return new CORBA::Any(); +} + +//-------------------------------------------------------- +/** + * method : OnHV2Class::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 *OnHV2Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +{ + cout2 << "OnHV2Class::execute(): arrived" << endl; + ((static_cast<Agilent4uhv *>(device))->on_hv2()); + return new CORBA::Any(); +} + +//-------------------------------------------------------- +/** + * method : OffHV3Class::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 *OffHV3Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +{ + cout2 << "OffHV3Class::execute(): arrived" << endl; + ((static_cast<Agilent4uhv *>(device))->off_hv3()); + return new CORBA::Any(); +} + +//-------------------------------------------------------- +/** + * method : OffHV4Class::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 *OffHV4Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +{ + cout2 << "OffHV4Class::execute(): arrived" << endl; + ((static_cast<Agilent4uhv *>(device))->off_hv4()); + return new CORBA::Any(); +} + +//-------------------------------------------------------- +/** + * method : OnHV3Class::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 *OnHV3Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +{ + cout2 << "OnHV3Class::execute(): arrived" << endl; + ((static_cast<Agilent4uhv *>(device))->on_hv3()); + return new CORBA::Any(); +} + +//-------------------------------------------------------- +/** + * method : OnHV4Class::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 *OnHV4Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +{ + cout2 << "OnHV4Class::execute(): arrived" << endl; + ((static_cast<Agilent4uhv *>(device))->on_hv4()); return new CORBA::Any(); } @@ -263,34 +371,6 @@ void Agilent4uhvClass::set_default_property() // Set Default Class Properties // Set Default device Properties - prop_name = "PollingPause"; - prop_desc = "Milliseconds between two command issued by internal poller in the same cycle"; - prop_def = "0"; - vect_data.clear(); - vect_data.push_back("0"); - 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 = "PollingPeriod"; - prop_desc = "Milliseconds between two cycle of the internal poller"; - prop_def = "1000"; - vect_data.clear(); - vect_data.push_back("1000"); - 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); } //-------------------------------------------------------- @@ -467,7 +547,6 @@ void Agilent4uhvClass::device_factory(const Tango::DevVarStringArray *devlist_pt // Add dynamic attributes if any Agilent4uhv *dev = static_cast<Agilent4uhv *>(device_list[device_list.size()-i]); dev->add_dynamic_attributes(); - dev->add_dynamic_commands(); // Check before if database used. if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false)) @@ -571,54 +650,6 @@ void Agilent4uhvClass::attribute_factory(vector<Tango::Attr *> &att_list) // Not Memorized att_list.push_back(temperature); - // Attribute : CRCErrors - CRCErrorsAttrib *crcerrors = new CRCErrorsAttrib(); - Tango::UserDefaultAttrProp crcerrors_prop; - crcerrors_prop.set_description("CRC Errors"); - // label not set for CRCErrors - // unit not set for CRCErrors - // standard_unit not set for CRCErrors - // display_unit not set for CRCErrors - // format not set for CRCErrors - // max_value not set for CRCErrors - // min_value not set for CRCErrors - // max_alarm not set for CRCErrors - // min_alarm not set for CRCErrors - // max_warning not set for CRCErrors - // min_warning not set for CRCErrors - // delta_t not set for CRCErrors - // delta_val not set for CRCErrors - - crcerrors->set_default_properties(crcerrors_prop); - // Not Polled - crcerrors->set_disp_level(Tango::EXPERT); - // Not Memorized - att_list.push_back(crcerrors); - - // Attribute : AutoStart - AutoStartAttrib *autostart = new AutoStartAttrib(); - Tango::UserDefaultAttrProp autostart_prop; - // description not set for AutoStart - // label not set for AutoStart - // unit not set for AutoStart - // standard_unit not set for AutoStart - // display_unit not set for AutoStart - // format not set for AutoStart - // max_value not set for AutoStart - // min_value not set for AutoStart - // max_alarm not set for AutoStart - // min_alarm not set for AutoStart - // max_warning not set for AutoStart - // min_warning not set for AutoStart - // delta_t not set for AutoStart - // delta_val not set for AutoStart - - autostart->set_default_properties(autostart_prop); - // Not Polled - autostart->set_disp_level(Tango::OPERATOR); - // Not Memorized - att_list.push_back(autostart); - // Create a list of static attributes create_static_attribute_list(get_class_attr()->get_attr_list()); @@ -665,7 +696,79 @@ void Agilent4uhvClass::command_factory() // Call command_factory for inherited class Serial2Client_ns::Serial2ClientClass::command_factory(); - + // Command OffHV1 + OffHV1Class *pOffHV1Cmd = + new OffHV1Class("OffHV1", + Tango::DEV_VOID, Tango::DEV_VOID, + "", + "", + Tango::OPERATOR); + command_list.push_back(pOffHV1Cmd); + + // Command OffHV2 + OffHV2Class *pOffHV2Cmd = + new OffHV2Class("OffHV2", + Tango::DEV_VOID, Tango::DEV_VOID, + "", + "", + Tango::OPERATOR); + command_list.push_back(pOffHV2Cmd); + + // Command OnHV1 + OnHV1Class *pOnHV1Cmd = + new OnHV1Class("OnHV1", + Tango::DEV_VOID, Tango::DEV_VOID, + "", + "", + Tango::OPERATOR); + command_list.push_back(pOnHV1Cmd); + + // Command OnHV2 + OnHV2Class *pOnHV2Cmd = + new OnHV2Class("OnHV2", + Tango::DEV_VOID, Tango::DEV_VOID, + "", + "", + Tango::OPERATOR); + command_list.push_back(pOnHV2Cmd); + + + + // Command OffHV3 + OffHV3Class *pOffHV3Cmd = + new OffHV3Class("OffHV3", + Tango::DEV_VOID, Tango::DEV_VOID, + "", + "", + Tango::OPERATOR); + command_list.push_back(pOffHV3Cmd); + + // Command OffHV4 + OffHV4Class *pOffHV4Cmd = + new OffHV4Class("OffHV4", + Tango::DEV_VOID, Tango::DEV_VOID, + "", + "", + Tango::OPERATOR); + command_list.push_back(pOffHV4Cmd); + + // Command OnHV3 + OnHV3Class *pOnHV3Cmd = + new OnHV3Class("OnHV3", + Tango::DEV_VOID, Tango::DEV_VOID, + "", + "", + Tango::OPERATOR); + command_list.push_back(pOnHV3Cmd); + + // Command OnHV4 + OnHV4Class *pOnHV4Cmd = + new OnHV4Class("OnHV4", + Tango::DEV_VOID, Tango::DEV_VOID, + "", + "", + Tango::OPERATOR); + command_list.push_back(pOnHV4Cmd); /*----- PROTECTED REGION ID(Agilent4uhvClass::command_factory_after) ENABLED START -----*/ diff --git a/src/Agilent4uhvClass.h b/src/Agilent4uhvClass.h index 66828866bc4f810da41231ff04c6d22e69a0b061..066a9d2718c680fafef0b521532276b0af7b5fb9 100644 --- a/src/Agilent4uhvClass.h +++ b/src/Agilent4uhvClass.h @@ -28,8 +28,8 @@ // // $Author: alessio $ // -// $Revision: 1.10 $ -// $Date: 2019-01-18 09:30:34 $ +// $Revision: 1.8 $ +// $Date: 2016-05-23 07:50:11 $ // // $HeadURL: $ // @@ -99,34 +99,6 @@ public: {return (static_cast<Agilent4uhv *>(dev))->is_Temperature_allowed(ty);} }; -// Attribute CRCErrors class definition -class CRCErrorsAttrib: public Tango::Attr -{ -public: - CRCErrorsAttrib():Attr("CRCErrors", - Tango::DEV_LONG, Tango::READ) {}; - ~CRCErrorsAttrib() {}; - virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) - {(static_cast<Agilent4uhv *>(dev))->read_CRCErrors(att);} - virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty) - {return (static_cast<Agilent4uhv *>(dev))->is_CRCErrors_allowed(ty);} -}; - -// Attribute AutoStart class definition -class AutoStartAttrib: public Tango::Attr -{ -public: - AutoStartAttrib():Attr("AutoStart", - Tango::DEV_BOOLEAN, Tango::READ_WRITE) {}; - ~AutoStartAttrib() {}; - virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) - {(static_cast<Agilent4uhv *>(dev))->read_AutoStart(att);} - virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att) - {(static_cast<Agilent4uhv *>(dev))->write_AutoStart(att);} - virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty) - {return (static_cast<Agilent4uhv *>(dev))->is_AutoStart_allowed(ty);} -}; - //========================================= // Define classes for dynamic attributes @@ -297,6 +269,21 @@ public: {return (static_cast<Agilent4uhv *>(dev))->is_StatusX_allowed(ty);} }; +// Attribute AutoStartX class definition +class AutoStartXAttrib: public Tango::Attr +{ +public: + AutoStartXAttrib(const string &att_name):Attr(att_name.c_str(), + Tango::DEV_BOOLEAN, Tango::READ_WRITE) {}; + ~AutoStartXAttrib() {}; + virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) + {(static_cast<Agilent4uhv *>(dev))->read_AutoStartX(att);} + virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att) + {(static_cast<Agilent4uhv *>(dev))->write_AutoStartX(att);} + virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty) + {return (static_cast<Agilent4uhv *>(dev))->is_AutoStartX_allowed(ty);} +}; + // Attribute ProtectX class definition class ProtectXAttrib: public Tango::Attr { @@ -340,6 +327,19 @@ public: {return (static_cast<Agilent4uhv *>(dev))->is_StatusSetPointX_allowed(ty);} }; +// Attribute InterlockStatusX class definition +class InterlockStatusXAttrib: public Tango::Attr +{ +public: + InterlockStatusXAttrib(const string &att_name):Attr(att_name.c_str(), + Tango::DEV_BOOLEAN, Tango::READ) {}; + ~InterlockStatusXAttrib() {}; + virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) + {(static_cast<Agilent4uhv *>(dev))->read_InterlockStatusX(att);} + virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty) + {return (static_cast<Agilent4uhv *>(dev))->is_InterlockStatusX_allowed(ty);} +}; + // Attribute StatMaskX class definition class StatMaskXAttrib: public Tango::Attr { @@ -355,13 +355,151 @@ public: //========================================= -// Define classes for dynamic commands +// Define classes for commands //========================================= -// Command OnHVX class definition -class OnHVXClass : public Tango::Command +// Command OffHV1 class definition +class OffHV1Class : public Tango::Command +{ +public: + OffHV1Class(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) {}; + + OffHV1Class(const char *name, + Tango::CmdArgType in, + Tango::CmdArgType out) + :Command(name,in,out) {}; + ~OffHV1Class() {}; + + 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<Agilent4uhv *>(dev))->is_OffHV1_allowed(any);} +}; + +// Command OffHV2 class definition +class OffHV2Class : public Tango::Command +{ +public: + OffHV2Class(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) {}; + + OffHV2Class(const char *name, + Tango::CmdArgType in, + Tango::CmdArgType out) + :Command(name,in,out) {}; + ~OffHV2Class() {}; + + 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<Agilent4uhv *>(dev))->is_OffHV2_allowed(any);} +}; + +// Command OnHV1 class definition +class OnHV1Class : public Tango::Command +{ +public: + OnHV1Class(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) {}; + + OnHV1Class(const char *name, + Tango::CmdArgType in, + Tango::CmdArgType out) + :Command(name,in,out) {}; + ~OnHV1Class() {}; + + 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<Agilent4uhv *>(dev))->is_OnHV1_allowed(any);} +}; + +// Command OnHV2 class definition +class OnHV2Class : public Tango::Command +{ +public: + OnHV2Class(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) {}; + + OnHV2Class(const char *name, + Tango::CmdArgType in, + Tango::CmdArgType out) + :Command(name,in,out) {}; + ~OnHV2Class() {}; + + 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<Agilent4uhv *>(dev))->is_OnHV2_allowed(any);} +}; + +// Command OffHV3 class definition +class OffHV3Class : public Tango::Command +{ +public: + OffHV3Class(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) {}; + + OffHV3Class(const char *name, + Tango::CmdArgType in, + Tango::CmdArgType out) + :Command(name,in,out) {}; + ~OffHV3Class() {}; + + 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<Agilent4uhv *>(dev))->is_OffHV3_allowed(any);} +}; + +// Command OffHV4 class definition +class OffHV4Class : public Tango::Command +{ +public: + OffHV4Class(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) {}; + + OffHV4Class(const char *name, + Tango::CmdArgType in, + Tango::CmdArgType out) + :Command(name,in,out) {}; + ~OffHV4Class() {}; + + 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<Agilent4uhv *>(dev))->is_OffHV4_allowed(any);} +}; + +// Command OnHV3 class definition +class OnHV3Class : public Tango::Command { public: - OnHVXClass(const char *name, + OnHV3Class(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -369,22 +507,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - OnHVXClass(const char *name, + OnHV3Class(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~OnHVXClass() {}; + ~OnHV3Class() {}; 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<Agilent4uhv *>(dev))->is_OnHVX_allowed(any);} + {return (static_cast<Agilent4uhv *>(dev))->is_OnHV3_allowed(any);} }; -// Command OffHVX class definition -class OffHVXClass : public Tango::Command +// Command OnHV4 class definition +class OnHV4Class : public Tango::Command { public: - OffHVXClass(const char *name, + OnHV4Class(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -392,15 +530,15 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - OffHVXClass(const char *name, + OnHV4Class(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~OffHVXClass() {}; + ~OnHV4Class() {}; 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<Agilent4uhv *>(dev))->is_OffHVX_allowed(any);} + {return (static_cast<Agilent4uhv *>(dev))->is_OnHV4_allowed(any);} }; diff --git a/src/Agilent4uhvDynAttrUtils.cpp b/src/Agilent4uhvDynAttrUtils.cpp index 000e7d61e74c2e22bcc80fff14650fae1c63d7d8..2f991201d1fc3fbaef8c55c827b4daa855510ca0 100644 --- a/src/Agilent4uhvDynAttrUtils.cpp +++ b/src/Agilent4uhvDynAttrUtils.cpp @@ -1,5 +1,5 @@ /*----- PROTECTED REGION ID(Agilent4uhv::DynAttrUtils.cpp) ENABLED START -----*/ -static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.8 2019-01-18 09:30:34 alessio Exp $"; +static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.6 2014-10-15 13:23:58 alessio Exp $"; //============================================================================= // // file : Agilent4uhvDynAttrUtils.cpp @@ -25,8 +25,8 @@ static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.8 2019-01-18 09 // // $Author: alessio $ // -// $Revision: 1.8 $ -// $Date: 2019-01-18 09:30:34 $ +// $Revision: 1.6 $ +// $Date: 2014-10-15 13:23:58 $ // // $HeadURL: $ // @@ -44,22 +44,24 @@ static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.8 2019-01-18 09 //================================================================ // Attributes managed are: //================================================================ -// HVX | Tango::DevState Scalar -// DeviceNumberX | Tango::DevLong Scalar -// PowerMaxX | Tango::DevUShort Scalar -// VTargetX | Tango::DevUShort Scalar -// IProtectX | Tango::DevUShort Scalar -// SetPointX | Tango::DevDouble Scalar -// TemperatureHVX | Tango::DevFloat Scalar -// VoltageX | Tango::DevDouble Scalar -// CurrentX | Tango::DevDouble Scalar -// PressureX | Tango::DevDouble Scalar -// StateX | Tango::DevState Scalar -// StatusX | Tango::DevString Scalar -// ProtectX | Tango::DevBoolean Scalar -// FixedStepX | Tango::DevBoolean Scalar -// StatusSetPointX | Tango::DevBoolean Scalar -// StatMaskX | Tango::DevLong Scalar +// HVX | Tango::DevState Scalar +// DeviceNumberX | Tango::DevLong Scalar +// PowerMaxX | Tango::DevUShort Scalar +// VTargetX | Tango::DevUShort Scalar +// IProtectX | Tango::DevUShort Scalar +// SetPointX | Tango::DevDouble Scalar +// TemperatureHVX | Tango::DevFloat Scalar +// VoltageX | Tango::DevDouble Scalar +// CurrentX | Tango::DevDouble Scalar +// PressureX | Tango::DevDouble Scalar +// StateX | Tango::DevState Scalar +// StatusX | Tango::DevString Scalar +// AutoStartX | Tango::DevBoolean Scalar +// ProtectX | Tango::DevBoolean Scalar +// FixedStepX | Tango::DevBoolean Scalar +// StatusSetPointX | Tango::DevBoolean Scalar +// InterlockStatusX | Tango::DevBoolean Scalar +// StatMaskX | Tango::DevLong Scalar //================================================================ // For compatibility reason, this file (Agilent4uhvDynAttrUtils) @@ -70,8 +72,6 @@ static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.8 2019-01-18 09 // // Command name | Method name //================================================================ -// OnHVX | on_hvx -// OffHVX | off_hvx //================================================================ namespace Agilent4uhv_ns @@ -213,7 +213,7 @@ void Agilent4uhv::add_PowerMaxX_dynamic_attribute(string attname) // display_unit not set for PowerMaxX // format not set for PowerMaxX powermaxx_prop.set_max_value("80"); - powermaxx_prop.set_min_value("10"); + powermaxx_prop.set_min_value("20"); // max_alarm not set for PowerMaxX // min_alarm not set for PowerMaxX // max_warning not set for PowerMaxX @@ -767,6 +767,63 @@ void Agilent4uhv::remove_StatusX_dynamic_attribute(string attname) } } //-------------------------------------------------------- +/** + * Add a AutoStartX dynamic attribute. + * + * parameter attname: attribute name to be cretated and added. + */ +//-------------------------------------------------------- +void Agilent4uhv::add_AutoStartX_dynamic_attribute(string attname) +{ + // Attribute : AutoStartX + AutoStartXAttrib *autostartx = new AutoStartXAttrib(attname); + Tango::UserDefaultAttrProp autostartx_prop; + // description not set for AutoStartX + // label not set for AutoStartX + // unit not set for AutoStartX + // standard_unit not set for AutoStartX + // display_unit not set for AutoStartX + // format not set for AutoStartX + // max_value not set for AutoStartX + // min_value not set for AutoStartX + // max_alarm not set for AutoStartX + // min_alarm not set for AutoStartX + // max_warning not set for AutoStartX + // min_warning not set for AutoStartX + // delta_t not set for AutoStartX + // delta_val not set for AutoStartX + + /*----- PROTECTED REGION ID(Agilent4uhv::att_AutoStartX_dynamic_attribute) ENABLED START -----*/ + + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::att_AutoStartX_dynamic_attribute + autostartx->set_default_properties(autostartx_prop); + // Not Polled + autostartx->set_disp_level(Tango::OPERATOR); + // Not Memorized + AutoStartX_data.insert(make_pair(attname, false)); + add_attribute(autostartx); +} +//-------------------------------------------------------- +/** + * remove a AutoStartX dynamic attribute. + * + * parameter attname: attribute name to be removed. + */ +//-------------------------------------------------------- +void Agilent4uhv::remove_AutoStartX_dynamic_attribute(string attname) +{ + remove_attribute(attname, true); + map<string,Tango::DevBoolean>::iterator ite; + if ((ite=AutoStartX_data.find(attname))!=AutoStartX_data.end()) + { + /*----- PROTECTED REGION ID(Agilent4uhv::remove_AutoStartX_dynamic_attribute) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::remove_AutoStartX_dynamic_attribute + AutoStartX_data.erase(ite); + } +} +//-------------------------------------------------------- /** * Add a ProtectX dynamic attribute. * @@ -938,6 +995,63 @@ void Agilent4uhv::remove_StatusSetPointX_dynamic_attribute(string attname) } } //-------------------------------------------------------- +/** + * Add a InterlockStatusX dynamic attribute. + * + * parameter attname: attribute name to be cretated and added. + */ +//-------------------------------------------------------- +void Agilent4uhv::add_InterlockStatusX_dynamic_attribute(string attname) +{ + // Attribute : InterlockStatusX + InterlockStatusXAttrib *interlockstatusx = new InterlockStatusXAttrib(attname); + Tango::UserDefaultAttrProp interlockstatusx_prop; + // description not set for InterlockStatusX + // label not set for InterlockStatusX + // unit not set for InterlockStatusX + // standard_unit not set for InterlockStatusX + // display_unit not set for InterlockStatusX + // format not set for InterlockStatusX + // max_value not set for InterlockStatusX + // min_value not set for InterlockStatusX + // max_alarm not set for InterlockStatusX + // min_alarm not set for InterlockStatusX + // max_warning not set for InterlockStatusX + // min_warning not set for InterlockStatusX + // delta_t not set for InterlockStatusX + // delta_val not set for InterlockStatusX + + /*----- PROTECTED REGION ID(Agilent4uhv::att_InterlockStatusX_dynamic_attribute) ENABLED START -----*/ + + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::att_InterlockStatusX_dynamic_attribute + interlockstatusx->set_default_properties(interlockstatusx_prop); + // Not Polled + interlockstatusx->set_disp_level(Tango::OPERATOR); + // Not Memorized + InterlockStatusX_data.insert(make_pair(attname, false)); + add_attribute(interlockstatusx); +} +//-------------------------------------------------------- +/** + * remove a InterlockStatusX dynamic attribute. + * + * parameter attname: attribute name to be removed. + */ +//-------------------------------------------------------- +void Agilent4uhv::remove_InterlockStatusX_dynamic_attribute(string attname) +{ + remove_attribute(attname, true); + map<string,Tango::DevBoolean>::iterator ite; + if ((ite=InterlockStatusX_data.find(attname))!=InterlockStatusX_data.end()) + { + /*----- PROTECTED REGION ID(Agilent4uhv::remove_InterlockStatusX_dynamic_attribute) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::remove_InterlockStatusX_dynamic_attribute + InterlockStatusX_data.erase(ite); + } +} +//-------------------------------------------------------- /** * Add a StatMaskX dynamic attribute. * @@ -1252,6 +1366,27 @@ Tango::DevString *Agilent4uhv::get_StatusX_data_ptr(string &name) return &(ite->second); } //-------------------------------------------------------- +/** + * Return a pointer on AutoStartX data. + * + * parameter attname: the specified attribute name. + */ +//-------------------------------------------------------- +Tango::DevBoolean *Agilent4uhv::get_AutoStartX_data_ptr(string &name) +{ + map<string,Tango::DevBoolean>::iterator ite; + if ((ite=AutoStartX_data.find(name))==AutoStartX_data.end()) + { + TangoSys_OMemStream tms; + tms << "Dynamic attribute " << name << " has not been created"; + Tango::Except::throw_exception( + (const char *)"ATTRIBUTE_NOT_FOUND", + tms.str().c_str(), + (const char *)"Agilent4uhv::get_AutoStartX_data_ptr()"); + } + return &(ite->second); +} +//-------------------------------------------------------- /** * Return a pointer on ProtectX data. * @@ -1315,6 +1450,27 @@ Tango::DevBoolean *Agilent4uhv::get_StatusSetPointX_data_ptr(string &name) return &(ite->second); } //-------------------------------------------------------- +/** + * Return a pointer on InterlockStatusX data. + * + * parameter attname: the specified attribute name. + */ +//-------------------------------------------------------- +Tango::DevBoolean *Agilent4uhv::get_InterlockStatusX_data_ptr(string &name) +{ + map<string,Tango::DevBoolean>::iterator ite; + if ((ite=InterlockStatusX_data.find(name))==InterlockStatusX_data.end()) + { + TangoSys_OMemStream tms; + tms << "Dynamic attribute " << name << " has not been created"; + Tango::Except::throw_exception( + (const char *)"ATTRIBUTE_NOT_FOUND", + tms.str().c_str(), + (const char *)"Agilent4uhv::get_InterlockStatusX_data_ptr()"); + } + return &(ite->second); +} +//-------------------------------------------------------- /** * Return a pointer on StatMaskX data. * @@ -1341,63 +1497,5 @@ Tango::DevLong *Agilent4uhv::get_StatMaskX_data_ptr(string &name) // Add/Remove dynamic command methods //============================================================= -//-------------------------------------------------------- -/** - * Add a OnHVX dynamic command. - * - * parameter cmdname: command name to be cretated and added. - * parameter device: Set this flag to true if the command must be added for only this device. - */ -//-------------------------------------------------------- -void Agilent4uhv::add_OnHVX_dynamic_command(string cmdname, bool device) -{ - OnHVXClass *pOnHVXCmd = - new OnHVXClass(cmdname.c_str(), - Tango::DEV_VOID, Tango::DEV_VOID, - "", - "", - Tango::OPERATOR); - add_command(pOnHVXCmd, device); -} -//-------------------------------------------------------- -/** - * remove a OnHVX dynamic command. - * - * parameter cmdname: command name to be removed. - */ -//-------------------------------------------------------- -void Agilent4uhv::remove_OnHVX_dynamic_command(string cmdname) -{ - remove_command(cmdname, true); -} -//-------------------------------------------------------- -/** - * Add a OffHVX dynamic command. - * - * parameter cmdname: command name to be cretated and added. - * parameter device: Set this flag to true if the command must be added for only this device. - */ -//-------------------------------------------------------- -void Agilent4uhv::add_OffHVX_dynamic_command(string cmdname, bool device) -{ - OffHVXClass *pOffHVXCmd = - new OffHVXClass(cmdname.c_str(), - Tango::DEV_VOID, Tango::DEV_VOID, - "", - "", - Tango::OPERATOR); - add_command(pOffHVXCmd, device); -} -//-------------------------------------------------------- -/** - * remove a OffHVX dynamic command. - * - * parameter cmdname: command name to be removed. - */ -//-------------------------------------------------------- -void Agilent4uhv::remove_OffHVX_dynamic_command(string cmdname) -{ - remove_command(cmdname, true); -} } // namespace diff --git a/src/Agilent4uhvStateMachine.cpp b/src/Agilent4uhvStateMachine.cpp index df7ebb03df3f33e2f3f5e3737a78bfc0f358143e..23e2e390500a8b9f4e94f249ef5bc9e0116dee9d 100644 --- a/src/Agilent4uhvStateMachine.cpp +++ b/src/Agilent4uhvStateMachine.cpp @@ -1,5 +1,5 @@ /*----- PROTECTED REGION ID(Agilent4uhvStateMachine.cpp) ENABLED START -----*/ -static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.11 2019-01-18 09:30:34 alessio Exp $"; +static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.9 2018-05-10 08:04:51 alessio Exp $"; //============================================================================= // // file : Agilent4uhvStateMachine.cpp @@ -25,8 +25,8 @@ static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.11 2019-01-18 0 // // $Author: alessio $ // -// $Revision: 1.11 $ -// $Date: 2019-01-18 09:30:34 $ +// $Revision: 1.9 $ +// $Date: 2018-05-10 08:04:51 $ // // $HeadURL: $ // @@ -44,8 +44,9 @@ static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.11 2019-01-18 0 //================================================================ // ON | // ALARM | -// FAULT | // UNKNOWN | +// FAULT | +// INIT | namespace Agilent4uhv_ns @@ -67,7 +68,9 @@ bool Agilent4uhv::is_Model_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::ModelStateAllowed_READ) ENABLED START -----*/ @@ -92,7 +95,9 @@ bool Agilent4uhv::is_SerialNumber_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::SerialNumberStateAllowed_READ) ENABLED START -----*/ @@ -117,7 +122,9 @@ bool Agilent4uhv::is_Temperature_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::TemperatureStateAllowed_READ) ENABLED START -----*/ @@ -129,70 +136,6 @@ bool Agilent4uhv::is_Temperature_allowed(TANGO_UNUSED(Tango::AttReqType type)) return true; } -//-------------------------------------------------------- -/** - * Method : Agilent4uhv::is_CRCErrors_allowed() - * Description : Execution allowed for CRCErrors attribute - */ -//-------------------------------------------------------- -bool Agilent4uhv::is_CRCErrors_allowed(TANGO_UNUSED(Tango::AttReqType type)) -{ - - // Check access type. - if ( type==Tango::READ_REQ ) - { - // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) - { - /*----- PROTECTED REGION ID(Agilent4uhv::CRCErrorsStateAllowed_READ) ENABLED START -----*/ - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::CRCErrorsStateAllowed_READ - return false; - } - return true; - } - return true; -} - -//-------------------------------------------------------- -/** - * Method : Agilent4uhv::is_AutoStart_allowed() - * Description : Execution allowed for AutoStart attribute - */ -//-------------------------------------------------------- -bool Agilent4uhv::is_AutoStart_allowed(TANGO_UNUSED(Tango::AttReqType type)) -{ - // Check access type. - if ( type!=Tango::READ_REQ ) - { - // Compare device state with not allowed states for WRITE - if (get_state()==Tango::UNKNOWN) - { - /*----- PROTECTED REGION ID(Agilent4uhv::AutoStartStateAllowed_WRITE) ENABLED START -----*/ - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::AutoStartStateAllowed_WRITE - return false; - } - return true; - } - else - - // Check access type. - if ( type==Tango::READ_REQ ) - { - // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) - { - /*----- PROTECTED REGION ID(Agilent4uhv::AutoStartStateAllowed_READ) ENABLED START -----*/ - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::AutoStartStateAllowed_READ - return false; - } - return true; - } - return true; -} - //-------------------------------------------------------- /** * Method : Agilent4uhv::is_HVX_allowed() @@ -206,7 +149,9 @@ bool Agilent4uhv::is_HVX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::HVXStateAllowed_READ) ENABLED START -----*/ @@ -230,7 +175,9 @@ bool Agilent4uhv::is_DeviceNumberX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type!=Tango::READ_REQ ) { // Compare device state with not allowed states for WRITE - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::DeviceNumberXStateAllowed_WRITE) ENABLED START -----*/ @@ -245,7 +192,9 @@ bool Agilent4uhv::is_DeviceNumberX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::DeviceNumberXStateAllowed_READ) ENABLED START -----*/ @@ -269,7 +218,9 @@ bool Agilent4uhv::is_PowerMaxX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type!=Tango::READ_REQ ) { // Compare device state with not allowed states for WRITE - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::PowerMaxXStateAllowed_WRITE) ENABLED START -----*/ @@ -284,7 +235,9 @@ bool Agilent4uhv::is_PowerMaxX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::PowerMaxXStateAllowed_READ) ENABLED START -----*/ @@ -308,7 +261,9 @@ bool Agilent4uhv::is_VTargetX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type!=Tango::READ_REQ ) { // Compare device state with not allowed states for WRITE - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::VTargetXStateAllowed_WRITE) ENABLED START -----*/ @@ -323,7 +278,9 @@ bool Agilent4uhv::is_VTargetX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::VTargetXStateAllowed_READ) ENABLED START -----*/ @@ -347,7 +304,9 @@ bool Agilent4uhv::is_IProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type!=Tango::READ_REQ ) { // Compare device state with not allowed states for WRITE - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::IProtectXStateAllowed_WRITE) ENABLED START -----*/ @@ -362,7 +321,9 @@ bool Agilent4uhv::is_IProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::IProtectXStateAllowed_READ) ENABLED START -----*/ @@ -386,7 +347,9 @@ bool Agilent4uhv::is_SetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type!=Tango::READ_REQ ) { // Compare device state with not allowed states for WRITE - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::SetPointXStateAllowed_WRITE) ENABLED START -----*/ @@ -401,7 +364,9 @@ bool Agilent4uhv::is_SetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::SetPointXStateAllowed_READ) ENABLED START -----*/ @@ -426,7 +391,9 @@ bool Agilent4uhv::is_TemperatureHVX_allowed(TANGO_UNUSED(Tango::AttReqType type) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::TemperatureHVXStateAllowed_READ) ENABLED START -----*/ @@ -451,7 +418,9 @@ bool Agilent4uhv::is_VoltageX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::VoltageXStateAllowed_READ) ENABLED START -----*/ @@ -476,7 +445,9 @@ bool Agilent4uhv::is_CurrentX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::CurrentXStateAllowed_READ) ENABLED START -----*/ @@ -501,7 +472,9 @@ bool Agilent4uhv::is_PressureX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::PressureXStateAllowed_READ) ENABLED START -----*/ @@ -526,7 +499,9 @@ bool Agilent4uhv::is_StateX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::StateXStateAllowed_READ) ENABLED START -----*/ @@ -551,7 +526,9 @@ bool Agilent4uhv::is_StatusX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::StatusXStateAllowed_READ) ENABLED START -----*/ @@ -563,6 +540,49 @@ bool Agilent4uhv::is_StatusX_allowed(TANGO_UNUSED(Tango::AttReqType type)) return true; } +//-------------------------------------------------------- +/** + * Method : Agilent4uhv::is_AutoStartX_allowed() + * Description : Execution allowed for AutoStartX attribute + */ +//-------------------------------------------------------- +bool Agilent4uhv::is_AutoStartX_allowed(TANGO_UNUSED(Tango::AttReqType type)) +{ + // Check access type. + if ( type!=Tango::READ_REQ ) + { + // Compare device state with not allowed states for WRITE + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) + { + /*----- PROTECTED REGION ID(Agilent4uhv::AutoStartXStateAllowed_WRITE) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::AutoStartXStateAllowed_WRITE + return false; + } + return true; + } + else + + // Check access type. + if ( type==Tango::READ_REQ ) + { + // Compare device state with not allowed states for READ + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) + { + /*----- PROTECTED REGION ID(Agilent4uhv::AutoStartXStateAllowed_READ) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::AutoStartXStateAllowed_READ + return false; + } + return true; + } + return true; +} + //-------------------------------------------------------- /** * Method : Agilent4uhv::is_ProtectX_allowed() @@ -575,7 +595,9 @@ bool Agilent4uhv::is_ProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type!=Tango::READ_REQ ) { // Compare device state with not allowed states for WRITE - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::ProtectXStateAllowed_WRITE) ENABLED START -----*/ @@ -590,7 +612,9 @@ bool Agilent4uhv::is_ProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::ProtectXStateAllowed_READ) ENABLED START -----*/ @@ -614,7 +638,9 @@ bool Agilent4uhv::is_FixedStepX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type!=Tango::READ_REQ ) { // Compare device state with not allowed states for WRITE - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::FixedStepXStateAllowed_WRITE) ENABLED START -----*/ @@ -629,7 +655,9 @@ bool Agilent4uhv::is_FixedStepX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::FixedStepXStateAllowed_READ) ENABLED START -----*/ @@ -654,7 +682,9 @@ bool Agilent4uhv::is_StatusSetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::StatusSetPointXStateAllowed_READ) ENABLED START -----*/ @@ -666,6 +696,33 @@ bool Agilent4uhv::is_StatusSetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type return true; } +//-------------------------------------------------------- +/** + * Method : Agilent4uhv::is_InterlockStatusX_allowed() + * Description : Execution allowed for InterlockStatusX attribute + */ +//-------------------------------------------------------- +bool Agilent4uhv::is_InterlockStatusX_allowed(TANGO_UNUSED(Tango::AttReqType type)) +{ + + // Check access type. + if ( type==Tango::READ_REQ ) + { + // Compare device state with not allowed states for READ + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) + { + /*----- PROTECTED REGION ID(Agilent4uhv::InterlockStatusXStateAllowed_READ) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::InterlockStatusXStateAllowed_READ + return false; + } + return true; + } + return true; +} + //-------------------------------------------------------- /** * Method : Agilent4uhv::is_StatMaskX_allowed() @@ -679,7 +736,9 @@ bool Agilent4uhv::is_StatMaskX_allowed(TANGO_UNUSED(Tango::AttReqType type)) if ( type==Tango::READ_REQ ) { // Compare device state with not allowed states for READ - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { /*----- PROTECTED REGION ID(Agilent4uhv::StatMaskXStateAllowed_READ) ENABLED START -----*/ @@ -698,18 +757,146 @@ bool Agilent4uhv::is_StatMaskX_allowed(TANGO_UNUSED(Tango::AttReqType type)) //-------------------------------------------------------- /** - * Method : Agilent4uhv::is_OnHVX_allowed() - * Description : Execution allowed for OnHVX attribute + * Method : Agilent4uhv::is_OffHV1_allowed() + * Description : Execution allowed for OffHV1 attribute + */ +//-------------------------------------------------------- +bool Agilent4uhv::is_OffHV1_allowed(TANGO_UNUSED(const CORBA::Any &any)) +{ + // Compare device state with not allowed states. + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) + { + /*----- PROTECTED REGION ID(Agilent4uhv::OffHV1StateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OffHV1StateAllowed + return false; + } + return true; +} + +//-------------------------------------------------------- +/** + * Method : Agilent4uhv::is_OffHV2_allowed() + * Description : Execution allowed for OffHV2 attribute + */ +//-------------------------------------------------------- +bool Agilent4uhv::is_OffHV2_allowed(TANGO_UNUSED(const CORBA::Any &any)) +{ + // Compare device state with not allowed states. + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) + { + /*----- PROTECTED REGION ID(Agilent4uhv::OffHV2StateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OffHV2StateAllowed + return false; + } + return true; +} + +//-------------------------------------------------------- +/** + * Method : Agilent4uhv::is_OnHV1_allowed() + * Description : Execution allowed for OnHV1 attribute + */ +//-------------------------------------------------------- +bool Agilent4uhv::is_OnHV1_allowed(TANGO_UNUSED(const CORBA::Any &any)) +{ + // Compare device state with not allowed states. + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) + { + /*----- PROTECTED REGION ID(Agilent4uhv::OnHV1StateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OnHV1StateAllowed + return false; + } + return true; +} + +//-------------------------------------------------------- +/** + * Method : Agilent4uhv::is_OnHV2_allowed() + * Description : Execution allowed for OnHV2 attribute + */ +//-------------------------------------------------------- +bool Agilent4uhv::is_OnHV2_allowed(TANGO_UNUSED(const CORBA::Any &any)) +{ + // Compare device state with not allowed states. + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) + { + /*----- PROTECTED REGION ID(Agilent4uhv::OnHV2StateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OnHV2StateAllowed + return false; + } + return true; +} + +//-------------------------------------------------------- +/** + * Method : Agilent4uhv::is_OffHV3_allowed() + * Description : Execution allowed for OffHV3 attribute + */ +//-------------------------------------------------------- +bool Agilent4uhv::is_OffHV3_allowed(TANGO_UNUSED(const CORBA::Any &any)) +{ + // Compare device state with not allowed states. + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) + { + /*----- PROTECTED REGION ID(Agilent4uhv::OffHV3StateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OffHV3StateAllowed + return false; + } + return true; +} + +//-------------------------------------------------------- +/** + * Method : Agilent4uhv::is_OffHV4_allowed() + * Description : Execution allowed for OffHV4 attribute + */ +//-------------------------------------------------------- +bool Agilent4uhv::is_OffHV4_allowed(TANGO_UNUSED(const CORBA::Any &any)) +{ + // Compare device state with not allowed states. + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) + { + /*----- PROTECTED REGION ID(Agilent4uhv::OffHV4StateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OffHV4StateAllowed + return false; + } + return true; +} + +//-------------------------------------------------------- +/** + * Method : Agilent4uhv::is_OnHV3_allowed() + * Description : Execution allowed for OnHV3 attribute */ //-------------------------------------------------------- -bool Agilent4uhv::is_OnHVX_allowed(TANGO_UNUSED(const CORBA::Any &any)) +bool Agilent4uhv::is_OnHV3_allowed(TANGO_UNUSED(const CORBA::Any &any)) { // Compare device state with not allowed states. - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { - /*----- PROTECTED REGION ID(Agilent4uhv::OnHVXStateAllowed) ENABLED START -----*/ + /*----- PROTECTED REGION ID(Agilent4uhv::OnHV3StateAllowed) ENABLED START -----*/ - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OnHVXStateAllowed + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OnHV3StateAllowed return false; } return true; @@ -717,18 +904,20 @@ bool Agilent4uhv::is_OnHVX_allowed(TANGO_UNUSED(const CORBA::Any &any)) //-------------------------------------------------------- /** - * Method : Agilent4uhv::is_OffHVX_allowed() - * Description : Execution allowed for OffHVX attribute + * Method : Agilent4uhv::is_OnHV4_allowed() + * Description : Execution allowed for OnHV4 attribute */ //-------------------------------------------------------- -bool Agilent4uhv::is_OffHVX_allowed(TANGO_UNUSED(const CORBA::Any &any)) +bool Agilent4uhv::is_OnHV4_allowed(TANGO_UNUSED(const CORBA::Any &any)) { // Compare device state with not allowed states. - if (get_state()==Tango::UNKNOWN) + if (get_state()==Tango::UNKNOWN || + get_state()==Tango::FAULT || + get_state()==Tango::INIT) { - /*----- PROTECTED REGION ID(Agilent4uhv::OffHVXStateAllowed) ENABLED START -----*/ + /*----- PROTECTED REGION ID(Agilent4uhv::OnHV4StateAllowed) ENABLED START -----*/ - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OffHVXStateAllowed + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OnHV4StateAllowed return false; } return true; diff --git a/src/MultiClassesFactory.cpp b/src/MultiClassesFactory.cpp index 30e71d6473b0fc794f4b53bb4c69614c6c7cbd85..d0151da165182ee76e3ec74fbf7ea2e52a2004f8 100644 --- a/src/MultiClassesFactory.cpp +++ b/src/MultiClassesFactory.cpp @@ -1,4 +1,4 @@ -static const char *RcsId = "$Id: MultiClassesFactory.cpp,v 1.7 2019-01-18 09:31:15 alessio Exp $"; +static const char *RcsId = "$Id: MultiClassesFactory.cpp,v 1.4 2018-05-10 08:04:51 alessio Exp $"; //============================================================================= // // file : MultiClassessFactory.cpp @@ -27,8 +27,8 @@ static const char *RcsId = "$Id: MultiClassesFactory.cpp,v 1.7 2019-01-18 09:31: // // $Author: alessio $ // -// $Revision: 1.7 $ -// $Date: 2019-01-18 09:31:15 $ +// $Revision: 1.4 $ +// $Date: 2018-05-10 08:04:51 $ // // $HeadURL: $ //