diff --git a/README.md b/README.md index d664352..d64a0fa 100644 --- a/README.md +++ b/README.md @@ -21,29 +21,3 @@ It can also be built by: edit configure/RELEASE.local make - -Examples ------------- - -Project exampleCPP has examples for pvaClientCPP - -Status ------- - -* The API is for EPICS Version 4 release 4.6.0 -* Everything defined in pvaClient.h is ready but see below for remaining work. -* Everything defined in pvaClientMultiChannel.h is ready but see below for remaining work. - - -pvaClientChannel ---------------- - -Channel::getField and channelArray are not supported for release 4.6 - -pvaClientMultiChannel ---------------- - -For release 4.5 support is available for multiDouble and NTMultiChannel. -In the future additional support should be provided that at least includes NTScalarMultiChannel. - -Testing with some channels not connected has not been done. diff --git a/documentation/RELEASE_NOTES.md b/documentation/RELEASE_NOTES.md index 5d0aa9d..0070a25 100644 --- a/documentation/RELEASE_NOTES.md +++ b/documentation/RELEASE_NOTES.md @@ -1,6 +1,16 @@ EPICS V4 release 4.7 ==================== +Works with release/7.0 of pvDataCPP and release/6.0 of pvAccessCPP +------------------------------------------------------------------ + +Will not work with older versions. + +destroy methods removed +----------------------- + +All the destroy methods are removed since implementation is RAII compliant.s + API changes to PvaClientMonitor ------------------------------- @@ -31,11 +41,6 @@ A new method is also implemented PvaClientMonitorRequesterPtr const & monitorRequester ); -Works with release/6.0 of pvAccessCPP --------------------------------------- - -Not sure this will work with older versions of pvAccessCPP. - EPICS V4 release 4.6 ==================== diff --git a/documentation/htmldoxygen/pvaClient.html b/documentation/htmldoxygen/pvaClient.html index 85a9ed3..315f718 100644 --- a/documentation/htmldoxygen/pvaClient.html +++ b/documentation/htmldoxygen/pvaClient.html @@ -117,6 +117,29 @@ This method is just creates a new PvaClientChannel and returns it to the caller. The caller must call the PvaClientChannel connect methods.

+

Blocking vs Non-Blocking Methods

+

Each component of pvaClient provides a set of blocking and non-blocking calls. +For example several components (examples are PvaClientChannel and PvaChannelGet) +have methods:

+
+
connect
+
+ This calls issueConnect and then waitConnect. + If waitConnect fails an exception is thrown. + Since waitConnect is a blocking method so is this. +
+
issueConnect
+
+ 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. +
+
waitConnect
+
+ This waits for the server to respond to issueConnect. + It blocks until the server responds or a timeout occurs. +
+
+ diff --git a/documentation/htmldoxygen/pvaClientChannel.html b/documentation/htmldoxygen/pvaClientChannel.html index 8ba227e..671b115 100644 --- a/documentation/htmldoxygen/pvaClientChannel.html +++ b/documentation/htmldoxygen/pvaClientChannel.html @@ -35,9 +35,88 @@

PvaClientChannel

+

Overview

-Not Yet Written +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.

+

An instance of PvaClientChannel connects to a single channel. +An instance can only be created via class PvaClient 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. +

+

PvaClientChannel has methods:

+
+
Connect to channel
+
These can be called indirectly by a blocking request to PvaClient + or by the client if a non blocking request is made to PvaClient. +
+
Channel state change requester
+
The client can provide a callback that is called each time the connection state + of the channel changes. +
+
Creating all of the following
+
+
+PvaClientField      NOT IMPLEMENTED
+PvaClientProcess
+PvaClientGet
+PvaClientPut
+PvaClientPutGet
+PvaClientMonitor
+PvaClientArray      NOT IMPLEMENTED
+PvaClientRPC
+
+
+
+

Connect: Blocking vs Non-Blocking

+

PvaClientChannel has methods:

+
+
connect
+
+ This calls issueConnect and then waitConnect. + If waitConnect fails an exception is thrown. + Since waitConnect is a blocking method so is this. +
+
issueConnect
+
+ This is a request to connect to the channel. This is a non blocking call. +
+
waitConnect
+
+ This waits for the server to respond to issueConnect. + It blocks until the server responds or a timeout occurs. +
+
+ +

