Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • software-control-system/tango-devices/inputoutput/adlink/singleshotao
1 result
Select Git revision
Show changes
Commits on Source (37)
......@@ -3,7 +3,7 @@ from conan import ConanFile
class SingleShotAORecipe(ConanFile):
name = "singleshotao"
executable = "ds_SingleShotAO"
version = "2.0.4"
version = "2.1.0"
package_type = "application"
user = "soleil"
python_requires = "base/[>=1.0]@soleil/stable"
......
<!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">
<html>
<head>
<P><!-------TITLE------></P>
<title> Tango Device Server User's Guide </title>
</head>
<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>
<body>
<center>
<h1>
SingleShotAO Generic Device <br>
Device Attributes Description <br><Br>
SingleShotAO Class <br>
</h1>
<b>
Revision: - Author: buteau
</b>
</center>
</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>
<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></center></font>
</td>
</tr>
<tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<td>
<center><b>Attribute name</b></center>
</td>
<td>
<center><b>Data Type</b></center>
</td>
<td>
<center><b>R/W Type</b></center>
</td>
<td>
<center><b>Expert</b></center>
</td>
</tr>
<tr>
<td><b>frequency</b>: <font Size=-1>Sampling frequency for
ramp generation on the board output channels, in
Hz.</font>
</td>
<td>
<center>
<font Size=-1>DEV_DOUBLE</font>
</center>
</td>
<td>
<center>
<font Size=-1>READ_WRITE</font>
</center>
</td>
<td>
<center>
<font Size=-1>Yes</font>
</center>
</td>
</tr>
</table>
<HR WIDTH="100%"></H5>
<Br>
<center>
<h1>
SingleShotAO Generic Device <Br>
Device Attributes Description <Br> <Br>
SingleShotAO Class <Br>
</h1>
<b>
Revision: - Author: buteau
</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>frequency</b>: <Font Size=-1>Sampling frequency for ramp generation on the board output channels, in Hz.</Font></Td>
<Td><Center><Font Size=-1>DEV_DOUBLE</Font></Center></Td><Td><Center><Font Size=-1>READ_WRITE</Font></Center></Td><Td><Center><Font Size=-1>Yes</Font></Center></Td></Tr>
</Table>
</Center>
<Br><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>
<table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
<tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<td COLSPAN=4>
<center>
<font Size=+2><b>Dynamic Scalar Attributes</b></font><br>
X is the channel number ranging from 0 to N-1 (<b>MAO_6208</b>: 8 channels, <b>MAO_6216</b>: 10 channels)
</center>
</td>
</tr>
<tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<td>
<center><b>Attribute name</b></center>
</td>
<td>
<center><b>Data Type</b></center>
</td>
<td>
<center><b>R/W Type</b></center>
</td>
<td>
<center><b>Description</b></center>
</td>
</tr>
<tr>
<td><b>channelX</b></td>
<td>
<center>
<font Size=-1>DEV_DOUBLE</font>
</center>
</td>
<td>
<center>
<font Size=-1>READ_WRITE</font>
</center>
</td>
<td>
<font Size=-1>Output value for channel X (in V). Valid range: [-10V, +10V]</font>
</td>
</tr>
<tr>
<td><b>speedX</b></td>
<td>
<center>
<font Size=-1>DEV_DOUBLE</font>
</center>
</td>
<td>
<center>
<font Size=-1>READ_WRITE</font>
</center>
</td>
<td>
<font Size=-1>Speed for ramp generation on channel X (in V/s). If speed is 0, no ramp is generated but direct write on channel output.</font>
</td>
</tr>
<tr>
<td><b>initialX</b></td>
<td>
<center>
<font Size=-1>DEV_DOUBLE</font>
</center>
</td>
<td>
<center>
<font Size=-1>READ_WRITE</font>
</center>
</td>
<td>
<font Size=-1>Initial value for ramp function on channel X (in V). Defaults to last written value in channel attribute.</font>
</td>
</tr>
</table>
</center>
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>
</html>
<!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">
<html>
<head>
<title> Tango Device Server User s Guide </title>
</head>
<body>
<center>
<h1>
SingleShotAO Generic Device <br>
Device Description <br> <br>
SingleShotAO Class <br>
</h1>
<b>
Revision: - Author: buteau
</b>
</center>
<center>
ADLink boards support for single shot AO operations [PCI-6208 and
compatible boards]
</center>
<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="center">
<A HREF="http://www.cells.es/" TARGET=new>
<IMG SRC="http://www.esrf.fr/computing/cs/tango/alba.jpg" BORDER=0 Height="45"></A>
</TD>
<TD ALIGN="Right">
<H2><FONT COLOR="#7F00FF">
<Br><Center><A HREF="http://www.tango-controls.org/" TARGET="_top"> TANGO </a>
</Center></FONT>
</TD>
</TR>
<TR>
<TD ALIGN="left">
<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="44"></A>
</TD>
<TD ALIGN="center">
<A HREF="http://www.maxlab.lu.se/maxlab/max4/index.html" TARGET=new>
<IMG SRC="http://www.esrf.fr/computing/cs/tango/maxlab.gif" BORDER=0 Height="40"></A>
</TD>
<TD ALIGN="center">
<A HREF="http://www.frm2.tum.de/en/index.html" TARGET=new>
<IMG SRC="http://www.esrf.fr/computing/cs/tango/frm-2.jpg" BORDER=0 Height="45"></A>
</TD>
<TD>
<!-- Empty -->
</TD>
<TD ALIGN="Right">
<H2><FONT COLOR="#7F00FF">
<Center> Device Servers
</Center></FONT>
</TD>
</TR>
</TABLE>
<HR WIDTH="100%"></H5>
<HR WIDTH="100%"></H5>
<Br>
<center>
<h1>
SingleShotAO Generic Device <Br>
Device Description <Br> <Br>
SingleShotAO Class <Br>
</h1>
<b>
Revision: - Author: buteau
</b>
</center>
<Center>
ADLink boards support for single shot AO operations [PCI-6208 and compatible boards]
<Br>
<Br>
</Center>
<!--- 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>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<Title> Tango Device Server User's Guide </Title>
<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>
SingleShotAO Generic Device <Br>
Device Commands Description <Br> <Br>
SingleShotAO Class <Br>
</h1>
<b>
Revision: - Author: buteau
</b>
</center>
<BODY>
<center>
<h1>
SingleShotAO Generic Device <br>
Device Commands Description <br> <br>
SingleShotAO Class <br>
</h1>
<b>
Revision: - Author: buteau
</b>
</center>
<h2>1 - Init</h2>
<ul>
<Li><Strong>Description: </Strong><br>
This command re-initialises a device keeping the same network connection. <br>
After an Init command executed on a device, it is not necessary for the client to re-connect to the device. <br>
This command first calls the device <i>delete_device()</i> method and then executes its <i>init_device()</i> method. <br>
For C++ device server, all the memory allocated in the <i>init_device()</i> method must be freed in the <i>delete_device()</i> method.<br>
The language device destructor automatically calls the <i>delete_device()</i> method.<br>
</Li>
<Li><Strong>Argin: DEV_VOID</Strong></Li>
<Li><Strong>Argout: DEV_VOID</Strong></Li>
<Li><Strong>Command allowed for: </Strong>
<Ul>
<Li>Tango::FAULT</Li>
<Li>Tango::ON</Li>
<Li>Tango::INIT</Li>
<Li>Tango::MOVING</Li>
</Ul>
</Li>
</ul>
<Br>
<Br>
<Br>
<A NAME="Init"><!-- --></A>
<A NAME="Init"><!-- --></A>
<h2>1 - Init</h2>
<ul>
<Li><Strong>Description: </Strong> This commands re-initialise a device keeping the same network connection.<Br>
After an Init command executed on a device, it is not necessary for client to re-connect to the device.<Br>
This command first calls the device <i> delete_device() </i>method and then execute its <i> init_device()</i> method.<Br>
For C++ device server, all the memory allocated in the <i> nit_device() </i> method must be freed in the <i> delete_device() </i> method.<Br>
The language device desctructor automatically calls the <i> delete_device() </i> method.<Br>&nbsp
<Li><Strong>Argin:<Br>DEV_VOID</Strong>
: none.<Br>&nbsp
<Li><Strong>Argout:<Br>DEV_VOID</Strong>
: none.<Br>&nbsp
<Li><Strong>Command allowed for: </Strong><Ul>
<Li>Tango::FAULT<Li>Tango::ON<Li>Tango::INIT<Li>Tango::MOVING</Ul>
<Br>&nbsp
</ul><Br>
<Br>
<A NAME="State"><!-- --></A>
<A NAME="State"><!-- --></A>
<h2>2 - State</h2>
<ul>
<Li><Strong>Description: </Strong> This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.<Br>&nbsp
<Li><Strong>Argin:<Br>DEV_VOID</Strong>
: none.<Br>&nbsp
<Li><Strong>Argout:<Br>DEV_STATE</Strong>
: State Code<Br>&nbsp
<Li><Strong>Command allowed for: </Strong><Ul>
<Li>Tango::FAULT<Li>Tango::ON<Li>Tango::INIT<Li>Tango::MOVING</Ul>
<Br>&nbsp
</ul><Br>
<Br>
<A NAME="Status"><!-- --></A>
<A NAME="Status"><!-- --></A>
<h2>3 - Status</h2>
<ul>
<Li><Strong>Description: </Strong> This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.<Br>&nbsp
<Li><Strong>Argin:<Br>DEV_VOID</Strong>
: none.<Br>&nbsp
<Li><Strong>Argout:<Br>CONST_DEV_STRING</Strong>
: Status description<Br>&nbsp
<Li><Strong>Command allowed for: </Strong><Ul>
<Li>Tango::FAULT<Li>Tango::ON<Li>Tango::INIT<Li>Tango::MOVING</Ul>
<Br>&nbsp
</ul><Br>
<Br>
<A NAME="Abort"><!-- --></A>
<A NAME="Abort"><!-- --></A>
<h2>4 - Abort</h2>
<ul>
<Li><Strong>Description: </Strong> Aborts ramps in progress.<Br>&nbsp
<Li><Strong>Argin:<Br>DEV_VOID</Strong>
: <Br>&nbsp
<Li><Strong>Argout:<Br>DEV_VOID</Strong>
: <Br>&nbsp
<Li><Strong>Command allowed for: </Strong><Ul>
<Li>Tango::FAULT<Li>Tango::ON<Li>Tango::INIT<Li>Tango::MOVING</Ul>
<Br>&nbsp
</ul><Br>
<Br>
<h2>2 - State</h2>
<ul>
<Li><Strong>Description: </Strong> This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.
<Li><Strong>Argin: DEV_VOID</Strong></Li>
<Li><Strong>Argout: DEV_STATE</Strong></Li>
<Li><Strong>Command allowed for: </Strong>
<Ul>
<Li>Tango::FAULT</Li>
<Li>Tango::ON</Li>
<Li>Tango::INIT</Li>
<Li>Tango::MOVING</Li>
</Ul>
</Li>
</ul>
<!--- html Footer --->
<h2>3 - Status</h2>
<ul>
<Li><Strong>Description: </Strong> This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.</Li>
<Li><Strong>Argin: DEV_VOID</Strong></Li>
<Li><Strong>Argout: CONST_DEV_STRING</Strong></Li>
<Li><Strong>Command allowed for: </Strong>
<Ul>
<Li>Tango::FAULT</Li>
<Li>Tango::ON</Li>
<Li>Tango::INIT</Li>
<Li>Tango::MOVING</Li>
</Ul>
</Li>
</ul>
<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>
<h2>4 - Abort</h2>
<ul>
<Li><Strong>Description: </Strong> Aborts ramps in progress.</Li>
<Li><Strong>Argin: DEV_VOID</Strong></Li>
<Li><Strong>Argout: DEV_VOID</Strong></Li>
<Li><Strong>Command allowed for: </Strong>
<Ul>
<Li>Tango::FAULT</Li>
<Li>Tango::ON</Li>
<Li>Tango::INIT</Li>
<Li>Tango::MOVING</Li>
</Ul>
</Li>
</ul>
</body>
</html>
</html>
\ No newline at end of file
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<Title> Tango Device Server User's Guide </Title>
</HEAD>
<html>
<head>
<title> Tango Device Server User's Guide </title>
</head>
<FRAMESET cols="20%,80%">
<FRAME src="DevCommandsList.html" name="DevCommandsList">
<FRAME src="DevCommands.html" name="DevCommands">
</FRAMESET>
<NOFRAMES>
<H2>
Frame Alert</H2>
<frameset cols="20%,80%">
<frame src="DevCommandsList.html" name="DevCommandsList">
<frame src="DevCommands.html" name="DevCommands">
</frameset>
<noframes>
<h2>
Frame Alert</h2>
<P>
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
<BR>
Link to <A HREF="DevCommands.html">Non-frame version.</A></NOFRAMES>
</HTML>
<p>
This document is designed to be viewed using the frames feature. If
you see this message, you are using a non-frame-capable web client.
<br>
Link to <a HREF="DevCommands.html">Non-frame version.</a></noframes>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML><HEAD>
<TITLE>Commands
</TITLE></HEAD>
<BODY BGCOLOR="white">
<FONT size="+1" ID="FrameHeadingFont">
<B>Commands:</B></FONT>
<Br>
<Br>
<Br>
<A Href="DevCommands.html#Init" TARGET="DevCommands"> Init</a><Br>
<A Href="DevCommands.html#State" TARGET="DevCommands"> State</a><Br>
<A Href="DevCommands.html#Status" TARGET="DevCommands"> Status</a><Br>
<A Href="DevCommands.html#Abort" TARGET="DevCommands"> Abort</a><Br>
<html><head>
<title>Commands
</title></head>
<body BGCOLOR="white">
<font size="+1" ID="FrameHeadingFont">
<b>Commands:</b></font>
<br>
<br>
<br>
<a Href="DevCommands.html#Init" TARGET="DevCommands"> Init</a><br>
<a Href="DevCommands.html#State" TARGET="DevCommands"> State</a><br>
<a Href="DevCommands.html#Status" TARGET="DevCommands"> Status</a><br>
<a Href="DevCommands.html#Abort" TARGET="DevCommands"> Abort</a><br>
</BODY>
</HTML>
</body>
</html>
<!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">
<html>
<head>
<title> Tango Device Server User's Guide </title>
</head>
<body>
<center>
<h1>
SingleShotAO Generic Device <br>
Device Commands Description <br><br>
SingleShotAO Class <br>
</h1>
<b>
Revision: - Author: buteau
</b>
</center>
<center>
<br><a Href="DevCommandsFrame.html"> More Details on commands.... </a><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 Commands for Operator Level</b>
</center></font>
</td>
</tr>
<tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<td><b>Command name</b></td>
<td><b>Argument In</b></td>
<td><b>Argument Out</b></td>
</tr>
<tr>
<td><b>Init</b></td>
<td>DEV_VOID</td>
<td>DEV_VOID</td>
</tr>
<tr>
<td><b>State</b></td>
<td>DEV_VOID</td>
<td>DEV_STATE</td>
</tr>
<tr>
<td><b>Status</b></td>
<td>DEV_VOID</td>
<td>CONST_DEV_STRING</td>
</tr>
<tr>
<td><b>Abort</b></td>
<td>DEV_VOID</td>
<td>DEV_VOID</td>
</tr>
</table>
</center>
<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>
SingleShotAO Generic Device <Br>
Device Commands Description <Br> <Br>
SingleShotAO Class <Br>
</h1>
<b>
Revision: - Author: buteau
</b>
</center>
<Center>
<Br><Br>
<A Href="DevCommandsFrame.html"> More Details on commands.... </a><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 Commands for Operator Level</b></td></Font></Center>
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<Td><Center><b>Command name</b></td></Center>
<Td><Center><b>Argument In</b></td></Center>
<Td><Center><b>Argument Out</b></td></Center>
<Tr><Td><b>Init</b></Td>
<Td><Font Size=-1>DEV_VOID</Font></Td>
<Td><Font Size=-1>DEV_VOID</Font></Td>
<Tr><Td><b>State</b></Td>
<Td><Font Size=-1>DEV_VOID</Font></Td>
<Td><Font Size=-1>DEV_STATE</Font></Td>
<Tr><Td><b>Status</b></Td>
<Td><Font Size=-1>DEV_VOID</Font></Td>
<Td><Font Size=-1>CONST_DEV_STRING</Font></Td>
<Tr><Td><b>Abort</b></Td>
<Td><Font Size=-1>DEV_VOID</Font></Td>
<Td><Font Size=-1>DEV_VOID</Font></Td>
</Table></Center>
<!--- 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>
</html>
</html>
\ No newline at end of file
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<Title> Tango Device Server User's Guide </Title>
<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>
SingleShotAO Generic Device <Br>
Properties Description <Br> <Br>
SingleShotAO Class <Br>
</h1>
<b>
Revision: - Author: buteau
</b>
</center>
<BODY>
<center>
<h1>
SingleShotAO Generic Device <Br>
Properties Description <Br><Br>
SingleShotAO Class <Br>
</h1>
<b>
Revision: - Author: buteau
</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>BoardNum </a></b></Td>
<Td><Font Size=-1>Tango::DEV_SHORT</Font></Td>
<Td><Font Size=-1>The the board identifier in the cPCI crate [valid range is 0...7 - no default value] .</Font></Td></Tr>
<Tr><Td><b><a href=#Dev_DefaultValues>BoardType </a></b></Td>
<Td><Font Size=-1>Tango::DEV_STRING</Font></Td>
<Td><Font Size=-1>The board type [MAO_xxxx - where <xxxx> is the ADlink board identifier - e.g. MAO_6208 - no default value]</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>
<Center>
<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>BoardNum</Td>
<td>No default value</td>
<Td><b><a href=#Dev_DefaultValues>BoardNum </a></b></Td>
<Td>
<Font Size=-1>Tango::DEV_SHORT</Font>
</Td>
<Td>
<Font Size=-1>The the board identifier in the cPCI crate [valid range is 0...7 - no default value] .</Font>
</Td>
</Tr>
<Tr>
<Td>BoardType</Td>
<td>No default value</td>
<Td><b><a href=#Dev_DefaultValues>BoardType </a></b></Td>
<Td>
<Font Size=-1>Tango::DEV_STRING</Font>
</Td>
<Td>
<Font Size=-1>The board type [MAO_xxxx - where <xxxx> is the ADlink board identifier - e.g. MAO_6208 - no default value]</Font>
</Td>
</Tr>
</Table>
<Br><Br><Br>
<Center><b>
There is no Class properties.<Br><Br>
</Center></b>
<Br> <Br> <Br>
<Tr>
<Td><b><a href=#Dev_DefaultValues>EnableRamps </a></b></Td>
<Td>
<Font Size=-1>Tango::DEV_BOOLEAN</Font>
</Td>
<Td>
<Font Size=-1>Whether to enable or disable the ramp generation on the board output channels. If false, the speedX and initialX dynamic attributes will not be created for every channel, and the changes will happen instantly. [true/false - default value is true]</Font>
</Td>
<!--- html Footer --->
</Tr>
<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>
<Td><b><a href=#Dev_DefaultValues>OutputMemorizedChannelsAtInit </a></b></Td>
<Td>
<Font Size=-1>Tango::DEV_BOOLEAN</Font>
</Td>
<Td>
<Font Size=-1>Whether to send the memorized values for the channels to the board at the device initialization (the device attribute will show the last memorized value regardless) [true/false - default value is false]</Font>
</Td>
</Tr>
</Table>
</Center>
<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>BoardNum</Td>
<td>No default value</td>
</Tr>
<Tr>
<Td>BoardType</Td>
<td>No default value</td>
</Tr>
<Tr>
<Td>EnableRamps</Td>
<td>true</td>
</Tr>
<Tr>
<Td>OutputMemorizedChannelsAtInit</Td>
<td>false</td>
</Tr>
</Table>
<Br><Br><Br>
<Center><b>
There is no Class properties.<Br><Br>
</Center></b>
<Br> <Br> <Br>
<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>
</html>
</html>
\ No newline at end of file
<!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">
<html>
<head>
<title> Tango Device Server User's Guide </title>
</head>
<body>
<center>
<h1>
SingleShotAO Generic Device <br>
Device States Description <br> <br>
SingleShotAO Class <br>
</h1>
<b>
Revision: - Author: buteau
</b>
</center>
<center>
<table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
<tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<td COLSPAN=2>
<font Size=+2><center>
<b>States</b>
</center></font>
</td>
</tr>
<tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<td><center><b>Names</b></center></td>
<td><center><b>Descriptions</b></center></td>
</tr>
<tr>
<td><b>FAULT</b></td>
<td><font Size=-1>Hardware / driver failure or fatal error occurred</font></td>
</tr>
<tr>
<td><b>ON</b></td>
<td><font Size=-1>Device ready to execute AO request</font></td>
</tr>
<tr>
<td><b>INIT</b></td>
<td><font Size=-1>Device initialization in progress</font></td>
</tr>
<tr>
<td><b>MOVING</b></td>
<td><font Size=-1>Ramp generation in progress</font></td>
</tr>
</table>
</center>
<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>
SingleShotAO Generic Device <Br>
Device States Description <Br> <Br>
SingleShotAO Class <Br>
</h1>
<b>
Revision: - Author: buteau
</b>
</center>
<Center>
<Br> <Br> <Br>
<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<Td COLSPAN=2> <Font Size=+2><Center><b>States</b></td></Font></Center>
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<Td><Center><b>Names</b></td></Center>
<Td><Center><b>Descriptions</b></td></Center>
<Tr><Td><b>FAULT</b></Td>
<Td><Font Size=-1>Hardware / driver failure or fatal error occurred</Font></Td></Tr>
<Tr><Td><b>ON</b></Td>
<Td><Font Size=-1>Device ready to execute AO request</Font></Td></Tr>
<Tr><Td><b>INIT</b></Td>
<Td><Font Size=-1>Device initialization in progress</Font></Td></Tr>
<Tr><Td><b>MOVING</b></Td>
<Td><Font Size=-1>Ramp generation in progress</Font></Td></Tr>
</Table>
</Center>
<!--- 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>
</html>
</html>
\ No newline at end of file
<!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>
<html>
<head>
<title> Tango Device Server User's Guide </title>
</head>
<body>
<center>
<h1>
SingleShotAO Generic Device <br>
User's Guide <br><Br>
SingleShotAO Class <br>
</h1>
<b>
Revision: - Author: buteau <br>
Implemented in C++
</b>
</center>
<h2>Introduction:</h2>
<ul>
<li>ADLink boards support for single shot AO operations [PCI-6208 and compatible boards]</li>
</ul>
<HR WIDTH="100%"></H5>
<center>
<h1>
SingleShotAO Generic Device <Br>
User's Guide <Br><Br>
SingleShotAO Class<Br>
<h2>Class Identification:</h2>
<ul>
<li><b>Contact :</b> at synchrotron-soleil.fr - buteau</li>
<li><b>Class Family :</b> InputOutput</li>
<li><b>Platform :</b> All Platforms</li>
<li><b>Bus :</b> Compact PCI</li>
</ul>
</h1>
<b>
Revision: - Author: buteau <Br>
Implemented in C++
</b>
</center>
<Br>
<Br>
<Br>
<Br>
<h2>Introduction:</h2>
<ul>
ADLink boards support for single shot AO operations [PCI-6208 and compatible boards]<Br>
</ul>
<Br><h2>Class Identification:</h2>
<ul>
<li><b>Contact :</b> at synchrotron-soleil.fr - buteau
<li><b>Class Family :</b> InputOutput
<li><b>Platform :</b> All Platforms
<li><b>Bus :</b> Compact PCI
</ul><Br>
<h2>Class Inheritance:</h2>
<h2>Class Inheritance:</h2>
<ul>
<li> <a href="http://www.esrf.fr/computing/cs/tango/tango_doc/kernel_doc/cpp_doc/"> TANGO_BASE_CLASS</a></li>
<li> <a
href="http://www.esrf.fr/computing/cs/tango/tango_doc/kernel_doc/cpp_doc/">
TANGO_BASE_CLASS</a></li>
<ul>
<li> SingleShotAO</li>
</ul>
</ul>
</ul>
</ul>
<Br>
<Br>
<h2>Class 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>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>
<h2>Class Description:</h2>
<ul>
<li> <a href=Description.html> Device description.</a> </li>
<li> <a href=Properties.html> Properties description</a> </li>
<li> <a href=TangoDevStates.html> States description</a> </li>
<li> <a href=DevCommandsTable.html> Commands description</a> </li>
<li> <a href=Attributes.html> Attributes description</a> </li>
</ul>
<h2>Conclusion:</h2>
<ul>
<li>The device server is ready for distribution application programmers.</li>
<li>The author will be interested in any feedback which arise from their usage of this device server.</li>
</ul>
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>
</html>
This diff is collapsed.
......@@ -110,13 +110,37 @@ public :
* The board type [MAO_xxxx - where <xxxx> is the ADlink board identifier - e.g. MAO_6208 - no default value]
*/
string boardType;
/**
* Whether to enable or disable the ramp generation on the board output channels. If false, the speedX and initialX dynamic attributes will not be created for every channel, and the changes will happen instantly. [true/false - default value is true]
*/
Tango::DevBoolean enableRamps;
/**
* Whether to write the memorized values to the board at the device initialization. [true/false - default value is false]
*/
Tango::DevBoolean outputMemorizedChannelsAtInit;
//@}
/**
* @name Device properties
* Device property member data.
* @name Device properties default values
* Device properties default values.
*/
//@{
/**
* Default value for boardNum property
*/
Tango::DevShort boardNum_default;
/**
* Default value for boardType property
*/
string boardType_default;
/**
* Default value for enableRamps property
*/
Tango::DevBoolean enableRamps_default;
/**
* Default value for outputMemorizedChannelsAtInit property
*/
Tango::DevBoolean outputMemorizedChannelsAtInit_default;
//@}
/**@name Constructors
......@@ -279,76 +303,13 @@ protected :
//- channel number
unsigned short m_nb_chan;
// To be deleted with Tango 8
//- Template class to store a current value in a Device property.
//- \param value Value to store.
//- \param property_name Name to use.
template <class T>
void store_value_as_property(T value, std::string property_name)
{
Tango::DbDatum current_value(property_name);
current_value << value;
Tango::DbData db_data;
db_data.push_back(current_value);
try
{
get_db_device()->put_property(db_data);
}
catch(Tango::DevFailed &df)
{
ERROR_STREAM << df << endl;
RETHROW_DEVFAILED(df,
"SOFTWARE_FAILURE",
"Error while storing properties in database",
"SingleShotAO::store_value_as_property");
}
}
// To be deleted with Tango 8
//- Template class to get a memorized attribute stored as a Device property.
//- \param property_name Name od the property to read.
template <class T>
T get_memorized_attribute(const std::string& property_name)
{
T value;
if (!Tango::Util::instance()->_UseDb)
{
//- throw exception
THROW_DEVFAILED("DEVICE_ERROR",
"No DATA BASE!",
"SingleShotAO::get_memorized_attribute");
}
Tango::DbData dev_prop;
dev_prop.push_back(Tango::DbDatum(property_name));
try
{
get_db_device()->get_property(dev_prop);
}
catch (Tango::DevFailed &df)
{
//- rethrow exception
RETHROW_DEVFAILED(df,
"DEVICE_ERROR",
"could not get Device properties! [caught Tango::DevFailed]",
"SingleShotAO::get_memorized_attribute");
}
if (dev_prop[0].is_empty()==false)
{
dev_prop[0] >> value;
}
else
{
//- throw exception
THROW_DEVFAILED("DATA_ERROR",
"No property stored in database!",
"SingleShotAO::get_memorized_attribute");
}
return value;
}
void _abort();
// set the write value of a dynamic attribute
// used to keep read and write values in sync
bool setDynamicAttributeWriteValue(const std::string& attrName, double value);
};
} // namespace_ns
......
......@@ -87,7 +87,8 @@ __declspec(dllexport)
#endif
Tango::DeviceClass *_create_SingleShotAO_class(const char *name) {
Tango::DeviceClass *_create_SingleShotAO_class(const char *name)
{
return SingleShotAO_ns::SingleShotAOClass::init(name);
}
}
......@@ -369,12 +370,17 @@ void SingleShotAOClass::set_default_property()
string prop_def;
vector<string> vect_data;
// Set Default Class Properties
// ...
// Set Default Device Properties
//- <BoardNum> -----------------------
prop_name = "BoardNum";
prop_desc = "The the board identifier in the cPCI crate [valid range is 0...7 - no default value] .";
prop_def = "";
prop_desc = "The board identifier in the cPCI crate [valid range is 0...7 - no default value].";
prop_def = "-1";
vect_data.clear();
vect_data.push_back("-1");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
......@@ -385,10 +391,12 @@ void SingleShotAOClass::set_default_property()
else
add_wiz_dev_prop(prop_name, prop_desc);
//- <BoardType> -----------------------
prop_name = "BoardType";
prop_desc = "The board type [MAO_xxxx - where <xxxx> is the ADlink board identifier - e.g. MAO_6208 - no default value]";
prop_def = "";
prop_def = "TO_BE_DEFINED";
vect_data.clear();
vect_data.push_back("TO_BE_DEFINED");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
......@@ -399,7 +407,40 @@ void SingleShotAOClass::set_default_property()
else
add_wiz_dev_prop(prop_name, prop_desc);
//- <EnableRamps> -----------------------
prop_name = "EnableRamps";
prop_desc = "Whether to enable or disable the ramp generation on the board output channels. If false, the speedX and initialX dynamic attributes will not be created for every channel, and the changes will happen instantly. [true/false - default value is true]";
prop_def = "true";
vect_data.clear();
vect_data.push_back("true");
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);
//- <OutputMemorizedChannelsAtInit> -----------------------
prop_name = "OutputMemorizedChannelsAtInit";
prop_desc = "Whether to send the memorized values for the channels to the board at the device initialization (the device attribute will show the last memorized value regardless) [true/false - default value is false]";
prop_def = "false";
vect_data.clear();
vect_data.push_back("false");
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 : SingleShotAOClass::write_class_property
......@@ -431,107 +472,6 @@ void SingleShotAOClass::write_class_property()
str_desc.push_back("ADLink boards support for single shot AO operations [PCI-6208 and compatible boards]");
description << str_desc;
data.push_back(description);
// put cvs or svn location
string filename(classname);
filename += "Class.cpp";
// Create a string with the class ID to
// get the string into the binary
string class_id(ClassId);
// check for cvs information
string src_path(CvsPath);
start = src_path.find("/");
if (start!=string::npos)
{
end = src_path.find(filename);
if (end>start)
{
string strloc = src_path.substr(start, end-start);
// Check if specific repository
start = strloc.find("/cvsroot/");
if (start!=string::npos && start>0)
{
string repository = strloc.substr(0, start);
if (repository.find("/segfs/")!=string::npos)
strloc = "ESRF:" + strloc.substr(start, strloc.length()-start);
}
Tango::DbDatum cvs_loc("cvs_location");
cvs_loc << strloc;
data.push_back(cvs_loc);
}
}
// check for svn information
else
{
string src_path(SvnPath);
start = src_path.find("://");
if (start!=string::npos)
{
end = src_path.find(filename);
if (end>start)
{
header = "$HeadURL: ";
start = header.length();
string strloc = src_path.substr(start, (end-start));
Tango::DbDatum svn_loc("svn_location");
svn_loc << strloc;
data.push_back(svn_loc);
}
}
}
// Get CVS or SVN revision tag
// CVS tag
string tagname(TagName);
header = "$Name: ";
start = header.length();
string endstr(" $");
end = tagname.find(endstr);
if (end!=string::npos && end>start)
{
string strtag = tagname.substr(start, end-start);
Tango::DbDatum cvs_tag("cvs_tag");
cvs_tag << strtag;
data.push_back(cvs_tag);
}
// SVN tag
string svnpath(SvnPath);
header = "$HeadURL: ";
start = header.length();
end = svnpath.find(endstr);
if (end!=string::npos && end>start)
{
string strloc = svnpath.substr(start, end-start);
string tagstr ("/tags/");
start = strloc.find(tagstr);
if ( start!=string::npos )
{
start = start + tagstr.length();
end = strloc.find(filename);
string strtag = strloc.substr(start, end-start-1);
Tango::DbDatum svn_tag("svn_tag");
svn_tag << strtag;
data.push_back(svn_tag);
}
}
// Get URL location
string httpServ(HttpServer);
if (httpServ.length()>0)
{
Tango::DbDatum db_doc_url("doc_url");
db_doc_url << httpServ;
data.push_back(db_doc_url);
}
// Put inheritance
Tango::DbDatum inher_datum("InheritedFrom");
......@@ -540,8 +480,7 @@ void SingleShotAOClass::write_class_property()
inher_datum << inheritance;
data.push_back(inher_datum);
// Call database and and values
//--------------------------------------------
// Call database and add values
get_db_class()->put_property(data);
}
......
......@@ -128,7 +128,7 @@ void SingleShotAOManager::write_frequency(double p_frequency)
// ============================================================================
// SingleShotAOManager::init ()
// ============================================================================
void SingleShotAOManager::init(asl::SingleShotAO * p_ssao, unsigned short p_nb_chan, double p_frequency)
void SingleShotAOManager::init(asl::SingleShotAO * p_ssao, unsigned short p_nb_chan, double p_frequency, bool p_enable_ramps)
{
m_ssao = p_ssao;
CHECK_SSAO();
......@@ -145,12 +145,14 @@ void SingleShotAOManager::init(asl::SingleShotAO * p_ssao, unsigned short p_nb_c
enable_periodic_msg(true);
}
// initialize channel indexes (-1 means no ramp in progress)
// and ramp states
for (unsigned int l_cpt = 0;l_cpt < m_nb_chan;l_cpt++)
m_enable_ramps = p_enable_ramps;
// initialize channel indexes (-1 means no ramp in progress)
// and ramp states
for (unsigned int l_cpt = 0; l_cpt < m_nb_chan; l_cpt++)
{
m_currentIndex[l_cpt] = -1;
m_isRunning[l_cpt] = false;
m_isRunning[l_cpt] = false;
}
}
......@@ -164,37 +166,39 @@ void SingleShotAOManager::process_message (yat::Message& msg)
switch (msg.type())
{
//- THREAD_INIT ----------------------
case yat::TASK_INIT:
case yat::TASK_INIT:
{
DEBUG_STREAM << "SingleShotAOManager::handle_message::THREAD_INIT::thread is starting up" << std::endl;
}
break;
//- THREAD_EXIT ----------------------
case yat::TASK_EXIT:
case yat::TASK_EXIT:
{
DEBUG_STREAM << "SingleShotAOManager::handle_message::THREAD_EXIT::thread is quitting" << std::endl;
}
break;
//- THREAD_PERIODIC ------------------
case yat::TASK_PERIODIC:
case yat::TASK_PERIODIC:
{
//DEBUG_STREAM << "SingleShotAOManager::handle_message::THREAD_PERIODIC" << std::endl;
periodic_job_i();
}
break;
//- THREAD_TIMEOUT -------------------
case yat::TASK_TIMEOUT:
case yat::TASK_TIMEOUT:
{
//- not used in this example
}
break;
//- UNHANDLED MSG --------------------
default:
DEBUG_STREAM << "SingleShotAOManager::handle_message::unhandled msg type received" << std::endl;
break;
default:
{
DEBUG_STREAM << "SingleShotAOManager::handle_message::unhandled msg type received" << std::endl;
break;
}
}
}
......@@ -203,86 +207,30 @@ void SingleShotAOManager::process_message (yat::Message& msg)
// ============================================================================
void SingleShotAOManager::periodic_job_i()
{
//test all channels
// test all channels
for (unsigned int l_cpt = 0;l_cpt < m_nb_chan;l_cpt++)
{
//test if a ramp step must occur
if (m_currentIndex[l_cpt] != -1)
{
//DEBUG_STREAM << "Current index for channel" << l_cpt << ": " << m_currentIndex[l_cpt] << endl;
m_isRunning[l_cpt] = true;
double l_val = 0;
l_val = m_ramps[l_cpt][m_currentIndex[l_cpt]];
DEBUG_STREAM << "Current value for channel" << l_cpt << ": " << l_val << endl;
try
{
CHECK_SSAO();
m_ssao->write_scaled_channel((adl::ChanId)l_cpt, l_val);
m_channels[l_cpt] = l_val;
}
catch(const asl::DAQException& de)
{
Tango::DevFailed df = daq_to_tango_exception(de);
ERROR_STREAM << df<< endl;
m_state = Tango::FAULT;
RETHROW_DEVFAILED(df,
"DRIVER_FAILURE",
"could not write channel [caught asl::DAQException]",
"SingleShotAOManager::write_channel");
}
catch(...)
{
ERROR_STREAM << "SingleShotAOManager::write_channel::unknown exception caught"<<std::endl;
m_state = Tango::FAULT;
THROW_DEVFAILED("DRIVER_FAILURE",
"could not write channel [unknown error]",
"SingleShotAOManager::write_channel");
}
//check if there is another value
m_currentIndex[l_cpt] +=1;
if (m_currentIndex[l_cpt] == m_ramps[l_cpt].capacity())
{
m_currentIndex[l_cpt] = -1;
m_initials[l_cpt] = m_channels[l_cpt];
m_ramps[l_cpt].clear();
}
}
else
// test if a ramp step must occur
if (m_currentIndex[l_cpt] == -1)
{
m_isRunning[l_cpt] = false;
continue;
}
}
}
// ============================================================================
// SingleShotAOManager::get_channel()
// ============================================================================
double SingleShotAOManager::get_channel(ChannelId_t p_chIdx)
{
return m_channels[p_chIdx];
}
// ============================================================================
// SingleShotAOManager::write_channel ()
// ============================================================================
void SingleShotAOManager::write_channel(ChannelId_t p_chIdx, double p_val)
{
DEBUG_STREAM << "write_channel : " << p_chIdx << " : " << p_val << " : " << endl;
if (m_speeds[p_chIdx] == 0.0)
{
m_isRunning[l_cpt] = true;
double l_val = 0;
l_val = m_ramps[l_cpt][m_currentIndex[l_cpt]];
DEBUG_STREAM << "Current value for channel" << l_cpt << ": " << l_val << endl;
try
{
CHECK_SSAO();
m_ssao->write_scaled_channel((adl::ChanId)p_chIdx, p_val);
m_channels[p_chIdx] = p_val;
m_initials[p_chIdx] = p_val;
m_ssao->write_scaled_channel((adl::ChanId)l_cpt, l_val);
m_channels[l_cpt] = l_val;
}
catch(const asl::DAQException& de)
{
Tango::DevFailed df = daq_to_tango_exception(de);
ERROR_STREAM << df<< endl;
ERROR_STREAM << df << endl;
m_state = Tango::FAULT;
RETHROW_DEVFAILED(df,
"DRIVER_FAILURE",
......@@ -291,89 +239,174 @@ void SingleShotAOManager::write_channel(ChannelId_t p_chIdx, double p_val)
}
catch(...)
{
ERROR_STREAM << "SingleShotAOManager::write_channel::unknown exception caught"<<std::endl;
ERROR_STREAM << "SingleShotAOManager::write_channel::unknown exception caught" << std::endl;
m_state = Tango::FAULT;
THROW_DEVFAILED("DRIVER_FAILURE",
"could not write channel [unknown error]",
"SingleShotAOManager::write_channel");
}
// check if there is another value
m_currentIndex[l_cpt] += 1;
if (m_currentIndex[l_cpt] == m_ramps[l_cpt].capacity())
{
DEBUG_STREAM << "Ramp finished for channel" << l_cpt << endl;
m_currentIndex[l_cpt] = -1;
m_initials[l_cpt] = m_channels[l_cpt];
m_ramps[l_cpt].clear();
}
}
}
// ============================================================================
// SingleShotAOManager::get_channel()
// ============================================================================
double SingleShotAOManager::get_channel(ChannelId_t p_chIdx)
{
return m_channels[p_chIdx];
}
// ============================================================================
// SingleShotAOManager::set_channel ()
// ============================================================================
void SingleShotAOManager::set_channel(ChannelId_t p_chIdx, double p_val)
{
if (m_isRunning[p_chIdx])
{
THROW_DEVFAILED("DEVICE_FAILURE",
"could not write channel : a ramp is still in progress on this channel",
"SingleShotAOManager::set_channel");
}
else
{
// check if a ramp is not running
if (!m_isRunning[p_chIdx])
m_channels[p_chIdx] = p_val;
}
}
// ============================================================================
// SingleShotAOManager::write_channel_direct ()
// ============================================================================
void SingleShotAOManager::write_channel_direct(ChannelId_t p_chIdx, double p_val)
{
try
{
CHECK_SSAO();
m_ssao->write_scaled_channel((adl::ChanId)p_chIdx, p_val);
m_channels[p_chIdx] = p_val;
m_initials[p_chIdx] = p_val;
DEBUG_STREAM << "Writing directly the value" << std::endl;
}
catch (const asl::DAQException &de)
{
Tango::DevFailed df = daq_to_tango_exception(de);
ERROR_STREAM << df << std::endl;
m_state = Tango::FAULT;
RETHROW_DEVFAILED(df,
"DRIVER_FAILURE",
"could not write channel [caught asl::DAQException]",
"SingleShotAOManager::write_channel_direct");
}
catch (...)
{
ERROR_STREAM << "SingleShotAOManager::write_channel_direct::unknown exception caught" << std::endl;
m_state = Tango::FAULT;
THROW_DEVFAILED("DRIVER_FAILURE",
"could not write channel [unknown error]",
"SingleShotAOManager::write_channel_direct");
}
}
// ============================================================================
// SingleShotAOManager::start_channel_ramp ()
// ============================================================================
void SingleShotAOManager::start_channel_ramp(ChannelId_t p_chIdx, double p_val)
{
// ramp determination
double l_delta = p_val - m_initials[p_chIdx];
bool isDown = false;
l_delta = ((l_delta * m_frequency) / m_speeds[p_chIdx]) + 1;
if (l_delta < 0)
{
l_delta = -l_delta + 2;
isDown = true;
}
DEBUG_STREAM << "Computed ramp steps number : " << l_delta << endl;
yat::Buffer<double> l_buffer;
size_t ramp_size = (size_t)(ceil(l_delta));
l_buffer.capacity(ramp_size);
l_buffer.force_length(ramp_size);
// check if ramp step is integer or not
bool isDeltaNotInt = (ramp_size != ((size_t)(floor(l_delta))));
DEBUG_STREAM << "Real ramp steps number : " << ramp_size << endl;
for (unsigned int l_cpt = 0; l_cpt < ramp_size; l_cpt++)
{
if ((l_cpt == (ramp_size - 1)) && (isDeltaNotInt))
{
// check if initial = channel
if (m_initials[p_chIdx] != p_val)
{
if (m_frequency == 0)
{
THROW_DEVFAILED("DRIVER_FAILURE",
"could not set a ramp on this channel. The frequency is 0",
"SingleShotAOManager::write_channel");
}
//ramp determination
double l_delta = p_val - m_initials[p_chIdx];
bool isDown = false;
l_delta = ((l_delta * m_frequency) / m_speeds[p_chIdx])+1;
if (l_delta < 0)
{
l_delta = -l_delta + 2;
isDown = true;
}
DEBUG_STREAM << "Computed ramp steps number : " << l_delta << endl;
yat::Buffer<double> l_buffer;
size_t ramp_size = (size_t)(ceil(l_delta));
l_buffer.capacity(ramp_size);
l_buffer.force_length(ramp_size);
// check if ramp step is integer or not
bool isDeltaNotInt = false;
if (ramp_size != ((size_t)(floor(l_delta))))
{
isDeltaNotInt = true;
}
DEBUG_STREAM << "Real ramp steps number : " << ramp_size << endl;
for (unsigned int l_cpt = 0; l_cpt < ramp_size; l_cpt++)
{
if ((l_cpt == (ramp_size - 1)) &&
(isDeltaNotInt))
{
// add the setpoint value at the end of table
l_buffer[l_cpt] = p_val;
}
else
{
if (isDown)
{
l_buffer[l_cpt] = m_initials[p_chIdx] - l_cpt*(m_speeds[p_chIdx]/m_frequency);
}
else
{
l_buffer[l_cpt] = m_initials[p_chIdx] + l_cpt*(m_speeds[p_chIdx]/m_frequency);
}
}
//DEBUG_STREAM << "Ramp buffer[" << l_cpt << "] = " << l_buffer[l_cpt] << endl;
}
m_ramps[p_chIdx].clear();
m_ramps[p_chIdx].capacity(0);
m_ramps[p_chIdx].force_length(0);
m_currentIndex[p_chIdx] = 0;
m_ramps[p_chIdx] = l_buffer;
//m_channels[p_chIdx] = m_ramps[p_chIdx][0]; -- soso on ne met rien ici => à l'application
}
// add the setpoint value at the end of table
l_buffer[l_cpt] = p_val;
}
else
{
THROW_DEVFAILED("DEVICE_FAILURE",
"could not write channel : a ramp is still in progress on this channel",
"SingleShotAOManager::write_channel");
if (isDown)
{
l_buffer[l_cpt] = m_initials[p_chIdx] - l_cpt * (m_speeds[p_chIdx] / m_frequency);
}
else
{
l_buffer[l_cpt] = m_initials[p_chIdx] + l_cpt * (m_speeds[p_chIdx] / m_frequency);
}
}
//DEBUG_STREAM << "Ramp buffer[" << l_cpt << "] = " << l_buffer[l_cpt] << endl;
}
m_ramps[p_chIdx].clear();
m_ramps[p_chIdx].capacity(0);
m_ramps[p_chIdx].force_length(0);
m_currentIndex[p_chIdx] = 0;
m_ramps[p_chIdx] = l_buffer;
}
// ============================================================================
// SingleShotAOManager::write_channel ()
// ============================================================================
void SingleShotAOManager::write_channel(ChannelId_t p_chIdx, double p_val)
{
DEBUG_STREAM << "write_channel " << p_chIdx << " : " << p_val << endl;
// if the speed is 0, write the value directly and skip ramp
if (m_speeds[p_chIdx] == 0.0 || !m_enable_ramps)
{
write_channel_direct(p_chIdx, p_val);
return;
}
// if a ramp is running, error
if (m_isRunning[p_chIdx])
{
THROW_DEVFAILED("DEVICE_FAILURE",
"could not write channel : a ramp is still in progress on this channel",
"SingleShotAOManager::write_channel");
}
// if frequency = 0, error
if (m_frequency == 0)
{
THROW_DEVFAILED("DRIVER_FAILURE",
"could not set a ramp on this channel. The frequency is 0",
"SingleShotAOManager::write_channel");
}
// if initial = channel, skip
if (m_initials[p_chIdx] == p_val)
{
DEBUG_STREAM << "Initial value is the same as the given value, skipping" << endl;
return;
}
// Create and start a ramp
start_channel_ramp(p_chIdx, p_val);
}
// ============================================================================
......@@ -395,6 +428,12 @@ void SingleShotAOManager::set_initial(ChannelId_t p_chIdx, Intial_t p_initial)
"could not write initial : a ramp is still in progress on this channel",
"SingleShotAOManager::set_initial");
}
else if (!m_enable_ramps)
{
THROW_DEVFAILED("DEVICE_FAILURE",
"could not write initial : ramps are disabled",
"SingleShotAOManager::set_initial");
}
else
{
m_initials[p_chIdx] = p_initial;
......@@ -420,19 +459,33 @@ void SingleShotAOManager::set_speed(ChannelId_t p_chIdx, Intial_t p_speed)
"could not write speed : a ramp is still in progress on this channel",
"SingleShotAOManager::set_speed");
}
else if (!m_enable_ramps)
{
THROW_DEVFAILED("DEVICE_FAILURE",
"could not write speed : ramps are disabled",
"SingleShotAOManager::set_speed");
}
else
{
m_speeds[p_chIdx] = p_speed;
}
}
// ============================================================================
// SingleShotAOManager::is_running ()
// ============================================================================
bool SingleShotAOManager::is_running(ChannelId_t p_chIdx)
{
return m_isRunning[p_chIdx];
}
// ============================================================================
// SingleShotAOManager::abort ()
// ============================================================================
void SingleShotAOManager::abort()
{
//test all channels and abort current ramps
for (unsigned int l_cpt = 0;l_cpt < m_nb_chan;l_cpt++)
// test all channels and abort current ramps
for (unsigned int l_cpt = 0; l_cpt < m_nb_chan; l_cpt++)
{
if (m_isRunning[l_cpt])
{
......@@ -444,5 +497,5 @@ void SingleShotAOManager::abort()
}
}
}
} // namespace SingleShotAO_ns
} // namespace SingleShotAO_ns
......@@ -48,21 +48,32 @@ public:
std::string get_status ();
//- init
void init(asl::SingleShotAO * p_ssao, unsigned short p_nb_chan, double p_frequency);
void init(asl::SingleShotAO *p_ssao, unsigned short p_nb_chan, double p_frequency, bool p_enable_ramps);
//- get current channel value
double get_channel(ChannelId_t p_chIdx);
//- set channel
// Updates the value for the channel in the device without sending it to hardware
void set_channel(ChannelId_t p_chIdx, double p_val);
//- write channel
// Writes value to the channel to the device and the hardware, with a ramp if speed is not null and EnableRamps property is true
void write_channel(ChannelId_t p_chIdx, double p_val);
//- write a channel directly (without ramp)
void write_channel_direct(ChannelId_t p_chIdx, double p_val);
//- create and start a ramp for channel
void start_channel_ramp(ChannelId_t p_chIdx, double p_val);
//- change period
void write_frequency(double p_frequency);
//- get inital
//- get initial
Intial_t get_initial(ChannelId_t p_chIdx);
//- set inital
//- set initial
void set_initial(ChannelId_t p_chIdx, Intial_t p_initial);
//- get speed
......@@ -71,6 +82,9 @@ public:
//- set speed
void set_speed(ChannelId_t p_chIdx, Intial_t p_speed);
//- is running
bool is_running(ChannelId_t p_chIdx);
//- abort
void abort();
......@@ -94,7 +108,10 @@ private:
//- frequency
double m_frequency;
//-enable ramps
bool m_enable_ramps;
//- initial buffer for all channels
std::map<ChannelId_t, Intial_t> m_initials;
......