diff --git a/Makefile b/Makefile index c3f516f0f71bcfa66b4cba80f30301e5a9dc49ea..c17701d9283e64513271a3cab585501c42a7782a 100644 --- a/Makefile +++ b/Makefile @@ -7,4 +7,4 @@ LDFLAGS = include ../makefiles/Make-9.3.3.in test: bin/${NAME_SRV} - LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(SDKTARGETSYSROOT)/usr/lib $(LOADER) bin/${NAME_SRV} test -v4 + LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(SDKTARGETSYSROOT)/usr/lib $(SDKTARGETSYSROOT)/usr/lib/ld-linux-x86-64.so.2 bin/${NAME_SRV} test -v4 diff --git a/deps/ionpump b/deps/ionpump index 19a15caa600f79cc66a1a75369252734a3025e52..2f9df3b698a4524c252c6c09232c8bde79daa606 160000 --- a/deps/ionpump +++ b/deps/ionpump @@ -1 +1 @@ -Subproject commit 19a15caa600f79cc66a1a75369252734a3025e52 +Subproject commit 2f9df3b698a4524c252c6c09232c8bde79daa606 diff --git a/deps/serial2 b/deps/serial2 index bbebd3e523a530a607ab8afa109613c95d1ff596..67275450e778cfafc02dee7744db90fe6540b86e 160000 --- a/deps/serial2 +++ b/deps/serial2 @@ -1 +1 @@ -Subproject commit bbebd3e523a530a607ab8afa109613c95d1ff596 +Subproject commit 67275450e778cfafc02dee7744db90fe6540b86e diff --git a/deps/serial2client b/deps/serial2client index 10769ee9428a5b12a8015ff804efac6ad4352b85..accf00d9014fb425b32ed46a59f4358dc3eaa36e 160000 --- a/deps/serial2client +++ b/deps/serial2client @@ -1 +1 @@ -Subproject commit 10769ee9428a5b12a8015ff804efac6ad4352b85 +Subproject commit accf00d9014fb425b32ed46a59f4358dc3eaa36e diff --git a/deps/socket2 b/deps/socket2 index 5fa2980f5656473d6329be8b05212252bc00b833..ed75bef6f9cb2d4761916ec41873b96cf2af95d3 160000 --- a/deps/socket2 +++ b/deps/socket2 @@ -1 +1 @@ -Subproject commit 5fa2980f5656473d6329be8b05212252bc00b833 +Subproject commit ed75bef6f9cb2d4761916ec41873b96cf2af95d3 diff --git a/docs/4UHV Controller User Manual.pdf b/docs/4UHV Controller User Manual.pdf deleted file mode 100644 index 4eb3cb1dd887dd73370eee6dd3a3c75f43eddf2e..0000000000000000000000000000000000000000 Binary files a/docs/4UHV Controller User Manual.pdf and /dev/null differ diff --git a/docs/4UHV.pdf b/docs/4UHV.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e41afc4586ac3c28c08761fc595a8b36664e23dd Binary files /dev/null and b/docs/4UHV.pdf differ diff --git a/docs/IPCMini Ion Pump Controller User Manual.pdf b/docs/IPCMini Ion Pump Controller User Manual.pdf deleted file mode 100644 index 1ad750ec38c27d6918b9d6560218d66a6e81f9ce..0000000000000000000000000000000000000000 Binary files a/docs/IPCMini Ion Pump Controller User Manual.pdf and /dev/null differ diff --git a/src/Agilent4uhv.cpp b/src/Agilent4uhv.cpp index 006650f1627f6ef295ff74e962fb7f22767d73e6..7f39cb193f529a6c34d8b610b9e6f89537e80547 100644 --- a/src/Agilent4uhv.cpp +++ b/src/Agilent4uhv.cpp @@ -1,5 +1,4 @@ /*----- PROTECTED REGION ID(Agilent4uhv.cpp) ENABLED START -----*/ -static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.18 2018-05-10 08:04:51 alessio Exp $"; //============================================================================= // // file : Agilent4uhv.cpp @@ -39,67 +38,21 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.18 2018-05-10 08:04:51 ales // (Program Obviously used to Generate tango Object) //============================================================================= - #include <Agilent4uhv.h> #include <Agilent4uhvClass.h> -#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 + +#define STX 0x02 +#define ETX 0x03 +#define ADDR 0x80 +#define WIN_LENGTH 3 +#define CRC_LENGTH 2 +#define ERROR_MESSAGE_SIZE 6 +#define HEADER_SIZE 6 +#define FOOTER_SIZE 3 +#define NUMERIC_PAYLOAD_SIZE 6 +#define ALPHANUMERIC_PAYLOAD_SIZE 10 + +#define MAX_DEVSTRING_LENGTH 255 /*----- PROTECTED REGION END -----*/ // Agilent4uhv.cpp @@ -114,24 +67,16 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.18 2018-05-10 08:04:51 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 //================================================================ //================================================================ // Attributes managed are: //================================================================ -// Model | Tango::DevString Scalar -// SerialNumber | Tango::DevString Scalar -// Temperature | Tango::DevFloat Scalar +// Model | Tango::DevString Scalar +// SerialNumber | Tango::DevString Scalar +// TemperatureFan | Tango::DevDouble Scalar //================================================================ namespace Agilent4uhv_ns @@ -139,6 +84,54 @@ namespace Agilent4uhv_ns /*----- PROTECTED REGION ID(Agilent4uhv::namespace_starting) ENABLED START -----*/ // static initializations +template<typename F, typename T> void convert(const F &data, T &result) +{ + stringstream ss; + ss << data; + ss >> result; + + if (ss.fail()) { + stringstream err_mesg; + err_mesg << "Conversion fail of " << data; + Tango::Except::throw_exception( "", + err_mesg.str(), + "convert()"); + } +} + +template<typename F, typename T> void convert(const F &data, double &result) +{ + stringstream ss; + ss << data; + + if (ss.str() == "Inf") + result = INFINITY; + else + ss >> result; + + if (ss.fail()) { + stringstream err_mesg; + err_mesg << "Conversion fail of " << data; + Tango::Except::throw_exception( "", + err_mesg.str(), + "convert()"); + } +} + +template<typename F> void convert(const F &data, string &result) +{ + stringstream ss; + ss << fixed; + ss << data; + result = ss.str(); + if (ss.fail()) { + stringstream err_mesg; + err_mesg << "Conversion fail of " << data; + Tango::Except::throw_exception( "", + err_mesg.str(), + "convert()"); + } +} /*----- PROTECTED REGION END -----*/ // Agilent4uhv::namespace_starting @@ -192,8 +185,17 @@ void Agilent4uhv::delete_device() worker->stop(); worker->join(NULL); } - + + // Delete device allocated objects + if (attr_Model_read[0]) + delete attr_Model_read[0]; + if (attr_SerialNumber_read[0]) + delete attr_SerialNumber_read[0]; + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::delete_device + delete[] attr_Model_read; + delete[] attr_SerialNumber_read; + delete[] attr_TemperatureFan_read; if (Tango::Util::instance()->is_svr_shutting_down()==false && Tango::Util::instance()->is_device_restarting(device_name)==false && @@ -217,10 +219,8 @@ void Agilent4uhv::init_device() // Initialization before get_device_property() call mandatoryNotDefined = false; - nchannel = 0; - odd_channel_quirk = false; + channels.clear(); init_error.clear(); - worker = NULL; /*----- PROTECTED REGION END -----*/ // Agilent4uhv::init_device_before @@ -231,67 +231,223 @@ void Agilent4uhv::init_device() // If not starting up call init device for inherited object Serial2Client_ns::Serial2Client::init_device(); } - // No device property to be read from database + + // Get the device properties from database + get_device_property(); + attr_Model_read = new Tango::DevString[1]; + attr_SerialNumber_read = new Tango::DevString[1]; + attr_TemperatureFan_read = new Tango::DevDouble[1]; // No longer if mandatory property not set. if (mandatoryNotDefined) return; /*----- PROTECTED REGION ID(Agilent4uhv::init_device) ENABLED START -----*/ - + // Initialize device try { + attr_Model_read[0] = new char[MAX_DEVSTRING_LENGTH]; + attr_SerialNumber_read[0] = new char[MAX_DEVSTRING_LENGTH]; + + /* Identify model: + * 9299200/1 con 2 canali x 80W --> attivi canali 1 e 2 + * 9299020 con 2 canali x 200W --> attivi canali 1 e 3 + * 9299400 con 4 canali x 80W --> attivi canali da 1 a 4 + */ 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 (model == "9299210" || model == "9299211" - || model == "9299212" || model == "9299213") - nchannel = 3; - else if (model == "9299400" || model == "9299401" - || model == "9299402") - nchannel = 4; - else + read_window(319, model); + if (model == "9299200" || model == "9299201") { + channels.push_back("1"); + channels.push_back("2"); + } else if (model == "9299020") { + channels.push_back("1"); + channels.push_back("3"); + } else if (model == "9299400") { + channels.push_back("1"); + channels.push_back("2"); + channels.push_back("3"); + channels.push_back("4"); + } else { Tango::Except::throw_exception( "", "Unknown model", "Agilent4uhv::init_device()"); + } + strncpy(attr_Model_read[0], model.c_str(), MAX_DEVSTRING_LENGTH); + + // Retrieve serial number + string serial; + read_window(323, serial); + strncpy(attr_SerialNumber_read[0], serial.c_str(), MAX_DEVSTRING_LENGTH); + + // Set the mode +// int mode = 0; /* Serial */ +// write_window(8, mode); + + /* Setup mBar as pressure unit used */ + int pressure_unit = 1 /* mBar */; + write_window(600, pressure_unit); + + /* Read all the device data */ + static const int nw[] = { 8, /*, 108, 320, 323, 503, 504, 600 */ + 601, 602, 603, 800, 801, 802, 803, 804, 808, 809, 810, 811}; + vector<int> normal_windows(nw, nw + sizeof(nw) / sizeof(nw[0])); + for (size_t i=0; i<channels.size(); ++i) { + int chan; + convert(channels[i], chan); + normal_windows.push_back(10 + chan); + normal_windows.push_back(2060 + chan); + normal_windows.push_back(600 + chan * 10); + normal_windows.push_back(602 + chan * 10); + normal_windows.push_back(603 + chan * 10); + normal_windows.push_back(604 + chan * 10); + normal_windows.push_back(605 + chan * 10); + normal_windows.push_back(800 + chan * 10); + normal_windows.push_back(801 + chan * 10); + } + for (size_t i=0; i<normal_windows.size(); ++i) { + read_window_into_cache(normal_windows[i]); + } + static const int iw[] = { 812, 822, 832, 842 }; + vector<int> important_windows(iw, iw + sizeof(iw) / sizeof(iw[0])); + for (size_t i=0; i<important_windows.size(); ++i) { + read_window_into_cache(important_windows[i]); + } + read_window_into_cache(205); + + // Contruct polled windows vector + for (size_t i=0; i<normal_windows.size(); ++i) { + polled_windows.push_back(normal_windows[i]); + polled_windows.insert(polled_windows.end(), + important_windows.begin(), + important_windows.end()); + } + polled_windows.push_back(205 /* it MUST be latest */); - 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"; - - worker = new Worker(this); - worker->start(); - + check_state(); + + /* Start the poller */ + worker = new Agilent4uhvWorker(this); + worker->start(); } catch(Tango::DevFailed &e) { - init_error = "Initialization failed: " + string(e.errors[0].desc); - set_state(Tango::FAULT); + if (string(e.errors[0].reason) == "API_CommandNotAllowed") + init_error = "Initialization failed: " + get_status2(); + else + init_error = "Initialization failed: " + string(e.errors[0].desc); } catch (...) { - init_error = "Initialization failed: Unknown error"; + init_error = "Initialization failed: Unknown error"; + } + + if (! init_error.empty()) { + ERROR_STREAM << init_error << endl; set_state(Tango::UNKNOWN); + set_status(init_error); + 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("PollingSleep")); + + // 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 PollingSleep from class property + cl_prop = ds_class->get_class_property(dev_prop[++i].name); + if (cl_prop.is_empty()==false) cl_prop >> pollingSleep; + else { + // Try to initialize PollingSleep from default device value + def_prop = ds_class->get_default_device_property(dev_prop[i].name); + if (def_prop.is_empty()==false) def_prop >> pollingSleep; + } + // And try to extract PollingSleep value from database + if (dev_prop[i].is_empty()==false) dev_prop[i] >> pollingSleep; + + } + + /*----- PROTECTED REGION ID(Agilent4uhv::get_device_property_after) ENABLED START -----*/ + + // Check device property data members init + if (pollingSleep > 1000000) { + pollingSleep = 1000000; + } + + if (pollingSleep < 0) { + pollingSleep = 0; + } + + /*----- 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 + } +} + //-------------------------------------------------------- /** @@ -314,15 +470,21 @@ void Agilent4uhv::always_executed_hook() // code always executed before all requests if (! init_error.empty()) { - set_state(Tango::FAULT); + ERROR_STREAM << init_error << endl; set_status(init_error); + set_state(Tango::UNKNOWN); + assert(false); return; } - data_mutex.lock(); - set_state(data.state); - set_status(data.status); - data_mutex.unlock(); + try { + check_state(); + } catch(Tango::DevFailed &e) { + ERROR_STREAM << string(e.errors[0].desc) << endl; + set_state(Tango::UNKNOWN); + set_status(string(e.errors[0].desc)); + assert(false); + } /*----- PROTECTED REGION END -----*/ // Agilent4uhv::always_executed_hook } @@ -339,7 +501,7 @@ void Agilent4uhv::read_attr_hardware(TANGO_UNUSED(vector<long> &attr_list)) /*----- PROTECTED REGION ID(Agilent4uhv::read_attr_hardware) ENABLED START -----*/ // Add your own code - check_init_error(); + check_init(); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_attr_hardware } @@ -357,15 +519,7 @@ 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 -----*/ - - 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); - + attr.set_value(attr_Model_read); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_Model } //-------------------------------------------------------- @@ -381,40 +535,29 @@ 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 -----*/ - - 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); - + attr.set_value(attr_SerialNumber_read); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_SerialNumber } //-------------------------------------------------------- /** - * Read attribute Temperature related method + * Read attribute TemperatureFan related method * Description: * - * Data type: Tango::DevFloat + * Data type: Tango::DevDouble * Attr type: Scalar */ //-------------------------------------------------------- -void Agilent4uhv::read_Temperature(Tango::Attribute &attr) +void Agilent4uhv::read_TemperatureFan(Tango::Attribute &attr) { - DEBUG_STREAM << "Agilent4uhv::read_Temperature(Tango::Attribute &attr) entering... " << endl; - /*----- PROTECTED REGION ID(Agilent4uhv::read_Temperature) ENABLED START -----*/ - - Tango::DevFloat *temperature = new Tango::DevFloat(); - - data_mutex.lock(); - *temperature = data.temperature_fan; - data_mutex.unlock(); - - attr.set_value(temperature, 1, 0, true); + DEBUG_STREAM << "Agilent4uhv::read_TemperatureFan(Tango::Attribute &attr) entering... " << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::read_TemperatureFan) ENABLED START -----*/ + // Set the attribute value + int value; + read_window_from_cache(800, value); + convert(value, attr_TemperatureFan_read[0]); + attr.set_value(attr_TemperatureFan_read); - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_Temperature + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_TemperatureFan } //-------------------------------------------------------- @@ -431,20 +574,16 @@ 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(); + int win; + convert("01" + attr.get_name().substr(attr.get_name().size()-1), win); + bool value; + read_window_from_cache(win, value); if (value) *att_value = Tango::ON; else *att_value = Tango::OFF; attr.set_value(att_value); - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_HVX } //-------------------------------------------------------- @@ -461,15 +600,14 @@ 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(); + int win; + convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "0", win); + int value; + read_window_from_cache(win, value); + *att_value = value; attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_DeviceNumberX } //-------------------------------------------------------- @@ -488,27 +626,15 @@ 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(); + check_init(); + + int win; + convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "0", win); + + int value = w_val; + write_window(win, value); + read_window_into_cache(win); - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - switch (indexn) - { - case 1: - write(DEVICENUMBERCH1, w_val); - break; - case 2: - write(DEVICENUMBERCH2, w_val); - break; - case 3: - write(DEVICENUMBERCH3, w_val); - break; - case 4: - write(DEVICENUMBERCH4, w_val); - break; - } - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_DeviceNumberX } //-------------------------------------------------------- @@ -516,24 +642,23 @@ void Agilent4uhv::write_DeviceNumberX(Tango::WAttribute &attr) * Read attribute PowerMaxX related method * Description: * - * Data type: Tango::DevUShort + * Data type: Tango::DevLong * Attr type: Scalar */ //-------------------------------------------------------- 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()); + Tango::DevLong *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(); + int win; + convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "2", win); + int value; + read_window_from_cache(win, value); + *att_value = value; attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_PowerMaxX } //-------------------------------------------------------- @@ -541,7 +666,7 @@ void Agilent4uhv::read_PowerMaxX(Tango::Attribute &attr) * Write attribute PowerMaxX related method * Description: * - * Data type: Tango::DevUShort + * Data type: Tango::DevLong * Attr type: Scalar */ //-------------------------------------------------------- @@ -549,30 +674,18 @@ void Agilent4uhv::write_PowerMaxX(Tango::WAttribute &attr) { DEBUG_STREAM << "Agilent4uhv::write_PowerMaxX(Tango::WAttribute &attr) entering... " << endl; // Retrieve write value - Tango::DevUShort w_val; + Tango::DevLong w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_PowerMaxX) ENABLED START -----*/ - - check_init_error(); + check_init(); + + int win; + convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "2", win); + + int value = w_val; + write_window(win, value); + read_window_into_cache(win); - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - switch (indexn) - { - case 1: - write(POWERMAXCH1, w_val); - break; - case 2: - write(POWERMAXCH2, w_val); - break; - case 3: - write(POWERMAXCH3, w_val); - break; - case 4: - write(POWERMAXCH4, w_val); - break; - } - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_PowerMaxX } //-------------------------------------------------------- @@ -580,25 +693,23 @@ void Agilent4uhv::write_PowerMaxX(Tango::WAttribute &attr) * Read attribute VTargetX related method * Description: * - * Data type: Tango::DevUShort + * Data type: Tango::DevLong * Attr type: Scalar */ //-------------------------------------------------------- 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()); + Tango::DevLong *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(); + int win; + convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "3", win); - *att_value /= 1000; + int value; + read_window_from_cache(win, value); + *att_value = value; attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_VTargetX } //-------------------------------------------------------- @@ -606,7 +717,7 @@ void Agilent4uhv::read_VTargetX(Tango::Attribute &attr) * Write attribute VTargetX related method * Description: * - * Data type: Tango::DevUShort + * Data type: Tango::DevLong * Attr type: Scalar */ //-------------------------------------------------------- @@ -614,31 +725,18 @@ void Agilent4uhv::write_VTargetX(Tango::WAttribute &attr) { DEBUG_STREAM << "Agilent4uhv::write_VTargetX(Tango::WAttribute &attr) entering... " << endl; // Retrieve write value - Tango::DevUShort w_val; + Tango::DevLong w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_VTargetX) ENABLED START -----*/ - - check_init_error(); + check_init(); + + int win; + convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "3", win); + + int value = w_val; + write_window(win, value); + read_window_into_cache(win); - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - w_val *= 1000; - switch (indexn) - { - case 1: - write(VTARGETCH1, w_val); - break; - case 2: - write(VTARGETCH2, w_val); - break; - case 3: - write(VTARGETCH3, w_val); - break; - case 4: - write(VTARGETCH4, w_val); - break; - } - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_VTargetX } //-------------------------------------------------------- @@ -646,24 +744,23 @@ void Agilent4uhv::write_VTargetX(Tango::WAttribute &attr) * Read attribute IProtectX related method * Description: * - * Data type: Tango::DevUShort + * Data type: Tango::DevLong * Attr type: Scalar */ //-------------------------------------------------------- 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()); + Tango::DevLong *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(); + int win; + convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "4", win); + int value; + read_window_from_cache(win, value); + *att_value = value; attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_IProtectX } //-------------------------------------------------------- @@ -671,7 +768,7 @@ void Agilent4uhv::read_IProtectX(Tango::Attribute &attr) * Write attribute IProtectX related method * Description: * - * Data type: Tango::DevUShort + * Data type: Tango::DevLong * Attr type: Scalar */ //-------------------------------------------------------- @@ -679,30 +776,18 @@ void Agilent4uhv::write_IProtectX(Tango::WAttribute &attr) { DEBUG_STREAM << "Agilent4uhv::write_IProtectX(Tango::WAttribute &attr) entering... " << endl; // Retrieve write value - Tango::DevUShort w_val; + Tango::DevLong w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_IProtectX) ENABLED START -----*/ - - check_init_error(); + check_init(); + + int win; + convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "4", win); + + int value = w_val; + write_window(win, value); + read_window_into_cache(win); - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - switch (indexn) - { - case 1: - write(IPROTECTCH1, w_val); - break; - case 2: - write(IPROTECTCH2, w_val); - break; - case 3: - write(IPROTECTCH3, w_val); - break; - case 4: - write(IPROTECTCH4, w_val); - break; - } - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_IProtectX } //-------------------------------------------------------- @@ -719,15 +804,12 @@ 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); + int win; + convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "5", win); - data_mutex.lock(); - *att_value = data.setpoint[indexn-1]; - data_mutex.unlock(); - + read_window_from_cache(win, *att_value); attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_SetPointX } //-------------------------------------------------------- @@ -746,32 +828,12 @@ void Agilent4uhv::write_SetPointX(Tango::WAttribute &attr) Tango::DevDouble w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_SetPointX) ENABLED START -----*/ + int win; + convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "5", win); - check_init_error(); + write_window(win, w_val); + read_window_into_cache(win); - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - 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(SETPOINTCH1, w_val_s); - break; - case 2: - write(SETPOINTCH2, w_val_s); - break; - case 3: - write(SETPOINTCH3, w_val_s); - break; - case 4: - write(SETPOINTCH4, w_val_s); - break; - } - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_SetPointX } //-------------------------------------------------------- @@ -779,24 +841,32 @@ void Agilent4uhv::write_SetPointX(Tango::WAttribute &attr) * Read attribute TemperatureHVX related method * Description: * - * Data type: Tango::DevFloat + * Data type: Tango::DevDouble * Attr type: Scalar */ //-------------------------------------------------------- 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()); + Tango::DevDouble *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(); - + int channel, win; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); + switch(channel) { + case 1: win = 801; break; + case 2: win = 802; break; + case 3: win = 808; break; + case 4: win = 809; break; + default: + Tango::Except::throw_exception( "", + "This channel doesn't exist", + "Agilent4uhv::read_TemperatureHVX()"); + } + int value; + read_window_from_cache(win, value); + convert(value, *att_value); attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_TemperatureHVX } //-------------------------------------------------------- @@ -813,15 +883,14 @@ 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(); + int win; + convert("8" + attr.get_name().substr(attr.get_name().size()-1) + "0", win); + int value; + read_window_from_cache(win, value); + convert(value, *att_value); attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_VoltageX } //-------------------------------------------------------- @@ -838,15 +907,11 @@ 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(); - + int win; + convert("8" + attr.get_name().substr(attr.get_name().size()-1) + "1", win); + read_window_from_cache(win, *att_value); attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_CurrentX } //-------------------------------------------------------- @@ -863,15 +928,11 @@ 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(); - + int win; + convert("8" + attr.get_name().substr(attr.get_name().size()-1) + "2", win); + read_window_from_cache(win, *att_value); attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_PressureX } //-------------------------------------------------------- @@ -889,32 +950,24 @@ void Agilent4uhv::read_StateX(Tango::Attribute &attr) Tango::DevState *att_value = get_StateX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_StateX) ENABLED START -----*/ // Set the attribute value + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + int errorcodes; + read_window_from_cache(2060 + channel, errorcodes); - vector<unsigned char> errcodes; + bool state; + read_window_from_cache(10 + channel, state); - 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: + if (errorcodes) { + *att_value = Tango::FAULT; + } else { + if (state) *att_value = Tango::ON; - break; - default: - assert(false); + else + *att_value = Tango::OFF; } - if (errcodes[6-indexn] != '0') - *att_value = Tango::FAULT; - attr.set_value(att_value); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_StateX @@ -934,69 +987,51 @@ void Agilent4uhv::read_StatusX(Tango::Attribute &attr) Tango::DevString *att_value = get_StatusX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_StatusX) ENABLED START -----*/ // Set the attribute value - - 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(); + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); string status; - 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; + bool state; + read_window_from_cache(10 + channel, state); + if (state) + status = "The device is in ON state"; + else + status = "The device is in OFF state"; - if (errcode != 0) - { + int errorcodes; + read_window_from_cache(2060 + channel, errorcodes); + if (errorcodes != 0) { status = ""; - - if (errcode & 0x1) + if (errorcodes & 0x1) status += "FAN error "; - if (errcode & 0x2) + if (errorcodes & 0x2) status += "Power input error from HV "; - if (errcode & 0x4) + if (errorcodes & 0x4) status += "Power input error from PFC "; - if (errcode & 0x8) + if (errorcodes & 0x8) status += "Overtemp PFC "; - if (errcode & 0x10) + if (errorcodes & 0x10) status += "Error communication CPU-HV "; - if (errcode & 0x20) + if (errorcodes & 0x20) status += "Interlock cable "; - if (errcode & 0x40) + if (errorcodes & 0x40) status += "Overtemp HV "; - if (errcode & 0x80) + if (errorcodes & 0x80) status += "Protect "; - if (errcode & 0x100) + if (errorcodes & 0x100) status += "Measurement error "; - if (errcode & 0x200) + if (errorcodes & 0x200) status += "HV out error "; - if (errcode & 0x400) + if (errorcodes & 0x400) status += "Short circuit "; - if (errcode & 0x800) + if (errorcodes & 0x800) status += "HV disabled "; - } - - if (*att_value != NULL) - CORBA::string_free(*att_value); - *att_value = CORBA::string_dup(status.c_str()); - - attr.set_value(att_value); + strncpy(*att_value, status.c_str(), MAX_DEVSTRING_LENGTH); + attr.set_value(att_value); + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_StatusX } //-------------------------------------------------------- @@ -1014,21 +1049,15 @@ void Agilent4uhv::read_AutoStartX(Tango::Attribute &attr) Tango::DevBoolean *att_value = get_AutoStartX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_AutoStartX) ENABLED START -----*/ // Set the attribute value - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); - 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; + string autostart; + read_window_from_cache(601, autostart); + convert(autostart[autostart.size()-channel], *att_value); attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_AutoStartX } //-------------------------------------------------------- @@ -1047,24 +1076,22 @@ void Agilent4uhv::write_AutoStartX(Tango::WAttribute &attr) Tango::DevBoolean w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_AutoStartX) ENABLED START -----*/ + check_init(); - check_init_error(); + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - - vector<unsigned char> autostart; - data_mutex.lock(); - autostart = data.autostart; - data_mutex.unlock(); + string autostart; + read_window_from_cache(601, autostart); if (w_val) - autostart[10-indexn] = '1'; + autostart[autostart.size()-channel] = '1'; else - autostart[10-indexn] = '0'; + autostart[autostart.size()-channel] = '0'; + + write_window(601, autostart); + read_window_into_cache(601); - write(OPERATINGMODE, autostart); - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_AutoStartX } //-------------------------------------------------------- @@ -1082,21 +1109,15 @@ void Agilent4uhv::read_ProtectX(Tango::Attribute &attr) Tango::DevBoolean *att_value = get_ProtectX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_ProtectX) ENABLED START -----*/ // Set the attribute value - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - - vector<unsigned char> protect; - data_mutex.lock(); - protect = data.protect; - data_mutex.unlock(); + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); - if (protect[10-indexn] == '0') - *att_value = false; - else - *att_value = true; + string protect; + read_window_from_cache(602, protect); + convert(protect[protect.size()-channel], *att_value); attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_ProtectX } //-------------------------------------------------------- @@ -1115,24 +1136,21 @@ void Agilent4uhv::write_ProtectX(Tango::WAttribute &attr) Tango::DevBoolean w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_ProtectX) ENABLED START -----*/ + check_init(); - check_init_error(); - - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); - vector<unsigned char> protect; - data_mutex.lock(); - protect = data.protect; - data_mutex.unlock(); + string protect; + read_window_from_cache(602, protect); if (w_val) - protect[10-indexn] = '1'; + protect[protect.size()-channel] = '1'; else - protect[10-indexn] = '0'; + protect[protect.size()-channel] = '0'; - write(PROTECT, protect); - + write_window(602, protect); + read_window_into_cache(602); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_ProtectX } //-------------------------------------------------------- @@ -1150,21 +1168,15 @@ void Agilent4uhv::read_FixedStepX(Tango::Attribute &attr) 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(); + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); - if (fs[10-indexn] == '0') - *att_value = true; - else - *att_value = false; + string fs; + read_window_from_cache(603, fs); + convert(fs[fs.size()-channel], *att_value); attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_FixedStepX } //-------------------------------------------------------- @@ -1183,24 +1195,21 @@ void Agilent4uhv::write_FixedStepX(Tango::WAttribute &attr) Tango::DevBoolean w_val; attr.get_write_value(w_val); /*----- PROTECTED REGION ID(Agilent4uhv::write_FixedStepX) ENABLED START -----*/ + check_init(); - check_init_error(); - - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); - vector<unsigned char> fs; - data_mutex.lock(); - fs = data.fs; - data_mutex.unlock(); + string fs; + read_window_from_cache(603, fs); if (w_val) - fs[10-indexn] = '0'; + fs[fs.size()-channel] = '1'; else - fs[10-indexn] = '1'; + fs[fs.size()-channel] = '0'; - write(FIXEDSTEP, fs); - + write_window(603, fs); + read_window_into_cache(603); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::write_FixedStepX } //-------------------------------------------------------- @@ -1218,21 +1227,15 @@ 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 - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); - 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; + string ss; + read_window_from_cache(804, ss); + convert(ss[ss.size()-channel], *att_value); attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_StatusSetPointX } //-------------------------------------------------------- @@ -1250,21 +1253,15 @@ void Agilent4uhv::read_InterlockStatusX(Tango::Attribute &attr) 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); + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); - 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; + string interlock; + read_window_from_cache(803, interlock); + convert(interlock[interlock.size()-channel], *att_value); attr.set_value(att_value); - + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::read_InterlockStatusX } //-------------------------------------------------------- @@ -1282,38 +1279,29 @@ void Agilent4uhv::read_StatMaskX(Tango::Attribute &attr) Tango::DevLong *att_value = get_StatMaskX_data_ptr(attr.get_name()); /*----- PROTECTED REGION ID(Agilent4uhv::read_StatMaskX) ENABLED START -----*/ // Set the attribute value - - Tango::DevUShort indexn; - convert(attr.get_name().substr(attr.get_name().size()-1), indexn); - - 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(); + int channel; + convert(attr.get_name().substr(attr.get_name().size()-1), channel); *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; + bool state; + read_window_from_cache(10 + channel, state); + if (state) + *att_value |= 0x1; + + int mode; + read_window_from_cache(8, mode); + if (mode != 3 /* LOCAL */) + *att_value |= 0x1 << 1; - if (errcodes[6-indexn] != '0') + int errorcodes; + read_window_from_cache(2060 + channel, errorcodes); + if (errorcodes != 0) *att_value |= 0x1 << 2; - if (fs[10-indexn] == '1') + string fs; + read_window_from_cache(603, fs); + if (fs[fs.size()-channel] == '1') *att_value |= 0x1 << 3; // FIXME bit 4,5,6 and 7 aren't implemented @@ -1355,106 +1343,30 @@ void Agilent4uhv::add_dynamic_attributes() /*----- PROTECTED REGION ID(Agilent4uhv::add_dynamic_attributes) ENABLED START -----*/ // Add your own code to create and add dynamic attributes if any - for (unsigned short cn=1; cn <= nchannel; ++cn) - { - stringstream ssname; - string sname; - int i = cn; - - if (odd_channel_quirk && cn > 1) - ++i; - - ssname.str(""); ssname.clear(); - ssname << "HV" << i << flush; - sname = ssname.str(); - add_HVX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "DeviceNumber" << i << flush; - sname = ssname.str(); - add_DeviceNumberX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "PowerMax" << i << flush; - sname = ssname.str(); - add_PowerMaxX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "VTarget" << i << flush; - sname = ssname.str(); - add_VTargetX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "IProtect" << i << flush; - sname = ssname.str(); - add_IProtectX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "SetPoint" << i << flush; - sname = ssname.str(); - add_SetPointX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "TemperatureHV" << i << flush; - sname = ssname.str(); - add_TemperatureHVX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "Voltage" << i << flush; - sname = ssname.str(); - add_VoltageX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "Current" << i << flush; - sname = ssname.str(); - add_CurrentX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "Pressure" << i << flush; - sname = ssname.str(); - add_PressureX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "State" << i << flush; - sname = ssname.str(); - add_StateX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "Status" << i << flush; - sname = ssname.str(); - add_StatusX_dynamic_attribute(sname); - 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(); - add_ProtectX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "Fixed" << i << flush; - sname = ssname.str(); - add_FixedStepX_dynamic_attribute(sname); - - ssname.str(""); ssname.clear(); - ssname << "StatusSetPoint" << i << flush; - 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(); - add_StatMaskX_dynamic_attribute(sname); + for (size_t i=0; i<channels.size(); ++i) { + add_HVX_dynamic_attribute("HV" + channels[i]); + add_DeviceNumberX_dynamic_attribute("DeviceNumber" + channels[i]); + add_PowerMaxX_dynamic_attribute("PowerMax" + channels[i]); + add_VTargetX_dynamic_attribute("VTarget" + channels[i]); + add_IProtectX_dynamic_attribute("IProtect" + channels[i]); + add_SetPointX_dynamic_attribute("SetPoint" + channels[i]); + add_TemperatureHVX_dynamic_attribute("TemperatureHV" + channels[i]); + add_VoltageX_dynamic_attribute("Voltage" + channels[i]); + add_CurrentX_dynamic_attribute("Current" + channels[i]); + add_PressureX_dynamic_attribute("Pressure" + channels[i]); + add_StateX_dynamic_attribute("State" + channels[i]); + + string attr_status_name = "Status" + channels[i]; + add_StatusX_dynamic_attribute(attr_status_name); + Tango::DevString *att_value = get_StatusX_data_ptr(attr_status_name); + *att_value = new char[MAX_DEVSTRING_LENGTH]; + + add_AutoStartX_dynamic_attribute("AutoStart" + channels[i]); + add_ProtectX_dynamic_attribute("Protect" + channels[i]); + add_FixedStepX_dynamic_attribute("Fixed" + channels[i]); + add_StatusSetPointX_dynamic_attribute("StatusSetPoint" + channels[i]); + add_InterlockStatusX_dynamic_attribute("InterlockStatus" + channels[i]); + add_StatMaskX_dynamic_attribute("StatMask" + channels[i]); } /*----- PROTECTED REGION END -----*/ // Agilent4uhv::add_dynamic_attributes @@ -1462,163 +1374,49 @@ void Agilent4uhv::add_dynamic_attributes() //-------------------------------------------------------- /** - * 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 + * Command OffHVX related method * Description: * */ //-------------------------------------------------------- -void Agilent4uhv::off_hv2() +void Agilent4uhv::off_hvx(Tango::Command &command) { - DEBUG_STREAM << "Agilent4uhv::OffHV2() - " << device_name << endl; - /*----- PROTECTED REGION ID(Agilent4uhv::off_hv2) ENABLED START -----*/ + DEBUG_STREAM << "Agilent4uhv::" << command.get_name() << " - " << device_name << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::off_hvx) ENABLED START -----*/ // Add your own code - check_init_error(); + check_init(); - int new_state = 0; - write(HVCH2, new_state); + int win; + convert("01" + command.get_name().substr(command.get_name().size()-1), win); - /*----- 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(); - - int new_state = 1; - write(HVCH1, new_state); + write_window(win, false); + read_window_into_cache(win); - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::on_hv1 + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::off_hvx } //-------------------------------------------------------- /** - * Command OnHV2 related method + * Command OnHVX related method * Description: * */ //-------------------------------------------------------- -void Agilent4uhv::on_hv2() +void Agilent4uhv::on_hvx(Tango::Command &command) { - DEBUG_STREAM << "Agilent4uhv::OnHV2() - " << device_name << endl; - /*----- PROTECTED REGION ID(Agilent4uhv::on_hv2) ENABLED START -----*/ + DEBUG_STREAM << "Agilent4uhv::" << command.get_name() << " - " << device_name << endl; + /*----- PROTECTED REGION ID(Agilent4uhv::on_hvx) ENABLED START -----*/ // Add your own code - check_init_error(); + check_init(); - int new_state = 1; - write(HVCH2, new_state); + int win; + convert("01" + command.get_name().substr(command.get_name().size()-1), win); - /*----- 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(); - - 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); + write_window(win, true); + read_window_into_cache(win); - /*----- 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 + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::on_hvx } //-------------------------------------------------------- /** @@ -1629,9 +1427,18 @@ void Agilent4uhv::on_hv4() //-------------------------------------------------------- void Agilent4uhv::add_dynamic_commands() { + // Example to add dynamic command: + // Copy inside the folowing protected area to instanciate at startup. + // add_OffHVX_dynamic_command("MyOffHVXCommand", true); + // add_OnHVX_dynamic_command("MyOnHVXCommand", true); + /*----- PROTECTED REGION ID(Agilent4uhv::add_dynamic_commands) ENABLED START -----*/ // Add your own code to create and add dynamic commands if any + for (size_t i=0; i<channels.size(); ++i) { + add_OnHVX_dynamic_command("OnHV" + channels[i], true); + add_OffHVX_dynamic_command("OffHV" + channels[i], true); + } /*----- PROTECTED REGION END -----*/ // Agilent4uhv::add_dynamic_commands } @@ -1639,489 +1446,353 @@ void Agilent4uhv::add_dynamic_commands() /*----- PROTECTED REGION ID(Agilent4uhv::namespace_ending) ENABLED START -----*/ // Additional Methods - -#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 - -void Agilent4uhv::write(const int win, string &value) +void Agilent4uhv::check_init() { - vector<unsigned char> data; - - for (unsigned int i=0; i<value.size(); ++i) - data.push_back(value[i]); - - write(win, data); - - DEBUG_STREAM << "Written " << value.size() << " byte(s): " - << value << endl; + if (! init_error.empty()) + Tango::Except::throw_exception( "", + init_error.c_str(), + "Agilent4uhv::check_init()"); } -void Agilent4uhv::read(const int win, string &value) +void Agilent4uhv::init_header(const int win, const windowType type, + vector<unsigned char> &header) { - vector<unsigned char> answer; + header.push_back(STX); + header.push_back(ADDR); - read(win, answer); + char winc[WIN_LENGTH+1]; + snprintf(winc, WIN_LENGTH+1, "%03d", win); + for (size_t i=0; i<WIN_LENGTH; ++i) + header.insert(header.end(), winc[i]); - stringstream ss; - for (unsigned int i=0; i<answer.size(); ++i) - ss << (char)answer[i]; - ss << flush; - value = ss.str(); + header.insert(header.end(), type); +} - DEBUG_STREAM << "Readed " << value.size() << " byte(s): " - << value << endl; +int Agilent4uhv::calc_crc(const vector<unsigned char> &header, + const vector<unsigned char> &payload) { + int crc = 0; + for (size_t i=1 /* Skip STX */; i < header.size(); ++i) + crc ^= header[i]; + for (size_t i=0; i < payload.size(); ++i) + crc ^= payload[i]; + crc ^= ETX; + return crc; } -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()) +void Agilent4uhv::check_crc(const vector<unsigned char> &header, + const vector<unsigned char> &payload, const vector<unsigned char> &footer) { + char crc[CRC_LENGTH+1]; + snprintf(crc, CRC_LENGTH+1, "%02X", calc_crc(header, payload)); + if(memcmp(footer.data()+1 /* Skip ETX */, crc, CRC_LENGTH) != 0) Tango::Except::throw_exception( "", - "Conversion fail " + win_ss.str(), - "Agilent4uhv::write()"); - - vector<unsigned char> discarded; + "CRC check failed", + "Message::check_crc()"); +} - iomutex.lock(); - try { - write_message(win_s, WRITE_WINDOW, data); - read_answer(win_s, WRITE_WINDOW, discarded); - iomutex.unlock(); - } catch(...) { - iomutex.unlock(); - throw; - } +void Agilent4uhv::init_footer(const int computed_crc, vector<unsigned char> &footer) +{ + char crc[CRC_LENGTH+1]; + snprintf(crc, CRC_LENGTH+1, "%02X", computed_crc); + + footer.push_back(ETX); + footer.push_back(0); + footer.push_back(0); + memcpy(footer.data()+1 /* Skip ETX */, crc, CRC_LENGTH); } -void Agilent4uhv::read(const int win, vector<unsigned char> &answer) +/* Must be called with iomutex held */ +void Agilent4uhv::send_message(const int win, const windowType type, + const vector<unsigned char> &payload) { - 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()"); + vector<unsigned char> header, footer; + int attempts = 2; - vector<unsigned char> discarded; + init_header(win, type, header); + int crc = calc_crc(header, payload); + init_footer(crc, footer); + + vector<unsigned char> message; + message.insert(message.end(), header.begin(), header.end()); + message.insert(message.end(), payload.begin(), payload.end()); + message.insert(message.end(), footer.begin(), footer.end()); - iomutex.lock(); +retry: try { - write_message(win_s, READ_WINDOW, discarded); - read_answer(win_s, READ_WINDOW, answer); - iomutex.unlock(); - } catch(...) { - iomutex.unlock(); + Serial2Client::write(message); + } catch (Tango::DevFailed &e) { + if (--attempts) { + // Waiting the device + int retries = 0; + while(get_state2() != Tango::ON && retries++ < 5) { + sleep(1); + } + goto retry; + } throw; } + assert(Serial2Client::output_length() == 0); } -// Message: -// <STX>+<ADDR>+<WIN>+<COM>+<DATA>+<ETX>+<CRC> -void Agilent4uhv::write_message(const string win_s, const unsigned char com, - vector<unsigned char> &data) +/* Must be called with iomutex held */ +void Agilent4uhv::receive_message(vector<unsigned char> &payload) { - 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]); - - message.push_back(ETX); - unsigned char crc_ = calc_crc(message); - - 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( "", - "Conversion fail " + crc_ss.str(), - "Agilent4uhv::write_message()"); + vector<unsigned char> message, crc; + int attempts = 5; - 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); +retry: + try { + Serial2Client::read_until(ETX, message); + Serial2Client::read(CRC_LENGTH, crc); + } catch (Tango::DevFailed &e) { + if (--attempts) { + goto retry; + } + throw; + } + assert(Serial2Client::input_length() == 0); - if (answer_.size() == 4) - { - // Thus data is 1 byte length and it could be an error or Logic datatype! + message.insert(message.end(), crc.begin(), crc.end()); + /* Error message is fixed-size */ + if (message.size() == ERROR_MESSAGE_SIZE) { string err_mesg; - switch ((int)answer_[2]) - { - case 0x06: - // Ok - return; - case 0x15: + switch (message[2]) { + case 0x06: /* ACK */ + break; + case 0x15: /* NACK */ err_mesg = "Execution of the command has failed"; break; - case 0x32: - err_mesg = "The window specified in the command is not a valid window"; + case 0x32: /* Unknown Window */ + err_mesg = "The window specified in the command" + " is not a valid window"; break; - case 0x33: - err_mesg = "The data type specified in the command (Logic, Numeric or " - "Alphanumeric) is not in agreement with the Window specified"; + 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"; break; - case 0x35: - err_mesg = "The window specified is Read Only or is temporarily disabled"; + case 0x35: /* Win Disabled */ + err_mesg = "The window specified is Read Only or" + " is temporarily disabled"; break; + default: + err_mesg = "The value expressed during a write" + " command is not within the range value" + " for the specified window."; } - if (! err_mesg.empty()) Tango::Except::throw_exception( "", err_mesg, - "Agilent4uhv::read_answer()"); - } - - 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()"); - - 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()"); + "Agilent4uhv::receive_message()"); - 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()); + } else { + size_t payload_size = message.size() - (HEADER_SIZE + FOOTER_SIZE); + payload.assign(message.begin() + HEADER_SIZE, + message.begin() + HEADER_SIZE + payload_size); + } } -unsigned char Agilent4uhv::calc_crc(const vector<unsigned char> &message) +/* Must be called with iomutex held */ +void Agilent4uhv::_send_receive_message(const int win, const windowType type, + const vector<unsigned char> &answer, vector<unsigned char> &reply) { - unsigned char ret = 0; - for (vector<unsigned char>::size_type i=1 /*Skip STX*/; i<message.size(); ++i) - ret ^= message[i]; - return ret; + send_message(win, type, answer); + receive_message(reply); } -void Agilent4uhv::check_init_error(void) +void Agilent4uhv::send_receive_message(const int win, const windowType type, + const vector<unsigned char> &answer, vector<unsigned char> &reply) { - if (! init_error.empty()) - Tango::Except::throw_exception( "", - init_error.c_str(), - "Agilent4uhv::check_init_error()"); + omni_mutex_lock guardio(iomutex); + _send_receive_message(win, type, answer, reply); } -void* Worker::run_undetached(void *ptr) +void Agilent4uhv::decode(const vector<unsigned char> &payload, bool &data) { - (void)ptr; - - DEBUG_STREAM << "Worker::run_undetached() - enter" << endl; - - Data data; - vector<unsigned char> channels(6, '0'); - - while(cont) { - DEBUG_STREAM << "Worker::run_undetached() - loop" << endl; - - // Retrieve data - try { - device->read(MODEL, data.model); - if(! cont) - break; - wait(10); - - device->read(SERIALNUMBER, data.serial_number); - if(! cont) - break; - wait(10); - - device->read(TEMPERATUREFAN, data.temperature_fan); - if(! cont) - break; - wait(10); - - device->read(HVCH1, data.hvch[0]); - if(! cont) - break; - wait(10); - - device->read(HVCH2, data.hvch[1]); - if(! cont) - break; - wait(10); - - device->read(HVCH3, data.hvch[2]); - if(! cont) - break; - wait(10); - - device->read(HVCH4, data.hvch[3]); - if(! cont) - break; - wait(10); - - device->read(DEVICENUMBERCH1, data.device_number[0]); - if(! cont) - break; - wait(10); - - device->read(DEVICENUMBERCH2, data.device_number[1]); - if(! cont) - break; - wait(10); - - device->read(DEVICENUMBERCH3, data.device_number[2]); - if(! cont) - break; - wait(10); - - device->read(DEVICENUMBERCH4, data.device_number[3]); - if(! cont) - break; - wait(10); - - device->read(POWERMAXCH1, data.power_max[0]); - if(! cont) - break; - wait(10); - - device->read(POWERMAXCH2, data.power_max[1]); - if(! cont) - break; - wait(10); - - device->read(POWERMAXCH3, data.power_max[2]); - if(! cont) - break; - wait(10); - - device->read(POWERMAXCH4, data.power_max[3]); - if(! cont) - break; - wait(10); - - device->read(VTARGETCH1, data.vtarget[0]); - if(! cont) - break; - wait(10); - - device->read(VTARGETCH2, data.vtarget[1]); - if(! cont) - break; - wait(10); - - device->read(VTARGETCH3, data.vtarget[2]); - if(! cont) - break; - wait(10); - - device->read(VTARGETCH4, data.vtarget[3]); - if(! cont) - break; - wait(10); - - device->read(IPROTECTCH1, data.iprotect[0]); - if(! cont) - break; - wait(10); - - device->read(IPROTECTCH2, data.iprotect[1]); - if(! cont) - break; - wait(10); - - device->read(IPROTECTCH3, data.iprotect[2]); - if(! cont) - break; - wait(10); - - device->read(IPROTECTCH4, data.iprotect[3]); - if(! cont) - break; - wait(10); - - device->read(SETPOINTCH1, data.setpoint[0]); - if(! cont) - break; - wait(10); - - device->read(SETPOINTCH2, data.setpoint[1]); - if(! cont) - break; - wait(10); - - device->read(SETPOINTCH3, data.setpoint[2]); - if(! cont) - break; - wait(10); - - device->read(SETPOINTCH4, data.setpoint[3]); - if(! cont) - break; - wait(10); - - device->read(TEMPERATUREHVCH1, data.temperaturehv[0]); - if(! cont) - break; - wait(10); - - device->read(TEMPERATUREHVCH2, data.temperaturehv[1]); - if(! cont) - break; - wait(10); - - device->read(TEMPERATUREHVCH3, data.temperaturehv[2]); - if(! cont) - break; - wait(10); - - device->read(TEMPERATUREHVCH4, data.temperaturehv[3]); - if(! cont) - break; - wait(10); - - device->read(VMEASUREDCH1, data.vmeasured[0]); - if(! cont) - break; - wait(10); - - device->read(VMEASUREDCH2, data.vmeasured[1]); - if(! cont) - break; - wait(10); - - device->read(VMEASUREDCH3, data.vmeasured[2]); - if(! cont) - break; - wait(10); + convert(payload[0], data); +} - device->read(VMEASUREDCH4, data.vmeasured[3]); - if(! cont) - break; - wait(10); +void Agilent4uhv::encode(const bool &data, vector<unsigned char> &payload) +{ + payload.resize(1); + convert(data, payload[0]); +} - device->read(IMEASUREDCH1, data.imeasured[0]); - if(! cont) - break; - wait(10); +void Agilent4uhv::decode(const vector<unsigned char> &payload, int &data) +{ + string s(payload.begin(), payload.end()); + convert(s, data); +} - device->read(IMEASUREDCH2, data.imeasured[1]); - if(! cont) - break; - wait(10); +void Agilent4uhv::encode(const int &data, vector<unsigned char> &payload) +{ + string s; + convert(data, s); + /* Numeric is exactly 6 characters right-justified and + * padded with ascii zero (0x30) */ + s.insert(s.begin(), NUMERIC_PAYLOAD_SIZE - s.size(), '0'); + payload.assign(s.begin(), s.end()); +} - device->read(IMEASUREDCH3, data.imeasured[2]); - if(! cont) - break; - wait(10); +/* Alphanumeric, which is 10 characters long, when used as double (scientific notation) + * is righ-justified and padded with spaces (0x20) */ +void Agilent4uhv::decode(const vector<unsigned char> &payload, double &data) +{ + // Left trim of spaces + size_t start; + for (size_t i=0; i<payload.size(); ++i) { + if (payload[i] != ' ') { + start = i; + break; + } + } + string s = string(payload.begin() + start, payload.end()); + convert(s, data); +} - device->read(IMEASUREDCH4, data.imeasured[3]); - if(! cont) - break; - wait(10); +void Agilent4uhv::encode(const double &data, vector<unsigned char> &payload) +{ + char text[ALPHANUMERIC_PAYLOAD_SIZE + 1]; + snprintf(text, ALPHANUMERIC_PAYLOAD_SIZE + 1, "%.1E", data); + string s(text); + s.insert(s.begin(), ALPHANUMERIC_PAYLOAD_SIZE - s.size(), ' '); + payload.assign(s.begin(), s.end()); +} - device->read(PRESSURECH1, data.pressure[0]); - if(! cont) - break; - wait(10); +/* Alphanumeric, which is 10 characters long, when used as string + * is left-justified and padded with spaces (0x20). When used as decimal number is + * righ-justified and padded with zeros (x30). In this last case the code should + * explicitly define 10 charaters to avoid automatic padding and pad with zeros + * directly */ +void Agilent4uhv::decode(const vector<unsigned char> &payload, string &data) +{ + // Right trim of spaces + size_t end; + for (size_t i=payload.size(); i>0; --i) { + if (payload[i-1] != ' ') { + end = i; + break; + } + } + data = string(payload.begin(), payload.begin() + end); +} - device->read(PRESSURECH2, data.pressure[1]); - if(! cont) - break; - wait(10); +void Agilent4uhv::encode(const string &data, vector<unsigned char> &payload) +{ + string s = data; + s.insert(s.end(), ALPHANUMERIC_PAYLOAD_SIZE - s.size(), ' '); + payload.assign(s.begin(), s.end()); +} - device->read(PRESSURECH3, data.pressure[2]); - if(! cont) - break; - wait(10); +template<typename T> void Agilent4uhv::read_window(const int win, T &data) +{ + vector<unsigned char> discard, payload; + send_receive_message(win, READ_WINDOW, discard, payload); + decode(payload, data); +} - device->read(PRESSURECH4, data.pressure[3]); - if(! cont) - break; - wait(10); +/* Must be called with iomutex held */ +template<typename T> void Agilent4uhv::_write_window(const int win, const T &data) +{ + vector<unsigned char> payload, discard; + encode(data, payload); + _send_receive_message(win, WRITE_WINDOW, payload, discard); +} - device->read(OPERATINGMODE, data.autostart); - if(! cont) - break; - wait(10); +template<typename T> void Agilent4uhv::write_window(const int win, const T &data) +{ + vector<unsigned char> payload, discard; + encode(data, payload); + send_receive_message(win, WRITE_WINDOW, payload, discard); +} - device->read(PROTECT, data.protect); - if(! cont) - break; - wait(10); +template<typename T> void Agilent4uhv::read_window_from_cache(const int win , T &data) +{ + vector<unsigned char> payload; + cache.get(win, payload); + assert(! payload.empty()); + decode(payload, data); +} + +/* Must be called with iomutex held */ +void Agilent4uhv::_read_window_into_cache(const int win) +{ + vector<unsigned char> discard, payload; + send_receive_message(win, READ_WINDOW, discard, payload); + cache.set(win, payload); +} - device->read(FIXEDSTEP, data.fs); - if(! cont) - break; - wait(10); +void Agilent4uhv::read_window_into_cache(const int win) +{ + vector<unsigned char> discard, payload; + send_receive_message(win, READ_WINDOW, discard, payload); + cache.set(win, payload); +} - device->read(STATUSSETPOINT, data.ssp); - if(! cont) - break; - wait(10); +void Agilent4uhv::check_state() +{ + int m; + read_window_from_cache(8, m); + string mode; + switch (m) { + case 0: mode = "Serial"; break; + case 1: mode = "Remote"; break; + case 2: mode = "Local"; break; + case 3: mode = "LAN"; break; + }; + int status; + read_window_from_cache(205, status); + switch (status) { + case 0: + set_state(Tango::ON); + set_status("The device is in ON state (" + mode + ")"); + break; + case 111111: + set_state(Tango::UNKNOWN); + set_status("The device is in UNKNOWN state (" + mode + ")"); + break; + default: + set_state(Tango::FAULT); + set_status("The device is in FAULT state (" + mode + ")"); + } +} - device->read(INTERLOCKSTATUS, data.is); - if(! cont) - break; - wait(10); +void* Agilent4uhvWorker::run_undetached(void * /*ptr*/) +{ + DEBUG_STREAM << "Worker::run_undetached() - enter" << endl; - device->write(SETCHANNEL, channels); - device->read(ERRORCODE, data.ec); - if(! cont) - break; - wait(10); + vector<int>::const_iterator it; + it = device->polled_windows.begin(); - data.state = Tango::ON; - data.status = "The device is in ON state"; + while(cont) { + DEBUG_STREAM << "Worker::run_undetached() - loop" << endl; + try { + usleep(device->pollingSleep); + if (*it > 1000) { + /* Set channel */ + omni_mutex_lock guardio(device->iomutex); + device->_write_window(505, *it - 2060); + vector<unsigned char> discard, payload; + /* Retrieve status of the previously set up channel */ + device->_send_receive_message(206, READ_WINDOW, discard, payload); + /* Save as 206X into the cache */ + device->cache.set(*it, payload); + } else { + device->read_window_into_cache(*it); + } + if (++it == device->polled_windows.end()) { + it = device->polled_windows.begin(); + } } catch(Tango::DevFailed &e) { - data.state = Tango::FAULT; - data.status = string(e.errors[0].desc); + /* Restart from begin */ + it = device->polled_windows.begin(); + /* Set UNKNOWN state */ + static const int m[] = {STX, ADDR, '2', '0', '5', READ_WINDOW, + '1', '1', '1', '1', '1', '1', ETX, 0x38, 0x34}; + vector<unsigned char> message(m, m + sizeof(m) / sizeof(m[0])); + device->cache.set(205, message); + assert(false); } - - // Copy data - device->data_mutex.lock(); - device->data = data; - device->data_mutex.unlock(); } DEBUG_STREAM << "Worker::run_undetached() - exit" << endl; diff --git a/src/Agilent4uhv.h b/src/Agilent4uhv.h index e627befa07d19503fdb0479dc6f51b1e8c6349b4..3ba7951fd4a26895abf94c52c01cd199aa6177e0 100644 --- a/src/Agilent4uhv.h +++ b/src/Agilent4uhv.h @@ -53,33 +53,28 @@ namespace Agilent4uhv_ns /*----- PROTECTED REGION ID(Agilent4uhv::Additional Class Declarations) ENABLED START -----*/ // Additional Class Declarations -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; +#define MAX_WINDOWS 2100 /* Necessary fot the 206 + channel trick */ +enum windowType { READ_WINDOW = 0x30, WRITE_WINDOW = 0x31 }; +class Cache { + omni_mutex mutex[MAX_WINDOWS]; + vector<unsigned char> data[MAX_WINDOWS]; + Cache(const Cache &source); +public: + Cache() {} + void get(const int index, vector<unsigned char> &v) { + assert(index > 0 && index < MAX_WINDOWS); + omni_mutex_lock guard(mutex[index]); + v = data[index]; + } + void set(const int index, const vector<unsigned char> &v) { + assert(index > 0 && index < MAX_WINDOWS); + omni_mutex_lock guard(mutex[index]); + data[index] = v; + } }; +class Agilent4uhvWorker; + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::Additional Class Declarations class Agilent4uhv : public Serial2Client_ns::Serial2Client @@ -88,21 +83,22 @@ class Agilent4uhv : public Serial2Client_ns::Serial2Client /*----- PROTECTED REGION ID(Agilent4uhv::Data Members) ENABLED START -----*/ // Add your own data members - Tango::DevUShort nchannel; + vector<string> channels; string init_error; - bool odd_channel_quirk; +public: omni_mutex iomutex; -public: - Worker *worker; - Data data; - omni_mutex data_mutex; + Agilent4uhvWorker *worker; + vector<int> polled_windows; + Cache cache; /*----- PROTECTED REGION END -----*/ // Agilent4uhv::Data Members // Device property data members public: + // PollingSleep: Sleep between hardware requests made by internal thread + Tango::DevLong pollingSleep; bool mandatoryNotDefined; @@ -110,7 +106,7 @@ public: public: Tango::DevString *attr_Model_read; Tango::DevString *attr_SerialNumber_read; - Tango::DevFloat *attr_Temperature_read; + Tango::DevDouble *attr_TemperatureFan_read; // Constructors and destructors public: @@ -152,6 +148,10 @@ 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. */ @@ -191,14 +191,14 @@ public: virtual void read_SerialNumber(Tango::Attribute &attr); virtual bool is_SerialNumber_allowed(Tango::AttReqType type); /** - * Attribute Temperature related methods + * Attribute TemperatureFan related methods * Description: * - * Data type: Tango::DevFloat + * Data type: Tango::DevDouble * Attr type: Scalar */ - virtual void read_Temperature(Tango::Attribute &attr); - virtual bool is_Temperature_allowed(Tango::AttReqType type); + virtual void read_TemperatureFan(Tango::Attribute &attr); + virtual bool is_TemperatureFan_allowed(Tango::AttReqType type); // Dynamic attribute methods public: @@ -236,7 +236,7 @@ public: * Attribute PowerMaxX related methods * Description: * - * Data type: Tango::DevUShort + * Data type: Tango::DevLong * Attr type: Scalar */ virtual void read_PowerMaxX(Tango::Attribute &attr); @@ -244,14 +244,14 @@ public: virtual bool is_PowerMaxX_allowed(Tango::AttReqType type); void add_PowerMaxX_dynamic_attribute(string attname); void remove_PowerMaxX_dynamic_attribute(string attname); - Tango::DevUShort *get_PowerMaxX_data_ptr(string &name); - map<string,Tango::DevUShort> PowerMaxX_data; + Tango::DevLong *get_PowerMaxX_data_ptr(string &name); + map<string,Tango::DevLong> PowerMaxX_data; /** * Attribute VTargetX related methods * Description: * - * Data type: Tango::DevUShort + * Data type: Tango::DevLong * Attr type: Scalar */ virtual void read_VTargetX(Tango::Attribute &attr); @@ -259,14 +259,14 @@ public: virtual bool is_VTargetX_allowed(Tango::AttReqType type); void add_VTargetX_dynamic_attribute(string attname); void remove_VTargetX_dynamic_attribute(string attname); - Tango::DevUShort *get_VTargetX_data_ptr(string &name); - map<string,Tango::DevUShort> VTargetX_data; + Tango::DevLong *get_VTargetX_data_ptr(string &name); + map<string,Tango::DevLong> VTargetX_data; /** * Attribute IProtectX related methods * Description: * - * Data type: Tango::DevUShort + * Data type: Tango::DevLong * Attr type: Scalar */ virtual void read_IProtectX(Tango::Attribute &attr); @@ -274,8 +274,8 @@ public: virtual bool is_IProtectX_allowed(Tango::AttReqType type); void add_IProtectX_dynamic_attribute(string attname); void remove_IProtectX_dynamic_attribute(string attname); - Tango::DevUShort *get_IProtectX_data_ptr(string &name); - map<string,Tango::DevUShort> IProtectX_data; + Tango::DevLong *get_IProtectX_data_ptr(string &name); + map<string,Tango::DevLong> IProtectX_data; /** * Attribute SetPointX related methods @@ -296,15 +296,15 @@ public: * Attribute TemperatureHVX related methods * Description: * - * Data type: Tango::DevFloat + * Data type: Tango::DevDouble * Attr type: Scalar */ virtual void read_TemperatureHVX(Tango::Attribute &attr); virtual bool is_TemperatureHVX_allowed(Tango::AttReqType type); void add_TemperatureHVX_dynamic_attribute(string attname); void remove_TemperatureHVX_dynamic_attribute(string attname); - Tango::DevFloat *get_TemperatureHVX_data_ptr(string &name); - map<string,Tango::DevFloat> TemperatureHVX_data; + Tango::DevDouble *get_TemperatureHVX_data_ptr(string &name); + map<string,Tango::DevDouble> TemperatureHVX_data; /** * Attribute VoltageX related methods @@ -475,64 +475,28 @@ public: // Command related methods +public: + +// Dynamic commands methods public: /** - * 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 + * Command OffHVX related method * Description: * */ - virtual void on_hv3(); - virtual bool is_OnHV3_allowed(const CORBA::Any &any); + 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); /** - * Command OnHV4 related method + * Command OnHVX related method * Description: * */ - virtual void on_hv4(); - virtual bool is_OnHV4_allowed(const CORBA::Any &any); - + 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); //-------------------------------------------------------- /** @@ -545,57 +509,39 @@ public: /*----- PROTECTED REGION ID(Agilent4uhv::Additional Method prototypes) ENABLED START -----*/ // Additional Method prototypes - 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 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()"); - } - 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); + void check_init(); + + void init_header(const int win, const windowType type, + vector<unsigned char> &header); + int calc_crc(const vector<unsigned char> &header, + const vector<unsigned char> &payload); + void check_crc(const vector<unsigned char> &header, + const vector<unsigned char> &payload, + const vector<unsigned char> &footer); + void init_footer(const int computed_crc, vector<unsigned char> &footer); + + void send_message(const int win, const windowType type, + const vector<unsigned char> &payload); + void receive_message(vector<unsigned char> &payload); + void _send_receive_message(const int win, const windowType type, + const vector<unsigned char> &answer, vector<unsigned char> &reply); + void send_receive_message(const int win, const windowType type, + const vector<unsigned char> &answer, vector<unsigned char> &reply); + void decode(const vector<unsigned char> &payload, bool &data); + void decode(const vector<unsigned char> &payload, int &data); + void decode(const vector<unsigned char> &payload, double &data); + void decode(const vector<unsigned char> &payload, string &data); + void encode(const bool &data, vector<unsigned char> &payload); + void encode(const int &data, vector<unsigned char> &payload); + void encode(const double &data, vector<unsigned char> &payload); + void encode(const string &data, vector<unsigned char> &payload); + template<typename T> void read_window(const int win, T &data); + template<typename T> void _write_window(const int win, const T &data); + template<typename T> void write_window(const int win, const T &data); + template<typename T> void read_window_from_cache(const int win, T &data); + void _read_window_into_cache(const int win); + void read_window_into_cache(const int win); + void check_state(); /*----- PROTECTED REGION END -----*/ // Agilent4uhv::Additional Method prototypes }; @@ -603,39 +549,25 @@ public: /*----- PROTECTED REGION ID(Agilent4uhv::Additional Classes Definitions) ENABLED START -----*/ // Additional Classes Definitions -class Worker : public omni_thread, public Tango::LogAdapter +class Agilent4uhvWorker : public omni_thread, public Tango::LogAdapter { Agilent4uhv *device; void* run_undetached(void*); - bool cont; + volatile bool cont; - public: - void start(void) { +public: + Agilent4uhvWorker(Agilent4uhv *device_) : + LogAdapter((Tango::DeviceImpl*)device_), + device(device_), cont(false) {} + + void start() { + cont = true; start_undetached(); } - void stop(void) { + void stop() { 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; - } }; diff --git a/src/Agilent4uhv.xmi b/src/Agilent4uhv.xmi index ca871eacd56e327682ca2823ab20f66afaac4ae5..28a071760f0016fda43139566e119910ece73a31 100644 --- a/src/Agilent4uhv.xmi +++ b/src/Agilent4uhv.xmi @@ -1,63 +1,20 @@ <?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/fermi/servers/4uhv/src" language="Cpp" filestogenerate="XMI file,Code files,Protected Regions" license="GPL" hasMandatoryProperty="true" hasConcreteProperty="false" hasAbstractCommand="false" hasAbstractAttribute="false"> + <description description="" title="" sourcePath="/home/alessio/Sources/git-trees/4uhv/src" language="Cpp" filestogenerate="XMI file,Code files,Protected Regions" license="GPL" hasMandatoryProperty="true" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false"> <inheritances classname="Device_Impl" sourcePath=""/> - <inheritances classname="Serial2Client" sourcePath="../../serial2/src"/> + <inheritances classname="Serial2Client" sourcePath="../../serial2client/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"/> </description> <deviceProperties name="DeviceName" mandatory="true" description=""> <type xsi:type="pogoDsl:StringType"/> <status abstract="false" inherited="true" concrete="true"/> </deviceProperties> - <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"/> - <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> + <deviceProperties name="PollingSleep" description="Sleep between hardware requests made by internal thread"> + <type xsi:type="pogoDsl:IntType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - <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> + <DefaultPropValue>0</DefaultPropValue> + </deviceProperties> <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"/> @@ -76,31 +33,7 @@ </argout> <status abstract="true" inherited="true" concrete="true"/> </commands> - <commands name="OffHV3" description="" execMethod="off_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="OffHV4" description="" execMethod="off_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> - <commands name="OnHV3" description="" execMethod="on_hv3" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false"> + <dynamicCommands name="OffHVX" description="" execMethod="off_hvx" displayLevel="OPERATOR" polledPeriod="0" isDynamic="true"> <argin description=""> <type xsi:type="pogoDsl:VoidType"/> </argin> @@ -109,10 +42,9 @@ </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"> + </dynamicCommands> + <dynamicCommands name="OnHVX" description="" execMethod="on_hvx" displayLevel="OPERATOR" polledPeriod="0" isDynamic="true"> <argin description=""> <type xsi:type="pogoDsl:VoidType"/> </argin> @@ -121,10 +53,9 @@ </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"> + </dynamicCommands> + <attributes name="Model" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false"> <dataType xsi:type="pogoDsl:StringType"/> <changeEvent fire="false" libCheckCriteria="false"/> <archiveEvent fire="false" libCheckCriteria="false"/> @@ -132,10 +63,9 @@ <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="false" isDynamic="false"> + <attributes name="SerialNumber" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false"> <dataType xsi:type="pogoDsl:StringType"/> <changeEvent fire="false" libCheckCriteria="false"/> <archiveEvent fire="false" libCheckCriteria="false"/> @@ -143,18 +73,16 @@ <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="false" isDynamic="false"> - <dataType xsi:type="pogoDsl:FloatType"/> + <attributes name="TemperatureFan" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false"> + <dataType xsi:type="pogoDsl:DoubleType"/> <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="C" standardUnit="" displayUnit="" format="" maxValue="200" minValue="0" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> <readExcludedStates>UNKNOWN</readExcludedStates> - <readExcludedStates>FAULT</readExcludedStates> <readExcludedStates>INIT</readExcludedStates> </attributes> <dynamicAttributes name="HVX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true"> @@ -165,7 +93,6 @@ <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"> @@ -176,52 +103,44 @@ <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"/> + <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="" 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"/> + <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="" label="" unit="kV" standardUnit="" displayUnit="" format="" maxValue="7" minValue="3" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> + <properties description="" label="" unit="V" standardUnit="" displayUnit="" format="" maxValue="7000" minValue="3000" 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"/> + <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="" 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"> @@ -232,21 +151,18 @@ <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"/> + <dataType xsi:type="pogoDsl:DoubleType"/> <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="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"> @@ -257,7 +173,6 @@ <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"> @@ -268,7 +183,6 @@ <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"> @@ -279,7 +193,6 @@ <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"> @@ -290,7 +203,6 @@ <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"> @@ -301,7 +213,6 @@ <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"> @@ -312,10 +223,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> <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"> @@ -326,10 +235,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> <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"> @@ -340,10 +247,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> <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"> @@ -354,7 +259,6 @@ <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"> @@ -365,7 +269,6 @@ <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"> @@ -376,7 +279,6 @@ <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=""> @@ -391,9 +293,6 @@ <states name="FAULT" description=""> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </states> - <states name="INIT" description=""> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </states> <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/> </classes> </pogoDsl:PogoSystem> diff --git a/src/Agilent4uhvClass.cpp b/src/Agilent4uhvClass.cpp index 17fe26cc39fc2e8a6d3a45a4e0ecd377fe3daca5..f38c055df05ab9b7e25545c1399f8dd0d1472dd4 100644 --- a/src/Agilent4uhvClass.cpp +++ b/src/Agilent4uhvClass.cpp @@ -1,5 +1,4 @@ /*----- PROTECTED REGION ID(Agilent4uhvClass.cpp) ENABLED START -----*/ -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: $"; @@ -160,7 +159,7 @@ Agilent4uhvClass *Agilent4uhvClass::instance() //=================================================================== //-------------------------------------------------------- /** - * method : OffHV1Class::execute() + * method : OffHVXClass::execute() * description : method to trigger the execution of the command. * * @param device The device on which the command must be executed @@ -169,16 +168,16 @@ Agilent4uhvClass *Agilent4uhvClass::instance() * returns The command output data (packed in the Any object) */ //-------------------------------------------------------- -CORBA::Any *OffHV1Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +CORBA::Any *OffHVXClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - cout2 << "OffHV1Class::execute(): arrived" << endl; - ((static_cast<Agilent4uhv *>(device))->off_hv1()); + cout2 << "OffHVXClass::execute(): arrived" << endl; + ((static_cast<Agilent4uhv *>(device))->off_hvx(*this)); return new CORBA::Any(); } //-------------------------------------------------------- /** - * method : OffHV2Class::execute() + * method : OnHVXClass::execute() * description : method to trigger the execution of the command. * * @param device The device on which the command must be executed @@ -187,118 +186,10 @@ CORBA::Any *OffHV1Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const C * returns The command output data (packed in the Any object) */ //-------------------------------------------------------- -CORBA::Any *OffHV2Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +CORBA::Any *OnHVXClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - 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()); + cout2 << "OnHVXClass::execute(): arrived" << endl; + ((static_cast<Agilent4uhv *>(device))->on_hvx(*this)); return new CORBA::Any(); } @@ -371,6 +262,20 @@ void Agilent4uhvClass::set_default_property() // Set Default Class Properties // Set Default device Properties + prop_name = "PollingSleep"; + prop_desc = "Sleep between hardware requests made by internal thread (max value is 1000000)"; + 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); } //-------------------------------------------------------- @@ -547,6 +452,7 @@ 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)) @@ -626,29 +532,29 @@ void Agilent4uhvClass::attribute_factory(vector<Tango::Attr *> &att_list) // Not Memorized att_list.push_back(serialnumber); - // Attribute : Temperature - TemperatureAttrib *temperature = new TemperatureAttrib(); - Tango::UserDefaultAttrProp temperature_prop; - // description not set for Temperature - // label not set for Temperature - temperature_prop.set_unit("C"); - // standard_unit not set for Temperature - // display_unit not set for Temperature - // format not set for Temperature - temperature_prop.set_max_value("200"); - temperature_prop.set_min_value("0"); - // max_alarm not set for Temperature - // min_alarm not set for Temperature - // max_warning not set for Temperature - // min_warning not set for Temperature - // delta_t not set for Temperature - // delta_val not set for Temperature + // Attribute : TemperatureFan + TemperatureFanAttrib *temperaturefan = new TemperatureFanAttrib(); + Tango::UserDefaultAttrProp temperaturefan_prop; + // description not set for TemperatureFan + // label not set for TemperatureFan + temperaturefan_prop.set_unit("C"); + // standard_unit not set for TemperatureFan + // display_unit not set for TemperatureFan + // format not set for TemperatureFan + temperaturefan_prop.set_max_value("200"); + temperaturefan_prop.set_min_value("0"); + // max_alarm not set for TemperatureFan + // min_alarm not set for TemperatureFan + // max_warning not set for TemperatureFan + // min_warning not set for TemperatureFan + // delta_t not set for TemperatureFan + // delta_val not set for TemperatureFan - temperature->set_default_properties(temperature_prop); + temperaturefan->set_default_properties(temperaturefan_prop); // Not Polled - temperature->set_disp_level(Tango::OPERATOR); + temperaturefan->set_disp_level(Tango::OPERATOR); // Not Memorized - att_list.push_back(temperature); + att_list.push_back(temperaturefan); // Create a list of static attributes @@ -696,79 +602,7 @@ 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 066a9d2718c680fafef0b521532276b0af7b5fb9..269e9c42b0f643d8f99e09d7eea0bd8249c7d3f8 100644 --- a/src/Agilent4uhvClass.h +++ b/src/Agilent4uhvClass.h @@ -86,17 +86,17 @@ public: {return (static_cast<Agilent4uhv *>(dev))->is_SerialNumber_allowed(ty);} }; -// Attribute Temperature class definition -class TemperatureAttrib: public Tango::Attr +// Attribute TemperatureFan class definition +class TemperatureFanAttrib: public Tango::Attr { public: - TemperatureAttrib():Attr("Temperature", - Tango::DEV_FLOAT, Tango::READ) {}; - ~TemperatureAttrib() {}; + TemperatureFanAttrib():Attr("TemperatureFan", + Tango::DEV_DOUBLE, Tango::READ) {}; + ~TemperatureFanAttrib() {}; virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) - {(static_cast<Agilent4uhv *>(dev))->read_Temperature(att);} + {(static_cast<Agilent4uhv *>(dev))->read_TemperatureFan(att);} virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty) - {return (static_cast<Agilent4uhv *>(dev))->is_Temperature_allowed(ty);} + {return (static_cast<Agilent4uhv *>(dev))->is_TemperatureFan_allowed(ty);} }; @@ -136,7 +136,7 @@ class PowerMaxXAttrib: public Tango::Attr { public: PowerMaxXAttrib(const string &att_name):Attr(att_name.c_str(), - Tango::DEV_USHORT, Tango::READ_WRITE) {}; + Tango::DEV_LONG, Tango::READ_WRITE) {}; ~PowerMaxXAttrib() {}; virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) {(static_cast<Agilent4uhv *>(dev))->read_PowerMaxX(att);} @@ -151,7 +151,7 @@ class VTargetXAttrib: public Tango::Attr { public: VTargetXAttrib(const string &att_name):Attr(att_name.c_str(), - Tango::DEV_USHORT, Tango::READ_WRITE) {}; + Tango::DEV_LONG, Tango::READ_WRITE) {}; ~VTargetXAttrib() {}; virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) {(static_cast<Agilent4uhv *>(dev))->read_VTargetX(att);} @@ -166,7 +166,7 @@ class IProtectXAttrib: public Tango::Attr { public: IProtectXAttrib(const string &att_name):Attr(att_name.c_str(), - Tango::DEV_USHORT, Tango::READ_WRITE) {}; + Tango::DEV_LONG, Tango::READ_WRITE) {}; ~IProtectXAttrib() {}; virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) {(static_cast<Agilent4uhv *>(dev))->read_IProtectX(att);} @@ -196,7 +196,7 @@ class TemperatureHVXAttrib: public Tango::Attr { public: TemperatureHVXAttrib(const string &att_name):Attr(att_name.c_str(), - Tango::DEV_FLOAT, Tango::READ) {}; + Tango::DEV_DOUBLE, Tango::READ) {}; ~TemperatureHVXAttrib() {}; virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) {(static_cast<Agilent4uhv *>(dev))->read_TemperatureHVX(att);} @@ -355,151 +355,13 @@ public: //========================================= -// Define classes for commands +// Define classes for dynamic commands //========================================= -// 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 +// Command OffHVX class definition +class OffHVXClass : public Tango::Command { public: - OnHV3Class(const char *name, + OffHVXClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -507,22 +369,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - OnHV3Class(const char *name, + OffHVXClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~OnHV3Class() {}; + ~OffHVXClass() {}; 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_OnHV3_allowed(any);} + {return (static_cast<Agilent4uhv *>(dev))->is_OffHVX_allowed(any);} }; -// Command OnHV4 class definition -class OnHV4Class : public Tango::Command +// Command OnHVX class definition +class OnHVXClass : public Tango::Command { public: - OnHV4Class(const char *name, + OnHVXClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -530,15 +392,15 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - OnHV4Class(const char *name, + OnHVXClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~OnHV4Class() {}; + ~OnHVXClass() {}; 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_OnHV4_allowed(any);} + {return (static_cast<Agilent4uhv *>(dev))->is_OnHVX_allowed(any);} }; diff --git a/src/Agilent4uhvDynAttrUtils.cpp b/src/Agilent4uhvDynAttrUtils.cpp index 2f991201d1fc3fbaef8c55c827b4daa855510ca0..99dc6200b47f5c7c9fbefd239c010969f50b4ec0 100644 --- a/src/Agilent4uhvDynAttrUtils.cpp +++ b/src/Agilent4uhvDynAttrUtils.cpp @@ -1,5 +1,4 @@ /*----- PROTECTED REGION ID(Agilent4uhv::DynAttrUtils.cpp) ENABLED START -----*/ -static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.6 2014-10-15 13:23:58 alessio Exp $"; //============================================================================= // // file : Agilent4uhvDynAttrUtils.cpp @@ -46,11 +45,11 @@ static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.6 2014-10-15 13 //================================================================ // HVX | Tango::DevState Scalar // DeviceNumberX | Tango::DevLong Scalar -// PowerMaxX | Tango::DevUShort Scalar -// VTargetX | Tango::DevUShort Scalar -// IProtectX | Tango::DevUShort Scalar +// PowerMaxX | Tango::DevLong Scalar +// VTargetX | Tango::DevLong Scalar +// IProtectX | Tango::DevLong Scalar // SetPointX | Tango::DevDouble Scalar -// TemperatureHVX | Tango::DevFloat Scalar +// TemperatureHVX | Tango::DevDouble Scalar // VoltageX | Tango::DevDouble Scalar // CurrentX | Tango::DevDouble Scalar // PressureX | Tango::DevDouble Scalar @@ -72,6 +71,8 @@ static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.6 2014-10-15 13 // // Command name | Method name //================================================================ +// OffHVX | off_hvx +// OnHVX | on_hvx //================================================================ namespace Agilent4uhv_ns @@ -242,7 +243,7 @@ void Agilent4uhv::add_PowerMaxX_dynamic_attribute(string attname) void Agilent4uhv::remove_PowerMaxX_dynamic_attribute(string attname) { remove_attribute(attname, true); - map<string,Tango::DevUShort>::iterator ite; + map<string,Tango::DevLong>::iterator ite; if ((ite=PowerMaxX_data.find(attname))!=PowerMaxX_data.end()) { /*----- PROTECTED REGION ID(Agilent4uhv::remove_PowerMaxX_dynamic_attribute) ENABLED START -----*/ @@ -265,12 +266,12 @@ void Agilent4uhv::add_VTargetX_dynamic_attribute(string attname) Tango::UserDefaultAttrProp vtargetx_prop; // description not set for VTargetX // label not set for VTargetX - vtargetx_prop.set_unit("kV"); + vtargetx_prop.set_unit("V"); // standard_unit not set for VTargetX // display_unit not set for VTargetX // format not set for VTargetX - vtargetx_prop.set_max_value("7"); - vtargetx_prop.set_min_value("3"); + vtargetx_prop.set_max_value("7000"); + vtargetx_prop.set_min_value("3000"); // max_alarm not set for VTargetX // min_alarm not set for VTargetX // max_warning not set for VTargetX @@ -299,7 +300,7 @@ void Agilent4uhv::add_VTargetX_dynamic_attribute(string attname) void Agilent4uhv::remove_VTargetX_dynamic_attribute(string attname) { remove_attribute(attname, true); - map<string,Tango::DevUShort>::iterator ite; + map<string,Tango::DevLong>::iterator ite; if ((ite=VTargetX_data.find(attname))!=VTargetX_data.end()) { /*----- PROTECTED REGION ID(Agilent4uhv::remove_VTargetX_dynamic_attribute) ENABLED START -----*/ @@ -356,7 +357,7 @@ void Agilent4uhv::add_IProtectX_dynamic_attribute(string attname) void Agilent4uhv::remove_IProtectX_dynamic_attribute(string attname) { remove_attribute(attname, true); - map<string,Tango::DevUShort>::iterator ite; + map<string,Tango::DevLong>::iterator ite; if ((ite=IProtectX_data.find(attname))!=IProtectX_data.end()) { /*----- PROTECTED REGION ID(Agilent4uhv::remove_IProtectX_dynamic_attribute) ENABLED START -----*/ @@ -470,7 +471,7 @@ void Agilent4uhv::add_TemperatureHVX_dynamic_attribute(string attname) void Agilent4uhv::remove_TemperatureHVX_dynamic_attribute(string attname) { remove_attribute(attname, true); - map<string,Tango::DevFloat>::iterator ite; + map<string,Tango::DevDouble>::iterator ite; if ((ite=TemperatureHVX_data.find(attname))!=TemperatureHVX_data.end()) { /*----- PROTECTED REGION ID(Agilent4uhv::remove_TemperatureHVX_dynamic_attribute) ENABLED START -----*/ @@ -1162,9 +1163,9 @@ Tango::DevLong *Agilent4uhv::get_DeviceNumberX_data_ptr(string &name) * parameter attname: the specified attribute name. */ //-------------------------------------------------------- -Tango::DevUShort *Agilent4uhv::get_PowerMaxX_data_ptr(string &name) +Tango::DevLong *Agilent4uhv::get_PowerMaxX_data_ptr(string &name) { - map<string,Tango::DevUShort>::iterator ite; + map<string,Tango::DevLong>::iterator ite; if ((ite=PowerMaxX_data.find(name))==PowerMaxX_data.end()) { TangoSys_OMemStream tms; @@ -1183,9 +1184,9 @@ Tango::DevUShort *Agilent4uhv::get_PowerMaxX_data_ptr(string &name) * parameter attname: the specified attribute name. */ //-------------------------------------------------------- -Tango::DevUShort *Agilent4uhv::get_VTargetX_data_ptr(string &name) +Tango::DevLong *Agilent4uhv::get_VTargetX_data_ptr(string &name) { - map<string,Tango::DevUShort>::iterator ite; + map<string,Tango::DevLong>::iterator ite; if ((ite=VTargetX_data.find(name))==VTargetX_data.end()) { TangoSys_OMemStream tms; @@ -1204,9 +1205,9 @@ Tango::DevUShort *Agilent4uhv::get_VTargetX_data_ptr(string &name) * parameter attname: the specified attribute name. */ //-------------------------------------------------------- -Tango::DevUShort *Agilent4uhv::get_IProtectX_data_ptr(string &name) +Tango::DevLong *Agilent4uhv::get_IProtectX_data_ptr(string &name) { - map<string,Tango::DevUShort>::iterator ite; + map<string,Tango::DevLong>::iterator ite; if ((ite=IProtectX_data.find(name))==IProtectX_data.end()) { TangoSys_OMemStream tms; @@ -1246,9 +1247,9 @@ Tango::DevDouble *Agilent4uhv::get_SetPointX_data_ptr(string &name) * parameter attname: the specified attribute name. */ //-------------------------------------------------------- -Tango::DevFloat *Agilent4uhv::get_TemperatureHVX_data_ptr(string &name) +Tango::DevDouble *Agilent4uhv::get_TemperatureHVX_data_ptr(string &name) { - map<string,Tango::DevFloat>::iterator ite; + map<string,Tango::DevDouble>::iterator ite; if ((ite=TemperatureHVX_data.find(name))==TemperatureHVX_data.end()) { TangoSys_OMemStream tms; @@ -1497,5 +1498,63 @@ Tango::DevLong *Agilent4uhv::get_StatMaskX_data_ptr(string &name) // Add/Remove dynamic command methods //============================================================= +//-------------------------------------------------------- +/** + * 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); +} +//-------------------------------------------------------- +/** + * 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); +} } // namespace diff --git a/src/Agilent4uhvStateMachine.cpp b/src/Agilent4uhvStateMachine.cpp index 23e2e390500a8b9f4e94f249ef5bc9e0116dee9d..d38264bc273ee984c0f11c568ff46635d0f66eea 100644 --- a/src/Agilent4uhvStateMachine.cpp +++ b/src/Agilent4uhvStateMachine.cpp @@ -1,5 +1,4 @@ /*----- PROTECTED REGION ID(Agilent4uhvStateMachine.cpp) ENABLED START -----*/ -static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.9 2018-05-10 08:04:51 alessio Exp $"; //============================================================================= // // file : Agilent4uhvStateMachine.cpp @@ -46,7 +45,6 @@ static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.9 2018-05-10 08 // ALARM | // UNKNOWN | // FAULT | -// INIT | namespace Agilent4uhv_ns @@ -69,7 +67,6 @@ bool Agilent4uhv::is_Model_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::ModelStateAllowed_READ) ENABLED START -----*/ @@ -96,7 +93,6 @@ bool Agilent4uhv::is_SerialNumber_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::SerialNumberStateAllowed_READ) ENABLED START -----*/ @@ -111,11 +107,11 @@ bool Agilent4uhv::is_SerialNumber_allowed(TANGO_UNUSED(Tango::AttReqType type)) //-------------------------------------------------------- /** - * Method : Agilent4uhv::is_Temperature_allowed() - * Description : Execution allowed for Temperature attribute + * Method : Agilent4uhv::is_TemperatureFan_allowed() + * Description : Execution allowed for TemperatureFan attribute */ //-------------------------------------------------------- -bool Agilent4uhv::is_Temperature_allowed(TANGO_UNUSED(Tango::AttReqType type)) +bool Agilent4uhv::is_TemperatureFan_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // Check access type. @@ -123,12 +119,11 @@ bool Agilent4uhv::is_Temperature_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::TemperatureStateAllowed_READ) ENABLED START -----*/ - - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::TemperatureStateAllowed_READ + /*----- PROTECTED REGION ID(Agilent4uhv::TemperatureFanStateAllowed_READ) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::TemperatureFanStateAllowed_READ return false; } return true; @@ -150,7 +145,6 @@ bool Agilent4uhv::is_HVX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::HVXStateAllowed_READ) ENABLED START -----*/ @@ -176,7 +170,6 @@ bool Agilent4uhv::is_DeviceNumberX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::DeviceNumberXStateAllowed_WRITE) ENABLED START -----*/ @@ -193,7 +186,6 @@ bool Agilent4uhv::is_DeviceNumberX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::DeviceNumberXStateAllowed_READ) ENABLED START -----*/ @@ -219,7 +211,6 @@ bool Agilent4uhv::is_PowerMaxX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::PowerMaxXStateAllowed_WRITE) ENABLED START -----*/ @@ -236,7 +227,6 @@ bool Agilent4uhv::is_PowerMaxX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::PowerMaxXStateAllowed_READ) ENABLED START -----*/ @@ -262,7 +252,6 @@ bool Agilent4uhv::is_VTargetX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::VTargetXStateAllowed_WRITE) ENABLED START -----*/ @@ -279,7 +268,6 @@ bool Agilent4uhv::is_VTargetX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::VTargetXStateAllowed_READ) ENABLED START -----*/ @@ -305,7 +293,6 @@ bool Agilent4uhv::is_IProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::IProtectXStateAllowed_WRITE) ENABLED START -----*/ @@ -322,7 +309,6 @@ bool Agilent4uhv::is_IProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::IProtectXStateAllowed_READ) ENABLED START -----*/ @@ -348,7 +334,6 @@ bool Agilent4uhv::is_SetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::SetPointXStateAllowed_WRITE) ENABLED START -----*/ @@ -365,7 +350,6 @@ bool Agilent4uhv::is_SetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::SetPointXStateAllowed_READ) ENABLED START -----*/ @@ -392,7 +376,6 @@ bool Agilent4uhv::is_TemperatureHVX_allowed(TANGO_UNUSED(Tango::AttReqType type) { // 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::TemperatureHVXStateAllowed_READ) ENABLED START -----*/ @@ -419,7 +402,6 @@ bool Agilent4uhv::is_VoltageX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::VoltageXStateAllowed_READ) ENABLED START -----*/ @@ -446,7 +428,6 @@ bool Agilent4uhv::is_CurrentX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::CurrentXStateAllowed_READ) ENABLED START -----*/ @@ -473,7 +454,6 @@ bool Agilent4uhv::is_PressureX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::PressureXStateAllowed_READ) ENABLED START -----*/ @@ -500,7 +480,6 @@ bool Agilent4uhv::is_StateX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::StateXStateAllowed_READ) ENABLED START -----*/ @@ -527,7 +506,6 @@ bool Agilent4uhv::is_StatusX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::StatusXStateAllowed_READ) ENABLED START -----*/ @@ -553,7 +531,6 @@ bool Agilent4uhv::is_AutoStartX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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 -----*/ @@ -570,7 +547,6 @@ bool Agilent4uhv::is_AutoStartX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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 -----*/ @@ -596,7 +572,6 @@ bool Agilent4uhv::is_ProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::ProtectXStateAllowed_WRITE) ENABLED START -----*/ @@ -613,7 +588,6 @@ bool Agilent4uhv::is_ProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::ProtectXStateAllowed_READ) ENABLED START -----*/ @@ -639,7 +613,6 @@ bool Agilent4uhv::is_FixedStepX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::FixedStepXStateAllowed_WRITE) ENABLED START -----*/ @@ -656,7 +629,6 @@ bool Agilent4uhv::is_FixedStepX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::FixedStepXStateAllowed_READ) ENABLED START -----*/ @@ -683,7 +655,6 @@ bool Agilent4uhv::is_StatusSetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type { // 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::StatusSetPointXStateAllowed_READ) ENABLED START -----*/ @@ -710,7 +681,6 @@ bool Agilent4uhv::is_InterlockStatusX_allowed(TANGO_UNUSED(Tango::AttReqType typ { // 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 -----*/ @@ -737,7 +707,6 @@ bool Agilent4uhv::is_StatMaskX_allowed(TANGO_UNUSED(Tango::AttReqType type)) { // 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::StatMaskXStateAllowed_READ) ENABLED START -----*/ @@ -757,146 +726,19 @@ bool Agilent4uhv::is_StatMaskX_allowed(TANGO_UNUSED(Tango::AttReqType type)) //-------------------------------------------------------- /** - * 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 + * Method : Agilent4uhv::is_OffHVX_allowed() + * Description : Execution allowed for OffHVX attribute */ //-------------------------------------------------------- -bool Agilent4uhv::is_OnHV3_allowed(TANGO_UNUSED(const CORBA::Any &any)) +bool Agilent4uhv::is_OffHVX_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::OnHV3StateAllowed) ENABLED START -----*/ + /*----- PROTECTED REGION ID(Agilent4uhv::OffHVXStateAllowed) ENABLED START -----*/ - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OnHV3StateAllowed + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OffHVXStateAllowed return false; } return true; @@ -904,20 +746,19 @@ bool Agilent4uhv::is_OnHV3_allowed(TANGO_UNUSED(const CORBA::Any &any)) //-------------------------------------------------------- /** - * Method : Agilent4uhv::is_OnHV4_allowed() - * Description : Execution allowed for OnHV4 attribute + * Method : Agilent4uhv::is_OnHVX_allowed() + * Description : Execution allowed for OnHVX attribute */ //-------------------------------------------------------- -bool Agilent4uhv::is_OnHV4_allowed(TANGO_UNUSED(const CORBA::Any &any)) +bool Agilent4uhv::is_OnHVX_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::OnHV4StateAllowed) ENABLED START -----*/ + /*----- PROTECTED REGION ID(Agilent4uhv::OnHVXStateAllowed) ENABLED START -----*/ - /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OnHV4StateAllowed + /*----- PROTECTED REGION END -----*/ // Agilent4uhv::OnHVXStateAllowed return false; } return true; diff --git a/src/MultiClassesFactory.cpp b/src/MultiClassesFactory.cpp index d0151da165182ee76e3ec74fbf7ea2e52a2004f8..c80d9289d15f18cbefbc3626505a63b2da1660fc 100644 --- a/src/MultiClassesFactory.cpp +++ b/src/MultiClassesFactory.cpp @@ -1,4 +1,3 @@ -static const char *RcsId = "$Id: MultiClassesFactory.cpp,v 1.4 2018-05-10 08:04:51 alessio Exp $"; //============================================================================= // // file : MultiClassessFactory.cpp diff --git a/src/main.cpp b/src/main.cpp index 287d209b9ab6479541953e95ea7edd5798f5ae6b..5f4db5ce88a4d6697a2e534b74304ac7a75371eb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,4 @@ /*----- PROTECTED REGION ID(Agilent4uhv::main.cpp) ENABLED START -----*/ -static const char *RcsId = "$Id: main.cpp,v 1.2 2014-10-09 13:24:10 alessio Exp $"; //============================================================================= // // file : main.cpp