Get and Put Caching

+

+PvaClientChannel has methods: +

+
+PvaClientGetPtr get(std::string const & request);
+PvaClientPutPtr put(std::string const & request);
+
+

+Each of these caches. +For example all calls to get with the same request will share the same +PvaChannelGet +

+

+For example consider a client that makes multiple calls like: +

+
+double value;
+value =  pva->channel(channelName)->get()->getData()->getDouble();
+...
+value =  pva->channel(channelName)->get()->getData()->getDouble();
+
+

+Only the first call creates a new PvaClientChannel and a new PvaClientGet. +The second call reuses the cached PvaClientChannel and PvaClientGet. +

+ diff --git a/documentation/htmldoxygen/pvaClientChannelProcess.html b/documentation/htmldoxygen/pvaClientChannelProcess.html deleted file mode 100644 index 70dda71..0000000 --- a/documentation/htmldoxygen/pvaClientChannelProcess.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - PvaClientProcess - - - - - - - - -

PvaClientProcess

- -

-Not Yet Written -

- - - - diff --git a/documentation/htmldoxygen/pvaClientChannelPut.html b/documentation/htmldoxygen/pvaClientChannelPut.html deleted file mode 100644 index 882887a..0000000 --- a/documentation/htmldoxygen/pvaClientChannelPut.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - PvaClientChannelPut - - - - - - - - -

PvaClientChannelPut

- -

-Not Yet Written -

- - - - diff --git a/documentation/htmldoxygen/pvaClientChannelPutGet.html b/documentation/htmldoxygen/pvaClientChannelPutGet.html deleted file mode 100644 index e8d6aec..0000000 --- a/documentation/htmldoxygen/pvaClientChannelPutGet.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - PvaClientPutGet - - - - - - - - -

PvaClientPutGet

- -

-Not Yet Written -

- - - - diff --git a/documentation/htmldoxygen/pvaClientChannelStateChangeRequester.html b/documentation/htmldoxygen/pvaClientChannelStateChangeRequester.html index 48d0ae6..6513646 100644 --- a/documentation/htmldoxygen/pvaClientChannelStateChangeRequester.html +++ b/documentation/htmldoxygen/pvaClientChannelStateChangeRequester.html @@ -35,9 +35,46 @@

PvaClientChannelStateChangeRequester

-

-Not Yet Written +

This class has the single method channelStateChange. +It is called each time the channel connection status changes.

+

+NOTE: +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. +

+

+An example of illegal code is: +

+
+virtual void channelStateChange(PvaClientChannelPtr const & channel, bool isConnected)
+{
+    if(isConnected&&!pvaClientPut)
+    {
+       pvaClientPut  = pvaClientChannel->createPut(request);
+       pvaClientPut->connect();
+    }
+}
+
+

+This is illegal because the call to connect blocks. +

+

The following is an example of legal code: +

+
+virtual void channelStateChange(PvaClientChannelPtr const & channel, bool isConnected)
+{
+    if(isConnected&&!pvaClientPut)
+    {
+       pvaClientPut  = pvaClientChannel->createPut(request);
+       pvaClientPut->issueConnect();
+    }
+}
+
+

This is legal code because neither createPut or issueConnect +blocks. +

+ diff --git a/documentation/htmldoxygen/pvaClientChannelGet.html b/documentation/htmldoxygen/pvaClientGet.html similarity index 51% rename from documentation/htmldoxygen/pvaClientChannelGet.html rename to documentation/htmldoxygen/pvaClientGet.html index cab66cb..12984d6 100644 --- a/documentation/htmldoxygen/pvaClientChannelGet.html +++ b/documentation/htmldoxygen/pvaClientGet.html @@ -35,8 +35,38 @@

PvaClientGet

+

-Not Yet Written +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. +

+

An instance of PvaClientGet is created via a call to one of the followimg:

+
+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);
+...
+};
+

An instance of PvaClientGet/b> connects to a single channel. +PvaClientGet has both synchronous methods, which block, and non blocking methods. +

+

PvaClientChannel has methods:

+
+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.
+
+

+Note that issueConnect and issueGet do not block but all other methods +do block.

diff --git a/documentation/htmldoxygen/pvaClientGetData.html b/documentation/htmldoxygen/pvaClientGetData.html index 06ac804..e0926d7 100644 --- a/documentation/htmldoxygen/pvaClientGetData.html +++ b/documentation/htmldoxygen/pvaClientGetData.html @@ -35,9 +35,28 @@

