update doc

This commit is contained in:
Michael Davidsaver
2017-07-14 18:59:02 +02:00
parent 95a750c4f9
commit a3350a4f38
11 changed files with 342 additions and 1682 deletions

View File

@ -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').

View File

@ -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,

View File

@ -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
*/

View File

@ -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
View File

@ -0,0 +1,5 @@
/** @page pvtools Command Line Utilities
*/

3
documentation/readme Normal file
View File

@ -0,0 +1,3 @@
get libstdc++ tag file from
https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/libstdc++.tag

View 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().
*/