Merge pull request #71 from epics-base/pvaClientMultiChannel_changes
Pva client multi channel changes
This commit is contained in:
@@ -2,6 +2,15 @@
|
||||
|
||||
This document summarizes the changes to the module between releases.
|
||||
|
||||
## Release 4.8.0 (EPICS 7.0.4.* March 2021
|
||||
|
||||
* PvaClientNTMultiData::getChannelChangeFlags is a new method. It fixes issue #66.
|
||||
* Fix for issue #68. Both PvaClientArray and PvaClientField are not longer present. Neither was previously implemented.
|
||||
* Several public methods are now protected. They were never meant to be called by clients.
|
||||
* Issue #70 has been fixed.
|
||||
* Changes was made to increase the performance of pvaMultiChannel.
|
||||
* doxygen changes were made.
|
||||
|
||||
## Release 4.7.1 (EPICS 7.0.3.2 May 2020)
|
||||
|
||||
* support access to a union field that is a scalar or scalarArray
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
NOT FOR DIRECT USE
|
||||
==================
|
||||
|
||||
This directory holds files that are used by doxygen.
|
||||
The files are not meant to be read except via the doxygen documention.
|
||||
@@ -1,146 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClient</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClient</h1>
|
||||
|
||||
|
||||
<h2>Overview</h2>
|
||||
<p>
|
||||
pvaClient is a synchronous wrapper for the pvAccess API, which is a callback based API.
|
||||
Thus it is easier to use than pvAccess itself.
|
||||
In addition pvaClient provides many convenience methods.
|
||||
</p>
|
||||
<p>
|
||||
Class <b>PvaClient</b> is a class that is used by all the other pvaClient classes.
|
||||
An application that uses pvaClient must call:</p>
|
||||
<pre>
|
||||
PvaClientPtr pvaClient = PvaClient::get(providers);
|
||||
</pre>
|
||||
<p>
|
||||
before it uses any other pvaClient classes.
|
||||
</p>
|
||||
<p>
|
||||
This is a singleton method, i. e. only one instance of PvaClient is created.
|
||||
</p>
|
||||
<p>
|
||||
<b>pvaClient</b> must not be deleted until the client no longer wants to use any part
|
||||
of pvaClient.
|
||||
</p>
|
||||
<p>
|
||||
<b>providers</b> is a blank separated set of provider names.
|
||||
For example:</p>
|
||||
<pre>
|
||||
PvaClientPtr pvaClient = PvaClient::get("ca pva");
|
||||
</pre>
|
||||
<p>
|
||||
The providers <b>ca</b> and <b>pva</b> are special.
|
||||
For each of these a client context is created when the <b>PvaClient</b>
|
||||
is constructed and the context destroyed when <b>PvaClient</b> is deleted.
|
||||
</p>
|
||||
<h2>Channel Caching</h2>
|
||||
<p>
|
||||
<b>PvaClient</b> has a method:
|
||||
</p>
|
||||
<pre>
|
||||
PvaClientChannelPtr channel(
|
||||
string const & channelName,
|
||||
string const &providerName = "pva",
|
||||
double timeOut = 5.0);
|
||||
</pre>
|
||||
<p>
|
||||
This method creates a
|
||||
<b>PvaClientChannel</b> and then connects to the channel.
|
||||
</p>
|
||||
<p>
|
||||
If a call is successful then multiple calls to the same channelName and providerName
|
||||
share the same PvaClientChannel, i. e. the PvaClientChannel is cached.
|
||||
</p>
|
||||
<p>
|
||||
<b>pvaClientChannelGet</b> and <b>pvaClientChannelPut</b> also implement caching.
|
||||
</p>
|
||||
<p>
|
||||
For example consider a client that makes multiple calls like:
|
||||
</p>
|
||||
<pre>
|
||||
double value;
|
||||
value = pva->channel(channelName)->get()->getData()->getDouble();
|
||||
...
|
||||
value = pva->channel(channelName)->get()->getData()->getDouble();
|
||||
</pre>
|
||||
<p>
|
||||
Only the first call creates a new PvaClientChannel and a new PvaClientGet.
|
||||
The second call reuses the cached PvaClientChannel and PvaClientGet.
|
||||
</p>
|
||||
<h2>Non Cached Channels</h2>
|
||||
<p>
|
||||
<b>PvaClient</b> has a method:
|
||||
</p>
|
||||
<pre>
|
||||
PvaClientChannelPtr createChannel(
|
||||
string const & channelName,
|
||||
string const &providerName = "pva");
|
||||
</pre>
|
||||
<p>
|
||||
This method is just creates a new PvaClientChannel and returns it to the caller.
|
||||
The caller must call the PvaClientChannel connect methods.
|
||||
</p>
|
||||
|
||||
<h2>Blocking vs Non-Blocking Methods</h2>
|
||||
<p>Each component of pvaClient provides a set of blocking and non-blocking calls.
|
||||
For example several components (examples are <b>PvaClientChannel</b> and <b>PvaChannelGet</b>)
|
||||
have methods:</p>
|
||||
<dl>
|
||||
<dt>connect</dt>
|
||||
<dd>
|
||||
This calls issueConnect and then waitConnect.
|
||||
If waitConnect fails an exception is thrown.
|
||||
Since waitConnect is a blocking method so is this.
|
||||
</dd>
|
||||
<dt>issueConnect</dt>
|
||||
<dd>
|
||||
This is a request to connect, i. e. issue a request to the server to create something
|
||||
on the server. This is a non blocking call.
|
||||
</dd>
|
||||
<dt>waitConnect</dt>
|
||||
<dd>
|
||||
This waits for the server to respond to issueConnect.
|
||||
It blocks until the server responds or a timeout occurs.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientChannel</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientChannel</h1>
|
||||
|
||||
<h2>Overview</h2>
|
||||
<p>
|
||||
pvaClientChannel is a synchronous wrapper for the pvAccess::Channel API, which is a callback based API.
|
||||
Thus it is easier to use than pvAccess::Channel itself.
|
||||
</p>
|
||||
<p>An instance of <b>PvaClientChannel</b> connects to a single channel.
|
||||
An instance can only be created via class <b>PvaClient</b> which has both synchronous methods, which block, and non blocking methods.
|
||||
The synchrouous methods block until a connection is made to the channel and throw an exception if a
|
||||
timeout occurs while trying to make a connection.
|
||||
The non blocking methods leave connection to the caller.
|
||||
</p>
|
||||
<p><b>PvaClientChannel</b> has methods:</p>
|
||||
<dl>
|
||||
<dt>Connect to channel</dt>
|
||||
<dd>These can be called indirectly by a blocking request to <b>PvaClient</b>
|
||||
or by the client if a non blocking request is made to <b>PvaClient</b>.
|
||||
</dd>
|
||||
<dt>Channel state change requester</dt>
|
||||
<dd>The client can provide a callback that is called each time the connection state
|
||||
of the channel changes.
|
||||
</dd>
|
||||
<dt>Creating all of the following</dt>
|
||||
<dd>
|
||||
<pre>
|
||||
PvaClientField NOT IMPLEMENTED
|
||||
PvaClientProcess
|
||||
PvaClientGet
|
||||
PvaClientPut
|
||||
PvaClientPutGet
|
||||
PvaClientMonitor
|
||||
PvaClientArray NOT IMPLEMENTED
|
||||
PvaClientRPC
|
||||
</pre>
|
||||
</dd>
|
||||
</dl>
|
||||
<h2>Connect: Blocking vs Non-Blocking </h2>
|
||||
<p><b>PvaClientChannel</b> has methods:</p>
|
||||
<dl>
|
||||
<dt>connect</dt>
|
||||
<dd>
|
||||
This calls issueConnect and then waitConnect.
|
||||
If waitConnect fails an exception is thrown.
|
||||
Since waitConnect is a blocking method so is this.
|
||||
</dd>
|
||||
<dt>issueConnect</dt>
|
||||
<dd>
|
||||
This is a request to connect to the channel. This is a non blocking call.
|
||||
</dd>
|
||||
<dt>waitConnect</dt>
|
||||
<dd>
|
||||
This waits for the server to respond to issueConnect.
|
||||
It blocks until the server responds or a timeout occurs.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2>Get and Put Caching</h2>
|
||||
<p>
|
||||
<b>PvaClientChannel</b> has methods:
|
||||
</p>
|
||||
<pre>
|
||||
PvaClientGetPtr get(std::string const & request);
|
||||
PvaClientPutPtr put(std::string const & request);
|
||||
</pre>
|
||||
<p>
|
||||
Each of these caches.
|
||||
For example all calls to <b>get</b> with the same <b>request</b> will share the same
|
||||
<b>PvaChannelGet</b>
|
||||
</p>
|
||||
<p>
|
||||
For example consider a client that makes multiple calls like:
|
||||
</p>
|
||||
<pre>
|
||||
double value;
|
||||
value = pva->channel(channelName)->get()->getData()->getDouble();
|
||||
...
|
||||
value = pva->channel(channelName)->get()->getData()->getDouble();
|
||||
</pre>
|
||||
<p>
|
||||
Only the first call creates a new PvaClientChannel and a new PvaClientGet.
|
||||
The second call reuses the cached PvaClientChannel and PvaClientGet.
|
||||
</p>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientChannelStateChangeRequester</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientChannelStateChangeRequester</h1>
|
||||
|
||||
<p>This class has the single method <b>channelStateChange</b>.
|
||||
It is called each time the channel connection status changes.
|
||||
</p>
|
||||
<p>
|
||||
<b>NOTE:</b>
|
||||
The implementation must not call a method that blocks waiting for a response from the server.
|
||||
It it does the client may be blocked forever.
|
||||
</p>
|
||||
<p>
|
||||
An example of illegal code is:
|
||||
</p>
|
||||
<pre>
|
||||
virtual void channelStateChange(PvaClientChannelPtr const & channel, bool isConnected)
|
||||
{
|
||||
if(isConnected&&!pvaClientPut)
|
||||
{
|
||||
pvaClientPut = pvaClientChannel->createPut(request);
|
||||
pvaClientPut->connect();
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
<p>
|
||||
This is illegal because the call to <b>connect</b> blocks.
|
||||
</p>
|
||||
<p>The following is an example of legal code:
|
||||
</p>
|
||||
<pre>
|
||||
virtual void channelStateChange(PvaClientChannelPtr const & channel, bool isConnected)
|
||||
{
|
||||
if(isConnected&&!pvaClientPut)
|
||||
{
|
||||
pvaClientPut = pvaClientChannel->createPut(request);
|
||||
pvaClientPut->issueConnect();
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
<p>This is legal code because neither <b>createPut</b> or <b>issueConnect</b>
|
||||
blocks.
|
||||
</p>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientGet</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientGet</h1>
|
||||
|
||||
|
||||
<p>
|
||||
pvaClientGet is a synchronous wrapper for the pvAccess::ChannelGet API, which is a callback based API.
|
||||
Thus it is easier to use than pvAccess::ChannelGet itself.
|
||||
</p>
|
||||
<p>An instance of PvaClientGet is created via a call to one of the following:</p>
|
||||
<pre>
|
||||
class PvaClientChannel
|
||||
...
|
||||
{
|
||||
...
|
||||
PvaClientGetPtr get(std::string const & request = "field(value,alarm,timeStamp)");
|
||||
PvaClientGetPtr createGet(std::string const & request = "");
|
||||
PvaClientGetPtr createGet(epics::pvData::PVStructurePtr const & pvRequest);
|
||||
...
|
||||
};
|
||||
<p>An instance of <b>PvaClientGet</b> connects to a single channel.
|
||||
<b>PvaClientGet</b> has both synchronous methods, which block, and non blocking methods.
|
||||
</p>
|
||||
<p><b>PvaClientChannel</b> has methods:</p>
|
||||
<pre>
|
||||
connect Calls issueConnect and then waitConnect.
|
||||
issueConnect issues a request to the server to create the server side of ChannelPut.
|
||||
waitConnect blocks until server responds that it has created the ChannelPut.
|
||||
get Calls issueGet and then waitGet.
|
||||
issueGet issues a get request to the server.
|
||||
waitGet waits until the server send a message that the get is complete.
|
||||
getData get the data.
|
||||
</pre>
|
||||
<p>
|
||||
<b>issueConnect</b> and <b>issueGet</b> do not block.
|
||||
All other methods can block.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientGetData</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientGetData</h1>
|
||||
|
||||
<p>This class provides access to the data returned by calls to get data via <b>PvaChannelGet</b>
|
||||
It provides methods:</p>
|
||||
<pre>
|
||||
getStructure Get the introspection interface for data returned from server
|
||||
getPVStructure Get the complete set of data returned from the server.
|
||||
getChangedBitSet Get the bitSet that shows which fields have a new value since last get.
|
||||
showChanged Show all the fields that have changed value since the last get,
|
||||
getAlarm If a alarm field is available get it.
|
||||
getTimeStamp If a timeStamp field is available get it.
|
||||
hasValue Does the PVStructure have a top level field named value
|
||||
NOTE: The following only apply if hasValue is true.
|
||||
isValueScalar Is the value field a scalar?
|
||||
isValueScalarArray Is the value field a scalar array?
|
||||
getValue Get the value field.
|
||||
getScalarValue Get a scalar value field.
|
||||
getArrayValue Get an array value field.
|
||||
getScalarArrayValue Get a scalar array value field.
|
||||
getDouble Get scalar value field as a double.
|
||||
getString Get value field as a string.
|
||||
getDoubleArray Get value field as a double array.
|
||||
getStringArray Get value field as a string array.
|
||||
</pre>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientGetRequester</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientGetRequester</h1>
|
||||
|
||||
<p>This is a virtual class that can be implemented by a client that uses <b>PvaClientGet</b>.
|
||||
It has the methods:</p>
|
||||
<pre>
|
||||
virtual void channelGetConnect(
|
||||
const Status& status,
|
||||
PvaClientGetPtr const & clientGet) {}
|
||||
virtual void getDone(
|
||||
const Status& status,
|
||||
PvaClientGetPtr const & clientGet) = 0;
|
||||
</pre>
|
||||
|
||||
<p>The client must call</p>
|
||||
<pre>
|
||||
pvaClientGet->setRequester(shared_from_this());
|
||||
</pre>
|
||||
<p>
|
||||
after creating an instance of PvaClientGet.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,106 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientMonitor</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientMonitor</h1>
|
||||
<p>
|
||||
<b>NOTE:</b> This is a work in progress.
|
||||
</p>
|
||||
<h2>Overview</h2>
|
||||
<p>
|
||||
This provides an easier way to create a monitor on a channel than to use pvAccessCPP itself.
|
||||
It provides two main ways to create a monitor:
|
||||
</p>
|
||||
<h3>The client first creates a PvaClientMonitorChannel and then creates a monitor</h3>
|
||||
The client calls:
|
||||
<pre>
|
||||
static PvaClientMonitorPtr create(
|
||||
PvaClientMonitorPtr const &PvaClientMonitor,
|
||||
PvaClientMonitorChannelPtr const & PvaClientMonitorChannel,
|
||||
epics::pvData::PVStructurePtr const &pvRequest
|
||||
);
|
||||
|
||||
where
|
||||
|
||||
PvaClientMonitor
|
||||
The PvaClientMonitor.
|
||||
|
||||
PvaClientMonitorChannel
|
||||
The PvaClientMonitorChannel that has already been created by the client.
|
||||
|
||||
pvRequest
|
||||
The pvRequest for creating the monitor.
|
||||
</pre>
|
||||
With this method the monitor is created and started.
|
||||
This method blocks while the monitor is created.
|
||||
<h3>The client provides names for a channel and a provider</h3>
|
||||
The client calls:
|
||||
<pre>
|
||||
static PvaClientMonitorPtr create(
|
||||
PvaClientMonitorPtr const &PvaClientMonitor,
|
||||
std::string const & channelName,
|
||||
std::string const & providerName,
|
||||
std::string const & request,
|
||||
PvaClientMonitorChannelStateChangeRequesterPtr const & stateChangeRequester,
|
||||
PvaClientMonitorRequesterPtr const & monitorRequester
|
||||
);
|
||||
|
||||
where
|
||||
|
||||
PvaClientMonitor
|
||||
The PvaClientMonitor.
|
||||
|
||||
channelName
|
||||
The name of the channel.
|
||||
|
||||
providerName
|
||||
The name of the provider
|
||||
|
||||
request
|
||||
The request for creating the monitor
|
||||
|
||||
stateChangeRequester
|
||||
The client supplied state change requester.
|
||||
This will be called each time a state change for the channel occurs.
|
||||
|
||||
monitorRequester
|
||||
The client supplied monitor requester.
|
||||
This is called each time a new monitor event is available.
|
||||
</pre>
|
||||
With this method a pvaChannel is created and after it connects a pvaMonitor is created and started.
|
||||
This method never blocks.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientMonitorData</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientMonitorData</h1>
|
||||
|
||||
|
||||
<p>This class provides access to the data returned by calls to get data via <b>PvaChannelGet</b>
|
||||
It provides methods:</p>
|
||||
<pre>
|
||||
getStructure Get the introspection interface for data returned from server
|
||||
getPVStructure Get the complete set of data returned from the server.
|
||||
getChangedBitSet Get the bitSet that shows which fields have a new value since last monitor event.
|
||||
getOverrunBitSet Get the bitSet that shows which fields have changed more than once since last monitor event.
|
||||
showChanged Show all the fields that have changed value since the last monitor event,
|
||||
showChanged Show all the fields that have changed value more than once since last monitor event.
|
||||
getAlarm If a alarm field is available get it.
|
||||
getTimeStamp If a timeStamp field is available get it.
|
||||
hasValue Does the PVStructure have a top level field named value
|
||||
NOTE: The following only apply if hasValue is true.
|
||||
isValueScalar Is the value field a scalar?
|
||||
isValueScalarArray Is the value field a scalar array?
|
||||
getValue Get the value field.
|
||||
getScalarValue Get a scalar value field.
|
||||
getArrayValue Get an array value field.
|
||||
getScalarArrayValue Get a scalar array value field.
|
||||
getDouble Get scalar value field as a double.
|
||||
getString Get value field as a string.
|
||||
getDoubleArray Get value field as a double array.
|
||||
getStringArray Get value field as a string array.
|
||||
</pre>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientMonitorRequester</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientMonitorRequester</h1>
|
||||
|
||||
<p>This is a virtual class that can be implemented by a client that uses <b>PvaClientMonitor</b>.
|
||||
It has the methods:</p>
|
||||
<pre>
|
||||
virtual void monitorConnect(
|
||||
const Status& status,
|
||||
PvaClientMonitorPtr const & clientMonitor,
|
||||
StructureConstPtr const & structure) {}
|
||||
virtual void event(
|
||||
PvaClientMonitor const & clientGet) = 0;
|
||||
virtual void unlisten()
|
||||
{
|
||||
std::cerr << "PvaClientMonitorRequester::unlisten called"
|
||||
<< " but no PvaClientMonitorRequester::unlisten\n";
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>The client must call</p>
|
||||
<pre>
|
||||
pvaClientMonitor->setRequester(shared_from_this());
|
||||
</pre>
|
||||
<p>
|
||||
after creating an instance of PvaClientMonitor.
|
||||
</p>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientProcess</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientProcess</h1>
|
||||
|
||||
<p>
|
||||
pvaClientProcess is a synchronous wrapper for the pvAccess::ChannelProcess API, which is a callback based API.
|
||||
Thus it is easier to use than pvAccess::ChannelProcess itself.
|
||||
</p>
|
||||
<p>An instance of PvaClientProcess is created via a call to one of the followimg:</p>
|
||||
<pre>
|
||||
class PvaClientChannel
|
||||
...
|
||||
{
|
||||
...
|
||||
PvaClientProcessPtr createProcess(std::string const & request = "");
|
||||
PvaClientProcessPtr createProcess(epics::pvData::PVStructurePtr const & pvRequest);
|
||||
...
|
||||
};
|
||||
<p>An instance of <b>PvaClientProcess</b> connects to a single channel.
|
||||
<b>PvaClientProcess</b> has both synchronous methods, which block, and non blocking methods.
|
||||
</p>
|
||||
<p><b>PvaClientChannel</b> has methods:</p>
|
||||
<pre>
|
||||
connect Calls issueConnect and then waitConnect.
|
||||
issueConnect issues a request to the server to create the server side of ChannelPut.
|
||||
waitConnect blocks until server responds that it has created the ChannelPut.
|
||||
process Calls issueProcess and then waitProcess.
|
||||
issueProcess issues a process request to the server.
|
||||
waitProcess waits until the server send a message that the process is complete.
|
||||
</pre>
|
||||
<p>
|
||||
<b>issueConnect</b> and <b>issueProcess</b> do not block.
|
||||
All other methods can block.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientChannelPut</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientChannelPut</h1>s
|
||||
|
||||
<p>
|
||||
pvaClientPut is a synchronous wrapper for the pvAccess::ChannelPut API, which is a callback based API.
|
||||
Thus it is easier to use than pvAccess::ChannelPut itself.
|
||||
</p>
|
||||
<p>
|
||||
<b>NOTE:</b>
|
||||
Except for union fields pvaClientPut takes care of modifying the bitSet associated with
|
||||
the data sent to the server.
|
||||
</p>
|
||||
<p>An instance of PvaClientPut is created via a call to one of the followimg:</p>
|
||||
<pre>
|
||||
class PvaClientChannel
|
||||
...
|
||||
{
|
||||
...
|
||||
PvaClientPutPtr put(std::string const & request = "field(value,alarm,timeStamp)");
|
||||
PvaClientPutPtr createPut(std::string const & request = "");
|
||||
PvaClientPutPtr createPut(epics::pvData::PVStructurePtr const & pvRequest);
|
||||
...
|
||||
};
|
||||
<p>An instance of <b>PvaClientPut/b> connects to a single channel.
|
||||
<b>PvaClientPut</b> has both synchronous methods, which block, and non blocking methods.
|
||||
</p>
|
||||
<p><b>PvaClientPut</b> has methods:</p>
|
||||
<pre>
|
||||
connect Calls issueConnect and then waitConnect.
|
||||
issueConnect issues a request to the server to create the server side of ChannelPut.
|
||||
waitConnect blocks until server responds that it has created the ChannelPut.
|
||||
get Calls issueGet and then waitGet.
|
||||
issueGet issues a request to the server to get the latest data.
|
||||
waitGet waits until the server send a message that the get is complete.
|
||||
put Calls issuePut and then waitPut.
|
||||
issuePut issues a put request to the server.
|
||||
waitPut waits until the server send a message that the put is complete.
|
||||
getData get the data.
|
||||
</pre>
|
||||
<p>
|
||||
Note that <b>issueConnect</b>, <b>issueGet</b> and <b>issuePut</b> do not block but all other methods
|
||||
do block.
|
||||
</p>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientPutData</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientPutData</h1>
|
||||
|
||||
<p>This class provides access to data to send to the server via a <b>PvaChannelPut</b>
|
||||
It is created by <b>PvaChannelPut</b> or <b>PvaChannelPutGet</b>.
|
||||
This the client only gets access to an instance by getting it from <b>PvaChannelPut</b> or <b>PvaChannelPutGet</b>.
|
||||
<p>
|
||||
<p>Note also that for all field types except <b>union</b> the <b>BitSet</b> for the data is updated
|
||||
by <b>PvaChannelPut</b> or <b>PvaChannelPutGet</b> whenever the client changes a field.
|
||||
For a <b>union</b> or <b>unionArray</b> field the client must update the <b>BitSet</b>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
PvaClientPutData provides methods:</p>
|
||||
<pre>
|
||||
getStructure Get the introspection interface for data sent to server
|
||||
getPVStructure Get the complete set of data sent to the server.
|
||||
getChangedBitSet Get the bitSet that shows which fields have a new value since last get.
|
||||
showChanged Show all the fields that have changed value since the last get,
|
||||
getAlarm If a alarm field is available get it.
|
||||
getTimeStamp If a timeStamp field is available get it.
|
||||
hasValue Does the PVStructure have a top level field named value
|
||||
NOTE: The following only apply if hasValue is true.
|
||||
isValueScalar Is the value field a scalar?
|
||||
isValueScalarArray Is the value field a scalar array?
|
||||
getValue Get the value field.
|
||||
getScalarValue Get a scalar value field.
|
||||
getArrayValue Get an array value field.
|
||||
getScalarArrayValue Get a scalar array value field.
|
||||
getDouble Get scalar value field as a double.
|
||||
getString Get value field as a string.
|
||||
getDoubleArray Get value field as a double array.
|
||||
getStringArray Get value field as a string array.
|
||||
putDouble Put scalar value field as a double.
|
||||
putString Put value field as a string.
|
||||
putDoubleArray Put value field as a double array.
|
||||
putStringArray Put value field as a string array.
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientPutGetGet</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientPutGetGet</h1>
|
||||
|
||||
<p>
|
||||
pvaClientPutGet is a synchronous wrapper for the pvAccess::ChannelPutGet API, which is a callback based API.
|
||||
Thus it is easier to use than pvAccess::ChannelPut itself.
|
||||
</p>
|
||||
<p>
|
||||
<b>NOTE:</b>
|
||||
Except for union fields pvaClientPutGet takes care of modifying the bitSet associated with
|
||||
the data sent to the server.
|
||||
</p>
|
||||
<p>An instance of PvaClientPutGet is created via a call to one of the followimg:</p>
|
||||
<pre>
|
||||
class PvaClientChannel
|
||||
...
|
||||
{
|
||||
...
|
||||
PvaClientPutGetPtr createPutGet(std::string const & request);
|
||||
PvaClientPutGetPtr createPutGet(epics::pvData::PVStructurePtr const & pvRequest);
|
||||
...
|
||||
};
|
||||
<p>An instance of <b>PvaClientPutGet</b> connects to a single channel.
|
||||
<b>PvaClientPutGet</b> has both synchronous methods, which block, and non blocking methods.
|
||||
</p>
|
||||
<p><b>PvaClientPutGet</b> has methods:</p>
|
||||
<pre>
|
||||
connect calls issueConnect and then waitConnect.
|
||||
issueConnect issues a request to the server to create the server side of ChannelPut.
|
||||
waitConnect blocks until server responds that it has created the ChannelPut.
|
||||
putGet call issuePutGet and then waitPutGet.
|
||||
issuePutGet issue a putGet and return immediately.
|
||||
waitPutGet wait until putGet completes.
|
||||
getGet calls issueGetGet and then waitGetGet.
|
||||
issueGetGet issues a request to the server to get the latest data for the get data.
|
||||
waitGetGet waits until the server send a message that the getGet is complete.
|
||||
getPut calls issueGetPut and then waitGetPut.
|
||||
issueGetPut issues a request to the server to get the latest data for the put data.
|
||||
waitGetPut waits until the server send a message that the getPut is complete.
|
||||
getPutData get the put portion of the data.
|
||||
getGetData get the get portion of the data.
|
||||
</pre>
|
||||
<p>
|
||||
<b>issueConnect</b>, <b>issuePutGet</b>, <b>issueGetGet</b> and <b>issueGetPut</b> do not block.
|
||||
All other methods can block.
|
||||
</p>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientPutGetRequester</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientPutGetRequester</h1>
|
||||
|
||||
<p>This is a virtual class that can be implemented by a client that uses <b>PvaClientPut</b>.
|
||||
It has the methods:</p>
|
||||
<pre>
|
||||
virtual void channelPutGetConnect(
|
||||
const Status& status,
|
||||
PvaClientPutGetPtr const & clientPutGet) {}
|
||||
virtual void putGetDone(
|
||||
const Status& status,
|
||||
PvaClientPutGetPtr const & clientPutGet) {}
|
||||
virtual void getPutDone(
|
||||
const Status& status,
|
||||
PvaClientPutGetPtr const & clientPutGet) = 0;
|
||||
virtual void getGetDone(
|
||||
const Status& status,
|
||||
PvaClientPutGetPtr const & clientPutGet) = 0;
|
||||
</pre>
|
||||
|
||||
<p>The client must call</p>
|
||||
<pre>
|
||||
pvaClientPutGet->setRequester(shared_from_this());
|
||||
</pre>
|
||||
<p>
|
||||
after creating an instance of PvaClientPutGet.
|
||||
</p>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientPutRequester</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientPutRequester</h1>
|
||||
|
||||
<p>This is a virtual class that can be implemented by a client that uses <b>PvaClientPut</b>.
|
||||
It has the methods:</p>
|
||||
<pre>
|
||||
virtual void channelPutConnect(
|
||||
const Status& status,
|
||||
PvaClientPutPtr const & clientPut) {}
|
||||
virtual void getDone(
|
||||
const Status& status,
|
||||
PvaClientPutPtr const & clientPut) {}
|
||||
virtual void putDone(
|
||||
const Status& status,
|
||||
PvaClientPutPtr const & clientPut) = 0;
|
||||
</pre>
|
||||
|
||||
<p>The client must call</p>
|
||||
<pre>
|
||||
pvaClientPut->setRequester(shared_from_this());
|
||||
</pre>
|
||||
<p>
|
||||
after creating an instance of PvaClientPut.
|
||||
</p>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientRPC</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientRPC</h1>
|
||||
|
||||
<p>
|
||||
<b>Not Yet Written</b>
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>PvaClientRPCRequester</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/base.css" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="http://epics-pvdata.sourceforge.net/epicsv4.css" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
.about { margin-left: 3em; margin-right: 3em; font-size: .83em}
|
||||
table { margin-left: auto; margin-right: auto }
|
||||
.diagram { text-align: center; margin: 2.5em 0 }
|
||||
span.opt { color: grey }
|
||||
span.nterm { font-style:italic }
|
||||
span.term { font-family:courier }
|
||||
span.user { font-family:courier }
|
||||
span.user:before { content:"<" }
|
||||
span.user:after { content:">" }
|
||||
.nonnorm { font-style:italic }
|
||||
p.ed { color: #AA0000 }
|
||||
span.ed { color: #AA0000 }
|
||||
p.ed.priv { display: inline; }
|
||||
span.ed.priv { display: inline; }
|
||||
/*]]>*/</style>
|
||||
<!-- Script that generates the Table of Contents -->
|
||||
<script type="text/javascript"
|
||||
src="http://epics-pvdata.sourceforge.net/script/tocgen.js">
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>PvaClientRPCRequester</h1>
|
||||
|
||||
<p>
|
||||
<b>Not Yet Written</b>
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
<div class="head">
|
||||
<h1>EPICS pvaClientCPP</h1>
|
||||
<h2 class="nocount">Release 4.4 - April 2019</h2>
|
||||
<h2 class="nocount">Release 4.8 - March 2021</h2>
|
||||
|
||||
<h2 class="nocount">Abstract</h2>
|
||||
|
||||
@@ -66,9 +66,16 @@ The data for the channels is presented via normative type NTMultiChannel.
|
||||
<hr />
|
||||
<h2>Overview</h2>
|
||||
<p>
|
||||
Documentation for pvaClientCPP is available at:
|
||||
<a
|
||||
href="https://mrkraimer.github.io/website/developerGuide/pvaClient/pvaClientCPP.html">
|
||||
pvaClient
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
pvaClientCPP is one of the components of
|
||||
<a href="http://epics-pvdata.sourceforge.net">
|
||||
EPICS Version 4
|
||||
<a href="https://epics-controls.org/resources-and-support/base/epics-7/">
|
||||
EPICS-7
|
||||
</a>
|
||||
</p>
|
||||
<p>This document is only a guide to help locate code and documentation related to pvaClientCPP
|
||||
|
||||
Reference in New Issue
Block a user