update release notes
This commit is contained in:
@ -767,6 +767,9 @@ WARN_LOGFILE =
|
||||
|
||||
INPUT = ../src/client/pv \
|
||||
../src/client/pva \
|
||||
../src/server/pv \
|
||||
../src/rpcClient/pv \
|
||||
../src/rpcService/pv \
|
||||
../src/utils/pv \
|
||||
../src/pva/pv \
|
||||
.
|
||||
|
@ -1,20 +1,63 @@
|
||||
/** @page pvarelease_notes Release Notes
|
||||
|
||||
Release 6.x.x
|
||||
=============
|
||||
Release 6.0.0 (UNRELEASED)
|
||||
==========================
|
||||
|
||||
- Incompatible changes
|
||||
- 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. 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.
|
||||
- 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
|
||||
- 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()
|
||||
- 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
|
||||
- Additions
|
||||
- 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
|
||||
- Deprecations
|
||||
- epics::pvAccess::GUID in favor of epics::pvAccess::ServerGUID due to win32 name conflict.
|
||||
|
||||
Release 5.0.0 (July 2016)
|
||||
=========================
|
||||
@ -123,7 +166,7 @@ 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.
|
||||
Beginning with 6.0.0 an Operation must not rely on user code to call a destory() method.
|
||||
|
||||
@subsection providers_changes_store_port Porting
|
||||
|
||||
|
@ -2,7 +2,7 @@ TOP=..
|
||||
|
||||
include $(TOP)/configure/CONFIG
|
||||
|
||||
PROD_LIBS += pvAccessCA pvAccess pvData ca Com
|
||||
PROD_LIBS += pvAccessCA ca pvAccess pvData Com
|
||||
|
||||
TESTPROD_HOST += getme
|
||||
TESTPROD_HOST += putme
|
||||
|
@ -61,35 +61,6 @@ public:
|
||||
InUse //!< data valid. Owned by MonitorRequester. Waiting for Monitor::release()
|
||||
} state;
|
||||
|
||||
/** A smart pointer to extract a MonitorElement from a Monitor queue
|
||||
*
|
||||
* To fetch a single element
|
||||
@code
|
||||
epics::pvAccess::Monitor::shared_pointer mon(....);
|
||||
epics::pvAccess::MonitorElement::Ref elem(mon);
|
||||
if(elem) {
|
||||
// do something with element
|
||||
assert(elem->pvStructurePtr->getSubField("foo"));
|
||||
} else {
|
||||
// queue was empty
|
||||
}
|
||||
@endcode
|
||||
* To fetch all available elements (c++11)
|
||||
@code
|
||||
epics::pvAccess::Monitor::shared_pointer mon(....);
|
||||
for(auto& elem : *mon) {
|
||||
assert(elem.pvStructurePtr->getSubField("foo"));
|
||||
}
|
||||
@endcode
|
||||
* To fetch all available elements (c++98)
|
||||
@code
|
||||
epics::pvAccess::Monitor::shared_pointer mon(....);
|
||||
for(epics::pvAccess::MonitorElement::Ref it(mon); it; ++it) {
|
||||
MonitorElement& elem(*it);
|
||||
assert(elem.pvStructurePtr->getSubField("foo"));
|
||||
}
|
||||
@endcode
|
||||
*/
|
||||
class Ref;
|
||||
};
|
||||
|
||||
@ -145,6 +116,35 @@ class epicsShareClass Monitor : public virtual Destroyable{
|
||||
virtual void reportRemoteQueueStatus(epics::pvData::int32 freeElements) {}
|
||||
};
|
||||
|
||||
/** A smart pointer to extract a MonitorElement from a Monitor queue
|
||||
*
|
||||
* To fetch a single element
|
||||
@code
|
||||
epics::pvAccess::Monitor::shared_pointer mon(....);
|
||||
epics::pvAccess::MonitorElement::Ref elem(mon);
|
||||
if(elem) {
|
||||
// do something with element
|
||||
assert(elem->pvStructurePtr->getSubField("foo"));
|
||||
} else {
|
||||
// queue was empty
|
||||
}
|
||||
@endcode
|
||||
* To fetch all available elements (c++11)
|
||||
@code
|
||||
epics::pvAccess::Monitor::shared_pointer mon(....);
|
||||
for(auto& elem : *mon) {
|
||||
assert(elem.pvStructurePtr->getSubField("foo"));
|
||||
}
|
||||
@endcode
|
||||
* To fetch all available elements (c++98)
|
||||
@code
|
||||
epics::pvAccess::Monitor::shared_pointer mon(....);
|
||||
for(epics::pvAccess::MonitorElement::Ref it(mon); it; ++it) {
|
||||
MonitorElement& elem(*it);
|
||||
assert(elem.pvStructurePtr->getSubField("foo"));
|
||||
}
|
||||
@endcode
|
||||
*/
|
||||
class MonitorElement::Ref
|
||||
{
|
||||
Monitor* mon;
|
||||
|
@ -31,6 +31,7 @@ namespace pvAccess {
|
||||
class ServerContext;
|
||||
class RPCChannelProvider;
|
||||
|
||||
//! Serves (only) RPCServiceAsync and RPCService instances.
|
||||
class epicsShareClass RPCServer :
|
||||
public std::tr1::enable_shared_from_this<RPCServer>
|
||||
{
|
||||
|
@ -102,14 +102,18 @@ public:
|
||||
*/
|
||||
virtual void setBeaconServerStatusProvider(BeaconServerStatusProvider::shared_pointer const & beaconServerStatusProvider) = 0;
|
||||
|
||||
//! Options for a server insatnce
|
||||
class Config {
|
||||
friend class ServerContext;
|
||||
Configuration::const_shared_pointer _conf;
|
||||
std::vector<ChannelProvider::shared_pointer> _providers;
|
||||
public:
|
||||
Config() {}
|
||||
//! Use specific configuration. Default is process environment
|
||||
Config& config(const Configuration::const_shared_pointer& c) { _conf = c; return *this; }
|
||||
//! Attach many providers.
|
||||
Config& providers(const std::vector<ChannelProvider::shared_pointer>& p) { _providers = p; return *this; }
|
||||
//! short hand for providers() with a length 1 vector.
|
||||
Config& provider(const ChannelProvider::shared_pointer& p) { _providers.push_back(p); return *this; }
|
||||
};
|
||||
|
||||
|
@ -20,8 +20,6 @@ namespace epics { namespace pvAccess {
|
||||
|
||||
/**
|
||||
* @brief Instance declaring destroy method.
|
||||
*
|
||||
* @author mse
|
||||
*/
|
||||
class epicsShareClass Destroyable {
|
||||
public:
|
||||
@ -32,10 +30,7 @@ namespace epics { namespace pvAccess {
|
||||
virtual void destroy() = 0;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Do not allow delete on this instance and derived classes, destroy() must be used instead.
|
||||
*/
|
||||
virtual ~Destroyable() {};
|
||||
virtual ~Destroyable() {}
|
||||
public:
|
||||
|
||||
/** for use with shared_ptr<> when wrapping
|
||||
@ -44,6 +39,10 @@ namespace epics { namespace pvAccess {
|
||||
shared_ptr<foo> inner(new foo),
|
||||
outer(inner.get, Destroyable::cleaner(inner));
|
||||
@endcode
|
||||
|
||||
@warning Do not use this trick in combination with enable_shared_from_this
|
||||
as it is _undefined_ whether the hidden weak_ptr will be the original
|
||||
or wrapped reference.
|
||||
*/
|
||||
class cleaner {
|
||||
Destroyable::shared_pointer ptr;
|
||||
|
Reference in New Issue
Block a user