This EPICS V4 C++ Package version 4.7.0 contains the same set of the EPICS V4 C++ modules as the full EPICS 7.0.1 release (with the pvaPy Python bindings added and no copy of EPICS Base), along with a top-level build system to allow configuring all the modules at once rather than doing each one individually.
This document contains the Release Notes entries from each individual C++ submodule, describing the changes between the previous bundleCPP version and this release version. For any future 4.7.x patch releases the information about the patch changes included will supplement the note entries from this release.
This release can be built against EPICS Base versions 3.15.x or 3.16.x. Later versions of EPICS Base are referred to as EPICS 7 and already include all the necessary V4 modules. EPICS Base versions 3.14.12.x and earlier are not compatible with the pva2pva module that was added to this package in this release. The other V4 modules may build and run against EPICS Base 3.14.12.x, but they have not been built or tested against that Base version recently.
The mb.h
header has been updated to build properly against EPICS Base
versions prior to 3.15.0.1.
- Remove requester.h, monitor.h, and destroyable.h which were migrated to the pvAccessCPP module.
- Previously deprecated monitorPlugin.h is removed.
- Remove pv/messageQueue.h and epics::pvData::MessageQueue
The following utility classes will be removed in 8.0:
- epics::pvData::Queue
- epics::pvData::Executor
- epics::pvData::TimeFunction
- Add pv/pvdVersion.h which is included by pv/pvIntrospect.h
- Add epics::pvData::createRequest() function. Alternative to epics::pvData::CreateRequest class which throws on error.
- epics::pvData::FieldBuilder allow Structure defintion to be changed/appended
- Add epics::pvData::ValueBuilder like FieldBuilder also sets initial values.
- Can also be constructed using an existing PVStructure to allow "editing".
- Add debugPtr.h wrapper with reference tracking to assist in troubleshooting shared_ptr related ref. loops.
- Add pvjson utilities
- Requires pvDataCPP >=7.0.0 due to headers moved from pvDataCPP into this module: requester.h, destoryable.h, and monitor.h
- Major changes to shared_ptr ownership rules for epics::pvAccess::ChannelProvider and associated classes.
- Add new library pvAccessIOC for use with PVAClientRegister.dbd and PVAServerRegister.dbd. Necessary to avoid having pvAccess library depend on all IOC core libraries.
- Added new library pvAccessCA with "ca" provider. Main pvAccess library no longer depends on libca. Applications needing the "ca" provider must link against pvAccessCA and pvAccess. See examples/Makefile in the source tree. The headers associated with this library are: caChannel.h, caProvider.h, and caStatus.h
- A number of headers which were previously installed, but considered "private", are no longer installed.
- epics::pvAccess::ChannelProviderRegistry may no longer be sub-classed.
- Removed access to singleton registry via getChannelProviderRegistry() and registerChannelProviderFactory() in favor of epics::pvAccess::ChannelProviderRegistry::clients() and epics::pvAccess::ChannelProviderRegistry::servers(). The "pva" and "ca" providers are registered with the clients() singleton. epics::pvAccess::ServerContext() looks up names with the servers() singleton.
- Removed deprecated epics::pvAccess::Properties
- The data members of epics::pvAccess::MonitorElement become const, preventing these pointers from being re-targeted.
- 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()
- Default implementions added for the following methods
- epics::pvAccess::Lockable::lock() and epics::pvAccess::Lockable::unlock() which do nothing.
- epics::pvAccess::Channel::getConnectionState() returns CONNECTED
- epics::pvAccess::Channel::isConnected() uses getConnectionState()
- epics::pvAccess::Channel::getField() which errors
- epics::pvAccess::Channel::getAccessRights() which returns rw
- Added epics::pvAccess::SimpleChannelProviderFactory template and epics::pvAccess::ChannelProviderRegistry::add() avoids need for custom factory.
- Added epics::pvAccess::MonitorElement::Ref iterator/smart-pointer to ensure proper handling of calls Monitor::poll() and Monitor::release().
- epics::pvAccess::PipelineMonitor "internal" is collapsed into epics::pvAccess::Monitor. PipelineMonitor becomes a typedef for Monitor.
- epics::pvAccess::RPCService is now a sub-class of epics::pvAccess::RPCServiceAsync
- pv/pvAccess.h now provides macros OVERRIDE and FINAL which conditionally expand to the c++11 keywords override and final.
- Deliver disconnect notifications to individual Operations (get/put/rpc/monitor/...) via new epics::pvAccess::ChannelBaseRequester::channelDisconnect()
- New API for server creation via epics::pvAccess::ServerContext::create() allows direct specification of configuration and ChannelProvider(s).
- Add epics::pvAccess::ServerContext::getCurrentConfig() to get actual configuration, eg. for use with a client.
- Classes from moved headers requester.h, destoryable.h, and monitor.h added to epics::pvAccess namespace. Typedefs provided in epics::pvData namespace.
- Added Client API based on pvac::ClientProvider
- pv/pvaVersion.h defines VERSION_INT and PVACCESS_VERSION_INT
- epics::pvAccess::RPCClient may be directly constructed.
- epics::pvAccess::RPCServer allows epics::pvAccess::Configuration to be specified and access to ServerContext.
- Added epics::pvAccess::Configuration::keys() to iterate configuration parameters (excluding environment variables).
- Added epics::pvAccess::Destoryable::cleaner
- epics::pvAccess::GUID in favor of epics::pvAccess::ServerGUID due to win32 name conflict.
This release contains bug fixes and minor source updates needed to build against the latest version of pvData.
Will not work with older versions.
All the destroy methods are removed since implementation is RAII compliant.
The second argument of method
static PvaClientMonitorPtr create(
PvaClientPtr const &pvaClient,
epics::pvAccess::Channel::shared_pointer const & channel,
epics::pvData::PVStructurePtr const &pvRequest
);
Is now changed to
static PvaClientMonitorPtr create(
PvaClientPtr const &pvaClient,
PvaClientChannelPtr const & pvaClientChannel,
epics::pvData::PVStructurePtr const &pvRequest
);
A new method is also implemented
static PvaClientMonitorPtr create(
PvaClientPtr const &pvaClient,
std::string const & channelName,
std::string const & providerName,
std::string const & request,
PvaClientChannelStateChangeRequesterPtr const & stateChangeRequester,
PvaClientMonitorRequesterPtr const & monitorRequester
);
This module replaces the original pvaSrv.
This release contains bug fixes and minor source updates needed to build against the latest versions of pvData and pvAccess.
- added build support for python3
- added build support for EPICS7 releases
- improved support for channel monitors: no monitor startup thread results in faster initial connections; monitors connect automatically when channels come online
- fixed support for older EPICS v4 releases (4.4, 4.5 and 4.6)
- added build support for numpy included with boost releases 1.63.0 and later
- added new Channel monitor() method that can be used instead of subscribe()/startMonitor() sequence in case when there is only one subscriber
- enhanced PvaServer functionality: single server instance can serve multiple channels; channels can be added and removed dynamically; added (optional) callback for channel writes
- added initial version of PvaServer class: PvObject exposed via instance of this class can be retrieved and manipulated using standard PVA command line tools and APIs
- fixed boolean array conversion to python list
- improved support for builds relying on custom boost installation
In this release the pvaSrv module has been replaced with the newer and more functional pva2pva module. The exampleCPP module was dropped for this release as it hasn't yet been updated to demonstrate the latest pvData and pvAccess API changes.
The top-level Makefile has been modified to try and improve the behaviour of some of the buld targets (e.g. make distclean
shouldn't try to configure any submodules that aren't already configured). In general this Makefile was designed for building the submodules from scratch, not for developers to use while working on the code.