PvaClientGetData

-

-Not Yet Written -

+

This class provides access to the data returned by calls to get data via PvaChannelGet +It provides methods:

+
+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 it 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.
+
diff --git a/documentation/htmldoxygen/pvaClientMonitorData.html b/documentation/htmldoxygen/pvaClientMonitorData.html index 0d8b29b..7ce7710 100644 --- a/documentation/htmldoxygen/pvaClientMonitorData.html +++ b/documentation/htmldoxygen/pvaClientMonitorData.html @@ -4,7 +4,7 @@ - PvaClientMonitotData + PvaClientMonitorData -

PvaClientMonitotData

+

PvaClientMonitorData

-

-Not Yet Written -

+ +

This class provides access to the data returned by calls to get data via PvaChannelGet +It provides methods:

+
+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 it 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.
+
diff --git a/documentation/htmldoxygen/pvaClientProcess.html b/documentation/htmldoxygen/pvaClientProcess.html index 70dda71..9b944f1 100644 --- a/documentation/htmldoxygen/pvaClientProcess.html +++ b/documentation/htmldoxygen/pvaClientProcess.html @@ -36,7 +36,34 @@

PvaClientProcess

-Not Yet Written +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. +

+

An instance of PvaClientProcess is created via a call to one of the followimg:

+
+class PvaClientChannel
+...
+{
+...
+    PvaClientProcessPtr createProcess(std::string const & request = "");
+    PvaClientProcessPtr createProcess(epics::pvData::PVStructurePtr const &  pvRequest);
+...
+};
+

An instance of PvaClientProcess/b> connects to a single channel. +PvaClientProcess has both synchronous methods, which block, and non blocking methods. +

+

PvaClientChannel has methods:

+
+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.
+
+

+Note that issueConnect and issueProcess do not block but all other methods +do block.

diff --git a/documentation/htmldoxygen/pvaClientPut.html b/documentation/htmldoxygen/pvaClientPut.html new file mode 100644 index 0000000..7fef373 --- /dev/null +++ b/documentation/htmldoxygen/pvaClientPut.html @@ -0,0 +1,82 @@ + + + + + + PvaClientChannelPut + + + + + + + + +

PvaClientChannelPut

s + +

+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. +

+

+NOTE: +Except for union fields pvaClientPut takes care of modifying the bitSet associated with +the data sent to the server. +

+

An instance of PvaClientPut is created via a call to one of the followimg:

+
+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);
+...
+};
+

An instance of PvaClientPut/b> connects to a single channel. +PvaClientPut has both synchronous methods, which block, and non blocking methods. +

+

PvaClientPut has methods:

+
+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.
+
+

+Note that issueConnect, issueGet and issuePut do not block but all other methods +do block. +

+ + + + + diff --git a/documentation/htmldoxygen/pvaClientPutData.html b/documentation/htmldoxygen/pvaClientPutData.html index c51d21c..c4e2869 100644 --- a/documentation/htmldoxygen/pvaClientPutData.html +++ b/documentation/htmldoxygen/pvaClientPutData.html @@ -35,10 +35,41 @@

PvaClientPutData

+

This class provides access to data to send to the server via a PvaChannelPut +It is created by PvaChannelPut or PvaChannelPutGet. +This the client only gets access to an instance by getting it from PvaChannelPut or PvaChannelPutGet.

-Not Yet Written +

Note also that for all field types except union the BitSet for the data is updated +by PvaChannelPut or PvaChannelPutGet whenever the client changes a field. +For a union or unionArray field the client must update the BitSet.

+

+PvaClientPutData provides methods:

+
+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 it 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.
+
diff --git a/documentation/htmldoxygen/pvaClientPutGet.html b/documentation/htmldoxygen/pvaClientPutGet.html new file mode 100644 index 0000000..d0d11d8 --- /dev/null +++ b/documentation/htmldoxygen/pvaClientPutGet.html @@ -0,0 +1,84 @@ + + + + + + PvaClientPutGetGet + + + + + + + + +

PvaClientPutGetGet

+ +

+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. +

+

+NOTE: +Except for union fields pvaClientPutGet takes care of modifying the bitSet associated with +the data sent to the server. +

+

