This document summarizes the changes to the module between releases.
- The virtual
init()method ofclass PVSupporthas been made un-virtual, and the base-class implementation always returnsfalseas it should not be used. TheControlSupportandScalarAlarmSupportderived classes already provided their own implementations but needed different method arguments, so a virtual base-class method couldn't be used anyway. Those derived classes don't appear to be used internally at all, although they were being used in Marty Kraimer's exampleCPP repository which is no longer maintained or recommended for use anyway.
-
Added data distributor plugin which can be used for distributing data between a group of clients. The plugin is triggered by the request string of the form:
_[distributor=group:<group id>;set:<set_id>;trigger:<field_name>;updates:<n_updates>;mode:<update_mode>]The plugin parameters are optional and are described bellow:
-
group: this parameter indicates a group that client application belongs to (default value: "default"); groups of clients are completely independent of each other
-
set: this parameter designates a client set that application belongs to within its group (default value: "default")
-
trigger: this is the PV structure field that distinguishes different channel updates (default value: "timeStamp"); for example, for area detector images one could use the "uniqueId" field of the NTND structure
-
updates: this parameter configures how many sequential updates a client (or a set of clients) will receive before the data distributor starts updating the next one (default value: "1")
-
mode: this parameter configures how channel updates are to be distributed between clients in a set:
- one: update goes to one client per set
- all: update goes to all clients in a set
- default is "one" if client set id is not specified, and "all" if set id is specified
For more information and examples of usage see the plugin documentation.
-
-
Added support for the whole structure (master field) server side plugins. The whole structure is identified as the
_string, and a pvRequest string that applies a plugin to it takes the form:field(_[XYZ=A:3;B:uniqueId])where
XYZis the name of a specific filter plugin that takes parametersAandBwith values3anduniqueIdrespectively.
- Access Security is now supported.
- special has been revised and extended.
- addRecord, removeRecord, processRecord, and traceRecord are replaced by pvdbcr versions.
- support is DEPRECATED
- The previously deprecated destroy methods have been removed. Any application code that was previously calling these can just remove those calls.
- plugin support is new
- fixed issues #53 and #52
- addRecord is new.
- Doxygen updates and read-the-docs integration.
- support is a new feature.
- processRecord is new.
Formerly if a client makes a request for a subfield of a non structure field it resulted in a crash.
Now if a request is made for a subfield of a non structure field
- if the field is not a union an exception is thrown which is passed to the client.
- if the field is a union a) if more than one subfield is requested an exception is thrown b) if the subfield is the type for the current union the request succeeds c) if type is not the same an exception is thrown
- Cleaned up some build warnings.
- RTEMS test harness simplified.
- pvCopy is now implemented in pvDatabaseCPP. The version in pvDatacPP can be deprecated.
- plugin support is implemented.
- Updates for pvAccess API and build system changes.
- The examples are moved to exampleCPP
- Support for channelRPC is now available.
- removeRecord and traceRecord are now available.
The test is now a regression test which can be run using:
make runtests
This is the first release of pvDatabaseCPP.
It provides functionality equivalent to pvDatabaseJava.