From d39bdba0f948d0a032a7e99771ded0d7a2d815cf Mon Sep 17 00:00:00 2001 From: Jade PHAM <jade.pham@synchrotron-soleil.fr> Date: Thu, 24 Oct 2024 18:01:21 +0200 Subject: [PATCH] add TCP comm mode used by Moxa serial ethernet --- conanfile.py | 2 +- doc/doc_html/AttrelectrometerChannel.html | 172 + doc/doc_html/Attributes.html | 171 +- doc/doc_html/Attrrange1.html | 168 + doc/doc_html/Attrrange2.html | 168 + doc/doc_html/ClassDescription.html | 85 + doc/doc_html/CmdClearRegisters.html | 54 + doc/doc_html/CmdGetElectrometerTypeStr.html | 54 + doc/doc_html/CmdGetGain.html | 54 + doc/doc_html/CmdGetHzFilter.html | 54 + doc/doc_html/CmdGetMode.html | 54 + doc/doc_html/CmdGetPolarity.html | 54 + doc/doc_html/CmdGetRange.html | 54 + doc/doc_html/CmdLocal.html | 54 + doc/doc_html/CmdMCCE2_OFF.html | 54 + doc/doc_html/CmdMCCE2_ON.html | 54 + doc/doc_html/CmdRangeDOWN.html | 54 + doc/doc_html/CmdRangeUP.html | 54 + doc/doc_html/CmdRemote.html | 54 + doc/doc_html/CmdReset.html | 54 + doc/doc_html/CmdSetGain.html | 54 + doc/doc_html/CmdSetHzFilter.html | 54 + doc/doc_html/CmdSetLeakageZeroV2Function.html | 54 + doc/doc_html/CmdSetMeasureFunction.html | 54 + doc/doc_html/CmdSetOffsetZeroV1Function.html | 54 + doc/doc_html/CmdSetPolarity.html | 54 + doc/doc_html/CmdSetRange.html | 54 + doc/doc_html/CmdSetTestFunction.html | 54 + doc/doc_html/CmdSetZeroVFFunction.html | 54 + doc/doc_html/CmdState.html | 55 + doc/doc_html/CmdStatus.html | 55 + doc/doc_html/Commands.html | 195 + doc/doc_html/FullDocument.html | 2144 +++++++ doc/doc_html/Properties.html | 197 +- doc/doc_html/States.html | 33 + doc/doc_html/TitleBanner.html | 14 + doc/doc_html/index.html | 171 +- pom.xml | 2 +- src/ClassFactory.cpp | 2 + src/MCCE2Electrometers.cpp | 5354 +++++++++-------- src/MCCE2Electrometers.h | 910 ++- src/MCCE2Electrometers.xmi | 324 + src/MCCE2ElectrometersClass.cpp | 1814 +++--- src/MCCE2ElectrometersClass.h | 476 +- src/MCCE2ElectrometersStateMachine.cpp | 756 +-- src/Makefile | 142 + src/Makefile.VC | 4 +- src/Makefile.testW32 | 4 +- src/TangoClassID.txt | 22 +- src/main.cpp | 51 +- 50 files changed, 9728 insertions(+), 5005 deletions(-) create mode 100644 doc/doc_html/AttrelectrometerChannel.html create mode 100644 doc/doc_html/Attrrange1.html create mode 100644 doc/doc_html/Attrrange2.html create mode 100644 doc/doc_html/ClassDescription.html create mode 100644 doc/doc_html/CmdClearRegisters.html create mode 100644 doc/doc_html/CmdGetElectrometerTypeStr.html create mode 100644 doc/doc_html/CmdGetGain.html create mode 100644 doc/doc_html/CmdGetHzFilter.html create mode 100644 doc/doc_html/CmdGetMode.html create mode 100644 doc/doc_html/CmdGetPolarity.html create mode 100644 doc/doc_html/CmdGetRange.html create mode 100644 doc/doc_html/CmdLocal.html create mode 100644 doc/doc_html/CmdMCCE2_OFF.html create mode 100644 doc/doc_html/CmdMCCE2_ON.html create mode 100644 doc/doc_html/CmdRangeDOWN.html create mode 100644 doc/doc_html/CmdRangeUP.html create mode 100644 doc/doc_html/CmdRemote.html create mode 100644 doc/doc_html/CmdReset.html create mode 100644 doc/doc_html/CmdSetGain.html create mode 100644 doc/doc_html/CmdSetHzFilter.html create mode 100644 doc/doc_html/CmdSetLeakageZeroV2Function.html create mode 100644 doc/doc_html/CmdSetMeasureFunction.html create mode 100644 doc/doc_html/CmdSetOffsetZeroV1Function.html create mode 100644 doc/doc_html/CmdSetPolarity.html create mode 100644 doc/doc_html/CmdSetRange.html create mode 100644 doc/doc_html/CmdSetTestFunction.html create mode 100644 doc/doc_html/CmdSetZeroVFFunction.html create mode 100644 doc/doc_html/CmdState.html create mode 100644 doc/doc_html/CmdStatus.html create mode 100644 doc/doc_html/Commands.html create mode 100644 doc/doc_html/FullDocument.html create mode 100644 doc/doc_html/States.html create mode 100644 doc/doc_html/TitleBanner.html create mode 100644 src/MCCE2Electrometers.xmi create mode 100644 src/Makefile diff --git a/conanfile.py b/conanfile.py index 1a2608a..d6668ef 100644 --- a/conanfile.py +++ b/conanfile.py @@ -3,7 +3,7 @@ from conan import ConanFile class MCCE2ElectrometersRecipe(ConanFile): name = "mcce2electrometers" executable = "ds_MCCE2Electrometers" - version = "2.2.10" + version = "2.3.0" package_type = "application" user = "soleil" python_requires = "base/[>=1.0]@soleil/stable" diff --git a/doc/doc_html/AttrelectrometerChannel.html b/doc/doc_html/AttrelectrometerChannel.html new file mode 100644 index 0000000..1e71555 --- /dev/null +++ b/doc/doc_html/AttrelectrometerChannel.html @@ -0,0 +1,172 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Attribute electrometerChannel </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Attribute electrometerChannel : </b></u></font> +<ul> + MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first). +</ul> +<br><br><br> +<Table Border=0 Cellpadding=0 CELLSPACING=20> + <TR> + <TD ALIGN="left" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td> + </tr> + <tr> + <td> Attribute Type </td> + <td> Scalar </td> + </tr> + <tr> + <td> R/W Type </td> + <td> READ_WRITE </td> + </tr> + <tr> + <td> Data Type </td> + <td> Tango::DEV_USHORT </td> + </tr> + <tr> + <td> Display Level </td> + <td> OPERATOR </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + </tr> + <tr> + <td> Memorized </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Read allowed for </td> + <td> All states </td> + </tr> + <tr> + <td> Write allowed for </td> + <td> All states </td> + </tr> + </table> + </td> + <TD ALIGN="Center" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td> + </tr> + <tr> + <td> label </td> + <td> electrometer channel </td> + </tr> + <tr> + <td> unit </td> + <td> </td> + </tr> + <tr> + <td> standard unit </td> + <td> </td> + </tr> + <tr> + <td> display unit </td> + <td> </td> + </tr> + <tr> + <td> format </td> + <td> %1.0d </td> + </tr> + <tr> + <td> max_value </td> + <td> </td> + </tr> + <tr> + <td> min_value </td> + <td> </td> + </tr> + <tr> + <td> max_alarm </td> + <td> </td> + </tr> + <tr> + <td> min_alarm </td> + <td> </td> + </tr> + <tr> + <td> max_warning </td> + <td> </td> + </tr> + <tr> + <td> min_warning </td> + <td> </td> + </tr> + <tr> + <td> delta_time </td> + <td> </td> + </tr> + <tr> + <td> delta_val </td> + <td> </td> + </tr> + </table> + </td> + <TD ALIGN="Right" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td> + </tr> + <tr> + <td> Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Archive Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Push Change event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push Archive event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push DataReady event by user code </td> + <td> Not set </td> + </tr> + </table> + </td> + </TR> +</table> +</body> +</html> diff --git a/doc/doc_html/Attributes.html b/doc/doc_html/Attributes.html index d948bd9..318e72b 100644 --- a/doc/doc_html/Attributes.html +++ b/doc/doc_html/Attributes.html @@ -1,120 +1,57 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> -<HTML> -<HEAD> -<Title> Tango Device Server User's Guide </Title> -</HEAD> -<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000"> - -<P><!-------TITLE------></P> - -<TABLE BORDER="0" WIDTH="100%"> - <TR> - <TD ALIGN="left"> - <A HREF="http://www.esrf.fr/" TARGET=new> - <IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0 Height="60"></A> - </Td> - <TD ALIGN="center"> - <A HREF="http://www.elettra.trieste.it/" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0 Height="60"></A> - - </Td> - <TD ALIGN="center"> - <A HREF="http://www.synchrotron-soleil.fr/" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0 Height="60"></A> - </Td> - <TD ALIGN="right"> - <A HREF="http://www.cells.es/" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/alba.jpg" BORDER=0 Height="54"></A> - </Td> - <TD ALIGN="right"> - <A HREF="http://www.desy.de/html/home/index_eng.html" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/desy.gif" BORDER=0 Height="60"></A> - </Td> - <Td> - <H2><FONT COLOR="#7F00FF"> - <Center><A HREF="http://www.tango-controls.org/" TARGET="_top"> - TANGO </a> <Br> Device Server - </Center></FONT> - </Td> - </TR> -</TABLE> - -<HR WIDTH="100%"></H5> -<Br> -<center> -<h1> -Novelec MCCE-2 Electrometers <Br> -Device Attributes Description <Br> <Br> -MCCE2Electrometers Class <Br> -</h1> -<b> -Revision: - Author: xavela -</b> -</center> - - -<Br> -<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> -<Td COLSPAN=4> <Font Size=+2><Center><b>Scalar Attributes</b></td></Font></Center> -<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> -<Td><Center><b>Attribute name</b></td></Center> -<Td><Center><b>Data Type</b></td></Center> -<Td><Center><b>R/W Type</b></td></Center> -<Td><Center><b>Expert</b></td></Center> -<Tr><Td><b>electrometerChannel</b>: <Font Size=-1>MCCE2 electrometer have two channels to support two amplifiers. WARN : default is 0 (please set this value first).</Font></Td> -<Td><Center><Font Size=-1>DEV_USHORT</Font></Center></Td><Td><Center><Font Size=-1>READ_WRITE</Font></Center></Td><Td><Center><Font Size=-1>No</Font></Center></Td></Tr> - -<Tr><Td><b>range1</b>: <Font Size=-1>The channel one MCCE2 range.</Font></Td> -<Td><Center><Font Size=-1>DEV_STRING</Font></Center></Td><Td><Center><Font Size=-1>READ</Font></Center></Td><Td><Center><Font Size=-1>No</Font></Center></Td></Tr> - -<Tr><Td><b>range2</b>: <Font Size=-1>The channel two MCCE range.</Font></Td> -<Td><Center><Font Size=-1>DEV_STRING</Font></Center></Td><Td><Center><Font Size=-1>READ</Font></Center></Td><Td><Center><Font Size=-1>No</Font></Center></Td></Tr> - -</Table> -</Center> -<Br><Br><Br><Br><Br> - -<!--- html Footer ---> - -<Center> -<Font size=-1> -<br> -<br> -<TABLE BORDER="1" WIDTH="100%"> - <Tr> - <!--- Hosted by Sourceforge ---> - <Td Align="Center"> - <Font size=-1> - <b>TANGO</b> is an open source project hosted by :<br> - <A href="http://sourceforge.net" Target="new"> - <IMG title="Sourceforge logo" - alt="Sourceforge logo small" - src="http://www.esrf.fr/computing/cs/tango/sourceforge.gif" - border=0> </a> - </Font> - </Td> - <!--- 2 Sourceforge Repositories ---> - <Td Align="Center"> - <Font size=-1> - Core and Tools : - <a href="http://tango-cs.cvs.sourceforge.net/tango-cs/" Target="new"> - CVS repository</a> on - <a href="https://sourceforge.net/projects/tango-cs" Target=new> - tango-cs project</a> - - <br> - - Device Servers : - <a href="http://tango-ds.cvs.sourceforge.net/tango-ds/" Target="new"> - CVS repository</a> on - <a href="https://sourceforge.net/projects/tango-ds" Target=new> - tango-ds project</a> - </Font> - </Td> - </Tr> -</Table> -</Font> -</Center> +<html> +<head> +<title> MCCE2Electrometers Tango Class Attributes </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=8> <font size=+1> <center><b> MCCE2Electrometers Class Attributes </b></font></center></td> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td> <center><b> Name </b></center> </td> + <td> <center><b> Inherited </b></center> </td> + <td> <center><b> Abstract </b></center> </td> + <td> <center><b> Attr. type </b></center> </td> + <td> <center><b> R/W type </b></center> </td> + <td> <center><b> Data type </b></center> </td> + <td> <center><b> Level </b></center> </td> + <td> <center><b> Description </b></center> </td> + </tr> + <tr> + <td> <a href="AttrelectrometerChannel.html"> electrometerChannel </a> </td> + <td> false </td> + <td> false </td> + <td> Scalar </td> + <td> READ_WRITE </td> + <td> Tango::DEV_USHORT </td> + <td> OPERATOR </td> + <td> MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first). </td> + </tr> + <tr> + <td> <a href="Attrrange1.html"> range1 </a> </td> + <td> false </td> + <td> false </td> + <td> Scalar </td> + <td> READ </td> + <td> Tango::DEV_STRING </td> + <td> OPERATOR </td> + <td> The channel one MCCE2 range. </td> + </tr> + <tr> + <td> <a href="Attrrange2.html"> range2 </a> </td> + <td> false </td> + <td> false </td> + <td> Scalar </td> + <td> READ </td> + <td> Tango::DEV_STRING </td> + <td> OPERATOR </td> + <td> The channel two MCCE range. </td> + </tr> +</table> +<br><br> +<hr> +<br><br> +<font size="+1"><u><b> There is no dynamic attribute defined. </b></u></font> </body> </html> diff --git a/doc/doc_html/Attrrange1.html b/doc/doc_html/Attrrange1.html new file mode 100644 index 0000000..643b630 --- /dev/null +++ b/doc/doc_html/Attrrange1.html @@ -0,0 +1,168 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Attribute range1 </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Attribute range1 : </b></u></font> +<ul> + The channel one MCCE2 range. +</ul> +<br><br><br> +<Table Border=0 Cellpadding=0 CELLSPACING=20> + <TR> + <TD ALIGN="left" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td> + </tr> + <tr> + <td> Attribute Type </td> + <td> Scalar </td> + </tr> + <tr> + <td> R/W Type </td> + <td> READ </td> + </tr> + <tr> + <td> Data Type </td> + <td> Tango::DEV_STRING </td> + </tr> + <tr> + <td> Display Level </td> + <td> OPERATOR </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + </tr> + <tr> + <td> Memorized </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Read allowed for </td> + <td> All states </td> + </tr> + </table> + </td> + <TD ALIGN="Center" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td> + </tr> + <tr> + <td> label </td> + <td> range1 </td> + </tr> + <tr> + <td> unit </td> + <td> </td> + </tr> + <tr> + <td> standard unit </td> + <td> </td> + </tr> + <tr> + <td> display unit </td> + <td> </td> + </tr> + <tr> + <td> format </td> + <td> %s </td> + </tr> + <tr> + <td> max_value </td> + <td> </td> + </tr> + <tr> + <td> min_value </td> + <td> </td> + </tr> + <tr> + <td> max_alarm </td> + <td> </td> + </tr> + <tr> + <td> min_alarm </td> + <td> </td> + </tr> + <tr> + <td> max_warning </td> + <td> </td> + </tr> + <tr> + <td> min_warning </td> + <td> </td> + </tr> + <tr> + <td> delta_time </td> + <td> </td> + </tr> + <tr> + <td> delta_val </td> + <td> </td> + </tr> + </table> + </td> + <TD ALIGN="Right" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td> + </tr> + <tr> + <td> Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Archive Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Push Change event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push Archive event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push DataReady event by user code </td> + <td> Not set </td> + </tr> + </table> + </td> + </TR> +</table> +</body> +</html> diff --git a/doc/doc_html/Attrrange2.html b/doc/doc_html/Attrrange2.html new file mode 100644 index 0000000..e5e4cea --- /dev/null +++ b/doc/doc_html/Attrrange2.html @@ -0,0 +1,168 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Attribute range2 </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Attribute range2 : </b></u></font> +<ul> + The channel two MCCE range. +</ul> +<br><br><br> +<Table Border=0 Cellpadding=0 CELLSPACING=20> + <TR> + <TD ALIGN="left" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td> + </tr> + <tr> + <td> Attribute Type </td> + <td> Scalar </td> + </tr> + <tr> + <td> R/W Type </td> + <td> READ </td> + </tr> + <tr> + <td> Data Type </td> + <td> Tango::DEV_STRING </td> + </tr> + <tr> + <td> Display Level </td> + <td> OPERATOR </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + </tr> + <tr> + <td> Memorized </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Read allowed for </td> + <td> All states </td> + </tr> + </table> + </td> + <TD ALIGN="Center" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td> + </tr> + <tr> + <td> label </td> + <td> range2 </td> + </tr> + <tr> + <td> unit </td> + <td> </td> + </tr> + <tr> + <td> standard unit </td> + <td> </td> + </tr> + <tr> + <td> display unit </td> + <td> </td> + </tr> + <tr> + <td> format </td> + <td> %s </td> + </tr> + <tr> + <td> max_value </td> + <td> </td> + </tr> + <tr> + <td> min_value </td> + <td> </td> + </tr> + <tr> + <td> max_alarm </td> + <td> </td> + </tr> + <tr> + <td> min_alarm </td> + <td> </td> + </tr> + <tr> + <td> max_warning </td> + <td> </td> + </tr> + <tr> + <td> min_warning </td> + <td> </td> + </tr> + <tr> + <td> delta_time </td> + <td> </td> + </tr> + <tr> + <td> delta_val </td> + <td> </td> + </tr> + </table> + </td> + <TD ALIGN="Right" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td> + </tr> + <tr> + <td> Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Archive Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Push Change event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push Archive event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push DataReady event by user code </td> + <td> Not set </td> + </tr> + </table> + </td> + </TR> +</table> +</body> +</html> diff --git a/doc/doc_html/ClassDescription.html b/doc/doc_html/ClassDescription.html new file mode 100644 index 0000000..19880ba --- /dev/null +++ b/doc/doc_html/ClassDescription.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Description </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<ul> + <br><br><br> + <table border="0" width="100%"> + <Tr> + <td> <font size="+1"><u><b> MCCE2Electrometers Class Identification : </b></u></font> </td> + <td> <font size="+1"><u><b> MCCE2Electrometers Class Inheritance : </b></u></font> </td> + </tr> + <td><ul> + <table border="0"> + <Tr> + <td> Contact </td><td> : at synchrotron-soleil.fr - xavier.elattaoui</td> + </tr> + <tr> + <td> Class Family </td><td> : Acquisition + </tr> + <tr> + <td> Platform </td><td> : All Platforms </td> + </tr> + <tr> + <td> Bus </td><td> : Serial Line </td> + </tr> + <tr> + <td> Manufacturer </td><td> : SAPHYMO </td> + </tr> + <tr> + <td> Manufacturer ref.</td><td> : MCCE-2 </td> + </tr> + </Table> + </ul></td> + <td> + <ul><li> <a href="http://www.esrf.fr/computing/cs/tango/tango_doc/kernel_doc/cpp_doc/" target="new"> Tango::DeviceImpl</a></li> + <ul> <li> MCCE2Electrometers</li> + <br> + <br> + <br> + <br> + <br> + </td> + </Table> + <br><br><br> + <font size="+1"><u><b> MCCE2Electrometers Class Description : </b></u></font> + <br><br> + <ul> + This class allows you to control all MCCE-2 Novelec electrometers<Br> + through a Serial bus.<Br> + <br> Supported types :<Br> + <br> Novelec Electrometers : MCCE2 + + <Br> + <center> + <h1> + Novelec MCCE-2 Electrometers <Br> + Device Description <Br> <Br> + MCCE2Electrometers Class <Br> + </h1> + <b> + Revision: - Author: + </b> + </center> + + + <Center> + This class allows you to control all MCCE-2 Novelec electrometers + through a Serial bus. + <br> Supported types : + <br> Novelec Electrometers : MCCE2 + <Br> + <Br> + </Center> + + <!--- /*PROTECTED REGION ID(index.html) ENABLED START*/ ---> + <!--- Add your own documentation, pictures, links,.... ---> + + <!--- /*PROTECTED REGION END*/ ---> + + </ul> +</ul> +</body> +</html> diff --git a/doc/doc_html/CmdClearRegisters.html b/doc/doc_html/CmdClearRegisters.html new file mode 100644 index 0000000..351015a --- /dev/null +++ b/doc/doc_html/CmdClearRegisters.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command ClearRegisters </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command ClearRegisters : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> ClearRegisters Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdGetElectrometerTypeStr.html b/doc/doc_html/CmdGetElectrometerTypeStr.html new file mode 100644 index 0000000..d7a47dc --- /dev/null +++ b/doc/doc_html/CmdGetElectrometerTypeStr.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command GetElectrometerTypeStr </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command GetElectrometerTypeStr : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetElectrometerTypeStr Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_USHORT </td> + <td> channel number </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_STRING </td> + <td> the electrometer type as string </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command allowed for </td> + <td> All states </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdGetGain.html b/doc/doc_html/CmdGetGain.html new file mode 100644 index 0000000..d29a5e4 --- /dev/null +++ b/doc/doc_html/CmdGetGain.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command GetGain </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command GetGain : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetGain Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_SHORT </td> + <td> The MCCE2 gain </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdGetHzFilter.html b/doc/doc_html/CmdGetHzFilter.html new file mode 100644 index 0000000..bbf9ca2 --- /dev/null +++ b/doc/doc_html/CmdGetHzFilter.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command GetHzFilter </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command GetHzFilter : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetHzFilter Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_SHORT </td> + <td> The MCCE2 cut-off frequency in Hz </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdGetMode.html b/doc/doc_html/CmdGetMode.html new file mode 100644 index 0000000..8326099 --- /dev/null +++ b/doc/doc_html/CmdGetMode.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command GetMode </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command GetMode : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetMode Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_STRING </td> + <td> The electrometer mode (MEASURE, LEAKAGE ...) </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdGetPolarity.html b/doc/doc_html/CmdGetPolarity.html new file mode 100644 index 0000000..77f84bb --- /dev/null +++ b/doc/doc_html/CmdGetPolarity.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command GetPolarity </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command GetPolarity : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetPolarity Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_STRING </td> + <td> The electrometer polarity </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdGetRange.html b/doc/doc_html/CmdGetRange.html new file mode 100644 index 0000000..fbf6d3f --- /dev/null +++ b/doc/doc_html/CmdGetRange.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command GetRange </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command GetRange : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetRange Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_STRING </td> + <td> The actual electrometer range </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdLocal.html b/doc/doc_html/CmdLocal.html new file mode 100644 index 0000000..734206a --- /dev/null +++ b/doc/doc_html/CmdLocal.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command Local </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command Local : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Local Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdMCCE2_OFF.html b/doc/doc_html/CmdMCCE2_OFF.html new file mode 100644 index 0000000..f6238b0 --- /dev/null +++ b/doc/doc_html/CmdMCCE2_OFF.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command MCCE2_OFF </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command MCCE2_OFF : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> MCCE2_OFF Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdMCCE2_ON.html b/doc/doc_html/CmdMCCE2_ON.html new file mode 100644 index 0000000..a2c20d9 --- /dev/null +++ b/doc/doc_html/CmdMCCE2_ON.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command MCCE2_ON </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command MCCE2_ON : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> MCCE2_ON Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdRangeDOWN.html b/doc/doc_html/CmdRangeDOWN.html new file mode 100644 index 0000000..b247ecc --- /dev/null +++ b/doc/doc_html/CmdRangeDOWN.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command RangeDOWN </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command RangeDOWN : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> RangeDOWN Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdRangeUP.html b/doc/doc_html/CmdRangeUP.html new file mode 100644 index 0000000..3a9a62a --- /dev/null +++ b/doc/doc_html/CmdRangeUP.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command RangeUP </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command RangeUP : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> RangeUP Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdRemote.html b/doc/doc_html/CmdRemote.html new file mode 100644 index 0000000..920aac3 --- /dev/null +++ b/doc/doc_html/CmdRemote.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command Remote </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command Remote : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Remote Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdReset.html b/doc/doc_html/CmdReset.html new file mode 100644 index 0000000..2429a60 --- /dev/null +++ b/doc/doc_html/CmdReset.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command Reset </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command Reset : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Reset Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdSetGain.html b/doc/doc_html/CmdSetGain.html new file mode 100644 index 0000000..355e967 --- /dev/null +++ b/doc/doc_html/CmdSetGain.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command SetGain </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command SetGain : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetGain Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_USHORT </td> + <td> The new MCCE-2 gain </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdSetHzFilter.html b/doc/doc_html/CmdSetHzFilter.html new file mode 100644 index 0000000..a0f8f24 --- /dev/null +++ b/doc/doc_html/CmdSetHzFilter.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command SetHzFilter </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command SetHzFilter : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetHzFilter Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_SHORT </td> + <td> The MCCE2 cut-off frequency in Hz </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdSetLeakageZeroV2Function.html b/doc/doc_html/CmdSetLeakageZeroV2Function.html new file mode 100644 index 0000000..80d62e7 --- /dev/null +++ b/doc/doc_html/CmdSetLeakageZeroV2Function.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command SetLeakageZeroV2Function </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command SetLeakageZeroV2Function : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetLeakageZeroV2Function Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdSetMeasureFunction.html b/doc/doc_html/CmdSetMeasureFunction.html new file mode 100644 index 0000000..75086e2 --- /dev/null +++ b/doc/doc_html/CmdSetMeasureFunction.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command SetMeasureFunction </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command SetMeasureFunction : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetMeasureFunction Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdSetOffsetZeroV1Function.html b/doc/doc_html/CmdSetOffsetZeroV1Function.html new file mode 100644 index 0000000..2cc5d1d --- /dev/null +++ b/doc/doc_html/CmdSetOffsetZeroV1Function.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command SetOffsetZeroV1Function </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command SetOffsetZeroV1Function : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetOffsetZeroV1Function Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdSetPolarity.html b/doc/doc_html/CmdSetPolarity.html new file mode 100644 index 0000000..1021975 --- /dev/null +++ b/doc/doc_html/CmdSetPolarity.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command SetPolarity </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command SetPolarity : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetPolarity Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_STRING </td> + <td> POSITIVE or NEGATIVE </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdSetRange.html b/doc/doc_html/CmdSetRange.html new file mode 100644 index 0000000..44a48f3 --- /dev/null +++ b/doc/doc_html/CmdSetRange.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command SetRange </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command SetRange : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetRange Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_STRING </td> + <td> The range to apply on the electrometer </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdSetTestFunction.html b/doc/doc_html/CmdSetTestFunction.html new file mode 100644 index 0000000..39a0684 --- /dev/null +++ b/doc/doc_html/CmdSetTestFunction.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command SetTestFunction </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command SetTestFunction : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetTestFunction Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdSetZeroVFFunction.html b/doc/doc_html/CmdSetZeroVFFunction.html new file mode 100644 index 0000000..c0a162e --- /dev/null +++ b/doc/doc_html/CmdSetZeroVFFunction.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command SetZeroVFFunction </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command SetZeroVFFunction : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetZeroVFFunction Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdState.html b/doc/doc_html/CmdState.html new file mode 100644 index 0000000..abada21 --- /dev/null +++ b/doc/doc_html/CmdState.html @@ -0,0 +1,55 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command State </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command State : </b></u></font> +<ul> + This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller. +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> State Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> none. </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_STATE </td> + <td> State Code </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> true </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command allowed for </td> + <td> All states </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/CmdStatus.html b/doc/doc_html/CmdStatus.html new file mode 100644 index 0000000..5761dc8 --- /dev/null +++ b/doc/doc_html/CmdStatus.html @@ -0,0 +1,55 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Command Status </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> Command Status : </b></u></font> +<ul> + This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller. +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Status Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> none. </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::CONST_DEV_STRING </td> + <td> Status description </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> true </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command allowed for </td> + <td> All states </td> + <td> .. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/Commands.html b/doc/doc_html/Commands.html new file mode 100644 index 0000000..ef9fdab --- /dev/null +++ b/doc/doc_html/Commands.html @@ -0,0 +1,195 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class Commands </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=5> <font size=+1> <center><b> MCCE2Electrometers Class Commands </b></font></center></td> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td> <center><b> Name </b></center> </td> + <td> <center><b> Input type </b></center> </td> + <td> <center><b> Output type </b></center> </td> + <td> <center><b> Level </b></center> </td> + <td> <center><b> Description </b></center> </td> + </tr> + <tr> + <td> <a href="CmdState.html"> State </a> </td> + <td> DEV_VOID </td> + <td> DEV_STATE </td> + <td> OPERATOR </td> + <td> This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller. </td> + </tr> + <tr> + <td> <a href="CmdStatus.html"> Status </a> </td> + <td> DEV_VOID </td> + <td> CONST_DEV_STRING </td> + <td> OPERATOR </td> + <td> This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller. </td> + </tr> + <tr> + <td> <a href="CmdRangeUP.html"> RangeUP </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdRangeDOWN.html"> RangeDOWN </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetZeroVFFunction.html"> SetZeroVFFunction </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetOffsetZeroV1Function.html"> SetOffsetZeroV1Function </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetLeakageZeroV2Function.html"> SetLeakageZeroV2Function </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetTestFunction.html"> SetTestFunction </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetMeasureFunction.html"> SetMeasureFunction </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdMCCE2_ON.html"> MCCE2_ON </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdMCCE2_OFF.html"> MCCE2_OFF </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdLocal.html"> Local </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdRemote.html"> Remote </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdReset.html"> Reset </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdClearRegisters.html"> ClearRegisters </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetRange.html"> GetRange </a> </td> + <td> DEV_VOID </td> + <td> DEV_STRING </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetRange.html"> SetRange </a> </td> + <td> DEV_STRING </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetMode.html"> GetMode </a> </td> + <td> DEV_VOID </td> + <td> DEV_STRING </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetPolarity.html"> GetPolarity </a> </td> + <td> DEV_VOID </td> + <td> DEV_STRING </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetPolarity.html"> SetPolarity </a> </td> + <td> DEV_STRING </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetHzFilter.html"> GetHzFilter </a> </td> + <td> DEV_VOID </td> + <td> DEV_SHORT </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetHzFilter.html"> SetHzFilter </a> </td> + <td> DEV_SHORT </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetGain.html"> GetGain </a> </td> + <td> DEV_VOID </td> + <td> DEV_SHORT </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetGain.html"> SetGain </a> </td> + <td> DEV_USHORT </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetElectrometerTypeStr.html"> GetElectrometerTypeStr </a> </td> + <td> DEV_USHORT </td> + <td> DEV_STRING </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/FullDocument.html b/doc/doc_html/FullDocument.html new file mode 100644 index 0000000..297240f --- /dev/null +++ b/doc/doc_html/FullDocument.html @@ -0,0 +1,2144 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class User‘s Guide </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<hr> +<br> +<center><h2><u><b> MCCE2Electrometers Tango Cpp Class </b></u></h2></center> <br><br> + <ul> + <font size="+1"><u><b> Contents : </b></u></font> + <ul> + <li> <a href="FullDocument.html#description"> Description </a> + <li> <a href="FullDocument.html#properties"> Properties </a> + <li> <a href="FullDocument.html#commands"> Commands </a> + <ul> + <li> <a href="FullDocument.html#cmdState"> State </a> + <li> <a href="FullDocument.html#cmdStatus"> Status </a> + <li> <a href="FullDocument.html#cmdRangeUP"> RangeUP </a> + <li> <a href="FullDocument.html#cmdRangeDOWN"> RangeDOWN </a> + <li> <a href="FullDocument.html#cmdSetZeroVFFunction"> SetZeroVFFunction </a> + <li> <a href="FullDocument.html#cmdSetOffsetZeroV1Function"> SetOffsetZeroV1Function </a> + <li> <a href="FullDocument.html#cmdSetLeakageZeroV2Function"> SetLeakageZeroV2Function </a> + <li> <a href="FullDocument.html#cmdSetTestFunction"> SetTestFunction </a> + <li> <a href="FullDocument.html#cmdSetMeasureFunction"> SetMeasureFunction </a> + <li> <a href="FullDocument.html#cmdMCCE2_ON"> MCCE2_ON </a> + <li> <a href="FullDocument.html#cmdMCCE2_OFF"> MCCE2_OFF </a> + <li> <a href="FullDocument.html#cmdLocal"> Local </a> + <li> <a href="FullDocument.html#cmdRemote"> Remote </a> + <li> <a href="FullDocument.html#cmdReset"> Reset </a> + <li> <a href="FullDocument.html#cmdClearRegisters"> ClearRegisters </a> + <li> <a href="FullDocument.html#cmdGetRange"> GetRange </a> + <li> <a href="FullDocument.html#cmdSetRange"> SetRange </a> + <li> <a href="FullDocument.html#cmdGetMode"> GetMode </a> + <li> <a href="FullDocument.html#cmdGetPolarity"> GetPolarity </a> + <li> <a href="FullDocument.html#cmdSetPolarity"> SetPolarity </a> + <li> <a href="FullDocument.html#cmdGetHzFilter"> GetHzFilter </a> + <li> <a href="FullDocument.html#cmdSetHzFilter"> SetHzFilter </a> + <li> <a href="FullDocument.html#cmdGetGain"> GetGain </a> + <li> <a href="FullDocument.html#cmdSetGain"> SetGain </a> + <li> <a href="FullDocument.html#cmdGetElectrometerTypeStr"> GetElectrometerTypeStr </a> + </ul> + <li> <a href="FullDocument.html#attributes"> Attributes </a> + <ul> + <li> <a href="FullDocument.html#attrelectrometerChannel"> electrometerChannel </a> + <li> <a href="FullDocument.html#attrrange1"> range1 </a> + <li> <a href="FullDocument.html#attrrange2"> range2 </a> + </ul> + <li> <a href="FullDocument.html#states"> States </a> + </ul> + </ul> + <hr> +<br><br> +<a name="description"> </a> +<ul> + <br><br><br> + <table border="0" width="100%"> + <Tr> + <td> <font size="+1"><u><b> MCCE2Electrometers Class Identification : </b></u></font> </td> + <td> <font size="+1"><u><b> MCCE2Electrometers Class Inheritance : </b></u></font> </td> + </tr> + <td><ul> + <table border="0"> + <Tr> + <td> Contact </td><td> : at synchrotron-soleil.fr - xavier.elattaoui</td> + </tr> + <tr> + <td> Class Family </td><td> : Acquisition + </tr> + <tr> + <td> Platform </td><td> : All Platforms </td> + </tr> + <tr> + <td> Bus </td><td> : Serial Line </td> + </tr> + <tr> + <td> Manufacturer </td><td> : SAPHYMO </td> + </tr> + <tr> + <td> Manufacturer ref.</td><td> : MCCE-2 </td> + </tr> + </Table> + </ul></td> + <td> + <ul><li> <a href="http://www.esrf.fr/computing/cs/tango/tango_doc/kernel_doc/cpp_doc/" target="new"> Tango::DeviceImpl</a></li> + <ul> <li> MCCE2Electrometers</li> + <br> + <br> + <br> + <br> + <br> + </td> + </Table> + <br><br><br> + <font size="+1"><u><b> MCCE2Electrometers Class Description : </b></u></font> + <br><br> + <ul> + This class allows you to control all MCCE-2 Novelec electrometers<Br> + through a Serial bus.<Br> + <br> Supported types :<Br> + <br> Novelec Electrometers : MCCE2 + + <Br> + <center> + <h1> + Novelec MCCE-2 Electrometers <Br> + Device Description <Br> <Br> + MCCE2Electrometers Class <Br> + </h1> + <b> + Revision: - Author: + </b> + </center> + + + <Center> + This class allows you to control all MCCE-2 Novelec electrometers + through a Serial bus. + <br> Supported types : + <br> Novelec Electrometers : MCCE2 + <Br> + <Br> + </Center> + + <!--- /*PROTECTED REGION ID(FullDocument.html) ENABLED START*/ ---> + <!--- Add your own documentation, pictures, links,.... ---> + + <!--- /*PROTECTED REGION END*/ ---> + + </ul> +</ul> +<br><br> +<hr> +<a name="properties"> </a> +<br><br><br> +<font size="+1"><u><b> MCCE2Electrometers Properties : </b></u></font> +<br><br><br> +<font size="+1"><u><b> There is no class properties </b></u></font> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=4> <font size=+1> <center><b> Device Properties </b></font></center></td> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td> <center><b> Name </b></center> </td> + <td> <center><b> Description </b></center> </td> + <td> <center><b> Type </b></center> </td> + <td> <center><b> Default Value </b></center> </td> + </tr> + <tr> + <td> ProxyName </td> + <td> The name of the device which manage the communication. </td> + <td> String </td> + <td> none </td> + </tr> + <tr> + <td> Electrometer1Address </td> + <td> The first electrometer address configured. <br /><Br> + Note : if not connected, push 0 or let empty the property. </td> + <td> short </td> + <td> none </td> + </tr> + <tr> + <td> Electrometer2Address </td> + <td> The second electrometer address configured. <br /><Br> + Note : if not connected, push 0 or let empty the property. </td> + <td> short </td> + <td> none </td> + </tr> + <tr> + <td> ComProtocol </td> + <td> Communication protocal: ETHERNET/SERIAL </td> + <td> String </td> + <td> none </td> + </tr> +</table> +<br><br> +<hr> +<a name="commands"> </a> +<br><br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=5> <font size=+1> <center><b> MCCE2Electrometers Class Commands </b></font></center></td> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td> <center><b> Name </b></center> </td> + <td> <center><b> Input type </b></center> </td> + <td> <center><b> Output type </b></center> </td> + <td> <center><b> Level </b></center> </td> + <td> <center><b> Description </b></center> </td> + </tr> + <tr> + <td> <a href="CmdState.html"> State </a> </td> + <td> DEV_VOID </td> + <td> DEV_STATE </td> + <td> OPERATOR </td> + <td> This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller. </td> + </tr> + <tr> + <td> <a href="CmdStatus.html"> Status </a> </td> + <td> DEV_VOID </td> + <td> CONST_DEV_STRING </td> + <td> OPERATOR </td> + <td> This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller. </td> + </tr> + <tr> + <td> <a href="CmdRangeUP.html"> RangeUP </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdRangeDOWN.html"> RangeDOWN </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetZeroVFFunction.html"> SetZeroVFFunction </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetOffsetZeroV1Function.html"> SetOffsetZeroV1Function </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetLeakageZeroV2Function.html"> SetLeakageZeroV2Function </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetTestFunction.html"> SetTestFunction </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetMeasureFunction.html"> SetMeasureFunction </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdMCCE2_ON.html"> MCCE2_ON </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdMCCE2_OFF.html"> MCCE2_OFF </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdLocal.html"> Local </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdRemote.html"> Remote </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdReset.html"> Reset </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdClearRegisters.html"> ClearRegisters </a> </td> + <td> DEV_VOID </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetRange.html"> GetRange </a> </td> + <td> DEV_VOID </td> + <td> DEV_STRING </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetRange.html"> SetRange </a> </td> + <td> DEV_STRING </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetMode.html"> GetMode </a> </td> + <td> DEV_VOID </td> + <td> DEV_STRING </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetPolarity.html"> GetPolarity </a> </td> + <td> DEV_VOID </td> + <td> DEV_STRING </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetPolarity.html"> SetPolarity </a> </td> + <td> DEV_STRING </td> + <td> DEV_VOID </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetHzFilter.html"> GetHzFilter </a> </td> + <td> DEV_VOID </td> + <td> DEV_SHORT </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetHzFilter.html"> SetHzFilter </a> </td> + <td> DEV_SHORT </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetGain.html"> GetGain </a> </td> + <td> DEV_VOID </td> + <td> DEV_SHORT </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdSetGain.html"> SetGain </a> </td> + <td> DEV_USHORT </td> + <td> DEV_VOID </td> + <td> EXPERT </td> + <td> None. </td> + </tr> + <tr> + <td> <a href="CmdGetElectrometerTypeStr.html"> GetElectrometerTypeStr </a> </td> + <td> DEV_USHORT </td> + <td> DEV_STRING </td> + <td> OPERATOR </td> + <td> None. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdState"> </a> +<br><br><br> +<font size="+1"><u><b> Command State : </b></u></font> +<ul> + This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller. +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> State Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> none. </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_STATE </td> + <td> State Code </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> true </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command allowed for </td> + <td> All states </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdStatus"> </a> +<br><br><br> +<font size="+1"><u><b> Command Status : </b></u></font> +<ul> + This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller. +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Status Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> none. </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::CONST_DEV_STRING </td> + <td> Status description </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> true </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command allowed for </td> + <td> All states </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdRangeUP"> </a> +<br><br><br> +<font size="+1"><u><b> Command RangeUP : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> RangeUP Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdRangeDOWN"> </a> +<br><br><br> +<font size="+1"><u><b> Command RangeDOWN : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> RangeDOWN Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdSetZeroVFFunction"> </a> +<br><br><br> +<font size="+1"><u><b> Command SetZeroVFFunction : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetZeroVFFunction Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdSetOffsetZeroV1Function"> </a> +<br><br><br> +<font size="+1"><u><b> Command SetOffsetZeroV1Function : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetOffsetZeroV1Function Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdSetLeakageZeroV2Function"> </a> +<br><br><br> +<font size="+1"><u><b> Command SetLeakageZeroV2Function : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetLeakageZeroV2Function Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdSetTestFunction"> </a> +<br><br><br> +<font size="+1"><u><b> Command SetTestFunction : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetTestFunction Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdSetMeasureFunction"> </a> +<br><br><br> +<font size="+1"><u><b> Command SetMeasureFunction : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetMeasureFunction Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdMCCE2_ON"> </a> +<br><br><br> +<font size="+1"><u><b> Command MCCE2_ON : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> MCCE2_ON Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdMCCE2_OFF"> </a> +<br><br><br> +<font size="+1"><u><b> Command MCCE2_OFF : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> MCCE2_OFF Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdLocal"> </a> +<br><br><br> +<font size="+1"><u><b> Command Local : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Local Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdRemote"> </a> +<br><br><br> +<font size="+1"><u><b> Command Remote : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Remote Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdReset"> </a> +<br><br><br> +<font size="+1"><u><b> Command Reset : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Reset Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdClearRegisters"> </a> +<br><br><br> +<font size="+1"><u><b> Command ClearRegisters : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> ClearRegisters Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdGetRange"> </a> +<br><br><br> +<font size="+1"><u><b> Command GetRange : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetRange Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_STRING </td> + <td> The actual electrometer range </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdSetRange"> </a> +<br><br><br> +<font size="+1"><u><b> Command SetRange : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetRange Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_STRING </td> + <td> The range to apply on the electrometer </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdGetMode"> </a> +<br><br><br> +<font size="+1"><u><b> Command GetMode : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetMode Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_STRING </td> + <td> The electrometer mode (MEASURE, LEAKAGE ...) </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdGetPolarity"> </a> +<br><br><br> +<font size="+1"><u><b> Command GetPolarity : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetPolarity Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_STRING </td> + <td> The electrometer polarity </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdSetPolarity"> </a> +<br><br><br> +<font size="+1"><u><b> Command SetPolarity : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetPolarity Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_STRING </td> + <td> POSITIVE or NEGATIVE </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdGetHzFilter"> </a> +<br><br><br> +<font size="+1"><u><b> Command GetHzFilter : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetHzFilter Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_SHORT </td> + <td> The MCCE2 cut-off frequency in Hz </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdSetHzFilter"> </a> +<br><br><br> +<font size="+1"><u><b> Command SetHzFilter : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetHzFilter Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_SHORT </td> + <td> The MCCE2 cut-off frequency in Hz </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdGetGain"> </a> +<br><br><br> +<font size="+1"><u><b> Command GetGain : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetGain Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argin </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_SHORT </td> + <td> The MCCE2 gain </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdSetGain"> </a> +<br><br><br> +<font size="+1"><u><b> Command SetGain : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> SetGain Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_USHORT </td> + <td> The new MCCE-2 gain </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_VOID </td> + <td> no argout </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> EXPERT </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command NOT allowed for </td> + <td> <font size="-1"> <li> FAULT </li> <li> DISABLE </li> </font> </td> + <td> .. </td> + </tr> +</table> +<br><br><hr> +<a name="cmdGetElectrometerTypeStr"> </a> +<br><br><br> +<font size="+1"><u><b> Command GetElectrometerTypeStr : </b></u></font> +<ul> +</ul> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> GetElectrometerTypeStr Definition </b></font></center></td> + </tr> + <tr> + <td> Input Argument </td> + <td> Tango::DEV_USHORT </td> + <td> channel number </td> + </tr> + <tr> + <td> Output Argument </td> + <td> Tango::DEV_STRING </td> + <td> the electrometer type as string </td> + </tr> + <tr> + <td> DisplayLevel </td> + <td> OPERATOR </td> + <td> .. </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + <td> .. </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + <td> .. </td> + </tr> +<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Command allowed for </td> + <td> All states </td> + <td> .. </td> + </tr> +</table> +<br><br> +<hr> +<a name="attributes"> </a> +<br><br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=8> <font size=+1> <center><b> MCCE2Electrometers Class Attributes </b></font></center></td> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td> <center><b> Name </b></center> </td> + <td> <center><b> Inherited </b></center> </td> + <td> <center><b> Abstract </b></center> </td> + <td> <center><b> Attr. type </b></center> </td> + <td> <center><b> R/W type </b></center> </td> + <td> <center><b> Data type </b></center> </td> + <td> <center><b> Level </b></center> </td> + <td> <center><b> Description </b></center> </td> + </tr> + <tr> + <td> <a href="AttrelectrometerChannel.html"> electrometerChannel </a> </td> + <td> false </td> + <td> false </td> + <td> Scalar </td> + <td> READ_WRITE </td> + <td> Tango::DEV_USHORT </td> + <td> OPERATOR </td> + <td> MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first). </td> + </tr> + <tr> + <td> <a href="Attrrange1.html"> range1 </a> </td> + <td> false </td> + <td> false </td> + <td> Scalar </td> + <td> READ </td> + <td> Tango::DEV_STRING </td> + <td> OPERATOR </td> + <td> The channel one MCCE2 range. </td> + </tr> + <tr> + <td> <a href="Attrrange2.html"> range2 </a> </td> + <td> false </td> + <td> false </td> + <td> Scalar </td> + <td> READ </td> + <td> Tango::DEV_STRING </td> + <td> OPERATOR </td> + <td> The channel two MCCE range. </td> + </tr> +</table> +<br><br> +<hr> +<br><br> +<font size="+1"><u><b> There is no dynamic attribute defined. </b></u></font> +<br><br> +<hr> +<a name="attrelectrometerChannel"> </a> +<br><br><br> +<font size="+1"><u><b> Attribute electrometerChannel : </b></u></font> +<ul> + MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first). +</ul> +<br><br><br> +<Table Border=0 Cellpadding=0 CELLSPACING=20> + <TR> + <TD ALIGN="left" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td> + </tr> + <tr> + <td> Attribute Type </td> + <td> Scalar </td> + </tr> + <tr> + <td> R/W Type </td> + <td> READ_WRITE </td> + </tr> + <tr> + <td> Data Type </td> + <td> Tango::DEV_USHORT </td> + </tr> + <tr> + <td> Display Level </td> + <td> OPERATOR </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + </tr> + <tr> + <td> Memorized </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Read allowed for </td> + <td> All states </td> + </tr> + <tr> + <td> Write allowed for </td> + <td> All states </td> + </tr> + </table> + </td> + <TD ALIGN="Center" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td> + </tr> + <tr> + <td> label </td> + <td> electrometer channel </td> + </tr> + <tr> + <td> unit </td> + <td> </td> + </tr> + <tr> + <td> standard unit </td> + <td> </td> + </tr> + <tr> + <td> display unit </td> + <td> </td> + </tr> + <tr> + <td> format </td> + <td> %1.0d </td> + </tr> + <tr> + <td> max_value </td> + <td> </td> + </tr> + <tr> + <td> min_value </td> + <td> </td> + </tr> + <tr> + <td> max_alarm </td> + <td> </td> + </tr> + <tr> + <td> min_alarm </td> + <td> </td> + </tr> + <tr> + <td> max_warning </td> + <td> </td> + </tr> + <tr> + <td> min_warning </td> + <td> </td> + </tr> + <tr> + <td> delta_time </td> + <td> </td> + </tr> + <tr> + <td> delta_val </td> + <td> </td> + </tr> + </table> + </td> + <TD ALIGN="Right" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td> + </tr> + <tr> + <td> Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Archive Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Push Change event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push Archive event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push DataReady event by user code </td> + <td> Not set </td> + </tr> + </table> + </td> + </TR> +</table> +<br><br> +<hr> +<a name="attrrange1"> </a> +<br><br><br> +<font size="+1"><u><b> Attribute range1 : </b></u></font> +<ul> + The channel one MCCE2 range. +</ul> +<br><br><br> +<Table Border=0 Cellpadding=0 CELLSPACING=20> + <TR> + <TD ALIGN="left" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td> + </tr> + <tr> + <td> Attribute Type </td> + <td> Scalar </td> + </tr> + <tr> + <td> R/W Type </td> + <td> READ </td> + </tr> + <tr> + <td> Data Type </td> + <td> Tango::DEV_STRING </td> + </tr> + <tr> + <td> Display Level </td> + <td> OPERATOR </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + </tr> + <tr> + <td> Memorized </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Read allowed for </td> + <td> All states </td> + </tr> + </table> + </td> + <TD ALIGN="Center" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td> + </tr> + <tr> + <td> label </td> + <td> range1 </td> + </tr> + <tr> + <td> unit </td> + <td> </td> + </tr> + <tr> + <td> standard unit </td> + <td> </td> + </tr> + <tr> + <td> display unit </td> + <td> </td> + </tr> + <tr> + <td> format </td> + <td> %s </td> + </tr> + <tr> + <td> max_value </td> + <td> </td> + </tr> + <tr> + <td> min_value </td> + <td> </td> + </tr> + <tr> + <td> max_alarm </td> + <td> </td> + </tr> + <tr> + <td> min_alarm </td> + <td> </td> + </tr> + <tr> + <td> max_warning </td> + <td> </td> + </tr> + <tr> + <td> min_warning </td> + <td> </td> + </tr> + <tr> + <td> delta_time </td> + <td> </td> + </tr> + <tr> + <td> delta_val </td> + <td> </td> + </tr> + </table> + </td> + <TD ALIGN="Right" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td> + </tr> + <tr> + <td> Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Archive Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Push Change event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push Archive event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push DataReady event by user code </td> + <td> Not set </td> + </tr> + </table> + </td> + </TR> +</table> +<br><br> +<hr> +<a name="attrrange2"> </a> +<br><br><br> +<font size="+1"><u><b> Attribute range2 : </b></u></font> +<ul> + The channel two MCCE range. +</ul> +<br><br><br> +<Table Border=0 Cellpadding=0 CELLSPACING=20> + <TR> + <TD ALIGN="left" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td> + </tr> + <tr> + <td> Attribute Type </td> + <td> Scalar </td> + </tr> + <tr> + <td> R/W Type </td> + <td> READ </td> + </tr> + <tr> + <td> Data Type </td> + <td> Tango::DEV_STRING </td> + </tr> + <tr> + <td> Display Level </td> + <td> OPERATOR </td> + </tr> + <tr> + <td> Inherited </td> + <td> false </td> + </tr> + <tr> + <td> Abstract </td> + <td> false </td> + </tr> + <tr> + <td> Polling Period </td> + <td> Not polled </td> + </tr> + <tr> + <td> Memorized </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Read allowed for </td> + <td> All states </td> + </tr> + </table> + </td> + <TD ALIGN="Center" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td> + </tr> + <tr> + <td> label </td> + <td> range2 </td> + </tr> + <tr> + <td> unit </td> + <td> </td> + </tr> + <tr> + <td> standard unit </td> + <td> </td> + </tr> + <tr> + <td> display unit </td> + <td> </td> + </tr> + <tr> + <td> format </td> + <td> %s </td> + </tr> + <tr> + <td> max_value </td> + <td> </td> + </tr> + <tr> + <td> min_value </td> + <td> </td> + </tr> + <tr> + <td> max_alarm </td> + <td> </td> + </tr> + <tr> + <td> min_alarm </td> + <td> </td> + </tr> + <tr> + <td> max_warning </td> + <td> </td> + </tr> + <tr> + <td> min_warning </td> + <td> </td> + </tr> + <tr> + <td> delta_time </td> + <td> </td> + </tr> + <tr> + <td> delta_val </td> + <td> </td> + </tr> + </table> + </td> + <TD ALIGN="Right" VALIGN=top> + <Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td> + </tr> + <tr> + <td> Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Archive Periodic </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Relative Change </td> + <td> Not set </td> + </tr> + <tr> + <td> Archive Absolute Change </td> + <td> Not set </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr> + <tr> + <td> Push Change event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push Archive event by user code </td> + <td> false </td> + </tr> + <Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr> + <tr> + <td> Push DataReady event by user code </td> + <td> Not set </td> + </tr> + </table> + </td> + </TR> +</table> +<br><br> +<hr> +<br><br> +<hr> +<a name="states"> </a> +<br><br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=2> <font size=+1> <center><b> MCCE2Electrometers Class States </b></font></center></td> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td> <center><b> Name </b></center> </td> + <td> <center><b> Description </b></center> </td> + </tr> + <tr> + <td> ON </td> + <td> Device up and ready </td> + </tr> + <tr> + <td> ALARM </td> + <td> Device initialisation not complete or a bad channel number is set. </td> + </tr> + <tr> + <td> FAULT </td> + <td> Internal electrometer interface is not built or a Serial communication error occurred. </td> + </tr> + <tr> + <td> DISABLE </td> + <td> No electrometer conected! </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/Properties.html b/doc/doc_html/Properties.html index 92773b4..4eda38d 100644 --- a/doc/doc_html/Properties.html +++ b/doc/doc_html/Properties.html @@ -1,154 +1,49 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> -<HTML> -<HEAD> -<Title> Tango Device Server User's Guide </Title> -</HEAD> -<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000"> - -<P><!-------TITLE------></P> - -<TABLE BORDER="0" WIDTH="100%"> - <TR> - <TD ALIGN="left"> - <A HREF="http://www.esrf.fr/" TARGET=new> - <IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0 Height="60"></A> - </Td> - <TD ALIGN="center"> - <A HREF="http://www.elettra.trieste.it/" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0 Height="60"></A> - - </Td> - <TD ALIGN="center"> - <A HREF="http://www.synchrotron-soleil.fr/" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0 Height="60"></A> - </Td> - <TD ALIGN="right"> - <A HREF="http://www.cells.es/" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/alba.jpg" BORDER=0 Height="54"></A> - </Td> - <TD ALIGN="right"> - <A HREF="http://www.desy.de/html/home/index_eng.html" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/desy.gif" BORDER=0 Height="60"></A> - </Td> - <Td> - <H2><FONT COLOR="#7F00FF"> - <Center><A HREF="http://www.tango-controls.org/" TARGET="_top"> - TANGO </a> <Br> Device Server - </Center></FONT> - </Td> - </TR> -</TABLE> - -<HR WIDTH="100%"></H5> -<Br> -<center> -<h1> -Novelec MCCE-2 Electrometers <Br> -Properties Description <Br> <Br> -MCCE2Electrometers Class <Br> -</h1> -<b> -Revision: - Author: xavela -</b> -</center> - - -<Center> -<Br> <Br> <Br> -<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%"> -<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> -<Td COLSPAN=3> <Font Size=+2><Center><b>Device Properties</b></td></Font></Center> -<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> -<Td><Center><b>Property name</b></td></Center> -<Td><Center><b>Property type</b></td></Center> -<Td><Center><b>Description</b></td></Center> -<Tr><Td><b><a href=#Dev_DefaultValues>CommunicationLinkName </a></b></Td> -<Td><Font Size=-1>Tango::DEV_STRING</Font></Td> -<Td><Font Size=-1>The name of the device which manage the communication.</Font></Td></Tr> - -<Tr><Td><b><a href=#Dev_DefaultValues>Electrometer1Address </a></b></Td> -<Td><Font Size=-1>Tango::DEV_USHORT</Font></Td> -<Td><Font Size=-1>The first electrometer address configured. <br /> -Note : if not connected, push 0 or let empty the property.</Font></Td></Tr> - -<Tr><Td><b><a href=#Dev_DefaultValues>Electrometer2Address </a></b></Td> -<Td><Font Size=-1>Tango::DEV_USHORT</Font></Td> -<Td><Font Size=-1>The second electrometer address configured. <br /> -Note : if not connected, push 0 or let empty the property.</Font></Td></Tr> - -</Table> - -</Center> -<Br><Br><Br> -<Br><Br><Br> - -<A name=Dev_DefaultValues><!--- ---></a> -<Font Size=+1>Device Properties Default Values:</Font><Br> -<Table Border=2 Cellpadding=2 CELLSPACING=2> - <tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> - <Td><b>Property Name</b></td> - <td><b>Default Values</b></td> - </Tr> - <Tr> - <Td>CommunicationLinkName</Td> - <td>No default value</td> - </Tr> - <Tr> - <Td>Electrometer1Address</Td> - <td>No default value</td> - </Tr> - <Tr> - <Td>Electrometer2Address</Td> - <td>No default value</td> - </Tr> -</Table> - -<Br><Br><Br> -<Center><b> -There is no Class properties.<Br><Br> -</Center></b> -<Br> <Br> <Br> - -<!--- html Footer ---> - -<Center> -<Font size=-1> -<br> -<br> -<TABLE BORDER="1" WIDTH="100%"> - <Tr> - <!--- Hosted by Sourceforge ---> - <Td Align="Center"> - <Font size=-1> - <b>TANGO</b> is an open source project hosted by :<br> - <A href="http://sourceforge.net" Target="new"> - <IMG title="Sourceforge logo" - alt="Sourceforge logo small" - src="http://www.esrf.fr/computing/cs/tango/sourceforge.gif" - border=0> </a> - </Font> - </Td> - <!--- 2 Sourceforge Repositories ---> - <Td Align="Center"> - <Font size=-1> - Core and Tools : - <a href="http://tango-cs.cvs.sourceforge.net/tango-cs/" Target="new"> - CVS repository</a> on - <a href="https://sourceforge.net/projects/tango-cs" Target=new> - tango-cs project</a> - - <br> - - Device Servers : - <a href="http://tango-ds.cvs.sourceforge.net/tango-ds/" Target="new"> - CVS repository</a> on - <a href="https://sourceforge.net/projects/tango-ds" Target=new> - tango-ds project</a> - </Font> - </Td> - </Tr> -</Table> -</Font> -</Center> +<html> +<head> +<title> MCCE2Electrometers Tango Class Properties </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br> +<font size="+1"><u><b> MCCE2Electrometers Properties : </b></u></font> +<br><br><br> +<font size="+1"><u><b> There is no class properties </b></u></font> +<br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=4> <font size=+1> <center><b> Device Properties </b></font></center></td> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td> <center><b> Name </b></center> </td> + <td> <center><b> Description </b></center> </td> + <td> <center><b> Type </b></center> </td> + <td> <center><b> Default Value </b></center> </td> + </tr> + <tr> + <td> ProxyName </td> + <td> The name of the device which manage the communication. </td> + <td> String </td> + <td> none </td> + </tr> + <tr> + <td> Electrometer1Address </td> + <td> The first electrometer address configured. <br /><Br> + Note : if not connected, push 0 or let empty the property. </td> + <td> short </td> + <td> none </td> + </tr> + <tr> + <td> Electrometer2Address </td> + <td> The second electrometer address configured. <br /><Br> + Note : if not connected, push 0 or let empty the property. </td> + <td> short </td> + <td> none </td> + </tr> + <tr> + <td> ComProtocol </td> + <td> Communication protocal: ETHERNET/SERIAL </td> + <td> String </td> + <td> none </td> + </tr> +</table> </body> </html> diff --git a/doc/doc_html/States.html b/doc/doc_html/States.html new file mode 100644 index 0000000..0f2498b --- /dev/null +++ b/doc/doc_html/States.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title> MCCE2Electrometers Tango Class States </title> +</head> +<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red"> +<br><br><br><br> +<Table Border=2 Cellpadding=3 CELLSPACING=0> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=2> <font size=+1> <center><b> MCCE2Electrometers Class States </b></font></center></td> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td> <center><b> Name </b></center> </td> + <td> <center><b> Description </b></center> </td> + </tr> + <tr> + <td> ON </td> + <td> Device up and ready </td> + </tr> + <tr> + <td> ALARM </td> + <td> Device initialisation not complete or a bad channel number is set. </td> + </tr> + <tr> + <td> FAULT </td> + <td> Internal electrometer interface is not built or a Serial communication error occurred. </td> + </tr> + <tr> + <td> DISABLE </td> + <td> No electrometer conected! </td> + </tr> +</table> +</body> +</html> diff --git a/doc/doc_html/TitleBanner.html b/doc/doc_html/TitleBanner.html new file mode 100644 index 0000000..5361fa5 --- /dev/null +++ b/doc/doc_html/TitleBanner.html @@ -0,0 +1,14 @@ +<!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 transitional//EN" "http://www.w3.org/TR/xhtml1/Dtd/xhtml1-transitional.dtd"> +<html> + <center> + <font size="+1"><u><b> MCCE2Electrometers Tango Cpp Class </b></u></font> + <table BORDER="1" WIDTH="100%" CELLSPACING=0> + <td ALIGN="center"> <a href="ClassDescription.html" target="document"> Description </a></td> + <td ALIGN="center"> <a href="Properties.html" target="document"> Properties </a></td> + <td ALIGN="center"> <a href="Commands.html" target="document"> Commands </a></td> + <td ALIGN="center"> <a href="Attributes.html" target="document"> Attributes </a></td> + <td ALIGN="center"> <a href="States.html" target="document"> States </a></td> + <td ALIGN="center"> <a href="FullDocument.html" target="new"> Printable </a></td> + </table> + </center> +</html> diff --git a/doc/doc_html/index.html b/doc/doc_html/index.html index 407d246..ac4d32f 100644 --- a/doc/doc_html/index.html +++ b/doc/doc_html/index.html @@ -1,155 +1,20 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> -<HEAD> -<Title> Tango Device Server User's Guide </Title> -</HEAD> -<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000"> - -<P><!-------TITLE------></P> -<TABLE BORDER="0" WIDTH="100%"> - <TR> - <TD ALIGN="left"> - <A HREF="http://www.esrf.fr/" TARGET=new> - <IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0 Height="60"></A> - </Td> - <TD ALIGN="center"> - <A HREF="http://www.elettra.trieste.it/" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0 Height="60"></A> - - </Td> - <TD ALIGN="center"> - <A HREF="http://www.synchrotron-soleil.fr/" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0 Height="60"></A> - </Td> - <TD ALIGN="right"> - <A HREF="http://www.cells.es/" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/alba.jpg" BORDER=0 Height="54"></A> - </Td> - <TD ALIGN="right"> - <A HREF="http://www.desy.de/html/home/index_eng.html" TARGET=new> - <IMG SRC="http://www.esrf.fr/computing/cs/tango/desy.gif" BORDER=0 Height="60"></A> - </Td> - <Td> - <H2><FONT COLOR="#7F00FF"> - <Center><A HREF="http://www.tango-controls.org/" TARGET="_top"> - TANGO </a> <Br> Device Server - </Center></FONT> - </Td> - </TR> -</TABLE> - -<HR WIDTH="100%"></H5> - -<center> -<h1> -Novelec MCCE-2 Electrometers <Br> -User's Guide <Br><Br> -MCCE2Electrometers Class<Br> - -</h1> -<b> -Revision: - Author: xavela <Br> - Implemented in C++ -</b> -</center> -<Br> -<Br> -<Br> -<Br> -<h2>Introduction:</h2> -<ul> - This class allows you to control all MCCE-2 Novelec electrometers -through a Serial bus. -<br> Supported types : -<br> Novelec Electrometers : MCCE2<Br> -</ul> -<Br><h2>Class Identification:</h2> -<ul> - <li><b>Contact :</b> at synchrotron-soleil.fr - xavier.elattaoui - <li><b>Class Family :</b> Acquisition - <li><b>Platform :</b> All Platforms - <li><b>Bus :</b> Serial Line - <li><b>Manufacturer :</b> SAPHYMO - <li><b>Reference :</b> MCCE-2 -</ul><Br> -<h2>Class Inheritance:</h2> - <ul> - <li> <a href="http://www.esrf.fr/computing/cs/tango/tango_doc/kernel_doc/cpp_doc/"> Tango::Device_4Impl</a></li> - <ul> - <li> MCCE2Electrometers</li> - </ul> - </ul> - </ul> -</ul> -<Br> -<Br> -<h2>Description:</h2> -<ul> - <li> <a href=Description.html> Device description.</a> - <li> <a href=Properties.html> Properties description</a> - <li> <a href=TangoDevStates.html> States description</a> - <li> <a href=DevCommandsTable.html> Commands description</a> - <li> <a href=Attributes.html> Attributes description</a> -</ul> -<Br> -<Br> -<Br> -<!--------------h2>Programmer's guide:</h2> -<ul> - <li> <a href="html/index.html"> Software description.</a> -</ul> -<Br------> -<Br> -<Br> -<h2>Conclusion:</h2> -<ul> - The device server is ready for distribution application programmers.<Br> - The author will be interested in any feedback which arise from their - usage of this device server. -</ul> -<Br> - - -<!--- html Footer ---> - -<Center> -<Font size=-1> -<br> -<br> -<TABLE BORDER="1" WIDTH="100%"> - <Tr> - <!--- Hosted by Sourceforge ---> - <Td Align="Center"> - <Font size=-1> - <b>TANGO</b> is an open source project hosted by :<br> - <A href="http://sourceforge.net" Target="new"> - <IMG title="Sourceforge logo" - alt="Sourceforge logo small" - src="http://www.esrf.fr/computing/cs/tango/sourceforge.gif" - border=0> </a> - </Font> - </Td> - <!--- 2 Sourceforge Repositories ---> - <Td Align="Center"> - <Font size=-1> - Core and Tools : - <a href="http://tango-cs.cvs.sourceforge.net/tango-cs/" Target="new"> - CVS repository</a> on - <a href="https://sourceforge.net/projects/tango-cs" Target=new> - tango-cs project</a> - - <br> - - Device Servers : - <a href="http://tango-ds.cvs.sourceforge.net/tango-ds/" Target="new"> - CVS repository</a> on - <a href="https://sourceforge.net/projects/tango-ds" Target=new> - tango-ds project</a> - </Font> - </Td> - </Tr> -</Table> -</Font> -</Center> -</body> + <HEAD> + <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> + <META name="GENERATOR" CONTENT="Mozilla/4.04 [en] (X11; I; SunOS 5.6 sun4d) [Netscape]"> + <META name="Author" CONTENT="Pascal Verdier"> + <META name="Description" CONTENT="MCCE2Electrometers Pages"> + <META name="Keywords" CONTENT="MCCE2Electrometers Tango class User Guide"> + <TITLE>MCCE2Electrometers Tango class User Guide</TITLE> + </HEAD> + + +<!--- Definition for the 4 frames window -----------> +<frameset rows="58,65,*,65"> + <frame src="http://www.esrf.fr/computing/cs/tango/TangoBanner.html" name="header"> + <frame src="TitleBanner.html" name="title"> + <frame src="ClassDescription.html" name="document"> + <frame src="http://www.esrf.fr/computing/cs/tango/SrcForgeBanner.html" name="footer" > +</frameset> </html> diff --git a/pom.xml b/pom.xml index 0bc3dd7..ed0a489 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ </parent> <groupId>fr.soleil.device</groupId> <artifactId>MCCE2Electrometers-${aol}-${mode}</artifactId> - <version>2.2.10</version> + <version>2.3.0</version> <packaging>nar</packaging> <name>MCCE2Electrometers</name> <!-- use for the name of executable --> diff --git a/src/ClassFactory.cpp b/src/ClassFactory.cpp index 8075643..a6789d5 100644 --- a/src/ClassFactory.cpp +++ b/src/ClassFactory.cpp @@ -1,3 +1,4 @@ +/*----- PROTECTED REGION ID(MCCE2Electrometers::ClassFactory.cpp) ENABLED START -----*/ static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/ClassFactory.cpp,v 1.3 2012-07-09 13:25:43 xavela Exp $"; //+============================================================================= // @@ -45,3 +46,4 @@ void Tango::DServer::class_factory() add_class(MCCE2Electrometers_ns::MCCE2ElectrometersClass::init("MCCE2Electrometers")); } +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::ClassFactory.cpp diff --git a/src/MCCE2Electrometers.cpp b/src/MCCE2Electrometers.cpp index 6487f93..0ab9d97 100644 --- a/src/MCCE2Electrometers.cpp +++ b/src/MCCE2Electrometers.cpp @@ -1,2631 +1,2729 @@ -static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/MCCE2Electrometers.cpp,v 1.31 2012-11-14 13:24:22 xavela Exp $"; -//+============================================================================= -// -// file : MCCE2Electrometers.cpp -// -// description : C++ source for the MCCE2Electrometers and its commands. -// The class is derived from Device. It represents the -// CORBA servant object which will be accessed from the -// network. All commands which can be executed on the -// MCCE2Electrometers are implemented in this file. -// -// project : TANGO Device Server -// -// $Author: xavela $ -// -// $Revision: 1.31 $ -// -// $Log: not supported by cvs2svn $ -// Revision 1.26 2012/07/03 06:17:54 xavela -// bug at init fixed. -// -// Revision 1.25 2012/04/10 08:42:33 xavela -// std::cout commented ! -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//-============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= - - - -//=================================================================== -// -// The following table gives the correspondence -// between commands and method name. -// -// Command name | Method name -// ---------------------------------------- -// State | dev_state() -// Status | dev_status() -// RangeUP | range_up() -// RangeDOWN | range_down() -// SetZeroVFFunction | set_zero_vffunction() -// SetOffsetZeroV1Function | set_offset_zero_v1_function() -// SetLeakageZeroV2Function | set_leakage_zero_v2_function() -// SetTestFunction | set_test_function() -// SetMeasureFunction | set_measure_function() -// MCCE2_ON | mcce2__on() -// MCCE2_OFF | mcce2__off() -// Local | local() -// Remote | remote() -// Reset | reset() -// ClearRegisters | clear_registers() -// GetRange | get_range() -// SetRange | set_range() -// GetMode | get_mode() -// GetPolarity | get_polarity() -// SetPolarity | set_polarity() -// GetHzFilter | get_hz_filter() -// SetHzFilter | set_hz_filter() -// GetGain | get_gain() -// SetGain | set_gain() -// GetElectrometerTypeStr | get_electrometer_type_str() -// -//=================================================================== - - -#include <tango.h> -#include <PogoHelper.h> -#include <Xstring.h> -#include <yat4tango/InnerAppender.h> -#include <yat4tango/YatLogAdapter.h> -#include <MCCE2Electrometers.h> -#include <MCCE2ElectrometersClass.h> -#include "N_PhotoVoltaique.h" -#include "N_PhotoConducteur.h" - -const size_t MAX_STRING_LENGTH = 64; -const unsigned short ELETRO_CHANNEL_ONE = 1; -const unsigned short ELETRO_CHANNEL_TWO = 2; - -namespace MCCE2Electrometers_ns -{ - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::MCCE2Electrometers(string &s) -// -// description : constructor for simulated MCCE2Electrometers -// /home/experiences/diffabs/com-diffabs/DeviceServers/ds_MCCE2Electrometers -// in : - cl : Pointer to the DeviceClass object -// - s : Device name -// -//----------------------------------------------------------------------------- -MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl,string &s) - :Tango::Device_4Impl(cl,s.c_str()) -{ - init_device(); -} - -MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl,const char *s) - :Tango::Device_4Impl(cl,s) -{ - init_device(); -} - -MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl,const char *s,const char *d) - :Tango::Device_4Impl(cl,s,d) -{ - init_device(); -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::delete_device() -// -// description : will be called at device destruction or at init command. -// -//----------------------------------------------------------------------------- -void MCCE2Electrometers::delete_device() -{ - // Delete device's allocated object - if(this->_electrometerCH1) - { - delete this->_electrometerCH1; - this->_electrometerCH1 = 0; - } - - if(this->_electrometerCH2) - { - delete this->_electrometerCH2; - this->_electrometerCH2 = 0; - } - - DELETE_DEVSTRING_ATTRIBUTE(attr_range1_read); - DELETE_DEVSTRING_ATTRIBUTE(attr_range2_read); - DELETE_SCALAR_ATTRIBUTE(attr_electrometerChannel_read); - - //- release the inner-appender - INFO_STREAM << "Remove the inner-appender." << endl; - yat4tango::InnerAppender::release(this); - - INFO_STREAM << "Remove the log-adapter." << endl; - yat4tango::YatLogAdapter::release(); -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::init_device() -// -// description : will be called at device initialization. -// -//----------------------------------------------------------------------------- -void MCCE2Electrometers::init_device() -{ - INFO_STREAM << "MCCE2Electrometers::MCCE2Electrometers() create device " << device_name << endl; - - yat4tango::YatLogAdapter::initialize(this); - - // Initialize the inner appender. - yat4tango::InnerAppender::initialize(this); - - // Initialise variables to default values - //-------------------------------------------- - this->_electrometer = 0; - this->_electrometerCH1 = 0; - this->_electrometerCH2 = 0; - this->_missing_property = false; - attr_electrometerChannel_write = ELETRO_CHANNEL_ONE; - this->_updateRange1FromHW = true; //- force update after init. - this->_updateRange2FromHW = true; //- force update after init. - this->_electroCH1StrType = "Not connected"; - this->_electroCH2StrType = "Not connected"; - - get_device_property(); - - if ( this->communicationLinkName.empty() ) - this->_missing_property = true; - if ( !electrometer1Address && !electrometer2Address ) - this->_missing_property = true; - INFO_STREAM << "electrometerTypeChx -> _missing_property = " << _missing_property << std::endl; - - CREATE_SCALAR_ATTRIBUTE(attr_electrometerChannel_read); - CREATE_DEVSTRING_ATTRIBUTE(attr_range1_read, MAX_STRING_LENGTH, "Not updated yet."); - CREATE_DEVSTRING_ATTRIBUTE(attr_range2_read, MAX_STRING_LENGTH, "Not updated yet."); - - this->_init_done = false; - - if( !this->_init_done && !this->_missing_property ) - { - INFO_STREAM << "init_device -> create_electrometers_obj : ... " << std::endl; - try - { - //- check connected electrometer(s) - create_electrometers_obj(); - } +/*----- PROTECTED REGION ID(MCCE2Electrometers.cpp) ENABLED START -----*/ +static const char *RcsId = "$Id: $"; +//============================================================================= +// +// file : MCCE2Electrometers.cpp +// +// description : C++ source for the MCCE2Electrometers class and its commands. +// The class is derived from Device. It represents the +// CORBA servant object which will be accessed from the +// network. All commands which can be executed on the +// MCCE2Electrometers are implemented in this file. +// +// project : Novelec MCCE-2 Electrometers +// +// This file is part of Tango device class. +// +// Tango is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tango is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tango. If not, see <http://www.gnu.org/licenses/>. +// +// $Author: $ +// +// $Revision: $ +// $Date: $ +// +// $HeadURL: $ +// +//============================================================================= +// This file is generated by POGO +// (Program Obviously used to Generate tango Object) +//============================================================================= + + +#include <tango.h> +#include <PogoHelper.h> +#include <Xstring.h> +#include <yat4tango/InnerAppender.h> +#include <yat4tango/YatLogAdapter.h> +#include <MCCE2Electrometers.h> +#include <MCCE2ElectrometersClass.h> +#include "N_PhotoVoltaique.h" +#include "N_PhotoConducteur.h" +const size_t MAX_STRING_LENGTH = 64; +const unsigned short ELETRO_CHANNEL_ONE = 1; +const unsigned short ELETRO_CHANNEL_TWO = 2; + +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers.cpp + +/** + * MCCE2Electrometers class description: + * This class allows you to control all MCCE-2 Novelec electrometers + * through a Serial bus. + * <br> Supported types : + * <br> Novelec Electrometers : MCCE2 + */ + +//================================================================ +// The following table gives the correspondence +// between command and method names. +// +// Command name | Method name +//================================================================ +// State | dev_state +// Status | dev_status +// RangeUP | range_up +// RangeDOWN | range_down +// SetZeroVFFunction | set_zero_vffunction +// SetOffsetZeroV1Function | set_offset_zero_v1_function +// SetLeakageZeroV2Function | set_leakage_zero_v2_function +// SetTestFunction | set_test_function +// SetMeasureFunction | set_measure_function +// MCCE2_ON | mcce2__on +// MCCE2_OFF | mcce2__off +// Local | local +// Remote | remote +// Reset | reset +// ClearRegisters | clear_registers +// GetRange | get_range +// SetRange | set_range +// GetMode | get_mode +// GetPolarity | get_polarity +// SetPolarity | set_polarity +// GetHzFilter | get_hz_filter +// SetHzFilter | set_hz_filter +// GetGain | get_gain +// SetGain | set_gain +// GetElectrometerTypeStr | get_electrometer_type_str +//================================================================ + +//================================================================ +// Attributes managed are: +//================================================================ +// electrometerChannel | Tango::DevUShort Scalar +// range1 | Tango::DevString Scalar +// range2 | Tango::DevString Scalar +//================================================================ + +namespace MCCE2Electrometers_ns +{ +/*----- PROTECTED REGION ID(MCCE2Electrometers::namespace_starting) ENABLED START -----*/ + +// static initializations + +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::namespace_starting + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::MCCE2Electrometers() + * Description : Constructors for a Tango device + * implementing the classMCCE2Electrometers + */ +//-------------------------------------------------------- +MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl, string &s) + : Tango::Device_4Impl(cl, s.c_str()) +{ + /*----- PROTECTED REGION ID(MCCE2Electrometers::constructor_1) ENABLED START -----*/ + init_device(); + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::constructor_1 +} +//-------------------------------------------------------- +MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl, const char *s) + : Tango::Device_4Impl(cl, s) +{ + /*----- PROTECTED REGION ID(MCCE2Electrometers::constructor_2) ENABLED START -----*/ + init_device(); + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::constructor_2 +} +//-------------------------------------------------------- +MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl, const char *s, const char *d) + : Tango::Device_4Impl(cl, s, d) +{ + /*----- PROTECTED REGION ID(MCCE2Electrometers::constructor_3) ENABLED START -----*/ + init_device(); + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::constructor_3 +} + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::delete_device() + * Description : will be called at device destruction or at init command + */ +//-------------------------------------------------------- +void MCCE2Electrometers::delete_device() +{ + DEBUG_STREAM << "MCCE2Electrometers::delete_device() " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::delete_device) ENABLED START -----*/ + + // Delete device allocated objects + // Delete device's allocated object + if(this->_electrometerCH1) + { + delete this->_electrometerCH1; + this->_electrometerCH1 = 0; + } + + if(this->_electrometerCH2) + { + delete this->_electrometerCH2; + this->_electrometerCH2 = 0; + } + + DELETE_DEVSTRING_ATTRIBUTE(attr_range1_read); + DELETE_DEVSTRING_ATTRIBUTE(attr_range2_read); + DELETE_SCALAR_ATTRIBUTE(attr_electrometerChannel_read); + + //- release the inner-appender + INFO_STREAM << "Remove the inner-appender." << endl; + yat4tango::InnerAppender::release(this); + + INFO_STREAM << "Remove the log-adapter." << endl; + yat4tango::YatLogAdapter::release(); + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::delete_device +} + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::init_device() + * Description : will be called at device initialization. + */ +//-------------------------------------------------------- +void MCCE2Electrometers::init_device() +{ + DEBUG_STREAM << "MCCE2Electrometers::init_device() create device " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::init_device_before) ENABLED START -----*/ + + // Initialization before get_device_property() call + yat4tango::YatLogAdapter::initialize(this); + + // Initialize the inner appender. + yat4tango::InnerAppender::initialize(this); + //-------------------------------------------- + this->_electrometer = 0; + this->_electrometerCH1 = 0; + this->_electrometerCH2 = 0; + this->_missing_property = false; + attr_electrometerChannel_write = ELETRO_CHANNEL_ONE; + this->_updateRange1FromHW = true; //- force update after init. + this->_updateRange2FromHW = true; //- force update after init. + this->_electroCH1StrType = "Not connected"; + this->_electroCH2StrType = "Not connected"; + + + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::init_device_before + + + // Get the device properties from database + get_device_property(); + + + /*----- PROTECTED REGION ID(MCCE2Electrometers::init_device) ENABLED START -----*/ + + // Initialize device + + if ( this->proxyName.empty() ) + this->_missing_property = true; + if ( !electrometer1Address && !electrometer2Address ) + this->_missing_property = true; + INFO_STREAM << "electrometerTypeChx -> _missing_property = " << _missing_property << std::endl; + + CREATE_SCALAR_ATTRIBUTE(attr_electrometerChannel_read); + CREATE_DEVSTRING_ATTRIBUTE(attr_range1_read, MAX_STRING_LENGTH, "Not updated yet."); + CREATE_DEVSTRING_ATTRIBUTE(attr_range2_read, MAX_STRING_LENGTH, "Not updated yet."); + + this->_init_done = false; + + if( !this->_init_done && !this->_missing_property ) + { + INFO_STREAM << "init_device -> create_electrometers_obj : ... " << std::endl; + try + { + //- check connected electrometer(s) + create_electrometers_obj(); + } catch(Tango::DevFailed& df) { FATAL_STREAM << "Init_dev : create_electrometers_obj -> DF :\n" << df << std::endl; - } - catch(...) - { - FATAL_STREAM << "Device initialization Failed : check logs for more informations."; - - set_state(Tango::FAULT); - set_status("Failed to find which Novelec type is connected : communication caught[...]"); - return; - } - }//- end if - - INFO_STREAM << "Device up but not completly initialised!" << std::endl; - INFO_STREAM << "this->communicationLinkName = " << this->communicationLinkName << std::endl; - INFO_STREAM << "electrometer1Address = " << electrometer1Address << std::endl; - INFO_STREAM << "electrometer2Address = " << electrometer2Address << std::endl; -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::get_device_property() -// -// description : Read the device properties from database. -// -//----------------------------------------------------------------------------- -void MCCE2Electrometers::get_device_property() -{ - // Initialize your default values here (if not done with POGO). - //------------------------------------------------------------------ - communicationLinkName = ""; - electrometer1Address = 0; - electrometer2Address = 0; - // Read device properties from database.(Automatic code generation) - //------------------------------------------------------------------ - Tango::DbData dev_prop; - dev_prop.push_back(Tango::DbDatum("CommunicationLinkName")); - dev_prop.push_back(Tango::DbDatum("Electrometer1Address")); - dev_prop.push_back(Tango::DbDatum("Electrometer2Address")); - - // Call database and extract values - //-------------------------------------------- - if (Tango::Util::instance()->_UseDb==true) - get_db_device()->get_property(dev_prop); - Tango::DbDatum def_prop, cl_prop; - MCCE2ElectrometersClass *ds_class = - (static_cast<MCCE2ElectrometersClass *>(get_device_class())); - int i = -1; - - // Try to initialize CommunicationLinkName from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> communicationLinkName; - else { - // Try to initialize CommunicationLinkName from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> communicationLinkName; - } - // And try to extract CommunicationLinkName value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> communicationLinkName; - - // Try to initialize Electrometer1Address from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> electrometer1Address; - else { - // Try to initialize Electrometer1Address from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> electrometer1Address; - } - // And try to extract Electrometer1Address value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> electrometer1Address; - - // Try to initialize Electrometer2Address from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> electrometer2Address; - else { - // Try to initialize Electrometer2Address from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> electrometer2Address; - } - // And try to extract Electrometer2Address value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> electrometer2Address; - - - - // End of Automatic code generation - //------------------------------------------------------------------ - - //- Creates default property - Tango::DbData data_put; - if ( dev_prop[0].is_empty() ) - { - Tango::DbDatum prop("CommunicationLinkName"); - prop << communicationLinkName; - data_put.push_back(prop); - } - if ( dev_prop[1].is_empty() ) - { - Tango::DbDatum prop("Electrometer1Address"); - prop << electrometer1Address; - data_put.push_back(prop); - } - if ( dev_prop[2].is_empty() ) - { - Tango::DbDatum prop("Electrometer2Address"); - prop << electrometer2Address; - data_put.push_back(prop); - } - - //- write default property if created - if( !data_put.empty() ) - get_db_device()->put_property(data_put); -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::always_executed_hook() -// -// description : method always executed before any command is executed -// -//----------------------------------------------------------------------------- -void MCCE2Electrometers::always_executed_hook() -{ - //- noop -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::read_attr_hardware -// -// description : Hardware acquisition for attributes. -// -//----------------------------------------------------------------------------- -void MCCE2Electrometers::read_attr_hardware(vector<long> &attr_list) -{ - DEBUG_STREAM << "MCCE2Electrometers::read_attr_hardware(vector<long> &attr_list) entering... "<< endl; - // Add your own code here - -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::read_range1 -// -// description : Extract real attribute values for range1 acquisition result. -// -//----------------------------------------------------------------------------- -void MCCE2Electrometers::read_range1(Tango::Attribute &attr) -{ - DEBUG_STREAM << "MCCE2Electrometers::read_range1(Tango::Attribute &attr) entering... "<< endl; - - if ( !this->_electrometerCH1 ) - { - *attr_range1_read = CORBA::string_dup("Not connected"); - } - else - { - if ( this->_updateRange1FromHW && *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE ) - { - *attr_range1_read = this->get_range(); - this->_updateRange1FromHW = false; - } - } - - attr.set_value(attr_range1_read); -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::read_range2 -// -// description : Extract real attribute values for range2 acquisition result. -// -//----------------------------------------------------------------------------- -void MCCE2Electrometers::read_range2(Tango::Attribute &attr) -{ - DEBUG_STREAM << "MCCE2Electrometers::read_range2(Tango::Attribute &attr) entering... "<< endl; - - if ( !this->_electrometerCH2 ) - { - *attr_range2_read = CORBA::string_dup("Not connected"); - } - else - { - if ( this->_updateRange2FromHW && *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO ) - { - *attr_range2_read = this->get_range(); - this->_updateRange2FromHW = false; - } - } - - attr.set_value(attr_range2_read); -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::read_electrometerChannel -// -// description : Extract real attribute values for electrometerChannel acquisition result. -// -//----------------------------------------------------------------------------- -void MCCE2Electrometers::read_electrometerChannel(Tango::Attribute &attr) -{ - DEBUG_STREAM << "MCCE2Electrometers::read_electrometerChannel(Tango::Attribute &attr) entering... "<< endl; - - Tango::DevUShort channelNumber = 0; - - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::read_electrometerChannel()" - ); - } - - try - { - *attr_electrometerChannel_read = this->_electrometer->get_ElectroChannel(); - attr.set_value(attr_electrometerChannel_read); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to set the active channel value!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to get the active channel value : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to get the active channel value.", - "MCCE2Electrometers::read_electrometerChannel()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to set the active channel value!"); - - ERROR_STREAM << "Failed to get the active channel value : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to get the new active channel value!", - "MCCE2Electrometers::read_electrometerChannel()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to get the active channel value : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to set the active channel value!"); - - throw; - } -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::write_electrometerChannel -// -// description : Write electrometerChannel attribute values to hardware. -// -//----------------------------------------------------------------------------- -void MCCE2Electrometers::write_electrometerChannel(Tango::WAttribute &attr) -{ - DEBUG_STREAM << "MCCE2Electrometers::write_electrometerChannel(Tango::WAttribute &attr) entering... "<< endl; - -// if ( !this->_electrometer ) -// { -// std::string err("There is no electrometer connected or the property\"electrometerTypeCh\" is not set"); -// ERROR_STREAM << err << std::endl; -// Tango::Except::throw_exception( -// "MEMORY_ERROR", -// err.c_str(), -// "MCCE2Electrometers::write_electrometerChannel()" -// ); -// } - - attr.get_write_value(attr_electrometerChannel_write); - - if ( attr_electrometerChannel_write == ELETRO_CHANNEL_ONE ) - { - if ( this->_electrometerCH1 ) - { - this->_electrometer = this->_electrometerCH1; - //- now force update from HW - this->_updateRange1FromHW = true; - } - else - { - WARN_STREAM << "Cannot control electrometer on this channel : seems that nothing is connected on!" << std::endl; - //- warn nothing is connected on this channel - *attr_range1_read = CORBA::string_dup("Not connected"); - } - } - else if ( attr_electrometerChannel_write == ELETRO_CHANNEL_TWO ) - { - if ( this->_electrometerCH2 ) - { - this->_electrometer = this->_electrometerCH2; - //- now force update from HW - this->_updateRange2FromHW = true; - } - else - { - WARN_STREAM << "Cannot control electrometer on this channel : seems that nothing is connected on!" << std::endl; - //- warn nothing is connected on this channel - *attr_range2_read = CORBA::string_dup("Not connected"); - } - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::range_up - * - * description: method to execute "RangeUP" - * Up the range of the electrometer. - * Throw : - * - electrometer::ElectrometerException if the range limit is reached - * - Tango::DevFailed if the command cannot be performed - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::range_up() -{ - DEBUG_STREAM << "MCCE2Electrometers::range_up(): entering... !" << endl; - - // Add your own code to control device here - - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::range_up()" - ); - } - - try - { - this->_electrometer->range_up(); - //- update range attr from hardware - if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE) - this->_updateRange1FromHW = true; - else if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO) - this->_updateRange2FromHW = true; - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to up the range!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to up the range : DevFailed EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to up the range.", - "MCCE2Electrometers::range_up()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to up the range!"); - - ERROR_STREAM << "Failed to up the range : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to up the range!", - "MCCE2Electrometers::range_up()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to up the range : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to up the range!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::range_down - * - * description: method to execute "RangeDOWN" - * Down the range of the electrometer. - * Throw : - * - electrometer::ElectrometerException if the range is negative - * - Tango::DevFailed if the command cannot be performed - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::range_down() -{ - DEBUG_STREAM << "MCCE2Electrometers::range_down(): entering... !" << endl; - - // Add your own code to control device here - - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::range_down()" - ); - } - - try - { - this->_electrometer->range_down(); - //- update range attr from hardware - if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE ) - this->_updateRange1FromHW = true; - else if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO ) - this->_updateRange2FromHW = true; - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to down the range!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to down the range : DevFailed EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to down the range.", - "MCCE2Electrometers::range_down()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to down the range!"); - - ERROR_STREAM << "Failed to down the range : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to down the range!", - "MCCE2Electrometers::range_down()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to down the range : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to down the range!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::set_zero_vffunction - * - * description: method to execute "SetZeroVFFunction" - * Enable the Zero V/F MCCE2 mode. - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::set_zero_vffunction() -{ - DEBUG_STREAM << "MCCE2Electrometers::set_zero_vffunction(): entering... !" << endl; - - // Add your own code to control device here - - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::set_zero_vffunction()" - ); - } - - try - { - this->_electrometer->set_Zero_VonF_function(); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to enable ZERO V/F function!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to enable ZERO V/F function : DevFailed EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to enable ZERO V/F function.", - "MCCE2Electrometers::set_zero_vffunction()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to enable ZERO V/F function!"); - - ERROR_STREAM << "Failed to enable ZERO V/F function : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable ZERO V/F function!", - "MCCE2Electrometers::set_zero_vffunction()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable ZERO V/F function : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to enable ZERO V/F function!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::set_offset_zero_v1_function - * - * description: method to execute "SetOffsetZeroV1Function" - * Enable the Offset or Zero V1 MCCE2 mode. - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::set_offset_zero_v1_function() -{ - DEBUG_STREAM << "MCCE2Electrometers::set_offset_zero_v1_function(): entering... !" << endl; - - // Add your own code to control device here - - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::set_offset_zero_v1_function()" - ); - } - - try - { - this->_electrometer->set_Offset_ZeroV1_function(); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to enable OFFSET or ZERO V1 function!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : DevFailed EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to enable OFFSET or ZERO V1 function.", - "MCCE2Electrometers::set_offset_zero_v1_function()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to enable OFFSET or ZERO V1 function!"); - - ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable OFFSET or ZERO V1 function!", - "MCCE2Electrometers::set_offset_zero_v1_function()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to enable OFFSET or ZERO V1 function!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::set_leakage_zero_v2_function - * - * description: method to execute "SetLeakageZeroV2Function" - * Enable the Leakage or Zero V2 MCCE2 mode. - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::set_leakage_zero_v2_function() -{ - DEBUG_STREAM << "MCCE2Electrometers::set_leakage_zero_v2_function(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::set_leakage_zero_v2_function()" - ); - } - - try - { - this->_electrometer->set_Leakage_ZeroV2_function(); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to enable LEAKAGE or ZERO V2 function!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : DevFailed EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to enable LEAKAGE or ZERO V2 function.", - "MCCE2Electrometers::set_leakage_zero_v2_function()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to enable LEAKAGE or ZERO V2 function!"); - - ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable LEAKAGE or ZERO V2 function!", - "MCCE2Electrometers::set_leakage_zero_v2_function()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to enable LEAKAGE or ZERO V2 function!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::set_test_function - * - * description: method to execute "SetTestFunction" - * Enable theTest MCCE2 mode. - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::set_test_function() -{ - DEBUG_STREAM << "MCCE2Electrometers::set_test_function(): entering... !" << endl; - - // Add your own code to control device here - - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::set_test_function()" - ); - } - - try - { - this->_electrometer->set_Test_function(); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to enable TEST function!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to enable TEST function : DevFailed EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to enable TEST function.", - "MCCE2Electrometers::set_test_function()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to enable TEST function!"); - - ERROR_STREAM << "Failed to enable TEST function : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable TEST function!", - "MCCE2Electrometers::set_test_function()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable TEST function : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to enable TEST function!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::mcce2__on - * - * description: method to execute "MCCE2_ON" - * Enables the function set. Parameters cannot be set (read only mode). - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::mcce2__on() -{ - DEBUG_STREAM << "MCCE2Electrometers::mcce2__on(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::mcce2__on()" - ); - } - - try - { - this->_electrometer->mcce_on(); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to enable MCCE ON function!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to enable MCCE ON function : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to enable MCCE ON function.", - "MCCE2Electrometers::mcce2__on()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to enable MCCE ON function!"); - - ERROR_STREAM << "Failed to enable MCCE ON function : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable MCCE ON function!", - "MCCE2Electrometers::mcce2__on()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable MCCE2_ON function : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to enable MCCE ON function!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::mcce2__off - * - * description: method to execute "MCCE2_OFF" - * Disables the function set. Parameters can be changed. - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::mcce2__off() -{ - DEBUG_STREAM << "MCCE2Electrometers::mcce2__off(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::mcce2__off()" - ); - } - - try - { - this->_electrometer->mcce_off(); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to enable MCCE OFF function!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to enable MCCE OFF function : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to enable MCCE OFF function.", - "MCCE2Electrometers::mcce2__off()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to enable MCCE OFF function!"); - - ERROR_STREAM << "Failed to enable MCCE OFF function : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable MCCE OFF function!", - "MCCE2Electrometers::mcce2__off()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable MCCE2_OFF function : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to enable MCCE OFF function!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::local - * - * description: method to execute "Local" - * Enable local keyboard and Key - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::local() -{ - DEBUG_STREAM << "MCCE2Electrometers::local(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::local()" - ); - } - - try - { - this->_electrometer->local(); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to enable local mode!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to enable local mode : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to enable local mode.", - "MCCE2Electrometers::local()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to enable local mode!"); - - ERROR_STREAM << "Failed to enable local function : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable local mode!", - "MCCE2Electrometers::local()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable local mode : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to enable local mode!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::remote - * - * description: method to execute "Remote" - * Disable \"MODIFY\" and the \"ON-OFF\" keys - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::remote() -{ - DEBUG_STREAM << "MCCE2Electrometers::remote(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::remote()" - ); - } - - try - { - this->_electrometer->remote(); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to enable remote mode!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to enable remote mode : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to enable remote mode.", - "MCCE2Electrometers::remote()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to enable remote mode!"); - - ERROR_STREAM << "Failed to enable remote mode : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable remote mode!", - "MCCE2Electrometers::remote()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable remote mode : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to enable remote mode!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::reset - * - * description: method to execute "Reset" - * Restart the MCCE-2 - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::reset() -{ - DEBUG_STREAM << "MCCE2Electrometers::reset(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::reset()" - ); - } - - try - { - this->_electrometer->reset(); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to enable reset mode!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to enable reset mode : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to enable reset mode.", - "MCCE2Electrometers::reset()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to enable reset mode!"); - - ERROR_STREAM << "Failed to enable reset mode : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable reset mode!", - "MCCE2Electrometers::reset()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable reset mode : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to enable reset mode!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::clear_registers - * - * description: method to execute "ClearRegisters" - * Clear error(s) - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::clear_registers() -{ - DEBUG_STREAM << "MCCE2Electrometers::clear_registers(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::clear_registers()" - ); - } - - try - { - this->_electrometer->clear_registers(); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to clear all errors!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to clear all errors : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to clear all errors.", - "MCCE2Electrometers::clear_registers()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to clear all errors!"); - - ERROR_STREAM << "Failed to clear all errors : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to clear all errors!", - "MCCE2Electrometers::clear_registers()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to clear errors : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to clear all errors!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::dev_state - * - * description: method to execute "State" - * This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller. - * - * @return State Code - * - */ -//+------------------------------------------------------------------ -Tango::DevState MCCE2Electrometers::dev_state() -{ - Tango::DevState argout = Tango::UNKNOWN; - DEBUG_STREAM << "MCCE2Electrometers::dev_state(): entering... !" << endl; - - // Add your own code to control device here - try - { - //- check properties - if ( this->_missing_property ) - { - argout = Tango::FAULT; - } - //- check device initialization - else if ( !this->_electrometerCH1 && !this->_electrometerCH2 ) - { - argout = Tango::FAULT; - } - //- check if an electro is conencted on a channel - else if( attr_electrometerChannel_write == ELETRO_CHANNEL_ONE && !this->_electrometerCH1) - { - argout = Tango::DISABLE; - } - else if( attr_electrometerChannel_write == ELETRO_CHANNEL_TWO && !this->_electrometerCH2) - { - argout = Tango::DISABLE; - } - //- check channel number - else if ( attr_electrometerChannel_write != ELETRO_CHANNEL_ONE && attr_electrometerChannel_write != ELETRO_CHANNEL_TWO ) - { - argout = Tango::ALARM; - } - else - { - //- update state - this->_electrometer->electrometer_status(); - //- get electrometer state - short tmpState = _electrometer->electrometer_state(); - - switch(tmpState) - { - case Tango::ON : - argout = Tango::ON; - break; - case Tango::FAULT : - argout = Tango::FAULT; - break; - case Tango::ALARM : - argout = Tango::ALARM; - break; - /*case Tango::UNKNOWN: - default : - argout = Tango::UNKNOWN; - break;*/ - } - } - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to get electrometer state!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Cannot perform get electrometer state : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to get electrometer state.", - "MCCE2Electrometers::dev_state()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to get electrometer state!"); - - ERROR_STREAM << "Failed to get electrometer state : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to get electrometer state!", - "MCCE2Electrometers::dev_state()", - Tango::ERR - ); - } - catch(...) - { - set_state(Tango::ALARM); - set_status("Failed to get electrometer state!"); - ERROR_STREAM << "Failed to get electrometer state : [...] EXCEPTION " << std::endl; - throw; - } - - set_state(argout); - return argout; -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::dev_status - * - * description: method to execute "Status" - * This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller. - * - * @return Status descrition - * - */ -//+------------------------------------------------------------------ -Tango::ConstDevString MCCE2Electrometers::dev_status() -{ - DEBUG_STREAM << "MCCE2Electrometers::dev_status(): entering... !" << endl; - - //- clear previous status - this->_statusStr.clear(); - - // Add your own code to control device here - try - { - if ( this->_missing_property ) - { - _statusStr = "Device cannot be up while its properties are not set!"; - } - //- check device initialization - else if ( !this->_electrometerCH1 && !_electrometerCH2 ) - { - _statusStr = "No electrometer connected!"; - } - - //- check if an electro is connected on a channel - if( attr_electrometerChannel_write == ELETRO_CHANNEL_ONE && !this->_electrometerCH1) - { - _statusStr += "No electrometer on channel ONE!"; - } - else if( attr_electrometerChannel_write == ELETRO_CHANNEL_TWO && !this->_electrometerCH2) - { - _statusStr += "No electrometer on channel TWO!"; - } - else if ( attr_electrometerChannel_write != ELETRO_CHANNEL_ONE && attr_electrometerChannel_write != ELETRO_CHANNEL_TWO ) - { - _statusStr += "Invalid electrometer channel set!"; - } - else - { - //- add electrometer status info - _statusStr += this->_electrometer->electrometer_status(); - } - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Cannot perform electrometer_status() command."); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Cannot perform electrometer_status() command : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to get electrometer status.", - "MCCE2Electrometers::dev_status()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Cannot perform electrometer_status() command!"); - - ERROR_STREAM << "Cannot perform electrometer_status() command : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Cannot perform electrometer_status() command!", - "MCCE2Electrometers::dev_status()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable remote mode : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Cannot perform electrometer_status() command : caugth [...] exception."); - throw; - } - set_status( _statusStr.c_str() ); - return _statusStr.c_str(); -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::electrometer_to_tango_exception() -// -// description : Extract real attribute values from -// hardware acquisition result. -// -//----------------------------------------------------------------------------- -Tango::DevFailed MCCE2Electrometers::electrometer_to_tango_exception(const electrometer::ElectrometerException& de) -{ - Tango::DevErrorList error_list(de.errors.size()); - error_list.length(de.errors.size()); - - for(unsigned int i = 0; i < de.errors.size(); i++) - { - error_list[i].reason = CORBA::string_dup(de.errors[i].reason.c_str()); - error_list[i].desc = CORBA::string_dup(de.errors[i].desc.c_str()); - error_list[i].origin = CORBA::string_dup(de.errors[i].origin.c_str()); - - switch(de.errors[i].severity) - { - case electrometer::WARN: - error_list[i].severity = Tango::WARN; - break; - - case electrometer::PANIC: - error_list[i].severity = Tango::PANIC; - break; - - case electrometer::ERR: - - default: - error_list[i].severity = Tango::ERR; - break; - } - } - return Tango::DevFailed(error_list); -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::set_measure_function - * - * description: method to execute "SetMeasureFunction" - * Enable the Measure MCCE2 mode. - * - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::set_measure_function() -{ - DEBUG_STREAM << "MCCE2Electrometers::set_measure_function(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::set_measure_function()" - ); - } - - try - { - this->_electrometer->set_Measure_function(); - } - catch(const electrometer::ElectrometerException& ke) - { - Tango::DevFailed df = electrometer_to_tango_exception(ke); - set_state(Tango::ALARM); - set_status("Failed to enable MEASURE function!"); - - ERROR_STREAM << "Failed to enable MEASURE function : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable MEASURE function.", - "MCCE2Electrometers::set_measure_function()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to enable MEASURE function!"); - - ERROR_STREAM << "Failed to enable MEASURE function : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to enable MEASURE function!", - "MCCE2Electrometers::set_measure_function()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to enable MEASURE function : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to enable MEASURE function!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::set_range - * - * description: method to execute "SetRange" - * Apply the specified argin range, on the electrometer, if well formatted. - * Else an exception is thrown. - * - * @param argin The range to apply on the electrometer - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::set_range(Tango::DevString argin) -{ - DEBUG_STREAM << "MCCE2Electrometers::set_range(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::set_range()" - ); - } - - try - { - this->_electrometer->set_ElectroMeterRange(std::string(argin)); - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to write the range!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to write the range : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to write the range.", - "MCCE2Electrometers::set_range()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to write the range!"); - - ERROR_STREAM << "Failed to write the range : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to write the range!", - "MCCE2Electrometers::set_range()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to set the new range value : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to write the range!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::set_hz_filter - * - * description: method to execute "SetHzFilter" - * The Cut-off frequency in Hz - * - * @param argin The MCCE2 cut-off frequency in Hz - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::set_hz_filter(Tango::DevShort argin) -{ - DEBUG_STREAM << "MCCE2Electrometers::set_hz_filter(): entering... !" << endl; - std::string dataStr("") ; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::set_hz_filter()" - ); - } - - try - { - dataStr = XString<short>::convertToString(argin); - this->_electrometer->set_ElectroMeterFrequency(dataStr); - } - catch(const electrometer::ElectrometerException& ke) - { - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - set_state(Tango::ALARM); - set_status("Failed to set the Hz Filter!"); - ERROR_STREAM << "Failed to set the Hz Filter : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to set the Hz Filter.", - "MCCE2Electrometers::set_hz_filter()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - ERROR_STREAM << "Failed to set the Hz Filter : DevFailed EXCEPTION -> " << df << std::endl; - - set_state(Tango::ALARM); - set_status("Failed to set the Hz Filter!"); - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to set the Hz Filter!", - "MCCE2Electrometers::set_hz_filter()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to set the Hz Filter : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to set the Hz Filter!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::get_hz_filter - * - * description: method to execute "GetHzFilter" - * Returns the Cut-off frequency in Hz - * - * @return The MCCE2 cut-off frequency in Hz - * - */ -//+------------------------------------------------------------------ -Tango::DevShort MCCE2Electrometers::get_hz_filter() -{ - Tango::DevShort argout = 0; - DEBUG_STREAM << "MCCE2Electrometers::get_hz_filter(): entering... !" << endl; - - // Add your own code to control device here - std::string dataStr(""); - - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::get_hz_filter()" - ); - } - - try - { - dataStr = this->_electrometer->get_ElectroMeterFrequency(); - argout = XString<short>::convertFromString(dataStr); - } - catch(const electrometer::ElectrometerException& ke) - { - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - set_state(Tango::ALARM); - set_status("Failed to set the Hz Filter!"); - ERROR_STREAM << "Failed to read the gain : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to read hzFilter.", - "hzFilterAttrib::get_hz_filter()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - ERROR_STREAM << "Failed to read the Hz Filter : DevFailed EXCEPTION -> " << df << std::endl; - - set_state(Tango::ALARM); - set_status("Failed to set the Hz Filter!"); - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to read the Hz Filter!", - "MCCE2Electrometers::get_hz_filter()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to read the Hz Filter : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to read the Hz Filter!"); - - throw; - } - - return argout; -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::get_gain - * - * description: method to execute "GetGain" - * Returns the MCCE-2 gain - * - * @return The MCCE2 gain - * - */ -//+------------------------------------------------------------------ -Tango::DevShort MCCE2Electrometers::get_gain() -{ - Tango::DevShort argout = 0; - DEBUG_STREAM << "MCCE2Electrometers::get_gain(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::get_gain()" - ); - } - - try - { - std::string dataStr(""); - dataStr = this->_electrometer->get_ElectroMeterGain(); - argout = XString<short>::convertFromString(dataStr); - } - catch(const electrometer::ElectrometerException& ke) - { - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - set_state(Tango::ALARM); - set_status("Failed to read the gain!"); - ERROR_STREAM << "Failed to read the gain : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to read the gain .", - "hzFilterAttrib::get_gain()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - ERROR_STREAM << "Failed to read the gain : DevFailed EXCEPTION -> " << df << std::endl; - - set_state(Tango::ALARM); - set_status("Failed to read the gain!"); - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to read the gain!", - "MCCE2Electrometers::get_gain()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to read the gain : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to read the gain!"); - - throw; - } - - return argout; -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::set_gain - * - * description: method to execute "SetGain" - * Sets the new MCCE-2 gain value. - * - * @param argin The new MCCE-2 gain - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::set_gain(Tango::DevUShort argin) -{ - DEBUG_STREAM << "MCCE2Electrometers::set_gain(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::set_gain()" - ); - } - - try - { - std::string dataStr(""); - dataStr = XString<short>::convertToString(argin); - this->_electrometer->set_ElectroMeterGain(dataStr); - } - catch(const electrometer::ElectrometerException& ke) - { - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - set_state(Tango::ALARM); - set_status("Failed to set the gain!"); - ERROR_STREAM << "Failed to set the gain : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to set the gain.", - "hzFilterAttrib::set_gain()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - ERROR_STREAM << "Failed to set the gain : DevFailed EXCEPTION -> " << df << std::endl; - - set_state(Tango::ALARM); - set_status("Failed to set the gain!"); - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to set the the gain!", - "MCCE2Electrometers::set_gain()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to set the gain : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to set the gain!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::get_range - * - * description: method to execute "GetRange" - * Returns the electrometer range. - * - * @return The actual electrometer range - * - */ -//+------------------------------------------------------------------ -Tango::DevString MCCE2Electrometers::get_range() -{ - // POGO has generated a method core with argout allocation. - // If you would like to use a static reference without copying, - // See "TANGO Device Server Programmer's Manual" - // (chapter : Writing a TANGO DS / Exchanging data) - //------------------------------------------------------------ - - // Add your own code to control device here - DEBUG_STREAM << "MCCE2Electrometers::get_range(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::get_range()" - ); - } - - Tango::DevString argout = 0; - try - { - std::string rangeStr(""); - rangeStr = this->_electrometer->get_ElectroMeterRange(); - argout = new char [rangeStr.size() + 1]; - strcpy(argout, rangeStr.c_str()); - } - catch(const electrometer::ElectrometerException& ke) - { - if ( argout ) - delete [] argout; - Tango::DevFailed df = electrometer_to_tango_exception(ke); - set_state(Tango::ALARM); - set_status("Failed to read the range!"); - - ERROR_STREAM << "Failed to set read the range : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to read the range.", - "MCCE2Electrometers::get_range()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - if ( argout ) - delete [] argout; - set_state(Tango::ALARM); - set_status("Failed to read the range!"); - - ERROR_STREAM << "Failed to read the range : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to read the range!", - "MCCE2Electrometers::get_range()", - Tango::ERR - ); - } - catch(...) - { - if ( argout ) - delete [] argout; - ERROR_STREAM << "Failed to read the range : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to read the range!"); - - throw; - } - - return argout; -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::get_mode - * - * description: method to execute "GetMode" - * Returns the electrometer mode which can be one of the following values : - * MEASURE, V/F Zero, OFFSET, LEAKAGE or TEST. - * - * @return The electrometer mode (MEASURE, LEAKAGE ...) - * - */ -//+------------------------------------------------------------------ -Tango::DevString MCCE2Electrometers::get_mode() -{ - // POGO has generated a method core with argout allocation. - // If you would like to use a static reference without copying, - // See "TANGO Device Server Programmer's Manual" - // (chapter : Writing a TANGO DS / Exchanging data) - //------------------------------------------------------------ - DEBUG_STREAM << "MCCE2Electrometers::get_mode(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::get_mode()" - ); - } - - Tango::DevString argout = 0; - try - { - std::string modeStr = this->_electrometer->get_ElectroMeterMode(); - argout = new char [modeStr.size() + 1]; - strcpy(argout, modeStr.c_str()); - } - catch(const electrometer::ElectrometerException& ke) - { - if ( argout ) - delete [] argout; - set_state(Tango::ALARM); - set_status("Failed to read the mode!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to set read the mode : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to read the mode.", - "MCCE2Electrometers::get_mode()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - if ( argout ) - delete [] argout; - set_state(Tango::ALARM); - set_status("Failed to read the mode!"); - - ERROR_STREAM << "Failed to read the mode : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to read the mode!", - "MCCE2Electrometers::get_mode()", - Tango::ERR - ); - } - catch(...) - { - if ( argout ) - delete [] argout; - ERROR_STREAM << "Failed to read the mode : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to read the mode!"); - - throw; - } - return argout; -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::get_polarity - * - * description: method to execute "GetPolarity" - * Returns the electrometer polarity, which can be POSITIVE or NEGATIVE. - * - * @return The electrometer polarity - * - */ -//+------------------------------------------------------------------ -Tango::DevString MCCE2Electrometers::get_polarity() -{ - // POGO has generated a method core with argout allocation. - // If you would like to use a static reference without copying, - // See "TANGO Device Server Programmer's Manual" - // (chapter : Writing a TANGO DS / Exchanging data) - //------------------------------------------------------------ - DEBUG_STREAM << "MCCE2Electrometers::get_polarity(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::get_polarity()" - ); - } - - - Tango::DevString argout = 0; - try - { - std::string polarStr = this->_electrometer->get_ElectroMeterPolarity(); - argout = new char [polarStr.size() + 1]; - strcpy(argout, polarStr.c_str()); - } - catch(const electrometer::ElectrometerException& ke) - { - if ( argout ) - delete [] argout; - set_state(Tango::ALARM); - set_status("Failed to read the polarity!"); - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to set read the polarity : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to read the polarity.", - "MCCE2Electrometers::get_polarity()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - if ( argout ) - delete [] argout; - set_state(Tango::ALARM); - set_status("Failed to read the polarity!"); - - ERROR_STREAM << "Failed to read the polarity : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to read the polarity!", - "MCCE2Electrometers::get_polarity()", - Tango::ERR - ); - } - catch(...) - { - if ( argout ) - delete [] argout; - ERROR_STREAM << "Failed to read the polarity : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to read the polarity!"); - - throw; - } - - return argout; -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::create_electrometers_obj - * - * description: internal method to instanciate electrometer(s) obj - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::create_electrometers_obj() -{ - //- instanciate channel 1 - if ( !_electrometerCH1 && electrometer1Address ) - { - AbstractElectrometerClass* mcce1; - mcce1 = new Novelec_MCCE2(communicationLinkName, electrometer1Address); - mcce1->init_protocol(); - - Novelec_MCCE2* nMCCE1 = dynamic_cast<Novelec_MCCE2*>(mcce1); - short type1 = 0; - //- find connected Novelec model - try - { - if(nMCCE1) - { - //- get type as num - type1 = nMCCE1->get_electrometer_type(); - //- get type as string - this->_electroCH1StrType = nMCCE1->get_electrometer_typeStr(); - } - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to find which Novelec type is connected on channel one : communication caught[...]"); - - Tango::DevFailed df = electrometer_to_tango_exception(ke); - FATAL_STREAM << "Failed to find which Novelec type is connected on channel one : ElectrometerException EXCEPTION -> " << df << std::endl; - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to find which Novelec type is connected on channel one!"); - - FATAL_STREAM << "Failed to find which Novelec type is connected : DevFailed EXCEPTION -> " << df << std::endl; - } - catch(...) - { - set_state(Tango::ALARM); - set_status("Failed to find which Novelec type is connected on channel one : communication caught[...]"); - - FATAL_STREAM << "Failed to find which Novelec type is connected on channel one : [...] EXCEPTION " << std::endl; - } - - switch(type1) - { - case 0 : - this->_electrometerCH1 = 0; - break; - case 1 : - case 2 : - case 3 : -// this->_electrometerCH1 = new N_PhotoVoltaique (communicationLinkName, channelNumber, electrometerTypeCh1); - this->_electrometerCH1 = new N_PhotoVoltaique (communicationLinkName, electrometer1Address); - break; - case 4 : - case 5 : - this->_electrometerCH1 = new N_PhotoConducteur(communicationLinkName, electrometer1Address); - break; - default : - this->_electrometerCH1 = 0; - FATAL_STREAM << "\nERROR : Electrometers::create_electrometers_obj() -> this " << electrometer1Address << " Novelec type is not supported now!" << endl; - return; - } - if ( mcce1 ) - { - delete mcce1; - mcce1 = 0; - } - } - - //- instanciate channel 2 - if ( !this->_electrometerCH2 && electrometer2Address ) - { - AbstractElectrometerClass* mcce2; - mcce2 = new Novelec_MCCE2(communicationLinkName, electrometer2Address); - mcce2->init_protocol(); - Novelec_MCCE2* nMCCE2 = dynamic_cast<Novelec_MCCE2*>(mcce2); - short type2 = 0; - try - { - if(nMCCE2) - { - //- get type as num - type2 = nMCCE2->get_electrometer_type(); - //- get type as string - this->_electroCH2StrType = nMCCE2->get_electrometer_typeStr(); - } - } - catch(const electrometer::ElectrometerException& ke) - { - set_state(Tango::ALARM); - set_status("Failed to find which Novelec type is connected on channel two : communication caught[...]"); - - Tango::DevFailed df = electrometer_to_tango_exception(ke); - FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : ElectrometerException EXCEPTION -> " << df << std::endl; - } - catch(Tango::DevFailed& df) - { - set_state(Tango::ALARM); - set_status("Failed to find which Novelec type is connected on channel two!"); - - FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : DevFailed EXCEPTION -> " << df << std::endl; - } - catch(...) - { - set_state(Tango::ALARM); - set_status("Failed to find which Novelec type is connected on channel two : communication caught[...]"); - - FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : [...] EXCEPTION " << std::endl; - } - - switch(type2) - { - case 0 : - this->_electrometerCH2 = 0; - break; - case 1 : - case 2 : - case 3 : - this->_electrometerCH2 = new N_PhotoVoltaique (communicationLinkName, electrometer2Address); - break; - case 4 : - case 5 : - this->_electrometerCH2 = new N_PhotoConducteur(communicationLinkName, electrometer2Address); - break; - default : - this->_electrometerCH2 = 0; - FATAL_STREAM << "\nERROR : Electrometers::create_electrometers_obj() -> this " << electrometer2Address << " Novelec type is not supported now!" << endl; - return; - } - if ( mcce2 ) - { - delete mcce2; - mcce2 = 0; - } - } - - //- check - if (!this->_electrometerCH1 && !this->_electrometerCH2) - { - set_state(Tango::FAULT); - set_status("No electrometer connected on channels 1 and 2!"); - ERROR_STREAM << "No connected electrometer(s) found!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "No connected electrometer(s) found!", - "MCCE2Electrometers::create_electrometers_obj()"); - } - - //- configure MCCE-2 : clear error(s), explicit response, mode MEASURE OFF - bool initCH1 = false; - bool initCH2 = false; - try - { - if ( this->_electrometerCH1 ) - { - initCH1 = this->_electrometerCH1->init_protocol(); - if ( initCH1 ) - this->_electrometerCH1->mcce_init(); - - //- read channel range - this->_electrometer = this->_electrometerCH1; - *attr_range1_read = this->get_range(); - - INFO_STREAM << "this->_electrometer = this->_electrometerCH1!" << std::endl; - } - else - WARN_STREAM << "WARN : !this->_electrometerCH1" << std::endl; - - if ( this->_electrometerCH2 ) - { - initCH2 = this->_electrometerCH2->init_protocol(); - if ( initCH2 ) - this->_electrometerCH2->mcce_init(); - - //- read channel range - this->_electrometer = this->_electrometerCH2; - *attr_range2_read = this->get_range(); - - INFO_STREAM << "this->_electrometer = this->_electrometerCH2!" << std::endl; - } - - //- start with channel one - if ( this->_electrometerCH1 ) - { - this->_electrometer = this->_electrometerCH1; - this->_init_done = true; - } - //- if nothing connected on channel one, try with the second one - else if ( this->_electrometerCH2 ) - { - this->_electrometer = this->_electrometerCH2; - this->_init_done = true; - } - else - this->_init_done = false; - } - catch(const electrometer::ElectrometerException& ke) - { - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : ElectrometerException EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to set up the MCCE-2 module for a serial communication!", - "MCCE2Electrometers::create_electrometers_obj()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - set_state(Tango::FAULT); - set_status("Failed to set up the MCCE-2 module for a serial communication!"); - - ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : DevFailed EXCEPTION -> " << df << std::endl; - - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to set up the MCCE-2 module for a serial communication!", - "MCCE2Electrometers::create_electrometers_obj()", - Tango::ERR - ); - } - catch(...) - { - set_state(Tango::FAULT); - set_status("Failed to set up the MCCE-2 module for a serial communication caught[...]"); - - ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : [...] EXCEPTION " << std::endl; - - Tango::Except::throw_exception( - "UNKNOWN_ERROR", - "Failed to set up the MCCE-2 module for a serial communication! [(...) exception]", - "MCCE2Electrometers::create_electrometers_obj()", - Tango::ERR - ); - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::set_polarity - * - * description: method to execute "SetPolarity" - * Sets the new electrometer polarity. <Br> - * NOTE : <Br> - * Value must be set in UPPER case !!! - * - * @param argin POSITIVE or NEGATIVE - * - */ -//+------------------------------------------------------------------ -void MCCE2Electrometers::set_polarity(Tango::DevString argin) -{ - DEBUG_STREAM << "MCCE2Electrometers::set_polarity(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometer ) - { - ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "Failed to build the electrometer obj : not enough memory!?", - "MCCE2Electrometers::set_polarity()" - ); - } - - try - { - this->_electrometer->set_ElectroMeterPolarity(argin); - } - catch(const electrometer::ElectrometerException& ke) - { - Tango::DevFailed df = electrometer_to_tango_exception(ke); - - set_state(Tango::ALARM); - set_status("Failed to change electrometer polarity!"); - ERROR_STREAM << "Failed to change electrometer polarity : ElectrometerException EXCEPTION -> " << df << std::endl; - Tango::Except::re_throw_exception(df, - "UNKNOWN_ERROR", - "Failed to change electrometer polarity.", - "hzFilterAttrib::set_polarity()", - Tango::ERR - ); - } - catch(Tango::DevFailed& df) - { - ERROR_STREAM << "Failed to change electrometer polarity : DevFailed EXCEPTION -> " << df << std::endl; - - set_state(Tango::ALARM); - set_status("Failed to change electrometer polarity!"); - Tango::Except::re_throw_exception(df, - "COMMUNICATION_ERROR", - "Failed to change electrometer polarity!", - "MCCE2Electrometers::set_polarity()", - Tango::ERR - ); - } - catch(...) - { - ERROR_STREAM << "Failed to change electrometer polarity : [...] EXCEPTION " << std::endl; - set_state(Tango::ALARM); - set_status("Failed to change electrometer polarity!"); - - throw; - } -} - -//+------------------------------------------------------------------ -/** - * method: MCCE2Electrometers::get_electrometer_type_str - * - * description: method to execute "GetElectrometerTypeStr" - * This command returns the connected electrometer type as string for the specified channel. - * - * @param argin channel number - * @return the electrometer type as string - * - */ -//+------------------------------------------------------------------ -Tango::DevString MCCE2Electrometers::get_electrometer_type_str(Tango::DevUShort argin) -{ - // POGO has generated a method core with argout allocation. - // If you would like to use a static reference without copying, - // See "TANGO Device Server Programmer's Manual" - // (chapter : Writing a TANGO DS / Exchanging data) - //------------------------------------------------------------ - Tango::DevString argout = 0; - DEBUG_STREAM << "MCCE2Electrometers::get_electrometer_type_str(): entering... !" << endl; - - // Add your own code to control device here - if ( !this->_electrometerCH1 && !_electrometerCH2 ) - { - ERROR_STREAM << "No electrometer connected on both channels!" << std::endl; - Tango::Except::throw_exception( - "MEMORY_ERROR", - "No electrometer connected on both channels!?", - "MCCE2Electrometers::get_electrometer_type_str()" - ); - } - - if ( argin == ELETRO_CHANNEL_ONE ) - { - argout = new char[this->_electroCH1StrType.size()+1]; - ::strncpy(argout, _electroCH1StrType.c_str(), _electroCH1StrType.size()+1); - } - else if ( argin == ELETRO_CHANNEL_TWO ) - { - argout = new char[this->_electroCH2StrType.size()+1]; - ::strncpy(argout, _electroCH2StrType.c_str(), _electroCH2StrType.size()+1); - } - else - { - Tango::Except::throw_exception( - "INVALID_PARAMETER", - "Channel number must be 1 or 2.", - "MCCE2Electrometers::get_electrometer_type_str()" - ); - } - - return argout; -} - -} // namespace + } + catch(...) + { + FATAL_STREAM << "Device initialization Failed : check logs for more informations."; + + set_state(Tango::FAULT); + set_status("Failed to find which Novelec type is connected : communication caught[...]"); + return; + } + }//- end if + + INFO_STREAM << "Device up but not completly initialised!" << std::endl; + INFO_STREAM << "this->proxyName = " << this->proxyName << std::endl; + INFO_STREAM << "electrometer1Address = " << electrometer1Address << std::endl; + INFO_STREAM << "electrometer2Address = " << electrometer2Address << std::endl; + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::init_device +} + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::get_device_property() + * Description : Read database to initialize property data members. + */ +//-------------------------------------------------------- +void MCCE2Electrometers::get_device_property() +{ + /*----- PROTECTED REGION ID(MCCE2Electrometers::get_device_property_before) ENABLED START -----*/ + + // Initialize property data members + proxyName = ""; + electrometer1Address = 0; + electrometer2Address = 0; + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::get_device_property_before + + + // Read device properties from database. + Tango::DbData dev_prop; + dev_prop.push_back(Tango::DbDatum("ProxyName")); + dev_prop.push_back(Tango::DbDatum("Electrometer1Address")); + dev_prop.push_back(Tango::DbDatum("Electrometer2Address")); + dev_prop.push_back(Tango::DbDatum("ComProtocol")); + + // 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 MCCE2ElectrometersClass to get class property + Tango::DbDatum def_prop, cl_prop; + MCCE2ElectrometersClass *ds_class = + (static_cast<MCCE2ElectrometersClass *>(get_device_class())); + int i = -1; + + // Try to initialize ProxyName from class property + cl_prop = ds_class->get_class_property(dev_prop[++i].name); + if (cl_prop.is_empty()==false) cl_prop >> proxyName; + else { + // Try to initialize ProxyName from default device value + def_prop = ds_class->get_default_device_property(dev_prop[i].name); + if (def_prop.is_empty()==false) def_prop >> proxyName; + } + // And try to extract ProxyName value from database + if (dev_prop[i].is_empty()==false) dev_prop[i] >> proxyName; + + // Try to initialize Electrometer1Address from class property + cl_prop = ds_class->get_class_property(dev_prop[++i].name); + if (cl_prop.is_empty()==false) cl_prop >> electrometer1Address; + else { + // Try to initialize Electrometer1Address from default device value + def_prop = ds_class->get_default_device_property(dev_prop[i].name); + if (def_prop.is_empty()==false) def_prop >> electrometer1Address; + } + // And try to extract Electrometer1Address value from database + if (dev_prop[i].is_empty()==false) dev_prop[i] >> electrometer1Address; + + // Try to initialize Electrometer2Address from class property + cl_prop = ds_class->get_class_property(dev_prop[++i].name); + if (cl_prop.is_empty()==false) cl_prop >> electrometer2Address; + else { + // Try to initialize Electrometer2Address from default device value + def_prop = ds_class->get_default_device_property(dev_prop[i].name); + if (def_prop.is_empty()==false) def_prop >> electrometer2Address; + } + // And try to extract Electrometer2Address value from database + if (dev_prop[i].is_empty()==false) dev_prop[i] >> electrometer2Address; + + // Try to initialize ComProtocol from class property + cl_prop = ds_class->get_class_property(dev_prop[++i].name); + if (cl_prop.is_empty()==false) cl_prop >> comProtocol; + else { + // Try to initialize ComProtocol from default device value + def_prop = ds_class->get_default_device_property(dev_prop[i].name); + if (def_prop.is_empty()==false) def_prop >> comProtocol; + } + // And try to extract ComProtocol value from database + if (dev_prop[i].is_empty()==false) dev_prop[i] >> comProtocol; + + } + + /*----- PROTECTED REGION ID(MCCE2Electrometers::get_device_property_after) ENABLED START -----*/ + + // Check device property data members init + //- Creates default property + Tango::DbData data_put; + if ( dev_prop[0].is_empty() ) + { + Tango::DbDatum prop("ComProtocol"); + prop << comProtocol; + data_put.push_back(prop); + } + if ( dev_prop[0].is_empty() ) + { + Tango::DbDatum prop("ProxyName"); + prop << proxyName; + data_put.push_back(prop); + } + if ( dev_prop[1].is_empty() ) + { + Tango::DbDatum prop("Electrometer1Address"); + prop << electrometer1Address; + data_put.push_back(prop); + } + if ( dev_prop[2].is_empty() ) + { + Tango::DbDatum prop("Electrometer2Address"); + prop << electrometer2Address; + data_put.push_back(prop); + } + + //- write default property if created + if( !data_put.empty() ) + get_db_device()->put_property(data_put); + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::get_device_property_after +} + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::always_executed_hook() + * Description : method always executed before any command is executed + */ +//-------------------------------------------------------- +void MCCE2Electrometers::always_executed_hook() +{ + //INFO_STREAM << "MCCE2Electrometers::always_executed_hook() " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::always_executed_hook) ENABLED START -----*/ + + // code always executed before all requests + //- noop + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::always_executed_hook +} + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::read_attr_hardware() + * Description : Hardware acquisition for attributes + */ +//-------------------------------------------------------- +void MCCE2Electrometers::read_attr_hardware(TANGO_UNUSED(vector<long> &attr_list)) +{ + DEBUG_STREAM << "MCCE2Electrometers::read_attr_hardware(vector<long> &attr_list) entering... " << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::read_attr_hardware) ENABLED START -----*/ + + // Add your own code + // Add your own code here + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::read_attr_hardware +} + +//-------------------------------------------------------- +/** + * Read attribute electrometerChannel related method + * Description: MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first). + * + * Data type: Tango::DevUShort + * Attr type: Scalar + */ +//-------------------------------------------------------- +void MCCE2Electrometers::read_electrometerChannel(Tango::Attribute &attr) +{ + DEBUG_STREAM << "MCCE2Electrometers::read_electrometerChannel(Tango::Attribute &attr) entering... " << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::read_electrometerChannel) ENABLED START -----*/ + Tango::DevUShort channelNumber = 0; + + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::read_electrometerChannel()" + ); + } + + try + { + *attr_electrometerChannel_read = this->_electrometer->get_ElectroChannel(); + attr.set_value(attr_electrometerChannel_read); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to set the active channel value!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to get the active channel value : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to get the active channel value.", + "MCCE2Electrometers::read_electrometerChannel()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to set the active channel value!"); + + ERROR_STREAM << "Failed to get the active channel value : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to get the new active channel value!", + "MCCE2Electrometers::read_electrometerChannel()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to get the active channel value : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to set the active channel value!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::read_electrometerChannel +} +//-------------------------------------------------------- +/** + * Write attribute electrometerChannel related method + * Description: MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first). + * + * Data type: Tango::DevUShort + * Attr type: Scalar + */ +//-------------------------------------------------------- +void MCCE2Electrometers::write_electrometerChannel(Tango::WAttribute &attr) +{ + DEBUG_STREAM << "MCCE2Electrometers::write_electrometerChannel(Tango::WAttribute &attr) entering... " << endl; + // Retrieve write value + Tango::DevUShort w_val; + attr.get_write_value(w_val); + /*----- PROTECTED REGION ID(MCCE2Electrometers::write_electrometerChannel) ENABLED START -----*/ + + if ( w_val == ELETRO_CHANNEL_ONE ) + { + if ( this->_electrometerCH1 ) + { + this->_electrometer = this->_electrometerCH1; + //- now force update from HW + this->_updateRange1FromHW = true; + } + else + { + WARN_STREAM << "Cannot control electrometer on this channel : seems that nothing is connected on!" << std::endl; + //- warn nothing is connected on this channel + *attr_range1_read = CORBA::string_dup("Not connected"); + } + } + else if ( w_val == ELETRO_CHANNEL_TWO ) + { + if ( this->_electrometerCH2 ) + { + this->_electrometer = this->_electrometerCH2; + //- now force update from HW + this->_updateRange2FromHW = true; + } + else + { + WARN_STREAM << "Cannot control electrometer on this channel : seems that nothing is connected on!" << std::endl; + //- warn nothing is connected on this channel + *attr_range2_read = CORBA::string_dup("Not connected"); + } + } + attr_electrometerChannel_write = w_val; + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::write_electrometerChannel +} +//-------------------------------------------------------- +/** + * Read attribute range1 related method + * Description: The channel one MCCE2 range. + * + * Data type: Tango::DevString + * Attr type: Scalar + */ +//-------------------------------------------------------- +void MCCE2Electrometers::read_range1(Tango::Attribute &attr) +{ + DEBUG_STREAM << "MCCE2Electrometers::read_range1(Tango::Attribute &attr) entering... " << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::read_range1) ENABLED START -----*/ + if ( !this->_electrometerCH1 ) + { + *attr_range1_read = CORBA::string_dup("Not connected"); + } + else + { + if ( this->_updateRange1FromHW && *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE ) + { + *attr_range1_read = this->get_range(); + this->_updateRange1FromHW = false; + } + } + + attr.set_value(attr_range1_read); + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::read_range1 +} +//-------------------------------------------------------- +/** + * Read attribute range2 related method + * Description: The channel two MCCE range. + * + * Data type: Tango::DevString + * Attr type: Scalar + */ +//-------------------------------------------------------- +void MCCE2Electrometers::read_range2(Tango::Attribute &attr) +{ + DEBUG_STREAM << "MCCE2Electrometers::read_range2(Tango::Attribute &attr) entering... " << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::read_range2) ENABLED START -----*/ + if ( !this->_electrometerCH2 ) + { + *attr_range2_read = CORBA::string_dup("Not connected"); + } + else + { + if ( this->_updateRange2FromHW && *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO ) + { + *attr_range2_read = this->get_range(); + this->_updateRange2FromHW = false; + } + } + + attr.set_value(attr_range2_read); + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::read_range2 +} + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::add_dynamic_attributes() + * Description : Create the dynamic attributes if any + * for specified device. + */ +//-------------------------------------------------------- +void MCCE2Electrometers::add_dynamic_attributes() +{ + /*----- PROTECTED REGION ID(MCCE2Electrometers::add_dynamic_attributes) ENABLED START -----*/ + + // Add your own code to create and add dynamic attributes if any + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::add_dynamic_attributes +} + +//-------------------------------------------------------- +/** + * Command State related method + * Description: This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller. + * + * @returns State Code + */ +//-------------------------------------------------------- +Tango::DevState MCCE2Electrometers::dev_state() +{ + DEBUG_STREAM << "MCCE2Electrometers::State() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::dev_state) ENABLED START -----*/ + + Tango::DevState argout = Tango::UNKNOWN; // replace by your own algorithm + // Add your own code + DEBUG_STREAM << "MCCE2Electrometers::dev_state(): entering... !" << endl; + + // Add your own code to control device here + try + { + //- check properties + if ( this->_missing_property ) + { + argout = Tango::FAULT; + } + //- check device initialization + else if ( !this->_electrometerCH1 && !this->_electrometerCH2 ) + { + argout = Tango::FAULT; + } + //- check if an electro is conencted on a channel + else if( attr_electrometerChannel_write == ELETRO_CHANNEL_ONE && !this->_electrometerCH1) + { + argout = Tango::DISABLE; + } + else if( attr_electrometerChannel_write == ELETRO_CHANNEL_TWO && !this->_electrometerCH2) + { + argout = Tango::DISABLE; + } + //- check channel number + else if ( attr_electrometerChannel_write != ELETRO_CHANNEL_ONE && attr_electrometerChannel_write != ELETRO_CHANNEL_TWO ) + { + argout = Tango::ALARM; + } + else + { + //- update state + this->_electrometer->electrometer_status(); + //- get electrometer state + short tmpState = _electrometer->electrometer_state(); + + switch(tmpState) + { + case Tango::ON : + argout = Tango::ON; + break; + case Tango::FAULT : + argout = Tango::FAULT; + break; + case Tango::ALARM : + argout = Tango::ALARM; + break; + /*case Tango::UNKNOWN: + default : + argout = Tango::UNKNOWN; + break;*/ + } + } + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to get electrometer state!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Cannot perform get electrometer state : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to get electrometer state.", + "MCCE2Electrometers::dev_state()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to get electrometer state!"); + + ERROR_STREAM << "Failed to get electrometer state : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to get electrometer state!", + "MCCE2Electrometers::dev_state()", + Tango::ERR + ); + } + catch(...) + { + set_state(Tango::ALARM); + set_status("Failed to get electrometer state!"); + ERROR_STREAM << "Failed to get electrometer state : [...] EXCEPTION " << std::endl; + throw; + } + + set_state(argout); + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::dev_state + set_state(argout); // Give the state to Tango. + if (argout!=Tango::ALARM) + DeviceImpl::dev_state(); + return get_state(); // Return it after Tango management. +} +//-------------------------------------------------------- +/** + * Command Status related method + * Description: This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller. + * + * @returns Status description + */ +//-------------------------------------------------------- +Tango::ConstDevString MCCE2Electrometers::dev_status() +{ + DEBUG_STREAM << "MCCE2Electrometers::Status() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::dev_status) ENABLED START -----*/ + + string status = "Device is OK"; + // Add your own code + //- clear previous status + this->_statusStr.clear(); + + // Add your own code to control device here + try + { + if ( this->_missing_property ) + { + _statusStr = "Device cannot be up while its properties are not set!"; + } + //- check device initialization + else if ( !this->_electrometerCH1 && !_electrometerCH2 ) + { + _statusStr = "No electrometer connected!"; + } + + //- check if an electro is connected on a channel + if( attr_electrometerChannel_write == ELETRO_CHANNEL_ONE && !this->_electrometerCH1) + { + _statusStr += "No electrometer on channel ONE!"; + } + else if( attr_electrometerChannel_write == ELETRO_CHANNEL_TWO && !this->_electrometerCH2) + { + _statusStr += "No electrometer on channel TWO!"; + } + else if ( attr_electrometerChannel_write != ELETRO_CHANNEL_ONE && attr_electrometerChannel_write != ELETRO_CHANNEL_TWO ) + { + _statusStr += "Invalid electrometer channel set!"; + } + else + { + //- add electrometer status info + _statusStr += this->_electrometer->electrometer_status(); + } + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Cannot perform electrometer_status() command."); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Cannot perform electrometer_status() command : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to get electrometer status.", + "MCCE2Electrometers::dev_status()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Cannot perform electrometer_status() command!"); + + ERROR_STREAM << "Cannot perform electrometer_status() command : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Cannot perform electrometer_status() command!", + "MCCE2Electrometers::dev_status()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable remote mode : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Cannot perform electrometer_status() command : caugth [...] exception."); + throw; + } + set_status( _statusStr.c_str() ); + return _statusStr.c_str(); + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::dev_status + set_status(status); // Give the status to Tango. + return DeviceImpl::dev_status(); // Return it. +} +//-------------------------------------------------------- +/** + * Command RangeUP related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::range_up() +{ + DEBUG_STREAM << "MCCE2Electrometers::RangeUP() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::range_up) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::range_up()" + ); + } + + try + { + this->_electrometer->range_up(); + //- update range attr from hardware + if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE) + this->_updateRange1FromHW = true; + else if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO) + this->_updateRange2FromHW = true; + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to up the range!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to up the range : DevFailed EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to up the range.", + "MCCE2Electrometers::range_up()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to up the range!"); + + ERROR_STREAM << "Failed to up the range : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to up the range!", + "MCCE2Electrometers::range_up()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to up the range : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to up the range!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::range_up +} +//-------------------------------------------------------- +/** + * Command RangeDOWN related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::range_down() +{ + DEBUG_STREAM << "MCCE2Electrometers::RangeDOWN() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::range_down) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::range_down()" + ); + } + + try + { + this->_electrometer->range_down(); + //- update range attr from hardware + if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE ) + this->_updateRange1FromHW = true; + else if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO ) + this->_updateRange2FromHW = true; + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to down the range!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to down the range : DevFailed EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to down the range.", + "MCCE2Electrometers::range_down()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to down the range!"); + + ERROR_STREAM << "Failed to down the range : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to down the range!", + "MCCE2Electrometers::range_down()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to down the range : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to down the range!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::range_down +} +//-------------------------------------------------------- +/** + * Command SetZeroVFFunction related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::set_zero_vffunction() +{ + DEBUG_STREAM << "MCCE2Electrometers::SetZeroVFFunction() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::set_zero_vffunction) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::set_zero_vffunction()" + ); + } + + try + { + this->_electrometer->set_Zero_VonF_function(); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to enable ZERO V/F function!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to enable ZERO V/F function : DevFailed EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to enable ZERO V/F function.", + "MCCE2Electrometers::set_zero_vffunction()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to enable ZERO V/F function!"); + + ERROR_STREAM << "Failed to enable ZERO V/F function : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable ZERO V/F function!", + "MCCE2Electrometers::set_zero_vffunction()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable ZERO V/F function : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to enable ZERO V/F function!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::set_zero_vffunction +} +//-------------------------------------------------------- +/** + * Command SetOffsetZeroV1Function related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::set_offset_zero_v1_function() +{ + DEBUG_STREAM << "MCCE2Electrometers::SetOffsetZeroV1Function() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::set_offset_zero_v1_function) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::set_offset_zero_v1_function()" + ); + } + + try + { + this->_electrometer->set_Offset_ZeroV1_function(); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to enable OFFSET or ZERO V1 function!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : DevFailed EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to enable OFFSET or ZERO V1 function.", + "MCCE2Electrometers::set_offset_zero_v1_function()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to enable OFFSET or ZERO V1 function!"); + + ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable OFFSET or ZERO V1 function!", + "MCCE2Electrometers::set_offset_zero_v1_function()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to enable OFFSET or ZERO V1 function!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::set_offset_zero_v1_function +} +//-------------------------------------------------------- +/** + * Command SetLeakageZeroV2Function related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::set_leakage_zero_v2_function() +{ + DEBUG_STREAM << "MCCE2Electrometers::SetLeakageZeroV2Function() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::set_leakage_zero_v2_function) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::set_leakage_zero_v2_function()" + ); + } + + try + { + this->_electrometer->set_Leakage_ZeroV2_function(); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to enable LEAKAGE or ZERO V2 function!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : DevFailed EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to enable LEAKAGE or ZERO V2 function.", + "MCCE2Electrometers::set_leakage_zero_v2_function()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to enable LEAKAGE or ZERO V2 function!"); + + ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable LEAKAGE or ZERO V2 function!", + "MCCE2Electrometers::set_leakage_zero_v2_function()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to enable LEAKAGE or ZERO V2 function!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::set_leakage_zero_v2_function +} +//-------------------------------------------------------- +/** + * Command SetTestFunction related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::set_test_function() +{ + DEBUG_STREAM << "MCCE2Electrometers::SetTestFunction() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::set_test_function) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::set_test_function()" + ); + } + + try + { + this->_electrometer->set_Test_function(); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to enable TEST function!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to enable TEST function : DevFailed EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to enable TEST function.", + "MCCE2Electrometers::set_test_function()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to enable TEST function!"); + + ERROR_STREAM << "Failed to enable TEST function : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable TEST function!", + "MCCE2Electrometers::set_test_function()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable TEST function : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to enable TEST function!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::set_test_function +} +//-------------------------------------------------------- +/** + * Command SetMeasureFunction related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::set_measure_function() +{ + DEBUG_STREAM << "MCCE2Electrometers::SetMeasureFunction() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::set_measure_function) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::set_measure_function()" + ); + } + + try + { + this->_electrometer->set_Measure_function(); + } + catch(const electrometer::ElectrometerException& ke) + { + Tango::DevFailed df = electrometer_to_tango_exception(ke); + set_state(Tango::ALARM); + set_status("Failed to enable MEASURE function!"); + + ERROR_STREAM << "Failed to enable MEASURE function : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable MEASURE function.", + "MCCE2Electrometers::set_measure_function()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to enable MEASURE function!"); + + ERROR_STREAM << "Failed to enable MEASURE function : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable MEASURE function!", + "MCCE2Electrometers::set_measure_function()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable MEASURE function : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to enable MEASURE function!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::set_measure_function +} +//-------------------------------------------------------- +/** + * Command MCCE2_ON related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::mcce2__on() +{ + DEBUG_STREAM << "MCCE2Electrometers::MCCE2_ON() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::mcce2__on) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::mcce2__on()" + ); + } + + try + { + this->_electrometer->mcce_on(); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to enable MCCE ON function!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to enable MCCE ON function : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to enable MCCE ON function.", + "MCCE2Electrometers::mcce2__on()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to enable MCCE ON function!"); + + ERROR_STREAM << "Failed to enable MCCE ON function : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable MCCE ON function!", + "MCCE2Electrometers::mcce2__on()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable MCCE2_ON function : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to enable MCCE ON function!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::mcce2__on +} +//-------------------------------------------------------- +/** + * Command MCCE2_OFF related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::mcce2__off() +{ + DEBUG_STREAM << "MCCE2Electrometers::MCCE2_OFF() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::mcce2__off) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::mcce2__off()" + ); + } + + try + { + this->_electrometer->mcce_off(); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to enable MCCE OFF function!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to enable MCCE OFF function : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to enable MCCE OFF function.", + "MCCE2Electrometers::mcce2__off()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to enable MCCE OFF function!"); + + ERROR_STREAM << "Failed to enable MCCE OFF function : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable MCCE OFF function!", + "MCCE2Electrometers::mcce2__off()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable MCCE2_OFF function : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to enable MCCE OFF function!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::mcce2__off +} +//-------------------------------------------------------- +/** + * Command Local related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::local() +{ + DEBUG_STREAM << "MCCE2Electrometers::Local() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::local) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::local()" + ); + } + + try + { + this->_electrometer->local(); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to enable local mode!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to enable local mode : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to enable local mode.", + "MCCE2Electrometers::local()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to enable local mode!"); + + ERROR_STREAM << "Failed to enable local function : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable local mode!", + "MCCE2Electrometers::local()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable local mode : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to enable local mode!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::local +} +//-------------------------------------------------------- +/** + * Command Remote related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::remote() +{ + DEBUG_STREAM << "MCCE2Electrometers::Remote() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::remote) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::remote()" + ); + } + + try + { + this->_electrometer->remote(); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to enable remote mode!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to enable remote mode : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to enable remote mode.", + "MCCE2Electrometers::remote()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to enable remote mode!"); + + ERROR_STREAM << "Failed to enable remote mode : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable remote mode!", + "MCCE2Electrometers::remote()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable remote mode : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to enable remote mode!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::remote +} +//-------------------------------------------------------- +/** + * Command Reset related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::reset() +{ + DEBUG_STREAM << "MCCE2Electrometers::Reset() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::reset) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::reset()" + ); + } + + try + { + this->_electrometer->reset(); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to enable reset mode!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to enable reset mode : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to enable reset mode.", + "MCCE2Electrometers::reset()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to enable reset mode!"); + + ERROR_STREAM << "Failed to enable reset mode : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to enable reset mode!", + "MCCE2Electrometers::reset()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to enable reset mode : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to enable reset mode!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::reset +} +//-------------------------------------------------------- +/** + * Command ClearRegisters related method + * Description: + * + */ +//-------------------------------------------------------- +void MCCE2Electrometers::clear_registers() +{ + DEBUG_STREAM << "MCCE2Electrometers::ClearRegisters() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::clear_registers) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::clear_registers()" + ); + } + + try + { + this->_electrometer->clear_registers(); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to clear all errors!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to clear all errors : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to clear all errors.", + "MCCE2Electrometers::clear_registers()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to clear all errors!"); + + ERROR_STREAM << "Failed to clear all errors : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to clear all errors!", + "MCCE2Electrometers::clear_registers()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to clear errors : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to clear all errors!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::clear_registers +} +//-------------------------------------------------------- +/** + * Command GetRange related method + * Description: + * + * @returns The actual electrometer range + */ +//-------------------------------------------------------- +Tango::DevString MCCE2Electrometers::get_range() +{ + Tango::DevString argout; + DEBUG_STREAM << "MCCE2Electrometers::GetRange() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::get_range) ENABLED START -----*/ + + // Add your own code + // POGO has generated a method core with argout allocation. + // If you would like to use a static reference without copying, + // See "TANGO Device Server Programmer's Manual" + // (chapter : Writing a TANGO DS / Exchanging data) + //------------------------------------------------------------ + + // Add your own code to control device here + DEBUG_STREAM << "MCCE2Electrometers::get_range(): entering... !" << endl; + + // Add your own code to control device here + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::get_range()" + ); + } + + try + { + std::string rangeStr(""); + rangeStr = this->_electrometer->get_ElectroMeterRange(); + argout = new char [rangeStr.size() + 1]; + strcpy(argout, rangeStr.c_str()); + } + catch(const electrometer::ElectrometerException& ke) + { + if ( argout ) + delete [] argout; + Tango::DevFailed df = electrometer_to_tango_exception(ke); + set_state(Tango::ALARM); + set_status("Failed to read the range!"); + + ERROR_STREAM << "Failed to set read the range : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to read the range.", + "MCCE2Electrometers::get_range()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + if ( argout ) + delete [] argout; + set_state(Tango::ALARM); + set_status("Failed to read the range!"); + + ERROR_STREAM << "Failed to read the range : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to read the range!", + "MCCE2Electrometers::get_range()", + Tango::ERR + ); + } + catch(...) + { + if ( argout ) + delete [] argout; + ERROR_STREAM << "Failed to read the range : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to read the range!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::get_range + return argout; +} +//-------------------------------------------------------- +/** + * Command SetRange related method + * Description: + * + * @param argin The range to apply on the electrometer + */ +//-------------------------------------------------------- +void MCCE2Electrometers::set_range(Tango::DevString argin) +{ + DEBUG_STREAM << "MCCE2Electrometers::SetRange() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::set_range) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::set_range()" + ); + } + + try + { + this->_electrometer->set_ElectroMeterRange(std::string(argin)); + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to write the range!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to write the range : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to write the range.", + "MCCE2Electrometers::set_range()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to write the range!"); + + ERROR_STREAM << "Failed to write the range : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to write the range!", + "MCCE2Electrometers::set_range()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to set the new range value : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to write the range!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::set_range +} +//-------------------------------------------------------- +/** + * Command GetMode related method + * Description: + * + * @returns The electrometer mode (MEASURE, LEAKAGE ...) + */ +//-------------------------------------------------------- +Tango::DevString MCCE2Electrometers::get_mode() +{ + Tango::DevString argout; + DEBUG_STREAM << "MCCE2Electrometers::GetMode() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::get_mode) ENABLED START -----*/ + + // Add your own code + // POGO has generated a method core with argout allocation. + // If you would like to use a static reference without copying, + // See "TANGO Device Server Programmer's Manual" + // (chapter : Writing a TANGO DS / Exchanging data) + //------------------------------------------------------------ + DEBUG_STREAM << "MCCE2Electrometers::get_mode(): entering... !" << endl; + + // Add your own code to control device here + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::get_mode()" + ); + } + + + try + { + std::string modeStr = this->_electrometer->get_ElectroMeterMode(); + argout = new char [modeStr.size() + 1]; + strcpy(argout, modeStr.c_str()); + } + catch(const electrometer::ElectrometerException& ke) + { + if ( argout ) + delete [] argout; + set_state(Tango::ALARM); + set_status("Failed to read the mode!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to set read the mode : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to read the mode.", + "MCCE2Electrometers::get_mode()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + if ( argout ) + delete [] argout; + set_state(Tango::ALARM); + set_status("Failed to read the mode!"); + + ERROR_STREAM << "Failed to read the mode : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to read the mode!", + "MCCE2Electrometers::get_mode()", + Tango::ERR + ); + } + catch(...) + { + if ( argout ) + delete [] argout; + ERROR_STREAM << "Failed to read the mode : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to read the mode!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::get_mode + return argout; +} +//-------------------------------------------------------- +/** + * Command GetPolarity related method + * Description: + * + * @returns The electrometer polarity + */ +//-------------------------------------------------------- +Tango::DevString MCCE2Electrometers::get_polarity() +{ + Tango::DevString argout; + DEBUG_STREAM << "MCCE2Electrometers::GetPolarity() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::get_polarity) ENABLED START -----*/ + + // Add your own code + // POGO has generated a method core with argout allocation. + // If you would like to use a static reference without copying, + // See "TANGO Device Server Programmer's Manual" + // (chapter : Writing a TANGO DS / Exchanging data) + //------------------------------------------------------------ + DEBUG_STREAM << "MCCE2Electrometers::get_polarity(): entering... !" << endl; + + // Add your own code to control device here + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::get_polarity()" + ); + } + + try + { + std::string polarStr = this->_electrometer->get_ElectroMeterPolarity(); + argout = new char [polarStr.size() + 1]; + strcpy(argout, polarStr.c_str()); + } + catch(const electrometer::ElectrometerException& ke) + { + if ( argout ) + delete [] argout; + set_state(Tango::ALARM); + set_status("Failed to read the polarity!"); + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to set read the polarity : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to read the polarity.", + "MCCE2Electrometers::get_polarity()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + if ( argout ) + delete [] argout; + set_state(Tango::ALARM); + set_status("Failed to read the polarity!"); + + ERROR_STREAM << "Failed to read the polarity : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to read the polarity!", + "MCCE2Electrometers::get_polarity()", + Tango::ERR + ); + } + catch(...) + { + if ( argout ) + delete [] argout; + ERROR_STREAM << "Failed to read the polarity : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to read the polarity!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::get_polarity + return argout; +} +//-------------------------------------------------------- +/** + * Command SetPolarity related method + * Description: + * + * @param argin POSITIVE or NEGATIVE + */ +//-------------------------------------------------------- +void MCCE2Electrometers::set_polarity(Tango::DevString argin) +{ + DEBUG_STREAM << "MCCE2Electrometers::SetPolarity() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::set_polarity) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::set_polarity()" + ); + } + + try + { + this->_electrometer->set_ElectroMeterPolarity(argin); + } + catch(const electrometer::ElectrometerException& ke) + { + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + set_state(Tango::ALARM); + set_status("Failed to change electrometer polarity!"); + ERROR_STREAM << "Failed to change electrometer polarity : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to change electrometer polarity.", + "hzFilterAttrib::set_polarity()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + ERROR_STREAM << "Failed to change electrometer polarity : DevFailed EXCEPTION -> " << df << std::endl; + + set_state(Tango::ALARM); + set_status("Failed to change electrometer polarity!"); + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to change electrometer polarity!", + "MCCE2Electrometers::set_polarity()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to change electrometer polarity : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to change electrometer polarity!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::set_polarity +} +//-------------------------------------------------------- +/** + * Command GetHzFilter related method + * Description: + * + * @returns The MCCE2 cut-off frequency in Hz + */ +//-------------------------------------------------------- +Tango::DevShort MCCE2Electrometers::get_hz_filter() +{ + Tango::DevShort argout; + DEBUG_STREAM << "MCCE2Electrometers::GetHzFilter() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::get_hz_filter) ENABLED START -----*/ + + // Add your own code + + DEBUG_STREAM << "MCCE2Electrometers::get_hz_filter(): entering... !" << endl; + + // Add your own code to control device here + std::string dataStr(""); + + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::get_hz_filter()" + ); + } + + try + { + dataStr = this->_electrometer->get_ElectroMeterFrequency(); + argout = XString<short>::convertFromString(dataStr); + } + catch(const electrometer::ElectrometerException& ke) + { + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + set_state(Tango::ALARM); + set_status("Failed to set the Hz Filter!"); + ERROR_STREAM << "Failed to read the gain : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to read hzFilter.", + "hzFilterAttrib::get_hz_filter()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + ERROR_STREAM << "Failed to read the Hz Filter : DevFailed EXCEPTION -> " << df << std::endl; + + set_state(Tango::ALARM); + set_status("Failed to set the Hz Filter!"); + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to read the Hz Filter!", + "MCCE2Electrometers::get_hz_filter()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to read the Hz Filter : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to read the Hz Filter!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::get_hz_filter + return argout; +} +//-------------------------------------------------------- +/** + * Command SetHzFilter related method + * Description: + * + * @param argin The MCCE2 cut-off frequency in Hz + */ +//-------------------------------------------------------- +void MCCE2Electrometers::set_hz_filter(Tango::DevShort argin) +{ + DEBUG_STREAM << "MCCE2Electrometers::SetHzFilter() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::set_hz_filter) ENABLED START -----*/ + + // Add your own code + std::string dataStr("") ; + + // Add your own code to control device here + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::set_hz_filter()" + ); + } + + try + { + dataStr = XString<short>::convertToString(argin); + this->_electrometer->set_ElectroMeterFrequency(dataStr); + } + catch(const electrometer::ElectrometerException& ke) + { + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + set_state(Tango::ALARM); + set_status("Failed to set the Hz Filter!"); + ERROR_STREAM << "Failed to set the Hz Filter : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to set the Hz Filter.", + "MCCE2Electrometers::set_hz_filter()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + ERROR_STREAM << "Failed to set the Hz Filter : DevFailed EXCEPTION -> " << df << std::endl; + + set_state(Tango::ALARM); + set_status("Failed to set the Hz Filter!"); + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to set the Hz Filter!", + "MCCE2Electrometers::set_hz_filter()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to set the Hz Filter : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to set the Hz Filter!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::set_hz_filter +} +//-------------------------------------------------------- +/** + * Command GetGain related method + * Description: + * + * @returns The MCCE2 gain + */ +//-------------------------------------------------------- +Tango::DevShort MCCE2Electrometers::get_gain() +{ + Tango::DevShort argout; + DEBUG_STREAM << "MCCE2Electrometers::GetGain() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::get_gain) ENABLED START -----*/ + + // Add your own code + + DEBUG_STREAM << "MCCE2Electrometers::get_gain(): entering... !" << endl; + + // Add your own code to control device here + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::get_gain()" + ); + } + + try + { + std::string dataStr(""); + dataStr = this->_electrometer->get_ElectroMeterGain(); + argout = XString<short>::convertFromString(dataStr); + } + catch(const electrometer::ElectrometerException& ke) + { + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + set_state(Tango::ALARM); + set_status("Failed to read the gain!"); + ERROR_STREAM << "Failed to read the gain : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to read the gain .", + "hzFilterAttrib::get_gain()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + ERROR_STREAM << "Failed to read the gain : DevFailed EXCEPTION -> " << df << std::endl; + + set_state(Tango::ALARM); + set_status("Failed to read the gain!"); + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to read the gain!", + "MCCE2Electrometers::get_gain()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to read the gain : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to read the gain!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::get_gain + return argout; +} +//-------------------------------------------------------- +/** + * Command SetGain related method + * Description: + * + * @param argin The new MCCE-2 gain + */ +//-------------------------------------------------------- +void MCCE2Electrometers::set_gain(Tango::DevUShort argin) +{ + DEBUG_STREAM << "MCCE2Electrometers::SetGain() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::set_gain) ENABLED START -----*/ + + // Add your own code + if ( !this->_electrometer ) + { + ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "Failed to build the electrometer obj : not enough memory!?", + "MCCE2Electrometers::set_gain()" + ); + } + + try + { + std::string dataStr(""); + dataStr = XString<short>::convertToString(argin); + this->_electrometer->set_ElectroMeterGain(dataStr); + } + catch(const electrometer::ElectrometerException& ke) + { + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + set_state(Tango::ALARM); + set_status("Failed to set the gain!"); + ERROR_STREAM << "Failed to set the gain : ElectrometerException EXCEPTION -> " << df << std::endl; + Tango::Except::re_throw_exception(df, + "UNKNOWN_ERROR", + "Failed to set the gain.", + "hzFilterAttrib::set_gain()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + ERROR_STREAM << "Failed to set the gain : DevFailed EXCEPTION -> " << df << std::endl; + + set_state(Tango::ALARM); + set_status("Failed to set the gain!"); + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to set the the gain!", + "MCCE2Electrometers::set_gain()", + Tango::ERR + ); + } + catch(...) + { + ERROR_STREAM << "Failed to set the gain : [...] EXCEPTION " << std::endl; + set_state(Tango::ALARM); + set_status("Failed to set the gain!"); + + throw; + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::set_gain +} +//-------------------------------------------------------- +/** + * Command GetElectrometerTypeStr related method + * Description: + * + * @param argin channel number + * @returns the electrometer type as string + */ +//-------------------------------------------------------- +Tango::DevString MCCE2Electrometers::get_electrometer_type_str(Tango::DevUShort argin) +{ + Tango::DevString argout; + DEBUG_STREAM << "MCCE2Electrometers::GetElectrometerTypeStr() - " << device_name << endl; + /*----- PROTECTED REGION ID(MCCE2Electrometers::get_electrometer_type_str) ENABLED START -----*/ + + // Add your own code + // POGO has generated a method core with argout allocation. + // If you would like to use a static reference without copying, + // See "TANGO Device Server Programmer's Manual" + // (chapter : Writing a TANGO DS / Exchanging data) + //------------------------------------------------------------ + + DEBUG_STREAM << "MCCE2Electrometers::get_electrometer_type_str(): entering... !" << endl; + + // Add your own code to control device here + if ( !this->_electrometerCH1 && !_electrometerCH2 ) + { + ERROR_STREAM << "No electrometer connected on both channels!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "No electrometer connected on both channels!?", + "MCCE2Electrometers::get_electrometer_type_str()" + ); + } + + if ( argin == ELETRO_CHANNEL_ONE ) + { + argout = new char[this->_electroCH1StrType.size()+1]; + ::strncpy(argout, _electroCH1StrType.c_str(), _electroCH1StrType.size()+1); + } + else if ( argin == ELETRO_CHANNEL_TWO ) + { + argout = new char[this->_electroCH2StrType.size()+1]; + ::strncpy(argout, _electroCH2StrType.c_str(), _electroCH2StrType.size()+1); + } + else + { + Tango::Except::throw_exception( + "INVALID_PARAMETER", + "Channel number must be 1 or 2.", + "MCCE2Electrometers::get_electrometer_type_str()" + ); + } + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::get_electrometer_type_str + return argout; +} + +/*----- PROTECTED REGION ID(MCCE2Electrometers::namespace_ending) ENABLED START -----*/ + +// Additional Methods +//+---------------------------------------------------------------------------- +// +// method : MCCE2Electrometers::electrometer_to_tango_exception() +// +// description : Extract real attribute values from +// hardware acquisition result. +// +//----------------------------------------------------------------------------- +Tango::DevFailed MCCE2Electrometers::electrometer_to_tango_exception(const electrometer::ElectrometerException& de) +{ + Tango::DevErrorList error_list(de.errors.size()); + error_list.length(de.errors.size()); + + for(unsigned int i = 0; i < de.errors.size(); i++) + { + error_list[i].reason = CORBA::string_dup(de.errors[i].reason.c_str()); + error_list[i].desc = CORBA::string_dup(de.errors[i].desc.c_str()); + error_list[i].origin = CORBA::string_dup(de.errors[i].origin.c_str()); + + switch(de.errors[i].severity) + { + case electrometer::WARN: + error_list[i].severity = Tango::WARN; + break; + + case electrometer::PANIC: + error_list[i].severity = Tango::PANIC; + break; + + case electrometer::ERR: + + default: + error_list[i].severity = Tango::ERR; + break; + } + } + return Tango::DevFailed(error_list); +} +//+------------------------------------------------------------------ +/** + * method: MCCE2Electrometers::create_electrometers_obj + * + * description: internal method to instanciate electrometer(s) obj + */ +//+------------------------------------------------------------------ +void MCCE2Electrometers::create_electrometers_obj() +{ + //- instanciate channel 1 + if ( !_electrometerCH1 && electrometer1Address ) + { + AbstractElectrometerClass* mcce1; + mcce1 = new Novelec_MCCE2(proxyName, electrometer1Address, comProtocol); + mcce1->init_protocol(); + DEBUG_STREAM<<"create_electrometers_obj init: "<< comProtocol <<std::endl; + Novelec_MCCE2* nMCCE1 = dynamic_cast<Novelec_MCCE2*>(mcce1); + DEBUG_STREAM<<"create_electrometers_obj init: "<< comProtocol <<std::endl; + short type1 = 0; + //- find connected Novelec model + try + { + if(nMCCE1) + { + DEBUG_STREAM<<"get_electrometer_type: " <<std::endl; + //- get type as num + type1 = nMCCE1->get_electrometer_type(); + DEBUG_STREAM<<"get_electrometer_type type1= "<<type1 <<std::endl; + //- get type as string + this->_electroCH1StrType = nMCCE1->get_electrometer_typeStr(); + DEBUG_STREAM<<"get_electrometer_type:read "<<_electroCH1StrType <<std::endl; + } + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to find which Novelec type is connected on channel one : communication caught[...]"); + + Tango::DevFailed df = electrometer_to_tango_exception(ke); + FATAL_STREAM << "Failed to find which Novelec type is connected on channel one : ElectrometerException EXCEPTION -> " << df << std::endl; + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to find which Novelec type is connected on channel one!"); + + FATAL_STREAM << "Failed to find which Novelec type is connected : DevFailed EXCEPTION -> " << df << std::endl; + } + catch(...) + { + set_state(Tango::ALARM); + set_status("Failed to find which Novelec type is connected on channel one : communication caught[...]"); + + FATAL_STREAM << "Failed to find which Novelec type is connected on channel one : [...] EXCEPTION " << std::endl; + } + + switch(type1) + { + case 0 : + this->_electrometerCH1 = 0; + break; + case 1 : + case 2 : + case 3 : +// this->_electrometerCH1 = new N_PhotoVoltaique (proxyName, channelNumber, electrometerTypeCh1); + this->_electrometerCH1 = new N_PhotoVoltaique (proxyName, electrometer1Address,comProtocol); + break; + case 4 : + case 5 : + this->_electrometerCH1 = new N_PhotoConducteur(proxyName, electrometer1Address,comProtocol); + break; + default : + this->_electrometerCH1 = 0; + FATAL_STREAM << "\nERROR : Electrometers::create_electrometers_obj() -> this " << electrometer1Address << " Novelec type is not supported now!" << endl; + return; + } + if ( mcce1 ) + { + delete mcce1; + mcce1 = 0; + } + } + + //- instanciate channel 2 + if ( !this->_electrometerCH2 && electrometer2Address ) + { + AbstractElectrometerClass* mcce2; + mcce2 = new Novelec_MCCE2(proxyName, electrometer2Address,comProtocol); + mcce2->init_protocol(); + Novelec_MCCE2* nMCCE2 = dynamic_cast<Novelec_MCCE2*>(mcce2); + short type2 = 0; + try + { + if(nMCCE2) + { + //- get type as num + type2 = nMCCE2->get_electrometer_type(); + //- get type as string + this->_electroCH2StrType = nMCCE2->get_electrometer_typeStr(); + } + } + catch(const electrometer::ElectrometerException& ke) + { + set_state(Tango::ALARM); + set_status("Failed to find which Novelec type is connected on channel two : communication caught[...]"); + + Tango::DevFailed df = electrometer_to_tango_exception(ke); + FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : ElectrometerException EXCEPTION -> " << df << std::endl; + } + catch(Tango::DevFailed& df) + { + set_state(Tango::ALARM); + set_status("Failed to find which Novelec type is connected on channel two!"); + + FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : DevFailed EXCEPTION -> " << df << std::endl; + } + catch(...) + { + set_state(Tango::ALARM); + set_status("Failed to find which Novelec type is connected on channel two : communication caught[...]"); + + FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : [...] EXCEPTION " << std::endl; + } + + switch(type2) + { + case 0 : + this->_electrometerCH2 = 0; + break; + case 1 : + case 2 : + case 3 : + this->_electrometerCH2 = new N_PhotoVoltaique (proxyName, electrometer2Address,comProtocol); + break; + case 4 : + case 5 : + this->_electrometerCH2 = new N_PhotoConducteur(proxyName, electrometer2Address,comProtocol); + break; + default : + this->_electrometerCH2 = 0; + FATAL_STREAM << "\nERROR : Electrometers::create_electrometers_obj() -> this " << electrometer2Address << " Novelec type is not supported now!" << endl; + return; + } + if ( mcce2 ) + { + delete mcce2; + mcce2 = 0; + } + } + + //- check + if (!this->_electrometerCH1 && !this->_electrometerCH2) + { + set_state(Tango::FAULT); + set_status("No electrometer connected on channels 1 and 2!"); + ERROR_STREAM << "No connected electrometer(s) found!" << std::endl; + Tango::Except::throw_exception( + "MEMORY_ERROR", + "No connected electrometer(s) found!", + "MCCE2Electrometers::create_electrometers_obj()"); + } + + //- configure MCCE-2 : clear error(s), explicit response, mode MEASURE OFF + bool initCH1 = false; + bool initCH2 = false; + try + { + if ( this->_electrometerCH1 ) + { + initCH1 = this->_electrometerCH1->init_protocol(); + if ( initCH1 ) + this->_electrometerCH1->mcce_init(); + + //- read channel range + this->_electrometer = this->_electrometerCH1; + *attr_range1_read = this->get_range(); + + INFO_STREAM << "this->_electrometer = this->_electrometerCH1!" << std::endl; + } + else + WARN_STREAM << "WARN : !this->_electrometerCH1" << std::endl; + + if ( this->_electrometerCH2 ) + { + initCH2 = this->_electrometerCH2->init_protocol(); + if ( initCH2 ) + this->_electrometerCH2->mcce_init(); + + //- read channel range + this->_electrometer = this->_electrometerCH2; + *attr_range2_read = this->get_range(); + + INFO_STREAM << "this->_electrometer = this->_electrometerCH2!" << std::endl; + } + + //- start with channel one + if ( this->_electrometerCH1 ) + { + this->_electrometer = this->_electrometerCH1; + this->_init_done = true; + } + //- if nothing connected on channel one, try with the second one + else if ( this->_electrometerCH2 ) + { + this->_electrometer = this->_electrometerCH2; + this->_init_done = true; + } + else + this->_init_done = false; + } + catch(const electrometer::ElectrometerException& ke) + { + Tango::DevFailed df = electrometer_to_tango_exception(ke); + + ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : ElectrometerException EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to set up the MCCE-2 module for a serial communication!", + "MCCE2Electrometers::create_electrometers_obj()", + Tango::ERR + ); + } + catch(Tango::DevFailed& df) + { + set_state(Tango::FAULT); + set_status("Failed to set up the MCCE-2 module for a serial communication!"); + + ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : DevFailed EXCEPTION -> " << df << std::endl; + + Tango::Except::re_throw_exception(df, + "COMMUNICATION_ERROR", + "Failed to set up the MCCE-2 module for a serial communication!", + "MCCE2Electrometers::create_electrometers_obj()", + Tango::ERR + ); + } + catch(...) + { + set_state(Tango::FAULT); + set_status("Failed to set up the MCCE-2 module for a serial communication caught[...]"); + + ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : [...] EXCEPTION " << std::endl; + + Tango::Except::throw_exception( + "UNKNOWN_ERROR", + "Failed to set up the MCCE-2 module for a serial communication! [(...) exception]", + "MCCE2Electrometers::create_electrometers_obj()", + Tango::ERR + ); + } +} + + +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::namespace_ending +} // namespace diff --git a/src/MCCE2Electrometers.h b/src/MCCE2Electrometers.h index 9d81626..293b104 100644 --- a/src/MCCE2Electrometers.h +++ b/src/MCCE2Electrometers.h @@ -1,483 +1,427 @@ -//============================================================================= -// -// file : MCCE2Electrometers.h -// -// description : Include for the MCCE2Electrometers class. -// -// project : Novelec MCCE-2 Electrometers -// -// $Author: xavela $ -// -// $Revision: 1.16 $ -// -// $Log: not supported by cvs2svn $ -// Revision 1.14 2010/06/10 15:12:05 xavela -// TEST : control two channels with different MCCE2 -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= -#ifndef _MCCE2ELECTROMETERS_H -#define _MCCE2ELECTROMETERS_H - -#include <tango.h> -//using namespace Tango; -#include "AbstractElectrometerClass.h" -#include "ElectrometerException.h" - -/** - * @author $Author: xavela $ - * @version $Revision: 1.16 $ - */ - -// Add your own constants definitions here. -//----------------------------------------------- - - -namespace MCCE2Electrometers_ns -{ - -/** - * Class Description: - * This class allows you to control all MCCE-2 Novelec electrometers - * through a Serial bus. - * <br> Supported types : - * <br> Novelec Electrometers : MCCE2 - */ - -/* - * Device States Description: -* Tango::ON : Device up and ready -* Tango::ALARM : Device initialisation not complete or a bad channel number is set. -* Tango::FAULT : Internal electrometer interface is not built or a Serial communication error occurred. -* Tango::DISABLE : No electrometer conected! - */ - - -class MCCE2Electrometers: public Tango::Device_4Impl -{ -public : - // Add your own data members here - //----------------------------------------- - - - // Here is the Start of the automatic code generation part - //------------------------------------------------------------- - /** - * @name attributes - * Attributs member data. - */ -//@{ - Tango::DevUShort *attr_electrometerChannel_read; - Tango::DevUShort attr_electrometerChannel_write; - Tango::DevString *attr_range1_read; - Tango::DevString *attr_range2_read; -//@} - - /** - * @name Device properties - * Device properties member data. - */ -//@{ - /** - * The name of the device which manage the communication. - */ - string communicationLinkName; - /** - * The first electrometer address configured. <br /> - * Note : if not connected, push 0 or let empty the property. - */ - Tango::DevUShort electrometer1Address; - /** - * The second electrometer address configured. <br /> - * Note : if not connected, push 0 or let empty the property. - */ - Tango::DevUShort electrometer2Address; -//@} - - /**@name Constructors - * Miscellaneous constructors */ -//@{ - /** - * Constructs a newly allocated Command object. - * - * @param cl Class. - * @param s Device Name - */ - MCCE2Electrometers(Tango::DeviceClass *cl,string &s); - /** - * Constructs a newly allocated Command object. - * - * @param cl Class. - * @param s Device Name - */ - MCCE2Electrometers(Tango::DeviceClass *cl,const char *s); - /** - * Constructs a newly allocated Command object. - * - * @param cl Class. - * @param s Device name - * @param d Device description. - */ - MCCE2Electrometers(Tango::DeviceClass *cl,const char *s,const char *d); -//@} - - /**@name Destructor - * Only one desctructor is defined for this class */ -//@{ - /** - * The object desctructor. - */ - ~MCCE2Electrometers() { - delete_device(); - }; - /** - * will be called at device destruction or at init command. - */ - void delete_device(); -//@} - - - /**@name Miscellaneous methods */ -//@{ - /** - * Initialize the device - */ - virtual void init_device(); - /** - * Always executed method befor execution command method. - */ - virtual void always_executed_hook(); - -//@} - - /** - * @name MCCE2Electrometers methods prototypes - */ - -//@{ - /** - * Hardware acquisition for attributes. - */ - virtual void read_attr_hardware(vector<long> &attr_list); - /** - * Extract real attribute values for electrometerChannel acquisition result. - */ - virtual void read_electrometerChannel(Tango::Attribute &attr); - /** - * Write electrometerChannel attribute values to hardware. - */ - virtual void write_electrometerChannel(Tango::WAttribute &attr); - /** - * Extract real attribute values for range1 acquisition result. - */ - virtual void read_range1(Tango::Attribute &attr); - /** - * Extract real attribute values for range2 acquisition result. - */ - virtual void read_range2(Tango::Attribute &attr); - /** - * Read/Write allowed for electrometerChannel attribute. - */ - virtual bool is_electrometerChannel_allowed(Tango::AttReqType type); - /** - * Read/Write allowed for range1 attribute. - */ - virtual bool is_range1_allowed(Tango::AttReqType type); - /** - * Read/Write allowed for range2 attribute. - */ - virtual bool is_range2_allowed(Tango::AttReqType type); - /** - * Execution allowed for RangeUP command. - */ - virtual bool is_RangeUP_allowed(const CORBA::Any &any); - /** - * Execution allowed for RangeDOWN command. - */ - virtual bool is_RangeDOWN_allowed(const CORBA::Any &any); - /** - * Execution allowed for SetZeroVFFunction command. - */ - virtual bool is_SetZeroVFFunction_allowed(const CORBA::Any &any); - /** - * Execution allowed for SetOffsetZeroV1Function command. - */ - virtual bool is_SetOffsetZeroV1Function_allowed(const CORBA::Any &any); - /** - * Execution allowed for SetLeakageZeroV2Function command. - */ - virtual bool is_SetLeakageZeroV2Function_allowed(const CORBA::Any &any); - /** - * Execution allowed for SetTestFunction command. - */ - virtual bool is_SetTestFunction_allowed(const CORBA::Any &any); - /** - * Execution allowed for SetMeasureFunction command. - */ - virtual bool is_SetMeasureFunction_allowed(const CORBA::Any &any); - /** - * Execution allowed for MCCE2_ON command. - */ - virtual bool is_MCCE2_ON_allowed(const CORBA::Any &any); - /** - * Execution allowed for MCCE2_OFF command. - */ - virtual bool is_MCCE2_OFF_allowed(const CORBA::Any &any); - /** - * Execution allowed for Local command. - */ - virtual bool is_Local_allowed(const CORBA::Any &any); - /** - * Execution allowed for Remote command. - */ - virtual bool is_Remote_allowed(const CORBA::Any &any); - /** - * Execution allowed for Reset command. - */ - virtual bool is_Reset_allowed(const CORBA::Any &any); - /** - * Execution allowed for ClearRegisters command. - */ - virtual bool is_ClearRegisters_allowed(const CORBA::Any &any); - /** - * Execution allowed for GetRange command. - */ - virtual bool is_GetRange_allowed(const CORBA::Any &any); - /** - * Execution allowed for SetRange command. - */ - virtual bool is_SetRange_allowed(const CORBA::Any &any); - /** - * Execution allowed for GetMode command. - */ - virtual bool is_GetMode_allowed(const CORBA::Any &any); - /** - * Execution allowed for GetPolarity command. - */ - virtual bool is_GetPolarity_allowed(const CORBA::Any &any); - /** - * Execution allowed for SetPolarity command. - */ - virtual bool is_SetPolarity_allowed(const CORBA::Any &any); - /** - * Execution allowed for GetHzFilter command. - */ - virtual bool is_GetHzFilter_allowed(const CORBA::Any &any); - /** - * Execution allowed for SetHzFilter command. - */ - virtual bool is_SetHzFilter_allowed(const CORBA::Any &any); - /** - * Execution allowed for GetGain command. - */ - virtual bool is_GetGain_allowed(const CORBA::Any &any); - /** - * Execution allowed for SetGain command. - */ - virtual bool is_SetGain_allowed(const CORBA::Any &any); - /** - * Execution allowed for GetElectrometerTypeStr command. - */ - virtual bool is_GetElectrometerTypeStr_allowed(const CORBA::Any &any); - /** - * This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller. - * @return State Code - * @exception DevFailed - */ - virtual Tango::DevState dev_state(); - /** - * This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller. - * @return Status description - * @exception DevFailed - */ - virtual Tango::ConstDevString dev_status(); - /** - * Up the range of the electrometer. - * Throw : - * - electrometer::ElectrometerException if the range limit is reached - * - Tango::DevFailed if the command cannot be performed - * @exception DevFailed - */ - void range_up(); - /** - * Down the range of the electrometer. - * Throw : - * - electrometer::ElectrometerException if the range is negative - * - Tango::DevFailed if the command cannot be performed - * @exception DevFailed - */ - void range_down(); - /** - * Enable the Zero V/F MCCE2 mode. - * @exception DevFailed - */ - void set_zero_vffunction(); - /** - * Enable the Offset or Zero V1 MCCE2 mode. - * @exception DevFailed - */ - void set_offset_zero_v1_function(); - /** - * Enable the Leakage or Zero V2 MCCE2 mode. - * @exception DevFailed - */ - void set_leakage_zero_v2_function(); - /** - * Enable theTest MCCE2 mode. - * @exception DevFailed - */ - void set_test_function(); - /** - * Enable the Measure MCCE2 mode. - * @exception DevFailed - */ - void set_measure_function(); - /** - * Enables the function set. Parameters cannot be set (read only mode). - * @exception DevFailed - */ - void mcce2__on(); - /** - * Disables the function set. Parameters can be changed. - * @exception DevFailed - */ - void mcce2__off(); - /** - * Enable local keyboard and Key - * @exception DevFailed - */ - void local(); - /** - * Disable \"MODIFY\" and the \"ON-OFF\" keys - * @exception DevFailed - */ - void remote(); - /** - * Restart the MCCE-2 - * @exception DevFailed - */ - void reset(); - /** - * Clear error(s) - * @exception DevFailed - */ - void clear_registers(); - /** - * Returns the electrometer range. - * @return The actual electrometer range - * @exception DevFailed - */ - Tango::DevString get_range(); - /** - * Apply the specified argin range, on the electrometer, if well formatted. - * Else an exception is thrown. - * @param argin The range to apply on the electrometer - * @exception DevFailed - */ - void set_range(Tango::DevString); - /** - * Returns the electrometer mode which can be one of the following values : - * MEASURE, V/F Zero, OFFSET, LEAKAGE or TEST. - * @return The electrometer mode (MEASURE, LEAKAGE ...) - * @exception DevFailed - */ - Tango::DevString get_mode(); - /** - * Returns the electrometer polarity, which can be POSITIVE or NEGATIVE. - * @return The electrometer polarity - * @exception DevFailed - */ - Tango::DevString get_polarity(); - /** - * Sets the new electrometer polarity. <Br> - * NOTE : <Br> - * Value must be set in UPPER case !!! - * @param argin POSITIVE or NEGATIVE - * @exception DevFailed - */ - void set_polarity(Tango::DevString); - /** - * Returns the Cut-off frequency in Hz - * @return The MCCE2 cut-off frequency in Hz - * @exception DevFailed - */ - Tango::DevShort get_hz_filter(); - /** - * The Cut-off frequency in Hz - * @param argin The MCCE2 cut-off frequency in Hz - * @exception DevFailed - */ - void set_hz_filter(Tango::DevShort); - /** - * Returns the MCCE-2 gain - * @return The MCCE2 gain - * @exception DevFailed - */ - Tango::DevShort get_gain(); - /** - * Sets the new MCCE-2 gain value. - * @param argin The new MCCE-2 gain - * @exception DevFailed - */ - void set_gain(Tango::DevUShort); - /** - * This command returns the connected electrometer type as string for the specified channel. - * @param argin channel number - * @return the electrometer type as string - * @exception DevFailed - */ - Tango::DevString get_electrometer_type_str(Tango::DevUShort); - - /** - * Read the device properties from database - */ - void get_device_property(); -//@} - - // Here is the end of the automatic code generation part - //------------------------------------------------------------- - - - -protected : - // Add your own data members here - //----------------------------------------- - AbstractElectrometerClass* _electrometer; - - std::string _statusStr; - - bool _init_done; //- used to allow device to start !! - bool _missing_property; - bool _updateRange1FromHW; - bool _updateRange2FromHW; - //- electrometer(s) type as string - std::string _electroCH1StrType; - std::string _electroCH2StrType; - - std::string read_range_from_hw(); - - //- Method to convert all electrometer exceptions on Tango exception - Tango::DevFailed electrometer_to_tango_exception(const electrometer::ElectrometerException& de); - -private : - AbstractElectrometerClass* _electrometerCH1; //- electrometer on channel 1 - AbstractElectrometerClass* _electrometerCH2; //- electrometer on channel 2 - - //- instanciate electrometer(s) obj - void create_electrometers_obj(); - -}; - -} // namespace_ns - -#endif // _MCCE2ELECTROMETERS_H +/*----- PROTECTED REGION ID(MCCE2Electrometers.h) ENABLED START -----*/ +//============================================================================= +// +// file : MCCE2Electrometers.h +// +// description : Include file for the MCCE2Electrometers class +// +// project : Novelec MCCE-2 Electrometers +// +// This file is part of Tango device class. +// +// Tango is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tango is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tango. If not, see <http://www.gnu.org/licenses/>. +// +// $Author: $ +// +// $Revision: $ +// $Date: $ +// +// $HeadURL: $ +// +//============================================================================= +// This file is generated by POGO +// (Program Obviously used to Generate tango Object) +//============================================================================= + + +#ifndef MCCE2Electrometers_H +#define MCCE2Electrometers_H + +#include <tango.h> +#include "AbstractElectrometerClass.h" +#include "ElectrometerException.h" + + + + + +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers.h + +/** + * MCCE2Electrometers class description: + * This class allows you to control all MCCE-2 Novelec electrometers + * through a Serial bus. + * <br> Supported types : + * <br> Novelec Electrometers : MCCE2 + */ + +namespace MCCE2Electrometers_ns +{ +/*----- PROTECTED REGION ID(MCCE2Electrometers::Additional Class Declarations) ENABLED START -----*/ + +// Additional Class Declarations + +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::Additional Class Declarations + +class MCCE2Electrometers : public Tango::Device_4Impl +{ + +/*----- PROTECTED REGION ID(MCCE2Electrometers::Data Members) ENABLED START -----*/ + +// Add your own data members +public: + + + +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::Data Members + +// Device property data members +public: + // ProxyName: The name of the device which manage the communication. + string proxyName; + // Electrometer1Address: The first electrometer address configured. <br /> + // Note : if not connected, push 0 or let empty the property. + Tango::DevUShort electrometer1Address; + // Electrometer2Address: The second electrometer address configured. <br /> + // Note : if not connected, push 0 or let empty the property. + Tango::DevUShort electrometer2Address; + // ComProtocol: Communication protocal: ETHERNET/SERIAL + string comProtocol; + +// Attribute data members +public: + Tango::DevUShort *attr_electrometerChannel_read; + Tango::DevString *attr_range1_read; + Tango::DevString *attr_range2_read; + +// Constructors and destructors +public: + /** + * Constructs a newly device object. + * + * @param cl Class. + * @param s Device Name + */ + MCCE2Electrometers(Tango::DeviceClass *cl,string &s); + /** + * Constructs a newly device object. + * + * @param cl Class. + * @param s Device Name + */ + MCCE2Electrometers(Tango::DeviceClass *cl,const char *s); + /** + * Constructs a newly device object. + * + * @param cl Class. + * @param s Device name + * @param d Device description. + */ + MCCE2Electrometers(Tango::DeviceClass *cl,const char *s,const char *d); + /** + * The device object destructor. + */ + ~MCCE2Electrometers() {delete_device();}; + + +// Miscellaneous methods +public: + /* + * will be called at device destruction or at init command. + */ + void delete_device(); + /* + * Initialize the device + */ + virtual void init_device(); + /* + * Read the device properties from database + */ + void get_device_property(); + /* + * Always executed method before execution command method. + */ + virtual void always_executed_hook(); + + +// Attribute methods +public: + //-------------------------------------------------------- + /* + * Method : MCCE2Electrometers::read_attr_hardware() + * Description : Hardware acquisition for attributes. + */ + //-------------------------------------------------------- + virtual void read_attr_hardware(vector<long> &attr_list); + +/** + * Attribute electrometerChannel related methods + * Description: MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first). + * + * Data type: Tango::DevUShort + * Attr type: Scalar + */ + virtual void read_electrometerChannel(Tango::Attribute &attr); + virtual void write_electrometerChannel(Tango::WAttribute &attr); + virtual bool is_electrometerChannel_allowed(Tango::AttReqType type); +/** + * Attribute range1 related methods + * Description: The channel one MCCE2 range. + * + * Data type: Tango::DevString + * Attr type: Scalar + */ + virtual void read_range1(Tango::Attribute &attr); + virtual bool is_range1_allowed(Tango::AttReqType type); +/** + * Attribute range2 related methods + * Description: The channel two MCCE range. + * + * Data type: Tango::DevString + * Attr type: Scalar + */ + virtual void read_range2(Tango::Attribute &attr); + virtual bool is_range2_allowed(Tango::AttReqType type); + + + //-------------------------------------------------------- + /** + * Method : MCCE2Electrometers::add_dynamic_attributes() + * Description : Add dynamic attributes if any. + */ + //-------------------------------------------------------- + void add_dynamic_attributes(); + + + +// Command related methods +public: + /** + * Command State related method + * Description: This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller. + * + * @returns State Code + */ + virtual Tango::DevState dev_state(); + /** + * Command Status related method + * Description: This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller. + * + * @returns Status description + */ + virtual Tango::ConstDevString dev_status(); + /** + * Command RangeUP related method + * Description: + * + */ + virtual void range_up(); + virtual bool is_RangeUP_allowed(const CORBA::Any &any); + /** + * Command RangeDOWN related method + * Description: + * + */ + virtual void range_down(); + virtual bool is_RangeDOWN_allowed(const CORBA::Any &any); + /** + * Command SetZeroVFFunction related method + * Description: + * + */ + virtual void set_zero_vffunction(); + virtual bool is_SetZeroVFFunction_allowed(const CORBA::Any &any); + /** + * Command SetOffsetZeroV1Function related method + * Description: + * + */ + virtual void set_offset_zero_v1_function(); + virtual bool is_SetOffsetZeroV1Function_allowed(const CORBA::Any &any); + /** + * Command SetLeakageZeroV2Function related method + * Description: + * + */ + virtual void set_leakage_zero_v2_function(); + virtual bool is_SetLeakageZeroV2Function_allowed(const CORBA::Any &any); + /** + * Command SetTestFunction related method + * Description: + * + */ + virtual void set_test_function(); + virtual bool is_SetTestFunction_allowed(const CORBA::Any &any); + /** + * Command SetMeasureFunction related method + * Description: + * + */ + virtual void set_measure_function(); + virtual bool is_SetMeasureFunction_allowed(const CORBA::Any &any); + /** + * Command MCCE2_ON related method + * Description: + * + */ + virtual void mcce2__on(); + virtual bool is_MCCE2_ON_allowed(const CORBA::Any &any); + /** + * Command MCCE2_OFF related method + * Description: + * + */ + virtual void mcce2__off(); + virtual bool is_MCCE2_OFF_allowed(const CORBA::Any &any); + /** + * Command Local related method + * Description: + * + */ + virtual void local(); + virtual bool is_Local_allowed(const CORBA::Any &any); + /** + * Command Remote related method + * Description: + * + */ + virtual void remote(); + virtual bool is_Remote_allowed(const CORBA::Any &any); + /** + * Command Reset related method + * Description: + * + */ + virtual void reset(); + virtual bool is_Reset_allowed(const CORBA::Any &any); + /** + * Command ClearRegisters related method + * Description: + * + */ + virtual void clear_registers(); + virtual bool is_ClearRegisters_allowed(const CORBA::Any &any); + /** + * Command GetRange related method + * Description: + * + * @returns The actual electrometer range + */ + virtual Tango::DevString get_range(); + virtual bool is_GetRange_allowed(const CORBA::Any &any); + /** + * Command SetRange related method + * Description: + * + * @param argin The range to apply on the electrometer + */ + virtual void set_range(Tango::DevString argin); + virtual bool is_SetRange_allowed(const CORBA::Any &any); + /** + * Command GetMode related method + * Description: + * + * @returns The electrometer mode (MEASURE, LEAKAGE ...) + */ + virtual Tango::DevString get_mode(); + virtual bool is_GetMode_allowed(const CORBA::Any &any); + /** + * Command GetPolarity related method + * Description: + * + * @returns The electrometer polarity + */ + virtual Tango::DevString get_polarity(); + virtual bool is_GetPolarity_allowed(const CORBA::Any &any); + /** + * Command SetPolarity related method + * Description: + * + * @param argin POSITIVE or NEGATIVE + */ + virtual void set_polarity(Tango::DevString argin); + virtual bool is_SetPolarity_allowed(const CORBA::Any &any); + /** + * Command GetHzFilter related method + * Description: + * + * @returns The MCCE2 cut-off frequency in Hz + */ + virtual Tango::DevShort get_hz_filter(); + virtual bool is_GetHzFilter_allowed(const CORBA::Any &any); + /** + * Command SetHzFilter related method + * Description: + * + * @param argin The MCCE2 cut-off frequency in Hz + */ + virtual void set_hz_filter(Tango::DevShort argin); + virtual bool is_SetHzFilter_allowed(const CORBA::Any &any); + /** + * Command GetGain related method + * Description: + * + * @returns The MCCE2 gain + */ + virtual Tango::DevShort get_gain(); + virtual bool is_GetGain_allowed(const CORBA::Any &any); + /** + * Command SetGain related method + * Description: + * + * @param argin The new MCCE-2 gain + */ + virtual void set_gain(Tango::DevUShort argin); + virtual bool is_SetGain_allowed(const CORBA::Any &any); + /** + * Command GetElectrometerTypeStr related method + * Description: + * + * @param argin channel number + * @returns the electrometer type as string + */ + virtual Tango::DevString get_electrometer_type_str(Tango::DevUShort argin); + virtual bool is_GetElectrometerTypeStr_allowed(const CORBA::Any &any); + + +/*----- PROTECTED REGION ID(MCCE2Electrometers::Additional Method prototypes) ENABLED START -----*/ + +// Additional Method prototypes +protected : + AbstractElectrometerClass* _electrometer; + + std::string _statusStr; + + bool _init_done; //- used to allow device to start !! + bool _missing_property; + bool _updateRange1FromHW; + bool _updateRange2FromHW; + //- electrometer(s) type as string + std::string _electroCH1StrType; + std::string _electroCH2StrType; + + std::string read_range_from_hw(); + + //- Method to convert all electrometer exceptions on Tango exception + Tango::DevFailed electrometer_to_tango_exception(const electrometer::ElectrometerException& de); + +private : + AbstractElectrometerClass* _electrometerCH1; //- electrometer on channel 1 + AbstractElectrometerClass* _electrometerCH2; //- electrometer on channel 2 + Tango::DevUShort attr_electrometerChannel_write; + //- instanciate electrometer(s) obj + void create_electrometers_obj(); + +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::Additional Method prototypes +}; + +/*----- PROTECTED REGION ID(MCCE2Electrometers::Additional Classes Definitions) ENABLED START -----*/ + +// Additional Classes Definitions + +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::Additional Classes Definitions + +} // End of namespace + +#endif // MCCE2Electrometers_H diff --git a/src/MCCE2Electrometers.xmi b/src/MCCE2Electrometers.xmi new file mode 100644 index 0000000..41165b4 --- /dev/null +++ b/src/MCCE2Electrometers.xmi @@ -0,0 +1,324 @@ +<?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="MCCE2Electrometers" pogoRevision="8.2"> + <description description="This class allows you to control all MCCE-2 Novelec electrometers
through a Serial bus.
<br> Supported types :
<br> Novelec Electrometers : MCCE2" title="Novelec MCCE-2 Electrometers" sourcePath="/home/informatique/ica/phamj/DEV/Serial/novelecelectrometer/src" language="Cpp" filestogenerate="XMI file,Code files,html Pages" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false" descriptionHtmlExists="true"> + <inheritances classname="Device_4Impl" sourcePath=""/> + <identification contact="at synchrotron-soleil.fr - xavier.elattaoui" author="xavier.elattaoui" emailDomain="synchrotron-soleil.fr" classFamily="Acquisition" siteSpecific="" platform="All Platforms" bus="Serial Line" manufacturer="SAPHYMO" reference="MCCE-2"/> + </description> + <deviceProperties name="ProxyName" description="The name of the device which manage the communication."> + <type xsi:type="pogoDsl:StringType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </deviceProperties> + <deviceProperties name="Electrometer1Address" description="The first electrometer address configured. <br />
Note : if not connected, push 0 or let empty the property."> + <type xsi:type="pogoDsl:UShortType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </deviceProperties> + <deviceProperties name="Electrometer2Address" description="The second electrometer address configured. <br />
Note : if not connected, push 0 or let empty the property."> + <type xsi:type="pogoDsl:UShortType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </deviceProperties> + <deviceProperties name="ComProtocol" description="Communication protocal: ETHERNET/SERIAL"> + <type xsi:type="pogoDsl:StringType"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </deviceProperties> + <commands name="State" description="This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller." execMethod="dev_state" displayLevel="OPERATOR" polledPeriod="0"> + <argin description="none."> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="State Code"> + <type xsi:type="pogoDsl:StateType"/> + </argout> + <status abstract="true" inherited="true" concrete="true" concreteHere="true"/> + </commands> + <commands name="Status" description="This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller." execMethod="dev_status" displayLevel="OPERATOR" polledPeriod="0"> + <argin description="none."> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="Status description"> + <type xsi:type="pogoDsl:ConstStringType"/> + </argout> + <status abstract="true" inherited="true" concrete="true" concreteHere="true"/> + </commands> + <commands name="RangeUP" description="" execMethod="range_up" displayLevel="OPERATOR" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="RangeDOWN" description="" execMethod="range_down" displayLevel="OPERATOR" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="SetZeroVFFunction" description="" execMethod="set_zero_vffunction" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="SetOffsetZeroV1Function" description="" execMethod="set_offset_zero_v1_function" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="SetLeakageZeroV2Function" description="" execMethod="set_leakage_zero_v2_function" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="SetTestFunction" description="" execMethod="set_test_function" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="SetMeasureFunction" description="" execMethod="set_measure_function" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="MCCE2_ON" description="" execMethod="mcce2__on" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="MCCE2_OFF" description="" execMethod="mcce2__off" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="Local" description="" execMethod="local" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="Remote" description="" execMethod="remote" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="Reset" description="" execMethod="reset" displayLevel="OPERATOR" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="ClearRegisters" description="" execMethod="clear_registers" displayLevel="OPERATOR" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="GetRange" description="" execMethod="get_range" displayLevel="OPERATOR" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="The actual electrometer range"> + <type xsi:type="pogoDsl:StringType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="SetRange" description="" execMethod="set_range" displayLevel="OPERATOR" polledPeriod="0"> + <argin description="The range to apply on the electrometer"> + <type xsi:type="pogoDsl:StringType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="GetMode" description="" execMethod="get_mode" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="The electrometer mode (MEASURE, LEAKAGE ...)"> + <type xsi:type="pogoDsl:StringType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="GetPolarity" description="" execMethod="get_polarity" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="The electrometer polarity"> + <type xsi:type="pogoDsl:StringType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="SetPolarity" description="" execMethod="set_polarity" displayLevel="OPERATOR" polledPeriod="0"> + <argin description="POSITIVE or NEGATIVE"> + <type xsi:type="pogoDsl:StringType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="GetHzFilter" description="" execMethod="get_hz_filter" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="The MCCE2 cut-off frequency in Hz"> + <type xsi:type="pogoDsl:ShortType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="SetHzFilter" description="" execMethod="set_hz_filter" displayLevel="EXPERT" polledPeriod="0"> + <argin description="The MCCE2 cut-off frequency in Hz"> + <type xsi:type="pogoDsl:ShortType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="GetGain" description="" execMethod="get_gain" displayLevel="EXPERT" polledPeriod="0"> + <argin description="no argin"> + <type xsi:type="pogoDsl:VoidType"/> + </argin> + <argout description="The MCCE2 gain"> + <type xsi:type="pogoDsl:ShortType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="SetGain" description="" execMethod="set_gain" displayLevel="EXPERT" polledPeriod="0"> + <argin description="The new MCCE-2 gain"> + <type xsi:type="pogoDsl:UShortType"/> + </argin> + <argout description="no argout"> + <type xsi:type="pogoDsl:VoidType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <excludedStates>FAULT</excludedStates> + <excludedStates>DISABLE</excludedStates> + </commands> + <commands name="GetElectrometerTypeStr" description="" execMethod="get_electrometer_type_str" displayLevel="OPERATOR" polledPeriod="0"> + <argin description="channel number"> + <type xsi:type="pogoDsl:UShortType"/> + </argin> + <argout description="the electrometer type as string"> + <type xsi:type="pogoDsl:StringType"/> + </argout> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </commands> + <attributes name="electrometerChannel" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="0" maxY="0"> + <dataType xsi:type="pogoDsl:UShortType"/> + <changeEvent fire="false" libCheckCriteria="false"/> + <archiveEvent fire="false" libCheckCriteria="false"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <properties description="MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first)." label="electrometer channel" unit=" " standardUnit=" " displayUnit=" " format="%1.0d" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> + </attributes> + <attributes name="range1" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="0" maxY="0"> + <dataType xsi:type="pogoDsl:StringType"/> + <changeEvent fire="false" libCheckCriteria="false"/> + <archiveEvent fire="false" libCheckCriteria="false"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <properties description="The channel one MCCE2 range." label="range1" unit=" " standardUnit=" " displayUnit=" " format="%s" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> + </attributes> + <attributes name="range2" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="0" maxY="0"> + <dataType xsi:type="pogoDsl:StringType"/> + <changeEvent fire="false" libCheckCriteria="false"/> + <archiveEvent fire="false" libCheckCriteria="false"/> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + <properties description="The channel two MCCE range." label="range2" unit=" " standardUnit=" " displayUnit=" " format="%s" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/> + </attributes> + <states name="ON" description="Device up and ready"> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </states> + <states name="ALARM" description="Device initialisation not complete or a bad channel number is set."> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </states> + <states name="FAULT" description="Internal electrometer interface is not built or a Serial communication error occurred."> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </states> + <states name="DISABLE" description="No electrometer conected!"> + <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> + </states> + <preferences docHome="../doc/doc_html" makefileHome="$(TANGO_HOME)"/> + </classes> +</pogoDsl:PogoSystem> diff --git a/src/MCCE2ElectrometersClass.cpp b/src/MCCE2ElectrometersClass.cpp index 8365586..9fc061d 100644 --- a/src/MCCE2ElectrometersClass.cpp +++ b/src/MCCE2ElectrometersClass.cpp @@ -1,56 +1,63 @@ -static const char *ClassId = "$Id: MCCE2ElectrometersClass.cpp,v 1.16 2012-10-03 14:59:19 xavela Exp $"; -static const char *CvsPath = "$Source: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/MCCE2ElectrometersClass.cpp,v $"; -static const char *SvnPath = "$HeadURL: $"; -static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/MCCE2ElectrometersClass.cpp,v 1.16 2012-10-03 14:59:19 xavela Exp $"; -static const char *TagName = "$Name: not supported by cvs2svn $"; -static const char *HttpServer= "http://www.esrf.fr/computing/cs/tango/tango_doc/ds_doc/"; -//+============================================================================= +/*----- PROTECTED REGION ID(MCCE2ElectrometersClass.cpp) ENABLED START -----*/ +static const char *RcsId = "$Id: $"; +static const char *TagName = "$Name: $"; +static const char *CvsPath = "$Source: $"; +static const char *SvnPath = "$HeadURL: $"; +static const char *HttpServer = "http://www.esrf.eu/computing/cs/tango/tango_doc/ds_doc/"; +//============================================================================= // // file : MCCE2ElectrometersClass.cpp // -// description : C++ source for the MCCE2ElectrometersClass. A singleton -// class derived from DeviceClass. It implements the -// command list and all properties and methods required +// description : C++ source for the MCCE2ElectrometersClass. +// A singleton class derived from DeviceClass. +// It implements the command and attribute list +// and all properties and methods required // by the MCCE2Electrometers once per process. // -// project : TANGO Device Server -// -// $Author: xavela $ -// -// $Revision: 1.16 $ +// project : Novelec MCCE-2 Electrometers // -// $Log: not supported by cvs2svn $ -// Revision 1.14 2010/06/10 15:12:05 xavela -// TEST : control two channels with different MCCE2 -// -// -// copyleft : Synchrotron SOLEIL -// L'Orme des Merisiers -// Saint-Aubin - BP 48 -// FRANCE +// This file is part of Tango device class. +// +// Tango is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tango is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tango. If not, see <http://www.gnu.org/licenses/>. +// +// $Author: $ // -//-============================================================================= +// $Revision: $ +// $Date: $ // -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) +// $HeadURL: $ // -// (c) - Software Engineering Group - ESRF +//============================================================================= +// This file is generated by POGO +// (Program Obviously used to Generate tango Object) //============================================================================= #include <tango.h> - #include <MCCE2Electrometers.h> #include <MCCE2ElectrometersClass.h> +/*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass.cpp -//+---------------------------------------------------------------------------- +//------------------------------------------------------------------- /** - * Create MCCE2ElectrometersClass singleton and return it in a C function for Python usage + * Create MCCE2ElectrometersClass singleton and + * return it in a C function for Python usage */ -//+---------------------------------------------------------------------------- +//------------------------------------------------------------------- extern "C" { -#ifdef WIN32 +#ifdef _TG_WINDOWS_ __declspec(dllexport) @@ -61,768 +68,541 @@ __declspec(dllexport) } } - namespace MCCE2Electrometers_ns { -//+---------------------------------------------------------------------------- -// -// method : GetElectrometerTypeStrClass::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *GetElectrometerTypeStrClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) -{ +//=================================================================== +// Initialize pointer for singleton pattern +//=================================================================== +MCCE2ElectrometersClass *MCCE2ElectrometersClass::_instance = NULL; - cout2 << "GetElectrometerTypeStrClass::execute(): arrived" << endl; +//-------------------------------------------------------- +/** + * method : MCCE2ElectrometersClass::MCCE2ElectrometersClass(string &s) + * description : constructor for the MCCE2ElectrometersClass + * + * @param s The class name + */ +//-------------------------------------------------------- +MCCE2ElectrometersClass::MCCE2ElectrometersClass(string &s):Tango::DeviceClass(s) +{ + cout2 << "Entering MCCE2ElectrometersClass constructor" << endl; + set_default_property(); + write_class_property(); - Tango::DevUShort argin; - extract(in_any, argin); + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::constructor) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::constructor - return insert((static_cast<MCCE2Electrometers *>(device))->get_electrometer_type_str(argin)); + cout2 << "Leaving MCCE2ElectrometersClass constructor" << endl; } -//+---------------------------------------------------------------------------- -// -// method : SetPolarityClass::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *SetPolarityClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : MCCE2ElectrometersClass::~MCCE2ElectrometersClass() + * description : destructor for the MCCE2ElectrometersClass + */ +//-------------------------------------------------------- +MCCE2ElectrometersClass::~MCCE2ElectrometersClass() { + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::destructor) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::destructor - cout2 << "SetPolarityClass::execute(): arrived" << endl; + _instance = NULL; +} - Tango::DevString argin; - extract(in_any, argin); - ((static_cast<MCCE2Electrometers *>(device))->set_polarity(argin)); - return new CORBA::Any(); +//-------------------------------------------------------- +/** + * method : MCCE2ElectrometersClass::init + * description : Create the object if not already done. + * Otherwise, just return a pointer to the object + * + * @param name The class name + */ +//-------------------------------------------------------- +MCCE2ElectrometersClass *MCCE2ElectrometersClass::init(const char *name) +{ + if (_instance == NULL) + { + try + { + string s(name); + _instance = new MCCE2ElectrometersClass(s); + } + catch (bad_alloc &) + { + throw; + } + } + return _instance; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2_OFFCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *MCCE2_OFFCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : MCCE2ElectrometersClass::instance + * description : Check if object already created, + * and return a pointer to the object + */ +//-------------------------------------------------------- +MCCE2ElectrometersClass *MCCE2ElectrometersClass::instance() { - - cout2 << "MCCE2_OFFCmd::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->mcce2__off()); - return new CORBA::Any(); + if (_instance == NULL) + { + cerr << "Class is not initialised !!" << endl; + exit(-1); + } + return _instance; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2_ONCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *MCCE2_ONCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) -{ - cout2 << "MCCE2_ONCmd::execute(): arrived" << endl; - ((static_cast<MCCE2Electrometers *>(device))->mcce2__on()); +//=================================================================== +// Command execution method calls +//=================================================================== +//-------------------------------------------------------- +/** + * method : RangeUPClass::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 *RangeUPClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) +{ + cout2 << "RangeUPClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->range_up()); return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : SetGainCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *SetGainCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : RangeDOWNClass::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 *RangeDOWNClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "SetGainCmd::execute(): arrived" << endl; - - Tango::DevUShort argin; - extract(in_any, argin); - - ((static_cast<MCCE2Electrometers *>(device))->set_gain(argin)); + cout2 << "RangeDOWNClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->range_down()); return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : GetGainCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *GetGainCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : SetZeroVFFunctionClass::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 *SetZeroVFFunctionClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "GetGainCmd::execute(): arrived" << endl; - - return insert((static_cast<MCCE2Electrometers *>(device))->get_gain()); + cout2 << "SetZeroVFFunctionClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->set_zero_vffunction()); + return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : GetModeCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *GetModeCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : SetOffsetZeroV1FunctionClass::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 *SetOffsetZeroV1FunctionClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "GetModeCmd::execute(): arrived" << endl; - - return insert((static_cast<MCCE2Electrometers *>(device))->get_mode()); + cout2 << "SetOffsetZeroV1FunctionClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->set_offset_zero_v1_function()); + return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : SetRangeCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *SetRangeCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : SetLeakageZeroV2FunctionClass::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 *SetLeakageZeroV2FunctionClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "SetRangeCmd::execute(): arrived" << endl; - - Tango::DevString argin; - extract(in_any, argin); - - ((static_cast<MCCE2Electrometers *>(device))->set_range(argin)); + cout2 << "SetLeakageZeroV2FunctionClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->set_leakage_zero_v2_function()); return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : GetRangeCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *GetRangeCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : SetTestFunctionClass::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 *SetTestFunctionClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "GetRangeCmd::execute(): arrived" << endl; - - return insert((static_cast<MCCE2Electrometers *>(device))->get_range()); + cout2 << "SetTestFunctionClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->set_test_function()); + return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : RemoteCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *RemoteCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : SetMeasureFunctionClass::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 *SetMeasureFunctionClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "RemoteCmd::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->remote()); + cout2 << "SetMeasureFunctionClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->set_measure_function()); return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : LocalCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *LocalCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : MCCE2_ONClass::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 *MCCE2_ONClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "LocalCmd::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->local()); + cout2 << "MCCE2_ONClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->mcce2__on()); return new CORBA::Any(); } - - -//+---------------------------------------------------------------------------- -// -// method : GetHzFilterCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *GetHzFilterCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : MCCE2_OFFClass::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 *MCCE2_OFFClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "GetHzFilterCmd::execute(): arrived" << endl; - - return insert((static_cast<MCCE2Electrometers *>(device))->get_hz_filter()); + cout2 << "MCCE2_OFFClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->mcce2__off()); + return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : SetHzFilterCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *SetHzFilterCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : LocalClass::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 *LocalClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "SetHzFilterCmd::execute(): arrived" << endl; - - Tango::DevShort argin; - extract(in_any, argin); - - ((static_cast<MCCE2Electrometers *>(device))->set_hz_filter(argin)); + cout2 << "LocalClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->local()); return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : GetPolarityCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *GetPolarityCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : RemoteClass::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 *RemoteClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "GetPolarityCmd::execute(): arrived" << endl; - - return insert((static_cast<MCCE2Electrometers *>(device))->get_polarity()); + cout2 << "RemoteClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->remote()); + return new CORBA::Any(); } - - - - -//+---------------------------------------------------------------------------- -// -// method : SetMeasureFunctionCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *SetMeasureFunctionCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : ResetClass::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 *ResetClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "SetMeasureFunctionCmd::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->set_measure_function()); + cout2 << "ResetClass::execute(): arrived" << endl; + ((static_cast<MCCE2Electrometers *>(device))->reset()); return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : ClearRegistersClass::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *ClearRegistersClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : ClearRegistersClass::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 *ClearRegistersClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - cout2 << "ClearRegistersClass::execute(): arrived" << endl; - ((static_cast<MCCE2Electrometers *>(device))->clear_registers()); return new CORBA::Any(); } - -//+---------------------------------------------------------------------------- -// -// method : RangeUPCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *RangeUPCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) -{ - - cout2 << "RangeUPCmd::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->range_up()); - return new CORBA::Any(); -} - -//+---------------------------------------------------------------------------- -// -// method : RangeDOWNClass::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *RangeDOWNClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : GetRangeClass::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 *GetRangeClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "RangeDOWNClass::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->range_down()); - return new CORBA::Any(); + cout2 << "GetRangeClass::execute(): arrived" << endl; + return insert((static_cast<MCCE2Electrometers *>(device))->get_range()); } -//+---------------------------------------------------------------------------- -// -// method : SetZeroVFFunctionCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *SetZeroVFFunctionCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : SetRangeClass::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 *SetRangeClass::execute(Tango::DeviceImpl *device, const CORBA::Any &in_any) { - - cout2 << "SetZeroVFFunctionCmd::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->set_zero_vffunction()); + cout2 << "SetRangeClass::execute(): arrived" << endl; + Tango::DevString argin; + extract(in_any, argin); + ((static_cast<MCCE2Electrometers *>(device))->set_range(argin)); return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : SetOffsetZeroV1FunctionCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *SetOffsetZeroV1FunctionCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : GetModeClass::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 *GetModeClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "SetOffsetZeroV1FunctionCmd::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->set_offset_zero_v1_function()); - return new CORBA::Any(); + cout2 << "GetModeClass::execute(): arrived" << endl; + return insert((static_cast<MCCE2Electrometers *>(device))->get_mode()); } -//+---------------------------------------------------------------------------- -// -// method : SetLeakageZeroV2FunctionCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *SetLeakageZeroV2FunctionCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : GetPolarityClass::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 *GetPolarityClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "SetLeakageZeroV2FunctionCmd::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->set_leakage_zero_v2_function()); - return new CORBA::Any(); + cout2 << "GetPolarityClass::execute(): arrived" << endl; + return insert((static_cast<MCCE2Electrometers *>(device))->get_polarity()); } -//+---------------------------------------------------------------------------- -// -// method : SetTestFunctionCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *SetTestFunctionCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : SetPolarityClass::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 *SetPolarityClass::execute(Tango::DeviceImpl *device, const CORBA::Any &in_any) { - - cout2 << "SetTestFunctionCmd::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->set_test_function()); + cout2 << "SetPolarityClass::execute(): arrived" << endl; + Tango::DevString argin; + extract(in_any, argin); + ((static_cast<MCCE2Electrometers *>(device))->set_polarity(argin)); return new CORBA::Any(); } - - - - -//+---------------------------------------------------------------------------- -// -// method : ResetClass::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be excuted -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *ResetClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) +//-------------------------------------------------------- +/** + * method : GetHzFilterClass::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 *GetHzFilterClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - - cout2 << "ResetClass::execute(): arrived" << endl; - - ((static_cast<MCCE2Electrometers *>(device))->reset()); - return new CORBA::Any(); + cout2 << "GetHzFilterClass::execute(): arrived" << endl; + return insert((static_cast<MCCE2Electrometers *>(device))->get_hz_filter()); } - -// -//---------------------------------------------------------------- -// Initialize pointer for singleton pattern -//---------------------------------------------------------------- -// -MCCE2ElectrometersClass *MCCE2ElectrometersClass::_instance = NULL; - -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::MCCE2ElectrometersClass(string &s) -// -// description : constructor for the MCCE2ElectrometersClass -// -// in : - s : The class name -// -//----------------------------------------------------------------------------- -MCCE2ElectrometersClass::MCCE2ElectrometersClass(string &s):DeviceClass(s) -{ - - cout2 << "Entering MCCE2ElectrometersClass constructor" << endl; - set_default_property(); - write_class_property(); - get_class_property(); - - cout2 << "Leaving MCCE2ElectrometersClass constructor" << endl; - -} -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::~MCCE2ElectrometersClass() -// -// description : destructor for the MCCE2ElectrometersClass -// -//----------------------------------------------------------------------------- -MCCE2ElectrometersClass::~MCCE2ElectrometersClass() +//-------------------------------------------------------- +/** + * method : SetHzFilterClass::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 *SetHzFilterClass::execute(Tango::DeviceImpl *device, const CORBA::Any &in_any) { - _instance = NULL; + cout2 << "SetHzFilterClass::execute(): arrived" << endl; + Tango::DevShort argin; + extract(in_any, argin); + ((static_cast<MCCE2Electrometers *>(device))->set_hz_filter(argin)); + return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::instance -// -// description : Create the object if not already done. Otherwise, just -// return a pointer to the object -// -// in : - name : The class name -// -//----------------------------------------------------------------------------- -MCCE2ElectrometersClass *MCCE2ElectrometersClass::init(const char *name) +//-------------------------------------------------------- +/** + * method : GetGainClass::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 *GetGainClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any)) { - if (_instance == NULL) - { - try - { - string s(name); - _instance = new MCCE2ElectrometersClass(s); - } - catch (bad_alloc) - { - throw; - } - } - return _instance; + cout2 << "GetGainClass::execute(): arrived" << endl; + return insert((static_cast<MCCE2Electrometers *>(device))->get_gain()); } -MCCE2ElectrometersClass *MCCE2ElectrometersClass::instance() +//-------------------------------------------------------- +/** + * method : SetGainClass::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 *SetGainClass::execute(Tango::DeviceImpl *device, const CORBA::Any &in_any) { - if (_instance == NULL) - { - cerr << "Class is not initialised !!" << endl; - exit(-1); - } - return _instance; + cout2 << "SetGainClass::execute(): arrived" << endl; + Tango::DevUShort argin; + extract(in_any, argin); + ((static_cast<MCCE2Electrometers *>(device))->set_gain(argin)); + return new CORBA::Any(); } -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::command_factory -// -// description : Create the command object(s) and store them in the -// command list -// -//----------------------------------------------------------------------------- -void MCCE2ElectrometersClass::command_factory() +//-------------------------------------------------------- +/** + * method : GetElectrometerTypeStrClass::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 *GetElectrometerTypeStrClass::execute(Tango::DeviceImpl *device, const CORBA::Any &in_any) { - command_list.push_back(new RangeUPCmd("RangeUP", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::OPERATOR)); - command_list.push_back(new RangeDOWNClass("RangeDOWN", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::OPERATOR)); - command_list.push_back(new SetZeroVFFunctionCmd("SetZeroVFFunction", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::EXPERT)); - command_list.push_back(new SetOffsetZeroV1FunctionCmd("SetOffsetZeroV1Function", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::EXPERT)); - command_list.push_back(new SetLeakageZeroV2FunctionCmd("SetLeakageZeroV2Function", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::EXPERT)); - command_list.push_back(new SetTestFunctionCmd("SetTestFunction", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::EXPERT)); - command_list.push_back(new SetMeasureFunctionCmd("SetMeasureFunction", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::EXPERT)); - command_list.push_back(new MCCE2_ONCmd("MCCE2_ON", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::EXPERT)); - command_list.push_back(new MCCE2_OFFCmd("MCCE2_OFF", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::EXPERT)); - command_list.push_back(new LocalCmd("Local", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::EXPERT)); - command_list.push_back(new RemoteCmd("Remote", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::EXPERT)); - command_list.push_back(new ResetClass("Reset", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::OPERATOR)); - command_list.push_back(new ClearRegistersClass("ClearRegisters", - Tango::DEV_VOID, Tango::DEV_VOID, - "no argin", - "no argout", - Tango::OPERATOR)); - command_list.push_back(new GetRangeCmd("GetRange", - Tango::DEV_VOID, Tango::DEV_STRING, - "no argin", - "The actual electrometer range", - Tango::OPERATOR)); - command_list.push_back(new SetRangeCmd("SetRange", - Tango::DEV_STRING, Tango::DEV_VOID, - "The range to apply on the electrometer", - "no argout", - Tango::OPERATOR)); - command_list.push_back(new GetModeCmd("GetMode", - Tango::DEV_VOID, Tango::DEV_STRING, - "no argin", - "The electrometer mode (MEASURE, LEAKAGE ...)", - Tango::EXPERT)); - command_list.push_back(new GetPolarityCmd("GetPolarity", - Tango::DEV_VOID, Tango::DEV_STRING, - "no argin", - "The electrometer polarity", - Tango::EXPERT)); - command_list.push_back(new SetPolarityClass("SetPolarity", - Tango::DEV_STRING, Tango::DEV_VOID, - "POSITIVE or NEGATIVE", - "no argout", - Tango::OPERATOR)); - command_list.push_back(new GetHzFilterCmd("GetHzFilter", - Tango::DEV_VOID, Tango::DEV_SHORT, - "no argin", - "The MCCE2 cut-off frequency in Hz", - Tango::EXPERT)); - command_list.push_back(new SetHzFilterCmd("SetHzFilter", - Tango::DEV_SHORT, Tango::DEV_VOID, - "The MCCE2 cut-off frequency in Hz", - "no argout", - Tango::EXPERT)); - command_list.push_back(new GetGainCmd("GetGain", - Tango::DEV_VOID, Tango::DEV_SHORT, - "no argin", - "The MCCE2 gain", - Tango::EXPERT)); - command_list.push_back(new SetGainCmd("SetGain", - Tango::DEV_USHORT, Tango::DEV_VOID, - "The new MCCE-2 gain", - "no argout", - Tango::EXPERT)); - command_list.push_back(new GetElectrometerTypeStrClass("GetElectrometerTypeStr", - Tango::DEV_USHORT, Tango::DEV_STRING, - "channel number", - "the electrometer type as string", - Tango::OPERATOR)); - - // add polling if any - for (unsigned int i=0 ; i<command_list.size(); i++) - { - } + cout2 << "GetElectrometerTypeStrClass::execute(): arrived" << endl; + Tango::DevUShort argin; + extract(in_any, argin); + return insert((static_cast<MCCE2Electrometers *>(device))->get_electrometer_type_str(argin)); } -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::get_class_property -// -// description : Get the class property for specified name. -// -// in : string name : The property name -// -//+---------------------------------------------------------------------------- + +//=================================================================== +// Properties management +//=================================================================== +//-------------------------------------------------------- +/** + * Method : MCCE2ElectrometersClass::get_class_property() + * Description : Get the class property for specified name. + */ +//-------------------------------------------------------- Tango::DbDatum MCCE2ElectrometersClass::get_class_property(string &prop_name) { for (unsigned int i=0 ; i<cl_prop.size() ; i++) if (cl_prop[i].name == prop_name) return cl_prop[i]; - // if not found, return an empty DbDatum + // if not found, returns an empty DbDatum return Tango::DbDatum(prop_name); } -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::get_default_device_property() -// -// description : Return the default value for device property. -// -//----------------------------------------------------------------------------- + +//-------------------------------------------------------- +/** + * Method : MCCE2ElectrometersClass::get_default_device_property() + * Description : Return the default value for device property. + */ +//-------------------------------------------------------- Tango::DbDatum MCCE2ElectrometersClass::get_default_device_property(string &prop_name) { for (unsigned int i=0 ; i<dev_def_prop.size() ; i++) @@ -832,13 +612,12 @@ Tango::DbDatum MCCE2ElectrometersClass::get_default_device_property(string &prop return Tango::DbDatum(prop_name); } -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::get_default_class_property() -// -// description : Return the default value for class property. -// -//----------------------------------------------------------------------------- +//-------------------------------------------------------- +/** + * Method : MCCE2ElectrometersClass::get_default_class_property() + * Description : Return the default value for class property. + */ +//-------------------------------------------------------- Tango::DbDatum MCCE2ElectrometersClass::get_default_class_property(string &prop_name) { for (unsigned int i=0 ; i<cl_def_prop.size() ; i++) @@ -847,134 +626,28 @@ Tango::DbDatum MCCE2ElectrometersClass::get_default_class_property(string &prop_ // if not found, return an empty DbDatum return Tango::DbDatum(prop_name); } -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::device_factory -// -// description : Create the device object(s) and store them in the -// device list -// -// in : Tango::DevVarStringArray *devlist_ptr : The device name list -// -//----------------------------------------------------------------------------- -void MCCE2ElectrometersClass::device_factory(const Tango::DevVarStringArray *devlist_ptr) -{ - - // Create all devices.(Automatic code generation) - //------------------------------------------------------------- - for (unsigned long i=0 ; i < devlist_ptr->length() ; i++) - { - cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl; - - // Create devices and add it into the device list - //---------------------------------------------------- - device_list.push_back(new MCCE2Electrometers(this, (*devlist_ptr)[i])); - - // Export device to the outside world - // Check before if database used. - //--------------------------------------------- - if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false)) - export_device(device_list.back()); - else - export_device(device_list.back(), (*devlist_ptr)[i]); - } - // End of Automatic code generation - //------------------------------------------------------------- - -} -//+---------------------------------------------------------------------------- -// Method: MCCE2ElectrometersClass::attribute_factory(vector<Tango::Attr *> &att_list) -//----------------------------------------------------------------------------- -void MCCE2ElectrometersClass::attribute_factory(vector<Tango::Attr *> &att_list) -{ - // Attribute : electrometerChannel - electrometerChannelAttrib *electrometer_channel = new electrometerChannelAttrib(); - Tango::UserDefaultAttrProp electrometer_channel_prop; - electrometer_channel_prop.set_label("electrometer channel"); - electrometer_channel_prop.set_unit(" "); - electrometer_channel_prop.set_standard_unit(" "); - electrometer_channel_prop.set_display_unit(" "); - electrometer_channel_prop.set_format("%1.0d"); - electrometer_channel_prop.set_description("MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first)."); - electrometer_channel->set_default_properties(electrometer_channel_prop); - att_list.push_back(electrometer_channel); - - // Attribute : range1 - range1Attrib *range1 = new range1Attrib(); - Tango::UserDefaultAttrProp range1_prop; - range1_prop.set_label("range1"); - range1_prop.set_unit(" "); - range1_prop.set_standard_unit(" "); - range1_prop.set_display_unit(" "); - range1_prop.set_format("%s"); - range1_prop.set_description("The channel one MCCE2 range."); - range1->set_default_properties(range1_prop); - att_list.push_back(range1); - - // Attribute : range2 - range2Attrib *range2 = new range2Attrib(); - Tango::UserDefaultAttrProp range2_prop; - range2_prop.set_label("range2"); - range2_prop.set_unit(" "); - range2_prop.set_standard_unit(" "); - range2_prop.set_display_unit(" "); - range2_prop.set_format("%s"); - range2_prop.set_description("The channel two MCCE range."); - range2->set_default_properties(range2_prop); - att_list.push_back(range2); - - // End of Automatic code generation - //------------------------------------------------------------- -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::get_class_property() -// -// description : Read the class properties from database. -// -//----------------------------------------------------------------------------- -void MCCE2ElectrometersClass::get_class_property() -{ - // Initialize your default values here (if not done with POGO). - //------------------------------------------------------------------ - - // Read class properties from database.(Automatic code generation) - //------------------------------------------------------------------ - - // Call database and extract values - //-------------------------------------------- - if (Tango::Util::instance()->_UseDb==true) - get_db_class()->get_property(cl_prop); - Tango::DbDatum def_prop; - int i = -1; - // End of Automatic code generation - //------------------------------------------------------------------ - -} - -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::set_default_property -// -// description: Set default property (class and device) for wizard. -// For each property, add to wizard property name and description -// If default value has been set, add it to wizard property and -// store it in a DbDatum. -// -//----------------------------------------------------------------------------- +//-------------------------------------------------------- +/** + * Method : MCCE2ElectrometersClass::set_default_property() + * Description : Set default property (class and device) for wizard. + * For each property, add to wizard property name and description. + * If default value has been set, add it to wizard property and + * store it in a DbDatum. + */ +//-------------------------------------------------------- void MCCE2ElectrometersClass::set_default_property() { string prop_name; string prop_desc; string prop_def; - vector<string> vect_data; + // Set Default Class Properties - // Set Default Device Properties - prop_name = "CommunicationLinkName"; + + // Set Default device Properties + prop_name = "ProxyName"; prop_desc = "The name of the device which manage the communication."; prop_def = ""; vect_data.clear(); @@ -987,7 +660,6 @@ void MCCE2ElectrometersClass::set_default_property() } else add_wiz_dev_prop(prop_name, prop_desc); - prop_name = "Electrometer1Address"; prop_desc = "The first electrometer address configured. <br />\nNote : if not connected, push 0 or let empty the property."; prop_def = ""; @@ -1001,7 +673,6 @@ void MCCE2ElectrometersClass::set_default_property() } else add_wiz_dev_prop(prop_name, prop_desc); - prop_name = "Electrometer2Address"; prop_desc = "The second electrometer address configured. <br />\nNote : if not connected, push 0 or let empty the property."; prop_def = ""; @@ -1015,19 +686,30 @@ void MCCE2ElectrometersClass::set_default_property() } else add_wiz_dev_prop(prop_name, prop_desc); - + prop_name = "ComProtocol"; + prop_desc = "Communication protocal: ETHERNET/SERIAL"; + prop_def = ""; + vect_data.clear(); + if (prop_def.length()>0) + { + Tango::DbDatum data(prop_name); + data << vect_data ; + dev_def_prop.push_back(data); + add_wiz_dev_prop(prop_name, prop_desc, prop_def); + } + else + add_wiz_dev_prop(prop_name, prop_desc); } -//+---------------------------------------------------------------------------- -// -// method : MCCE2ElectrometersClass::write_class_property -// -// description : Set class description as property in database -// -//----------------------------------------------------------------------------- + +//-------------------------------------------------------- +/** + * Method : MCCE2ElectrometersClass::write_class_property() + * Description : Set class description fields as property in database + */ +//-------------------------------------------------------- void MCCE2ElectrometersClass::write_class_property() { // First time, check if database used - //-------------------------------------------- if (Tango::Util::_UseDb == false) return; @@ -1051,15 +733,11 @@ void MCCE2ElectrometersClass::write_class_property() str_desc.push_back("<br> Novelec Electrometers : MCCE2"); description << str_desc; data.push_back(description); - + // put cvs or svn location - string filename(classname); + string filename("MCCE2Electrometers"); filename += "Class.cpp"; - - // Create a string with the class ID to - // get the string into the binary - string class_id(ClassId); - + // check for cvs information string src_path(CvsPath); start = src_path.find("/"); @@ -1082,6 +760,7 @@ void MCCE2ElectrometersClass::write_class_property() data.push_back(cvs_loc); } } + // check for svn information else { @@ -1156,13 +835,474 @@ void MCCE2ElectrometersClass::write_class_property() // Put inheritance Tango::DbDatum inher_datum("InheritedFrom"); vector<string> inheritance; - inheritance.push_back("Device_4Impl"); + inheritance.push_back("Tango::Device_4Impl"); inher_datum << inheritance; data.push_back(inher_datum); // Call database and and values - //-------------------------------------------- get_db_class()->put_property(data); } -} // namespace +//=================================================================== +// Factory methods +//=================================================================== + +//-------------------------------------------------------- +/** + * Method : MCCE2ElectrometersClass::device_factory() + * Description : Create the device object(s) + * and store them in the device list + */ +//-------------------------------------------------------- +void MCCE2ElectrometersClass::device_factory(const Tango::DevVarStringArray *devlist_ptr) +{ + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::device_factory_before) ENABLED START -----*/ + + // Add your own code + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::device_factory_before + + // Create devices and add it into the device list + for (unsigned long i=0 ; i<devlist_ptr->length() ; i++) + { + cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl; + device_list.push_back(new MCCE2Electrometers(this, (*devlist_ptr)[i])); + } + + // Manage dynamic attributes if any + //erase_dynamic_attributes(devlist_ptr, get_class_attr()->get_attr_list()); + + // Export devices to the outside world + for (unsigned long i=1 ; i<=devlist_ptr->length() ; i++) + { + // Add dynamic attributes if any + MCCE2Electrometers *dev = static_cast<MCCE2Electrometers *>(device_list[device_list.size()-i]); + dev->add_dynamic_attributes(); + + // Check before if database used. + if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false)) + export_device(dev); + else + export_device(dev, dev->get_name().c_str()); + } + + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::device_factory_after) ENABLED START -----*/ + + // Add your own code + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::device_factory_after +} +//-------------------------------------------------------- +/** + * Method : MCCE2ElectrometersClass::attribute_factory() + * Description : Create the attribute object(s) + * and store them in the attribute list + */ +//-------------------------------------------------------- +void MCCE2ElectrometersClass::attribute_factory(vector<Tango::Attr *> &att_list) +{ + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::attribute_factory_before) ENABLED START -----*/ + + // Add your own code + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::attribute_factory_before + // Attribute : electrometerChannel + electrometerChannelAttrib *electrometerchannel = new electrometerChannelAttrib(); + Tango::UserDefaultAttrProp electrometerchannel_prop; + electrometerchannel_prop.set_description("MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first)."); + electrometerchannel_prop.set_label("electrometer channel"); + electrometerchannel_prop.set_unit(" "); + electrometerchannel_prop.set_standard_unit(" "); + electrometerchannel_prop.set_display_unit(" "); + electrometerchannel_prop.set_format("%1.0d"); + // max_value not set for electrometerChannel + // min_value not set for electrometerChannel + // max_alarm not set for electrometerChannel + // min_alarm not set for electrometerChannel + // max_warning not set for electrometerChannel + // min_warning not set for electrometerChannel + // delta_t not set for electrometerChannel + // delta_val not set for electrometerChannel + + electrometerchannel->set_default_properties(electrometerchannel_prop); + // Not Polled + electrometerchannel->set_disp_level(Tango::OPERATOR); + // Not Memorized + att_list.push_back(electrometerchannel); + + // Attribute : range1 + range1Attrib *range1 = new range1Attrib(); + Tango::UserDefaultAttrProp range1_prop; + range1_prop.set_description("The channel one MCCE2 range."); + range1_prop.set_label("range1"); + range1_prop.set_unit(" "); + range1_prop.set_standard_unit(" "); + range1_prop.set_display_unit(" "); + range1_prop.set_format("%s"); + // max_value not set for range1 + // min_value not set for range1 + // max_alarm not set for range1 + // min_alarm not set for range1 + // max_warning not set for range1 + // min_warning not set for range1 + // delta_t not set for range1 + // delta_val not set for range1 + + range1->set_default_properties(range1_prop); + // Not Polled + range1->set_disp_level(Tango::OPERATOR); + // Not Memorized + att_list.push_back(range1); + + // Attribute : range2 + range2Attrib *range2 = new range2Attrib(); + Tango::UserDefaultAttrProp range2_prop; + range2_prop.set_description("The channel two MCCE range."); + range2_prop.set_label("range2"); + range2_prop.set_unit(" "); + range2_prop.set_standard_unit(" "); + range2_prop.set_display_unit(" "); + range2_prop.set_format("%s"); + // max_value not set for range2 + // min_value not set for range2 + // max_alarm not set for range2 + // min_alarm not set for range2 + // max_warning not set for range2 + // min_warning not set for range2 + // delta_t not set for range2 + // delta_val not set for range2 + + range2->set_default_properties(range2_prop); + // Not Polled + range2->set_disp_level(Tango::OPERATOR); + // Not Memorized + att_list.push_back(range2); + + // Create a list of static attributes + create_static_attribute_list(get_class_attr()->get_attr_list()); + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::attribute_factory_after) ENABLED START -----*/ + + // Add your own code + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::attribute_factory_after +} +//-------------------------------------------------------- +/** + * Method : MCCE2ElectrometersClass::command_factory() + * Description : Create the command object(s) + * and store them in the command list + */ +//-------------------------------------------------------- +void MCCE2ElectrometersClass::command_factory() +{ + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::command_factory_before) ENABLED START -----*/ + + // Add your own code + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::command_factory_before + + + // Command RangeUP + RangeUPClass *pRangeUPCmd = + new RangeUPClass("RangeUP", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::OPERATOR); + command_list.push_back(pRangeUPCmd); + + // Command RangeDOWN + RangeDOWNClass *pRangeDOWNCmd = + new RangeDOWNClass("RangeDOWN", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::OPERATOR); + command_list.push_back(pRangeDOWNCmd); + + // Command SetZeroVFFunction + SetZeroVFFunctionClass *pSetZeroVFFunctionCmd = + new SetZeroVFFunctionClass("SetZeroVFFunction", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::EXPERT); + command_list.push_back(pSetZeroVFFunctionCmd); + + // Command SetOffsetZeroV1Function + SetOffsetZeroV1FunctionClass *pSetOffsetZeroV1FunctionCmd = + new SetOffsetZeroV1FunctionClass("SetOffsetZeroV1Function", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::EXPERT); + command_list.push_back(pSetOffsetZeroV1FunctionCmd); + + // Command SetLeakageZeroV2Function + SetLeakageZeroV2FunctionClass *pSetLeakageZeroV2FunctionCmd = + new SetLeakageZeroV2FunctionClass("SetLeakageZeroV2Function", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::EXPERT); + command_list.push_back(pSetLeakageZeroV2FunctionCmd); + + // Command SetTestFunction + SetTestFunctionClass *pSetTestFunctionCmd = + new SetTestFunctionClass("SetTestFunction", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::EXPERT); + command_list.push_back(pSetTestFunctionCmd); + + // Command SetMeasureFunction + SetMeasureFunctionClass *pSetMeasureFunctionCmd = + new SetMeasureFunctionClass("SetMeasureFunction", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::EXPERT); + command_list.push_back(pSetMeasureFunctionCmd); + + // Command MCCE2_ON + MCCE2_ONClass *pMCCE2_ONCmd = + new MCCE2_ONClass("MCCE2_ON", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::EXPERT); + command_list.push_back(pMCCE2_ONCmd); + + // Command MCCE2_OFF + MCCE2_OFFClass *pMCCE2_OFFCmd = + new MCCE2_OFFClass("MCCE2_OFF", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::EXPERT); + command_list.push_back(pMCCE2_OFFCmd); + + // Command Local + LocalClass *pLocalCmd = + new LocalClass("Local", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::EXPERT); + command_list.push_back(pLocalCmd); + + // Command Remote + RemoteClass *pRemoteCmd = + new RemoteClass("Remote", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::EXPERT); + command_list.push_back(pRemoteCmd); + + // Command Reset + ResetClass *pResetCmd = + new ResetClass("Reset", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::OPERATOR); + command_list.push_back(pResetCmd); + + // Command ClearRegisters + ClearRegistersClass *pClearRegistersCmd = + new ClearRegistersClass("ClearRegisters", + Tango::DEV_VOID, Tango::DEV_VOID, + "no argin", + "no argout", + Tango::OPERATOR); + command_list.push_back(pClearRegistersCmd); + + // Command GetRange + GetRangeClass *pGetRangeCmd = + new GetRangeClass("GetRange", + Tango::DEV_VOID, Tango::DEV_STRING, + "no argin", + "The actual electrometer range", + Tango::OPERATOR); + command_list.push_back(pGetRangeCmd); + + // Command SetRange + SetRangeClass *pSetRangeCmd = + new SetRangeClass("SetRange", + Tango::DEV_STRING, Tango::DEV_VOID, + "The range to apply on the electrometer", + "no argout", + Tango::OPERATOR); + command_list.push_back(pSetRangeCmd); + + // Command GetMode + GetModeClass *pGetModeCmd = + new GetModeClass("GetMode", + Tango::DEV_VOID, Tango::DEV_STRING, + "no argin", + "The electrometer mode (MEASURE, LEAKAGE ...)", + Tango::EXPERT); + command_list.push_back(pGetModeCmd); + + // Command GetPolarity + GetPolarityClass *pGetPolarityCmd = + new GetPolarityClass("GetPolarity", + Tango::DEV_VOID, Tango::DEV_STRING, + "no argin", + "The electrometer polarity", + Tango::EXPERT); + command_list.push_back(pGetPolarityCmd); + + // Command SetPolarity + SetPolarityClass *pSetPolarityCmd = + new SetPolarityClass("SetPolarity", + Tango::DEV_STRING, Tango::DEV_VOID, + "POSITIVE or NEGATIVE", + "no argout", + Tango::OPERATOR); + command_list.push_back(pSetPolarityCmd); + + // Command GetHzFilter + GetHzFilterClass *pGetHzFilterCmd = + new GetHzFilterClass("GetHzFilter", + Tango::DEV_VOID, Tango::DEV_SHORT, + "no argin", + "The MCCE2 cut-off frequency in Hz", + Tango::EXPERT); + command_list.push_back(pGetHzFilterCmd); + + // Command SetHzFilter + SetHzFilterClass *pSetHzFilterCmd = + new SetHzFilterClass("SetHzFilter", + Tango::DEV_SHORT, Tango::DEV_VOID, + "The MCCE2 cut-off frequency in Hz", + "no argout", + Tango::EXPERT); + command_list.push_back(pSetHzFilterCmd); + + // Command GetGain + GetGainClass *pGetGainCmd = + new GetGainClass("GetGain", + Tango::DEV_VOID, Tango::DEV_SHORT, + "no argin", + "The MCCE2 gain", + Tango::EXPERT); + command_list.push_back(pGetGainCmd); + + // Command SetGain + SetGainClass *pSetGainCmd = + new SetGainClass("SetGain", + Tango::DEV_USHORT, Tango::DEV_VOID, + "The new MCCE-2 gain", + "no argout", + Tango::EXPERT); + command_list.push_back(pSetGainCmd); + + // Command GetElectrometerTypeStr + GetElectrometerTypeStrClass *pGetElectrometerTypeStrCmd = + new GetElectrometerTypeStrClass("GetElectrometerTypeStr", + Tango::DEV_USHORT, Tango::DEV_STRING, + "channel number", + "the electrometer type as string", + Tango::OPERATOR); + command_list.push_back(pGetElectrometerTypeStrCmd); + + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::command_factory_after) ENABLED START -----*/ + + // Add your own code + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::command_factory_after +} + +//=================================================================== +// Dynamic attributes related methods +//=================================================================== + +//-------------------------------------------------------- +/** + * method : MCCE2ElectrometersClass::create_static_attribute_list + * description : Create the a list of static attributes + * + * @param att_list the ceated attribute list + */ +//-------------------------------------------------------- +void MCCE2ElectrometersClass::create_static_attribute_list(vector<Tango::Attr *> &att_list) +{ + for (unsigned long i=0 ; i<att_list.size() ; i++) + { + string att_name(att_list[i]->get_name()); + transform(att_name.begin(), att_name.end(), att_name.begin(), ::tolower); + defaultAttList.push_back(att_name); + } + + cout2 << defaultAttList.size() << " attributes in default list" << endl; + + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::create_static_att_list) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::create_static_att_list +} + + +//-------------------------------------------------------- +/** + * method : MCCE2ElectrometersClass::erase_dynamic_attributes + * description : delete the dynamic attributes if any. + * + * @param devlist_ptr the device list pointer + * @param list of all attributes + */ +//-------------------------------------------------------- +void MCCE2ElectrometersClass::erase_dynamic_attributes(const Tango::DevVarStringArray *devlist_ptr, vector<Tango::Attr *> &att_list) +{ + Tango::Util *tg = Tango::Util::instance(); + + for (unsigned long i=0 ; i<devlist_ptr->length() ; i++) + { + Tango::DeviceImpl *dev_impl = tg->get_device_by_name(((string)(*devlist_ptr)[i]).c_str()); + MCCE2Electrometers *dev = static_cast<MCCE2Electrometers *> (dev_impl); + + vector<Tango::Attribute *> &dev_att_list = dev->get_device_attr()->get_attribute_list(); + vector<Tango::Attribute *>::iterator ite_att; + for (ite_att=dev_att_list.begin() ; ite_att != dev_att_list.end() ; ++ite_att) + { + string att_name((*ite_att)->get_name_lower()); + if ((att_name == "state") || (att_name == "status")) + continue; + vector<string>::iterator ite_str = find(defaultAttList.begin(), defaultAttList.end(), att_name); + if (ite_str == defaultAttList.end()) + { + cout2 << att_name << " is a UNWANTED dynamic attribute for device " << (*devlist_ptr)[i] << endl; + Tango::Attribute &att = dev->get_device_attr()->get_attr_by_name(att_name.c_str()); + dev->remove_attribute(att_list[att.get_attr_idx()], true, false); + --ite_att; + } + } + } + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::erase_dynamic_attributes) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::erase_dynamic_attributes +} + +//-------------------------------------------------------- +/** + * Method : MCCE2ElectrometersClass::get_attr_by_name() + * Description : returns Tango::Attr * object found by name + */ +//-------------------------------------------------------- +Tango::Attr *MCCE2ElectrometersClass::get_attr_object_by_name(vector<Tango::Attr *> &att_list, string attname) +{ + vector<Tango::Attr *>::iterator it; + for (it=att_list.begin() ; it<att_list.end() ; it++) + if ((*it)->get_name()==attname) + return (*it); + // Attr does not exist + return NULL; +} + + +/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::Additional Methods) ENABLED START -----*/ + +/*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::Additional Methods +} // namespace diff --git a/src/MCCE2ElectrometersClass.h b/src/MCCE2ElectrometersClass.h index f4e2d17..d772a8c 100644 --- a/src/MCCE2ElectrometersClass.h +++ b/src/MCCE2ElectrometersClass.h @@ -1,93 +1,113 @@ +/*----- PROTECTED REGION ID(MCCE2ElectrometersClass.h) ENABLED START -----*/ //============================================================================= // -// file : MCCE2ElectrometersClass.h +// file : MCCE2ElectrometersClass.h // -// description : Include for the MCCE2ElectrometersClass root class. -// This class is represents the singleton class for +// description : Include for the MCCE2Electrometers root class. +// This class is the singleton class for // the MCCE2Electrometers device class. -// It contains all properties and methods which the -// MCCE2Electrometers requires only once e.g. the commands. -// -// project : TANGO Device Server +// It contains all properties and methods which the +// MCCE2Electrometers requires only once e.g. the commands. // -// $Author: xavela $ +// project : Novelec MCCE-2 Electrometers // -// $Revision: 1.14 $ +// This file is part of Tango device class. +// +// Tango is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tango is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tango. If not, see <http://www.gnu.org/licenses/>. +// +// $Author: $ // -// $Log: not supported by cvs2svn $ -// Revision 1.12 2010/06/10 15:12:05 xavela -// TEST : control two channels with different MCCE2 +// $Revision: $ +// $Date: $ // -// -// copyleft : Synchrotron SOLEIL -// L'Orme des Merisiers -// Saint-Aubin - BP 48 +// $HeadURL: $ // //============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF +// This file is generated by POGO +// (Program Obviously used to Generate tango Object) //============================================================================= -#ifndef _MCCE2ELECTROMETERSCLASS_H -#define _MCCE2ELECTROMETERSCLASS_H + +#ifndef MCCE2ElectrometersClass_H +#define MCCE2ElectrometersClass_H #include <tango.h> #include <MCCE2Electrometers.h> +/*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass.h + namespace MCCE2Electrometers_ns { -//===================================== +/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::classes for dynamic creation) ENABLED START -----*/ + + +/*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::classes for dynamic creation + +//========================================= // Define classes for attributes -//===================================== -class range2Attrib: public Tango::Attr +//========================================= +// Attribute electrometerChannel class definition +class electrometerChannelAttrib: public Tango::Attr { public: - range2Attrib():Attr("range2", Tango::DEV_STRING, Tango::READ) {}; - ~range2Attrib() {}; - + electrometerChannelAttrib():Attr("electrometerChannel", + Tango::DEV_USHORT, Tango::READ_WRITE) {}; + ~electrometerChannelAttrib() {}; virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) - {(static_cast<MCCE2Electrometers *>(dev))->read_range2(att);} + {(static_cast<MCCE2Electrometers *>(dev))->read_electrometerChannel(att);} + virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att) + {(static_cast<MCCE2Electrometers *>(dev))->write_electrometerChannel(att);} virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty) - {return (static_cast<MCCE2Electrometers *>(dev))->is_range2_allowed(ty);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_electrometerChannel_allowed(ty);} }; +// Attribute range1 class definition class range1Attrib: public Tango::Attr { public: - range1Attrib():Attr("range1", Tango::DEV_STRING, Tango::READ) {}; + range1Attrib():Attr("range1", + Tango::DEV_STRING, Tango::READ) {}; ~range1Attrib() {}; - virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) - {(static_cast<MCCE2Electrometers *>(dev))->read_range1(att);} + {(static_cast<MCCE2Electrometers *>(dev))->read_range1(att);} virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty) - {return (static_cast<MCCE2Electrometers *>(dev))->is_range1_allowed(ty);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_range1_allowed(ty);} }; -class electrometerChannelAttrib: public Tango::Attr +// Attribute range2 class definition +class range2Attrib: public Tango::Attr { public: - electrometerChannelAttrib():Attr("electrometerChannel", Tango::DEV_USHORT, Tango::READ_WRITE) {}; - ~electrometerChannelAttrib() {}; - + range2Attrib():Attr("range2", + Tango::DEV_STRING, Tango::READ) {}; + ~range2Attrib() {}; virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) - {(static_cast<MCCE2Electrometers *>(dev))->read_electrometerChannel(att);} - virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att) - {(static_cast<MCCE2Electrometers *>(dev))->write_electrometerChannel(att);} + {(static_cast<MCCE2Electrometers *>(dev))->read_range2(att);} virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty) - {return (static_cast<MCCE2Electrometers *>(dev))->is_electrometerChannel_allowed(ty);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_range2_allowed(ty);} }; + //========================================= // Define classes for commands //========================================= -class GetElectrometerTypeStrClass : public Tango::Command +// Command RangeUP class definition +class RangeUPClass : public Tango::Command { public: - GetElectrometerTypeStrClass(const char *name, + RangeUPClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -95,23 +115,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - GetElectrometerTypeStrClass(const char *name, + RangeUPClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~GetElectrometerTypeStrClass() {}; + ~RangeUPClass() {}; 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<MCCE2Electrometers *>(dev))->is_GetElectrometerTypeStr_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_RangeUP_allowed(any);} }; - - -class SetGainCmd : public Tango::Command +// Command RangeDOWN class definition +class RangeDOWNClass : public Tango::Command { public: - SetGainCmd(const char *name, + RangeDOWNClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -119,23 +138,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - SetGainCmd(const char *name, + RangeDOWNClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~SetGainCmd() {}; + ~RangeDOWNClass() {}; 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<MCCE2Electrometers *>(dev))->is_SetGain_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_RangeDOWN_allowed(any);} }; - - -class GetGainCmd : public Tango::Command +// Command SetZeroVFFunction class definition +class SetZeroVFFunctionClass : public Tango::Command { public: - GetGainCmd(const char *name, + SetZeroVFFunctionClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -143,23 +161,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - GetGainCmd(const char *name, + SetZeroVFFunctionClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~GetGainCmd() {}; + ~SetZeroVFFunctionClass() {}; 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<MCCE2Electrometers *>(dev))->is_GetGain_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_SetZeroVFFunction_allowed(any);} }; - - -class SetHzFilterCmd : public Tango::Command +// Command SetOffsetZeroV1Function class definition +class SetOffsetZeroV1FunctionClass : public Tango::Command { public: - SetHzFilterCmd(const char *name, + SetOffsetZeroV1FunctionClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -167,23 +184,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - SetHzFilterCmd(const char *name, + SetOffsetZeroV1FunctionClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~SetHzFilterCmd() {}; + ~SetOffsetZeroV1FunctionClass() {}; 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<MCCE2Electrometers *>(dev))->is_SetHzFilter_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_SetOffsetZeroV1Function_allowed(any);} }; - - -class GetHzFilterCmd : public Tango::Command +// Command SetLeakageZeroV2Function class definition +class SetLeakageZeroV2FunctionClass : public Tango::Command { public: - GetHzFilterCmd(const char *name, + SetLeakageZeroV2FunctionClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -191,23 +207,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - GetHzFilterCmd(const char *name, + SetLeakageZeroV2FunctionClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~GetHzFilterCmd() {}; + ~SetLeakageZeroV2FunctionClass() {}; 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<MCCE2Electrometers *>(dev))->is_GetHzFilter_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_SetLeakageZeroV2Function_allowed(any);} }; - - -class SetPolarityClass : public Tango::Command +// Command SetTestFunction class definition +class SetTestFunctionClass : public Tango::Command { public: - SetPolarityClass(const char *name, + SetTestFunctionClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -215,23 +230,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - SetPolarityClass(const char *name, + SetTestFunctionClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~SetPolarityClass() {}; + ~SetTestFunctionClass() {}; 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<MCCE2Electrometers *>(dev))->is_SetPolarity_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_SetTestFunction_allowed(any);} }; - - -class GetPolarityCmd : public Tango::Command +// Command SetMeasureFunction class definition +class SetMeasureFunctionClass : public Tango::Command { public: - GetPolarityCmd(const char *name, + SetMeasureFunctionClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -239,23 +253,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - GetPolarityCmd(const char *name, + SetMeasureFunctionClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~GetPolarityCmd() {}; + ~SetMeasureFunctionClass() {}; 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<MCCE2Electrometers *>(dev))->is_GetPolarity_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_SetMeasureFunction_allowed(any);} }; - - -class GetModeCmd : public Tango::Command +// Command MCCE2_ON class definition +class MCCE2_ONClass : public Tango::Command { public: - GetModeCmd(const char *name, + MCCE2_ONClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -263,23 +276,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - GetModeCmd(const char *name, + MCCE2_ONClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~GetModeCmd() {}; + ~MCCE2_ONClass() {}; 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<MCCE2Electrometers *>(dev))->is_GetMode_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_MCCE2_ON_allowed(any);} }; - - -class SetRangeCmd : public Tango::Command +// Command MCCE2_OFF class definition +class MCCE2_OFFClass : public Tango::Command { public: - SetRangeCmd(const char *name, + MCCE2_OFFClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -287,23 +299,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - SetRangeCmd(const char *name, + MCCE2_OFFClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~SetRangeCmd() {}; + ~MCCE2_OFFClass() {}; 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<MCCE2Electrometers *>(dev))->is_SetRange_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_MCCE2_OFF_allowed(any);} }; - - -class GetRangeCmd : public Tango::Command +// Command Local class definition +class LocalClass : public Tango::Command { public: - GetRangeCmd(const char *name, + LocalClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -311,23 +322,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - GetRangeCmd(const char *name, + LocalClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~GetRangeCmd() {}; + ~LocalClass() {}; 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<MCCE2Electrometers *>(dev))->is_GetRange_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_Local_allowed(any);} }; - - -class ClearRegistersClass : public Tango::Command +// Command Remote class definition +class RemoteClass : public Tango::Command { public: - ClearRegistersClass(const char *name, + RemoteClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -335,19 +345,18 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - ClearRegistersClass(const char *name, + RemoteClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~ClearRegistersClass() {}; + ~RemoteClass() {}; 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<MCCE2Electrometers *>(dev))->is_ClearRegisters_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_Remote_allowed(any);} }; - - +// Command Reset class definition class ResetClass : public Tango::Command { public: @@ -370,12 +379,11 @@ public: {return (static_cast<MCCE2Electrometers *>(dev))->is_Reset_allowed(any);} }; - - -class RemoteCmd : public Tango::Command +// Command ClearRegisters class definition +class ClearRegistersClass : public Tango::Command { public: - RemoteCmd(const char *name, + ClearRegistersClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -383,23 +391,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - RemoteCmd(const char *name, + ClearRegistersClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~RemoteCmd() {}; + ~ClearRegistersClass() {}; 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<MCCE2Electrometers *>(dev))->is_Remote_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_ClearRegisters_allowed(any);} }; - - -class LocalCmd : public Tango::Command +// Command GetRange class definition +class GetRangeClass : public Tango::Command { public: - LocalCmd(const char *name, + GetRangeClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -407,23 +414,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - LocalCmd(const char *name, + GetRangeClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~LocalCmd() {}; + ~GetRangeClass() {}; 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<MCCE2Electrometers *>(dev))->is_Local_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_GetRange_allowed(any);} }; - - -class MCCE2_OFFCmd : public Tango::Command +// Command SetRange class definition +class SetRangeClass : public Tango::Command { public: - MCCE2_OFFCmd(const char *name, + SetRangeClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -431,23 +437,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - MCCE2_OFFCmd(const char *name, + SetRangeClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~MCCE2_OFFCmd() {}; + ~SetRangeClass() {}; 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<MCCE2Electrometers *>(dev))->is_MCCE2_OFF_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_SetRange_allowed(any);} }; - - -class MCCE2_ONCmd : public Tango::Command +// Command GetMode class definition +class GetModeClass : public Tango::Command { public: - MCCE2_ONCmd(const char *name, + GetModeClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -455,23 +460,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - MCCE2_ONCmd(const char *name, + GetModeClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~MCCE2_ONCmd() {}; + ~GetModeClass() {}; 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<MCCE2Electrometers *>(dev))->is_MCCE2_ON_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_GetMode_allowed(any);} }; - - -class SetMeasureFunctionCmd : public Tango::Command +// Command GetPolarity class definition +class GetPolarityClass : public Tango::Command { public: - SetMeasureFunctionCmd(const char *name, + GetPolarityClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -479,23 +483,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - SetMeasureFunctionCmd(const char *name, + GetPolarityClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~SetMeasureFunctionCmd() {}; + ~GetPolarityClass() {}; 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<MCCE2Electrometers *>(dev))->is_SetMeasureFunction_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_GetPolarity_allowed(any);} }; - - -class SetTestFunctionCmd : public Tango::Command +// Command SetPolarity class definition +class SetPolarityClass : public Tango::Command { public: - SetTestFunctionCmd(const char *name, + SetPolarityClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -503,23 +506,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - SetTestFunctionCmd(const char *name, + SetPolarityClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~SetTestFunctionCmd() {}; + ~SetPolarityClass() {}; 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<MCCE2Electrometers *>(dev))->is_SetTestFunction_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_SetPolarity_allowed(any);} }; - - -class SetLeakageZeroV2FunctionCmd : public Tango::Command +// Command GetHzFilter class definition +class GetHzFilterClass : public Tango::Command { public: - SetLeakageZeroV2FunctionCmd(const char *name, + GetHzFilterClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -527,23 +529,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - SetLeakageZeroV2FunctionCmd(const char *name, + GetHzFilterClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~SetLeakageZeroV2FunctionCmd() {}; + ~GetHzFilterClass() {}; 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<MCCE2Electrometers *>(dev))->is_SetLeakageZeroV2Function_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_GetHzFilter_allowed(any);} }; - - -class SetOffsetZeroV1FunctionCmd : public Tango::Command +// Command SetHzFilter class definition +class SetHzFilterClass : public Tango::Command { public: - SetOffsetZeroV1FunctionCmd(const char *name, + SetHzFilterClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -551,23 +552,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - SetOffsetZeroV1FunctionCmd(const char *name, + SetHzFilterClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~SetOffsetZeroV1FunctionCmd() {}; + ~SetHzFilterClass() {}; 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<MCCE2Electrometers *>(dev))->is_SetOffsetZeroV1Function_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_SetHzFilter_allowed(any);} }; - - -class SetZeroVFFunctionCmd : public Tango::Command +// Command GetGain class definition +class GetGainClass : public Tango::Command { public: - SetZeroVFFunctionCmd(const char *name, + GetGainClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -575,23 +575,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - SetZeroVFFunctionCmd(const char *name, + GetGainClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~SetZeroVFFunctionCmd() {}; + ~GetGainClass() {}; 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<MCCE2Electrometers *>(dev))->is_SetZeroVFFunction_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_GetGain_allowed(any);} }; - - -class RangeDOWNClass : public Tango::Command +// Command SetGain class definition +class SetGainClass : public Tango::Command { public: - RangeDOWNClass(const char *name, + SetGainClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -599,23 +598,22 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - RangeDOWNClass(const char *name, + SetGainClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~RangeDOWNClass() {}; + ~SetGainClass() {}; 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<MCCE2Electrometers *>(dev))->is_RangeDOWN_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_SetGain_allowed(any);} }; - - -class RangeUPCmd : public Tango::Command +// Command GetElectrometerTypeStr class definition +class GetElectrometerTypeStrClass : public Tango::Command { public: - RangeUPCmd(const char *name, + GetElectrometerTypeStrClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out, const char *in_desc, @@ -623,64 +621,66 @@ public: Tango::DispLevel level) :Command(name,in,out,in_desc,out_desc, level) {}; - RangeUPCmd(const char *name, + GetElectrometerTypeStrClass(const char *name, Tango::CmdArgType in, Tango::CmdArgType out) :Command(name,in,out) {}; - ~RangeUPCmd() {}; + ~GetElectrometerTypeStrClass() {}; 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<MCCE2Electrometers *>(dev))->is_RangeUP_allowed(any);} + {return (static_cast<MCCE2Electrometers *>(dev))->is_GetElectrometerTypeStr_allowed(any);} }; +/** + * The MCCE2ElectrometersClass singleton definition + */ -// -// The MCCE2ElectrometersClass singleton definition -// - -class -#ifdef WIN32 - __declspec(dllexport) +#ifdef _TG_WINDOWS_ +class __declspec(dllexport) MCCE2ElectrometersClass : public Tango::DeviceClass +#else +class MCCE2ElectrometersClass : public Tango::DeviceClass #endif - MCCE2ElectrometersClass : public Tango::DeviceClass { -public: -// properties member data - -// add your own data members here -//------------------------------------ + /*----- PROTECTED REGION ID(MCCE2ElectrometersClass::Additionnal DServer data members) ENABLED START -----*/ + + + /*----- PROTECTED REGION END -----*/ // MCCE2ElectrometersClass::Additionnal DServer data members -public: - Tango::DbData cl_prop; - Tango::DbData cl_def_prop; - Tango::DbData dev_def_prop; - -// Method prototypes - static MCCE2ElectrometersClass *init(const char *); - static MCCE2ElectrometersClass *instance(); - ~MCCE2ElectrometersClass(); - Tango::DbDatum get_class_property(string &); - Tango::DbDatum get_default_device_property(string &); - Tango::DbDatum get_default_class_property(string &); + public: + // write class properties data members + Tango::DbData cl_prop; + Tango::DbData cl_def_prop; + Tango::DbData dev_def_prop; + + // Method prototypes + static MCCE2ElectrometersClass *init(const char *); + static MCCE2ElectrometersClass *instance(); + ~MCCE2ElectrometersClass(); + Tango::DbDatum get_class_property(string &); + Tango::DbDatum get_default_device_property(string &); + Tango::DbDatum get_default_class_property(string &); -protected: - MCCE2ElectrometersClass(string &); - static MCCE2ElectrometersClass *_instance; - void command_factory(); - void get_class_property(); - void attribute_factory(vector<Tango::Attr *> &); - void write_class_property(); - void set_default_property(); - string get_cvstag(); - string get_cvsroot(); - -private: - void device_factory(const Tango::DevVarStringArray *); + protected: + MCCE2ElectrometersClass(string &); + static MCCE2ElectrometersClass *_instance; + void command_factory(); + void attribute_factory(vector<Tango::Attr *> &); + void write_class_property(); + void set_default_property(); + void get_class_property(); + string get_cvstag(); + string get_cvsroot(); + + private: + void device_factory(const Tango::DevVarStringArray *); + void create_static_attribute_list(vector<Tango::Attr *> &); + void erase_dynamic_attributes(const Tango::DevVarStringArray *,vector<Tango::Attr *> &); + vector<string> defaultAttList; + Tango::Attr *get_attr_object_by_name(vector<Tango::Attr *> &att_list, string attname); }; +} // End of namespace -} // namespace MCCE2Electrometers_ns - -#endif // _MCCE2ELECTROMETERSCLASS_H +#endif // MCCE2Electrometers_H diff --git a/src/MCCE2ElectrometersStateMachine.cpp b/src/MCCE2ElectrometersStateMachine.cpp index 433d677..a42089c 100644 --- a/src/MCCE2ElectrometersStateMachine.cpp +++ b/src/MCCE2ElectrometersStateMachine.cpp @@ -1,96 +1,108 @@ -static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/MCCE2ElectrometersStateMachine.cpp,v 1.14 2012-10-03 14:59:19 xavela Exp $"; -//+============================================================================= -// -// file : MCCE2ElectrometersStateMachine.cpp -// -// description : C++ source for the MCCE2Electrometers and its alowed. -// method for commands and attributes -// -// project : TANGO Device Server -// -// $Author: xavela $ +/*----- PROTECTED REGION ID(MCCE2ElectrometersStateMachine.cpp) ENABLED START -----*/ +static const char *RcsId = "$Id: $"; +//============================================================================= // -// $Revision: 1.14 $ +// file : MCCE2ElectrometersStateMachine.cpp // -// $Log: not supported by cvs2svn $ -// Revision 1.12 2010/06/10 15:12:05 xavela -// TEST : control two channels with different MCCE2 +// description : State machine file for the MCCE2Electrometers class // +// project : Novelec MCCE-2 Electrometers // -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE +// This file is part of Tango device class. +// +// Tango is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tango is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tango. If not, see <http://www.gnu.org/licenses/>. +// +// $Author: $ // -//-============================================================================= +// $Revision: $ +// $Date: $ // -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) +// $HeadURL: $ // -// (c) - Software Engineering Group - ESRF +//============================================================================= +// This file is generated by POGO +// (Program Obviously used to Generate tango Object) //============================================================================= -#include <tango.h> #include <MCCE2Electrometers.h> -#include <MCCE2ElectrometersClass.h> - -/*==================================================================== - * This file contains the methods to allow commands and attributes - * read or write execution. - * - * If you wand to add your own code, add it between - * the "End/Re-Start of Generated Code" comments. - * - * If you want, you can also add your own methods. - *==================================================================== - */ + +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::MCCE2ElectrometersStateMachine.cpp + +//================================================================ +// States | Description +//================================================================ +// ON | Device up and ready +// ALARM | Device initialisation not complete or a bad channel number is set. +// FAULT | Internal electrometer interface is not built or a Serial communication error occurred. +// DISABLE | No electrometer conected! + namespace MCCE2Electrometers_ns { - //================================================= // Attributes Allowed Methods //================================================= -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_electrometerChannel_allowed -// -// description : Read/Write allowed for electrometerChannel attribute. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_electrometerChannel_allowed(Tango::AttReqType type) +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_electrometerChannel_allowed() + * Description : Execution allowed for electrometerChannel attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_electrometerChannel_allowed(TANGO_UNUSED(Tango::AttReqType type)) { - // End of Generated Code - - // Re-Start of Generated Code + // Not any excluded states for electrometerChannel attribute in Write access. + /*----- PROTECTED REGION ID(MCCE2Electrometers::electrometerChannelStateAllowed_WRITE) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::electrometerChannelStateAllowed_WRITE + + // Not any excluded states for electrometerChannel attribute in read access. + /*----- PROTECTED REGION ID(MCCE2Electrometers::electrometerChannelStateAllowed_READ) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::electrometerChannelStateAllowed_READ return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_range1_allowed -// -// description : Read/Write allowed for range1 attribute. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_range1_allowed(Tango::AttReqType type) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_range1_allowed() + * Description : Execution allowed for range1 attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_range1_allowed(TANGO_UNUSED(Tango::AttReqType type)) { - // End of Generated Code - // Re-Start of Generated Code + // Not any excluded states for range1 attribute in read access. + /*----- PROTECTED REGION ID(MCCE2Electrometers::range1StateAllowed_READ) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::range1StateAllowed_READ return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_range2_allowed -// -// description : Read/Write allowed for range2 attribute. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_range2_allowed(Tango::AttReqType type) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_range2_allowed() + * Description : Execution allowed for range2 attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_range2_allowed(TANGO_UNUSED(Tango::AttReqType type)) { - // End of Generated Code - // Re-Start of Generated Code + // Not any excluded states for range2 attribute in read access. + /*----- PROTECTED REGION ID(MCCE2Electrometers::range2StateAllowed_READ) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::range2StateAllowed_READ return true; } @@ -98,433 +110,455 @@ bool MCCE2Electrometers::is_range2_allowed(Tango::AttReqType type) // Commands Allowed Methods //================================================= -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_RangeUP_allowed -// -// description : Execution allowed for RangeUP command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_RangeUP_allowed(const CORBA::Any &any) +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_RangeUP_allowed() + * Description : Execution allowed for RangeUP attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_RangeUP_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::RangeUPStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::RangeUPStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_RangeDOWN_allowed -// -// description : Execution allowed for RangeDOWN command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_RangeDOWN_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_RangeDOWN_allowed() + * Description : Execution allowed for RangeDOWN attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_RangeDOWN_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::RangeDOWNStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::RangeDOWNStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_SetZeroVFFunction_allowed -// -// description : Execution allowed for SetZeroVFFunction command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_SetZeroVFFunction_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_SetZeroVFFunction_allowed() + * Description : Execution allowed for SetZeroVFFunction attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_SetZeroVFFunction_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::SetZeroVFFunctionStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::SetZeroVFFunctionStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_SetOffsetZeroV1Function_allowed -// -// description : Execution allowed for SetOffsetZeroV1Function command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_SetOffsetZeroV1Function_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_SetOffsetZeroV1Function_allowed() + * Description : Execution allowed for SetOffsetZeroV1Function attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_SetOffsetZeroV1Function_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::SetOffsetZeroV1FunctionStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::SetOffsetZeroV1FunctionStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_SetLeakageZeroV2Function_allowed -// -// description : Execution allowed for SetLeakageZeroV2Function command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_SetLeakageZeroV2Function_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_SetLeakageZeroV2Function_allowed() + * Description : Execution allowed for SetLeakageZeroV2Function attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_SetLeakageZeroV2Function_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::SetLeakageZeroV2FunctionStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::SetLeakageZeroV2FunctionStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_SetTestFunction_allowed -// -// description : Execution allowed for SetTestFunction command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_SetTestFunction_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_SetTestFunction_allowed() + * Description : Execution allowed for SetTestFunction attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_SetTestFunction_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::SetTestFunctionStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::SetTestFunctionStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_MCCE2_ON_allowed -// -// description : Execution allowed for MCCE2_ON command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_MCCE2_ON_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_SetMeasureFunction_allowed() + * Description : Execution allowed for SetMeasureFunction attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_SetMeasureFunction_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::SetMeasureFunctionStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::SetMeasureFunctionStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_MCCE2_OFF_allowed -// -// description : Execution allowed for MCCE2_OFF command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_MCCE2_OFF_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_MCCE2_ON_allowed() + * Description : Execution allowed for MCCE2_ON attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_MCCE2_ON_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::MCCE2_ONStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::MCCE2_ONStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_Local_allowed -// -// description : Execution allowed for Local command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_Local_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_MCCE2_OFF_allowed() + * Description : Execution allowed for MCCE2_OFF attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_MCCE2_OFF_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::MCCE2_OFFStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::MCCE2_OFFStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_Remote_allowed -// -// description : Execution allowed for Remote command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_Remote_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_Local_allowed() + * Description : Execution allowed for Local attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_Local_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::LocalStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::LocalStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_Reset_allowed -// -// description : Execution allowed for Reset command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_Reset_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_Remote_allowed() + * Description : Execution allowed for Remote attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_Remote_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::RemoteStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::RemoteStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_ClearRegisters_allowed -// -// description : Execution allowed for ClearRegisters command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_ClearRegisters_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_Reset_allowed() + * Description : Execution allowed for Reset attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_Reset_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::ResetStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::ResetStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_SetMeasureFunction_allowed -// -// description : Execution allowed for SetMeasureFunction command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_SetMeasureFunction_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_ClearRegisters_allowed() + * Description : Execution allowed for ClearRegisters attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_ClearRegisters_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::ClearRegistersStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::ClearRegistersStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_GetRange_allowed -// -// description : Execution allowed for GetRange command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_GetRange_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_GetRange_allowed() + * Description : Execution allowed for GetRange attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_GetRange_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::GetRangeStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::GetRangeStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_SetRange_allowed -// -// description : Execution allowed for SetRange command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_SetRange_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_SetRange_allowed() + * Description : Execution allowed for SetRange attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_SetRange_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::SetRangeStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::SetRangeStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_GetMode_allowed -// -// description : Execution allowed for GetMode command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_GetMode_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_GetMode_allowed() + * Description : Execution allowed for GetMode attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_GetMode_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::GetModeStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::GetModeStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_GetPolarity_allowed -// -// description : Execution allowed for GetPolarity command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_GetPolarity_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_GetPolarity_allowed() + * Description : Execution allowed for GetPolarity attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_GetPolarity_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::GetPolarityStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::GetPolarityStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_SetHzFilter_allowed -// -// description : Execution allowed for SetHzFilter command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_SetHzFilter_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_SetPolarity_allowed() + * Description : Execution allowed for SetPolarity attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_SetPolarity_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::SetPolarityStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::SetPolarityStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_GetHzFilter_allowed -// -// description : Execution allowed for GetHzFilter command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_GetHzFilter_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_GetHzFilter_allowed() + * Description : Execution allowed for GetHzFilter attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_GetHzFilter_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::GetHzFilterStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::GetHzFilterStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_GetGain_allowed -// -// description : Execution allowed for GetGain command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_GetGain_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_SetHzFilter_allowed() + * Description : Execution allowed for SetHzFilter attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_SetHzFilter_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::SetHzFilterStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::SetHzFilterStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_SetGain_allowed -// -// description : Execution allowed for SetGain command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_SetGain_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_GetGain_allowed() + * Description : Execution allowed for GetGain attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_GetGain_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::GetGainStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::GetGainStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_SetPolarity_allowed -// -// description : Execution allowed for SetPolarity command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_SetPolarity_allowed(const CORBA::Any &any) + +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_SetGain_allowed() + * Description : Execution allowed for SetGain attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_SetGain_allowed(TANGO_UNUSED(const CORBA::Any &any)) { - if (get_state() == Tango::FAULT || - get_state() == Tango::DISABLE) + // Compare device state with not allowed states. + if (get_state()==Tango::FAULT || + get_state()==Tango::DISABLE) { - // End of Generated Code - - // Re-Start of Generated Code + /*----- PROTECTED REGION ID(MCCE2Electrometers::SetGainStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::SetGainStateAllowed return false; } return true; } -//+---------------------------------------------------------------------------- -// -// method : MCCE2Electrometers::is_GetElectrometerTypeStr_allowed -// -// description : Execution allowed for GetElectrometerTypeStr command. -// -//----------------------------------------------------------------------------- -bool MCCE2Electrometers::is_GetElectrometerTypeStr_allowed(const CORBA::Any &any) -{ - // End of Generated Code - // Re-Start of Generated Code +//-------------------------------------------------------- +/** + * Method : MCCE2Electrometers::is_GetElectrometerTypeStr_allowed() + * Description : Execution allowed for GetElectrometerTypeStr attribute + */ +//-------------------------------------------------------- +bool MCCE2Electrometers::is_GetElectrometerTypeStr_allowed(TANGO_UNUSED(const CORBA::Any &any)) +{ + // Not any excluded states for GetElectrometerTypeStr command. + /*----- PROTECTED REGION ID(MCCE2Electrometers::GetElectrometerTypeStrStateAllowed) ENABLED START -----*/ + + /*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::GetElectrometerTypeStrStateAllowed return true; } -} // namespace MCCE2Electrometers_ns +} // End of namespace diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..26b5e43 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,142 @@ +#============================================================================= +# +# file : Makefile +# +# description : Makefile to generate a TANGO device server. +# +# project : MCCE2Electrometers +# +# $Author: $ +# +# $Revision: $ +# $Date: $ +# +#============================================================================= +# This file is generated by POGO +# (Program Obviously used to Generate tango Object) +#============================================================================= +# +# +#============================================================================= +# MAKE_ENV is the path to find common environment to buil project +# +MAKE_ENV = $(TANGO_HOME) + +#============================================================================= +# PACKAGE_NAME is the name of the library/device/exe you want to build +# +PACKAGE_NAME = MCCE2Electrometers +MAJOR_VERS = 1 +MINOR_VERS = 0 +RELEASE = Release_$(MAJOR_VERS)_$(MINOR_VERS) + +# #============================================================================= +# # RELEASE_TYPE +# # - DEBUG : debug symbols - no optimization +# # - OPTIMIZED : no debug symbols - optimization level set to O2 +# #----------------------------------------------------------------------------- +RELEASE_TYPE = DEBUG + +#============================================================================= +# OUTPUT_TYPE can be one of the following : +# - 'STATIC_LIB' for a static library (.a) +# - 'SHARED_LIB' for a dynamic library (.so) +# - 'DEVICE' for a device server (will automatically include and link +# with Tango dependencies) +# - 'SIMPLE_EXE' for an executable with no dependency (for exemple the test tool +# of a library with no Tango dependencies) +# +OUTPUT_TYPE = DEVICE + +#============================================================================= +# OUTPUT_DIR is the directory which contains the build result. +# if not set, the standard location is : +# - $HOME/DeviceServers if OUTPUT_TYPE is DEVICE +# - ../bin for others +# +OUTPUT_DIR = ./bin/$(BIN_DIR) + + +#============================================================================= +# INC_DIR_USER is the list of all include path needed by your sources +# - for a device server, tango dependencies are automatically appended +# - '-I ../include' and '-I .' are automatically appended in all cases +# +INC_DIR_USER= -I . + +#============================================================================= +# LIB_DIR_USER is the list of user library directories +# - for a device server, tango libraries directories are automatically appended +# - '-L ../lib' is automatically appended in all cases +# +LIB_DIR_USER= + +#============================================================================= +# LFLAGS_USR is the list of user link flags +# - for a device server, tango libraries directories are automatically appended +# - '-ldl -lpthread' is automatically appended in all cases +# +# !!! ATTENTION !!! +# Be aware that the order matters. +# For example if you must link with libA, and if libA depends itself on libB +# you must use '-lA -lB' in this order as link flags, otherwise you will get +# 'undefined reference' errors +# +#LFLAGS_USR+= + + +#============================================================================= +# CXXFLAGS_USR lists the compilation flags specific for your library/device/exe +# This is the place where to put your compile-time macros using '-Dmy_macro' +# +# -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ for ACE +# +#CXXFLAGS_USR+= -Wall + + +#============================================================================= +# TANGO_REQUIRED +# - TRUE : your project depends on TANGO +# - FALSE : your project does not depend on TANGO +#----------------------------------------------------------------------------- +# - NOTE : if PROJECT_TYPE is set to DEVICE, TANGO will be auto. added +#----------------------------------------------------------------------------- +TANGO_REQUIRED = TRUE + + + +#============================================================================= +# include Standard TANGO compilation options +# +include $(MAKE_ENV)/tango.opt + +#============================================================================= +# POST_PROCESSING: action to be done after normal make. +# e.g.: change executable file name, ..... +#POST_PROCESSING = \ +# mv bin/$(BIN_DIR)/$(PACKAGE_NAME) bin/$(BIN_DIR)/$(PACKAGE_NAME)_DS + +#============================================================================= +# SVC_OBJS is the list of all objects needed to make the output +# +SVC_INCL = $(PACKAGE_NAME).h $(PACKAGE_NAME)Class.h + + +SVC_OBJS = \ + $(OBJDIR)/$(PACKAGE_NAME).o \ + $(OBJDIR)/$(PACKAGE_NAME)Class.o \ + $(OBJDIR)/$(PACKAGE_NAME)StateMachine.o \ + $(OBJDIR)/ClassFactory.o \ + $(OBJDIR)/main.o \ + $(ADDITIONAL_OBJS) + +SVC_INHERITANCE_OBJ = \ + + +#============================================================================= +# include common targets +# +include $(MAKE_ENV)/common_target.opt + + + diff --git a/src/Makefile.VC b/src/Makefile.VC index e1d4bed..6fe2073 100644 --- a/src/Makefile.VC +++ b/src/Makefile.VC @@ -27,14 +27,14 @@ CPPDIRUSER = make_dir=$(SOLEIL_ROOT)\env -# Les d�finitions communes � tous les DeviceServeurs +# Les d?finitions communes ? tous les DeviceServeurs !include $(make_dir)\tango.opt exe_device_server= $(EXEDIR)\ds_$(device_server).exe pdb_name= $(TEMPLIBDIR)\$(device_server).pdb # -------------------------------------- -# Partie sp�cifique Device Server +# Partie sp?cifique Device Server # -------------------------------------- diff --git a/src/Makefile.testW32 b/src/Makefile.testW32 index df1de2e..0df0fc5 100644 --- a/src/Makefile.testW32 +++ b/src/Makefile.testW32 @@ -29,14 +29,14 @@ CPPDIRUSER = make_dir=$(SOLEIL_ROOT)\env -# Les d�finitions communes � tous les DeviceServeurs +# Les d?finitions communes ? tous les DeviceServeurs !include $(make_dir)\tango.opt exe_device_server= $(EXEDIR)\ds_$(device_server).exe pdb_name= $(TEMPLIBDIR)\$(device_server).pdb # -------------------------------------- -# Partie sp�cifique Device Server +# Partie sp?cifique Device Server # -------------------------------------- diff --git a/src/TangoClassID.txt b/src/TangoClassID.txt index 2cf47f7..d831843 100644 --- a/src/TangoClassID.txt +++ b/src/TangoClassID.txt @@ -1,11 +1,11 @@ -/** - * Device Class Identification: - * - * Class Name : MCCE2Electrometers - * Contact : xavier.elattaoui@synchrotron-soleil.fr - * Class Family : Acquisition - * Platform : All Platforms - * Bus : Serial Line - * Manufacturer : SAPHYMO - * Reference : MCCE-2 - */ +/** + * Device Class Identification: + * + * Class Name : MCCE2Electrometers + * Contact : xavier.elattaoui@synchrotron-soleil.fr + * Class Family : Acquisition + * Platform : All Platforms + * Bus : Serial Line + * Manufacturer : SAPHYMO + * Reference : MCCE-2 + */ diff --git a/src/main.cpp b/src/main.cpp index 61baab3..4015640 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,35 +1,43 @@ -static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/main.cpp,v 1.4 2012-07-09 13:25:43 xavela Exp $"; -//+============================================================================= +/*----- PROTECTED REGION ID(MCCE2Electrometers::main.cpp) ENABLED START -----*/ +static const char *RcsId = "$Id: $"; +//============================================================================= // // file : main.cpp // -// description : C++ source for a TANGO device server main. +// description : C++ source for the MCCE2Electrometers device server main. // The main rule is to initialise (and create) the Tango // system and to create the DServerClass singleton. // The main should be the same for every Tango device server. // -// project : TANGO Device Server -// -// $Author: xavela $ -// -// $Revision: 1.4 $ $ -// -// $Log: not supported by cvs2svn $ -// Revision 1.3 2010/10/06 20:11:49 vince_soleil -// Breakpad Migration -// +// project : Novelec MCCE-2 Electrometers // -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE +// This file is part of Tango device class. +// +// Tango is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Tango is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Tango. If not, see <http://www.gnu.org/licenses/>. +// +// $Author: $ // -//-============================================================================= +// $Revision: $ +// $Date: $ // -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) +// $HeadURL: $ // -// (c) - Software Engineering Group - ESRF //============================================================================= +// This file is generated by POGO +// (Program Obviously used to Generate tango Object) +//============================================================================= + #include <tango.h> @@ -79,3 +87,6 @@ int main(int argc, char *argv[]) tg->server_cleanup(); return(0); } + + +/*----- PROTECTED REGION END -----*/ // MCCE2Electrometers::main.cpp -- GitLab