update doc
This commit is contained in:
@ -321,7 +321,7 @@ AUTOLINK_SUPPORT = YES
|
||||
# diagrams that involve STL classes more complete and accurate.
|
||||
# The default value is: NO.
|
||||
|
||||
BUILTIN_STL_SUPPORT = YES
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
|
||||
# If you use Microsoft's C++/CLI language, you should set this option to YES to
|
||||
# enable parsing support.
|
||||
@ -766,9 +766,9 @@ WARN_LOGFILE =
|
||||
# Note: If this tag is empty the current directory is searched.
|
||||
|
||||
INPUT = ../src/client/pv \
|
||||
../src/client/pva \
|
||||
../src/utils/pv \
|
||||
../src/pva/pv \
|
||||
../src/testing/pv \
|
||||
.
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
@ -2068,7 +2068,8 @@ SKIP_FUNCTION_MACROS = NO
|
||||
# the path). If a tag file is not located in the directory in which doxygen is
|
||||
# run, you must also specify the path to the tagfile here.
|
||||
|
||||
TAGFILES = ../../pvData/documentation/pvdata.tag
|
||||
TAGFILES = "../../pvData/documentation/pvdata.tag=http://mdavidsaver.github.io/pvDataCPP/" \
|
||||
"libstdc++.tag = http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen"
|
||||
|
||||
# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
|
||||
# tag file that is based on the input files it reads. See section "Linking to
|
||||
@ -2087,14 +2088,14 @@ ALLEXTERNALS = NO
|
||||
# listed.
|
||||
# The default value is: YES.
|
||||
|
||||
EXTERNAL_GROUPS = YES
|
||||
EXTERNAL_GROUPS = NO
|
||||
|
||||
# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
|
||||
# the related pages index. If set to NO, only the current project's pages will
|
||||
# be listed.
|
||||
# The default value is: YES.
|
||||
|
||||
EXTERNAL_PAGES = YES
|
||||
EXTERNAL_PAGES = NO
|
||||
|
||||
# The PERL_PATH should be the absolute path and name of the perl script
|
||||
# interpreter (i.e. the result of 'which perl').
|
||||
|
@ -1,5 +1,14 @@
|
||||
/**
|
||||
|
||||
@page examples_miniget Simple Client Get Example
|
||||
|
||||
The shortest possible PVA get() example.
|
||||
|
||||
@include miniget.cpp
|
||||
|
||||
*/
|
||||
/**
|
||||
|
||||
@page examples_getme Client Get Example
|
||||
|
||||
This example demonstrates a client which issues a Get operation on startup,
|
||||
|
@ -3,34 +3,22 @@
|
||||
/**
|
||||
@mainpage pvAccess C++ docs
|
||||
|
||||
The epics::pvAccess namespace.
|
||||
See pv/pvAccess.h header.
|
||||
- [Download](https://sourceforge.net/projects/epics-pvdata/files/)
|
||||
- @htmlonly <a href="modules.html">API components</a> @endhtmlonly
|
||||
- @ref pvarelease_notes
|
||||
- API documentation
|
||||
- @ref pvac page
|
||||
- @ref providers page
|
||||
- @ref pvtools
|
||||
|
||||
@code
|
||||
#include <pv/configuration.h>
|
||||
#include <pv/pvAccess.h>
|
||||
#include <pv/clientFactory.h>
|
||||
@endcode
|
||||
@section main_examples API usage Examples
|
||||
|
||||
See the @ref providers page.
|
||||
|
||||
@section main_interesting Interesting
|
||||
|
||||
- Clients providers
|
||||
- PVA Client
|
||||
- CA Client (wraps libca)
|
||||
- RPC Client helper
|
||||
- PVA Server epics::pvAccess::ServerContext
|
||||
- Server providers
|
||||
- RPC
|
||||
- Pipeline (monitor w/ flow control)
|
||||
|
||||
|
||||
@section main_examples Examples
|
||||
|
||||
- @ref examples_getme
|
||||
- @ref examples_putme
|
||||
- @ref examples_monitorme
|
||||
- Simplest (shortest) possible
|
||||
- @ref examples_miniget
|
||||
- More complete
|
||||
- @ref examples_getme
|
||||
- @ref examples_putme
|
||||
- @ref examples_monitorme
|
||||
|
||||
*/
|
||||
|
||||
|
@ -6,6 +6,15 @@
|
||||
|
||||
@tableofcontents
|
||||
|
||||
The epics::pvAccess namespace.
|
||||
See pv/pvAccess.h header.
|
||||
|
||||
@code
|
||||
#include <pv/configuration.h>
|
||||
#include <pv/pvAccess.h>
|
||||
#include <pv/clientFactory.h>
|
||||
@endcode
|
||||
|
||||
@section providers_roles Roles
|
||||
|
||||
The Client and Server APIs revolve around the epics::pvAccess::ChannelProvider class.
|
||||
|
File diff suppressed because it is too large
Load Diff
5
documentation/pvtools.h
Normal file
5
documentation/pvtools.h
Normal file
@ -0,0 +1,5 @@
|
||||
/** @page pvtools Command Line Utilities
|
||||
|
||||
|
||||
|
||||
*/
|
3
documentation/readme
Normal file
3
documentation/readme
Normal file
@ -0,0 +1,3 @@
|
||||
get libstdc++ tag file from
|
||||
|
||||
https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/libstdc++.tag
|
138
documentation/release_notes.h
Normal file
138
documentation/release_notes.h
Normal file
@ -0,0 +1,138 @@
|
||||
/** @page pvarelease_notes Release Notes
|
||||
|
||||
Release 6.x.x
|
||||
=============
|
||||
|
||||
- Incompatible changes
|
||||
- Major changes to shared_ptr ownership rules for epics::pvAccess::ChannelProvider and
|
||||
associated classes. See
|
||||
- @ref providers
|
||||
- @ref providers_changes
|
||||
- Add new library pvAccessIOC for use with PVAClientRegister.dbd and PVAServerRegister.dbd.
|
||||
Necessary to avoid having pvAccess library depend on all IOC core libraries.
|
||||
- Simplifications
|
||||
- use of the epics::pvAccess::ChannelRequester interface is optional
|
||||
and may be omitted when calling createChannel().
|
||||
Channel state change notifications are deliviered
|
||||
to individual operations via epics::pvAccess::ChannelBaseRequester::channelDisconnect()
|
||||
|
||||
Release 5.0.0 (July 2016)
|
||||
=========================
|
||||
|
||||
- Remote channel destroy support
|
||||
- Multiple network inteface support
|
||||
- Local multicast (repetitor) reimplemented
|
||||
- Monitor reconnect when channel type changes fix
|
||||
- C++11 compilation fixes
|
||||
- Added version to pvaTools
|
||||
- Memory management improved
|
||||
- pipeline: ackAny argument percentage support
|
||||
- Monitor overrun memory issues fixed
|
||||
- CA provider destruction fixed
|
||||
- Replaced LGPL wildcard matcher with simplistic EPICS version
|
||||
|
||||
Release 4.1.2 (Oct 2015)
|
||||
========================
|
||||
|
||||
- Improved Jenkins build support
|
||||
- Removed QtCreated IDE configuration files
|
||||
- Use of getSubField<> instead of e.g. getDoubleField()
|
||||
- CA support for pvget, pvput and pvinfo.
|
||||
- vxWorks/RTEMS compiler warnings resolved.
|
||||
- Transport shutdown improved.
|
||||
- CA DBR status fix.
|
||||
- Monitor queue handling improved.
|
||||
- Fixed bad performance on 10Gbit or faster networks.
|
||||
- Async RPC service.
|
||||
|
||||
Release 4.0.5 (Dec 2014)
|
||||
=========================
|
||||
(Starting point for release notes.)
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** @page providers_changes Changes to ChannelProvider ownership rules
|
||||
|
||||
@tableofcontents
|
||||
|
||||
Major series 6.x includes changes to the rules for when user code may
|
||||
store strong and/or weak references to epics::pvAccess::ChannelProvider
|
||||
and related classes. These rules exist to prevent strong reference loops from forming.
|
||||
|
||||
@section providers_changes_requester Operation <-> Requester
|
||||
|
||||
One change is the reversal of the allowed relationship between
|
||||
an Operation and its associated Requester (see @ref provider_roles_requester for definitions).
|
||||
|
||||
Prior to 6.0.0 an Operation was required to hold a strong reference to its Requester.
|
||||
This prevented the Requester from holding a strong ref to the Operation.
|
||||
|
||||
This was found to be inconvienent and frequently violated.
|
||||
Beginning with 6.0.0 an Operation is prohibited from holding a strong reference to its Requester.
|
||||
|
||||
@subsection providers_changes_requester_port Porting
|
||||
|
||||
Legecy code does not store a strong reference to Requesters will see that they are immediately destory.
|
||||
|
||||
An example where the Operation is a ChannelGet and the Requester is ChannelGetRequester.
|
||||
|
||||
@code
|
||||
// Bad example!
|
||||
epics::pvAccess::Channel::shared_pointer chan = ...;
|
||||
epics::pvAccess::ChannelGet::shared_pointer get;
|
||||
{
|
||||
epics::pvAccess::ChannelGetRequester::shared_pointer req(new MyRequester(...));
|
||||
get = chan->createChannelGet(req, epics::pvData::createRequest("field()"));
|
||||
// 'req' is only strong ref.
|
||||
// MyRequester::~MyRequester() called here
|
||||
// MyRequester::getDone() never called!
|
||||
}
|
||||
@endcode
|
||||
|
||||
It is necessary to maintain a strong reference to the ChannelRequester as long as callbacks are desired.
|
||||
|
||||
@note Legacy code could be modified to strong each Requester alongside the associated Operation.
|
||||
|
||||
New code may utilize the new ownership rules and store the Operation in a custom Requester.
|
||||
|
||||
@code
|
||||
struct MyRequester : public epics::pvAccess::ChannelGetRequester {
|
||||
epics::pvAccess::ChannelGet::shared_pointer get;
|
||||
...
|
||||
};
|
||||
epics::pvAccess::ChannelGetRequester::shared_pointer req(new MyRequester(...));
|
||||
epics::pvAccess::Channel::shared_pointer chan = ...;
|
||||
req->get = chan->createChannelGet(req, epics::pvData::createRequest("field()"));
|
||||
@endcode
|
||||
|
||||
@section providers_changes_store Must store Operation reference
|
||||
|
||||
Beginning with 6.0.0, all create methods of
|
||||
epics::pvAccess::ChannelProvider and
|
||||
epics::pvAccess::Channel
|
||||
are required to return shared_ptr which are uniquely ownered by the caller
|
||||
and are not stored internally.
|
||||
|
||||
Thus the caller of a create method must keep a reference to each Operation
|
||||
or the Operation will be destoryed.
|
||||
|
||||
Prior to 6.0.0 some providers, notibly the "pva" provider, did not do this.
|
||||
It was thus (sometimes) necessary to explicitly call a destory() method
|
||||
to fully dispose of an Operation.
|
||||
Failure to do this resulted in a slow resource leak.
|
||||
|
||||
Beginning with 6.0.0 an Operation may not rely on user code to call a destory() method.
|
||||
|
||||
@subsection providers_changes_store_port Porting
|
||||
|
||||
Legecy code may be relying on these internal references to keep an Operation alive.
|
||||
|
||||
Beginning with 6.0.0 the shared_ptr returned by any create method must be stored or the Operation will
|
||||
be immediately destroy'd.
|
||||
|
||||
@note Beginning with 6.0.0 use of the epics::pvAccess::ChannelRequester interface is optional
|
||||
and may be omitted when calling createChannel().
|
||||
|
||||
*/
|
Reference in New Issue
Block a user