An instance of PvaClientPutGet is created via a call to one of the followimg:

+
+class PvaClientChannel
+...
+{
+...
+    PvaClientPutGetPtr createPutGet(std::string const & request);
+    PvaClientPutGetPtr createPutGet(epics::pvData::PVStructurePtr const &  pvRequest);
+...
+};
+

An instance of PvaClientPutGet/b> connects to a single channel. +PvaClientPutGet has both synchronous methods, which block, and non blocking methods. +

+

PvaClientPutGet has methods:

+
+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.
+
+

+Note that issueConnect, issuePutGet, issueGetGet and issueGetPut do not block but all other methods block. +

+ + + + + diff --git a/src/pv/pvaClient.h b/src/pv/pvaClient.h index ef12d31..f332019 100644 --- a/src/pv/pvaClient.h +++ b/src/pv/pvaClient.h @@ -187,7 +187,7 @@ typedef std::tr1::shared_ptr PvaClientPutCachePtr; /** * @brief A callback for change in connection status. * - * Overview of PvaClientChannelStateChangeRequesterOverview of PvaClientChannelStateChangeRequester * */ class PvaClientChannelStateChangeRequester @@ -200,6 +200,8 @@ public: virtual ~PvaClientChannelStateChangeRequester(){} /** * @brief A channel connection state change has occurred. + * + * Warning A call to a method that blocks should not be made by this method. * @param channel The channel. * @param isConnected The new connection status. */ @@ -222,12 +224,18 @@ public: * @brief Destructor */ ~PvaClientChannel(); + /** @brief Set a client stateChangeRequester. + * + * @param stateChangeRequester The client stateChangeRequester implementation. + */ void setStateChangeRequester(PvaClientChannelStateChangeRequesterPtr const &stateChangeRequester); /** @brief Get the name of the channel to which PvaClientChannel is connected. + * * @return The channel name. */ std::string getChannelName(); /** @brief Get the the channel to which PvaClientChannel is connected. + * * @return The channel interface. */ epics::pvAccess::Channel::shared_pointer getChannel(); @@ -239,50 +247,53 @@ public: */ void connect(double timeout=5.0); /** @brief Issue a connect request and return immediately. + * */ void issueConnect(); /** @brief Wait until the connection completes or for timeout. + * * @param timeout The time in seconds to wait. A value of 0 means forever. * @return status. - * @throw runtime_error if failure. */ epics::pvData::Status waitConnect(double timeout = 5.0); /** @brief Create a PvaClientField for the specified subField. + * * @param subField The desired subField, i. e. "field.field...." * An empty string, i. e. "", asks for the entire top level struture as defined by the server. * @return The interface. */ PvaClientFieldPtr createField(std::string const & subField = ""); /** @brief First call createRequest as implemented by pvDataCPP and then call the next method. + * * @param request The syntax of request is defined by the copy facility of pvData. * @return The interface. * @throw runtime_error if failure. */ PvaClientProcessPtr createProcess(std::string const & request = ""); - /** Creates an PvaClientProcess. + /** Creates a PvaClientProcess. + * * @param pvRequest The syntax of pvRequest is defined by the copy facility of pvData. * @return The interface. * @throw runtime_error if failure. */ PvaClientProcessPtr createProcess(epics::pvData::PVStructurePtr const & pvRequest); - /** @brief Get a cached PvaClientGet or create and connect to a new PvaClientGet. + /** @brief create a PvaChannelGet * - * If connection can not be made an exception is thrown. - * @param request The syntax of request is defined by the copy facility of pvData. + * Get a cached PvaClientGet or create and connect to a new PvaClientGet. * @return The interface. * @throw runtime_error if failure. */ PvaClientGetPtr get(std::string const & request = "field(value,alarm,timeStamp)"); /** @brief create a PvaClientGet. * - * First call createRequest as implemented by pvDataJava and then call the next method. - * Then get a cached PvaClientGet or create and connect to a new PvaClientGet. + * First call createRequest as implemented by pvData and then call the next method. * @param request The syntax of request is defined by the copy facility of pvData. * @return The interface. * @throw runtime_error if failure. */ PvaClientGetPtr createGet(std::string const & request = "field(value,alarm,timeStamp)"); /** @brief Creates an PvaClientGet. + * * @param pvRequest The syntax of pvRequest is defined by the copy facility of pvData. * @return The interface. * @throw runtime_error if failure. @@ -290,8 +301,7 @@ public: PvaClientGetPtr createGet(epics::pvData::PVStructurePtr const & pvRequest); /** @brief create a PvaClientPut. * - * First call createRequest as implemented by pvDataJava. - * Then get a cached PvaClientPut or create and connect to a new PvaClientPut. + * Get a cached PvaClientPut or create and connect to a new PvaClientPut. * Then call it's get method. * @param request The syntax of request is defined by the copy facility of pvData. * @return The interface. @@ -307,6 +317,7 @@ public: */ PvaClientPutPtr createPut(std::string const & request = "field(value)"); /** @brief Create a PvaClientPut. + * * @param pvRequest The syntax of pvRequest is defined by the copy facility of pvData. * @return The interface. */ @@ -321,6 +332,7 @@ public: PvaClientPutGetPtr createPutGet( std::string const & request = "putField(argument)getField(result)"); /** @brief Create a PvaClientPutGet. + * * @param pvRequest The syntax of pvRequest is defined by the copy facility of pvData. * @return The interface. */ @@ -350,6 +362,7 @@ public: */ PvaClientMonitorPtr monitor(std::string const & request = "field(value,alarm,timeStamp)"); /** @brief Call the next method with request = "field(value,alarm,timeStamp)" + * * @param pvaClientMonitorRequester The client callback. * @return The interface. * @throw runtime_error if failure. @@ -368,7 +381,8 @@ public: std::string const & request, PvaClientMonitorRequesterPtr const & pvaClientMonitorRequester); /** - * @brief First call createRequest as implemented by pvDataJava and then calls the next method. + * @brief First call createRequest as implemented by pvDataJava and then call the next method. + * * @param request The syntax of request is defined by the copy facility of pvData. * @return The interface. * @throw runtime_error if failure. @@ -377,11 +391,13 @@ public: std::string const & request = "field(value,alarm,timeStamp)"); /** Create an PvaClientMonitor. * @param pvRequest The syntax of pvRequest is defined by the copy facility of pvData. + * * @return The interface. * @throw runtime_error if failure. */ PvaClientMonitorPtr createMonitor(epics::pvData::PVStructurePtr const & pvRequest); /** @brief Issue a channelRPC request + * * @param pvRequest The pvRequest that is passed to createRPC. * @param pvArgument The argument for a request. * @return The result. @@ -391,6 +407,7 @@ public: epics::pvData::PVStructurePtr const & pvRequest, epics::pvData::PVStructurePtr const & pvArgument); /** @brief Issue a channelRPC request + * * @param pvArgument The argument for the request. * @return The result. * @throw runtime_error if failure. @@ -398,11 +415,13 @@ public: epics::pvData::PVStructurePtr rpc( epics::pvData::PVStructurePtr const & pvArgument); /** @brief Create a PvaClientRPC. + * * @return The interface. * @throw runtime_error if failure. */ PvaClientRPCPtr createRPC(); /** @brief Create a PvaClientRPC. + * * @param pvRequest The pvRequest that must have the same interface * as a pvArgument that is passed to an rpc request. * @return The interface. @@ -415,10 +434,6 @@ public: /** @brief Get the number of cached gets and puts. */ size_t cacheSize(); - /** Deprecated method - * \deprecated This method will go away in future versions. - */ - void destroy() EPICS_DEPRECATED {} private: static PvaClientChannelPtr create( PvaClientPtr const &pvaClient, @@ -477,11 +492,13 @@ public: */ void setMessagePrefix(std::string const & value); /** @brief Get the structure. + * * @return The Structure * @throw runtime_error if failure. */ epics::pvData::StructureConstPtr getStructure(); /** @brief Get the pvStructure. + * * @return the pvStructure. * @throw runtime_error if failure. */ @@ -494,6 +511,7 @@ public: */ epics::pvData::BitSetPtr getChangedBitSet(); /** @brief Show the fields that have changed value since the last get. + * * @param out The stream that shows the changed fields. * @return The stream that was passed as out. */ @@ -610,36 +628,43 @@ public: */ ~PvaClientPutData() {} /** @brief Set a prefix for throw messages. + * * @param value The prefix. */ void setMessagePrefix(std::string const & value); /** @brief Get the structure. - * @return The Structure - * @throw runtime_error if failure. - */ - epics::pvData::StructureConstPtr getStructure(); + * + * @return The Structure + * @throw runtime_error if failure. + */ + epics::pvData::StructureConstPtr getStructure(); /** @brief Get the pvStructure. + * * @return the pvStructure. * @throw runtime_error if failure. */ epics::pvData::PVStructurePtr getPVStructure(); /** @brief Get the changed BitSet for the pvStructure + * * This shows which fields have changed values. * @return The bitSet * @throw runtime_error if failure. */ epics::pvData::BitSetPtr getChangedBitSet(); /** @brief Show the fields that have changed values. + * * @param out The stream that shows the changed fields. * @return The stream that was passed as out. */ std::ostream & showChanged(std::ostream & out); /** * @brief Is there a top level field named value. + * * @return The answer. */ bool hasValue(); /** @brief Is the value field a scalar? + * * @return The answer. */ bool isValueScalar(); @@ -648,10 +673,12 @@ public: */ bool isValueScalarArray(); /** Get the interface to the value field. + * * @return The interface. an excetion is thrown if a value field does not exist. */ epics::pvData::PVFieldPtr getValue(); /** @brief Get the interface to a scalar value field. + * * @return The interface for a scalar value field. * @throw runtime_error if failure. */ @@ -896,7 +923,7 @@ typedef std::tr1::shared_ptr ChannelProcessRequeste /** * @brief An easy to use alternative to ChannelProcess. * - * Overview of PvaClientChannelProcess + * Overview of PvaClientProcess */ class epicsShareClass PvaClientProcess { @@ -936,17 +963,13 @@ public: * An exception is thrown if get fails. */ void process(); - /** @brief Issue a process and return immediately. + /** @brief Issue a process request and return immediately. */ void issueProcess(); /** @brief Wait until process completes. * @return status. */ epics::pvData::Status waitProcess(); - /** Deprecated method - * \deprecated This method will go away in future versions. - */ - void destroy() EPICS_DEPRECATED {} private: std::string getRequesterName(); void message(std::string const & message,epics::pvData::MessageType messageType); @@ -990,7 +1013,7 @@ typedef std::tr1::shared_ptr ChannelGetRequesterImplPtr /** * @brief An easy to use alternative to ChannelGet. * - * Overview of PvaClientChannelGet + * Overview of PvaClientGet */ class epicsShareClass PvaClientGet { @@ -1042,10 +1065,6 @@ public: * @return The interface. */ PvaClientGetDataPtr getData(); - /** Deprecated method - * \deprecated This method will go away in future versions. - */ - void destroy() EPICS_DEPRECATED {} private: std::string getRequesterName(); void message(std::string const & message,epics::pvData::MessageType messageType); @@ -1097,7 +1116,7 @@ typedef std::tr1::shared_ptr ChannelPutRequesterImplPtr /** * @brief An easy to use alternative to ChannelPut. * - * Overview of PvaClientChannelPut + * Overview of PvaClientPut */ class epicsShareClass PvaClientPut { @@ -1162,10 +1181,6 @@ public: * @return The interface. */ PvaClientPutDataPtr getData(); - /** Deprecated method - * \deprecated This method will go away in future versions. - */ - void destroy() EPICS_DEPRECATED {} private : std::string getRequesterName(); void message(std::string const & message,epics::pvData::MessageType messageType); @@ -1216,7 +1231,7 @@ typedef std::tr1::shared_ptr ChannelPutGetRequesterI /** * @brief An easy to use alternative to ChannelPutGet. * - * Overview of PvaClientChannelPutGet + * Overview of PvaClientPutGet */ class epicsShareClass PvaClientPutGet { @@ -1300,10 +1315,6 @@ public: * @return The interface. */ PvaClientGetDataPtr getGetData(); - /** Deprecated method - * \deprecated This method will go away in future versions. - */ - void destroy() EPICS_DEPRECATED {} private : std::string getRequesterName(); void message(std::string const & message,epics::pvData::MessageType messageType); @@ -1488,10 +1499,6 @@ public: * @return The interface. */ PvaClientMonitorDataPtr getData(); - /** Deprecated method - * \deprecated This method will go away in future versions. - */ - void destroy() EPICS_DEPRECATED {} private: std::string getRequesterName(); void message(std::string const & message,epics::pvData::MessageType messageType);