254 lines
11 KiB
Plaintext
254 lines
11 KiB
Plaintext
|
|
|
|
|
|
Changes between epics 3.13 Beta 4 and 3.13 Beta 5
|
|
|
|
**** API Change ****
|
|
o The canonical PV name is returned from caServer::pvExistTest()
|
|
in the supplied buffer and not in a gdd data descriptor. See
|
|
"casdef.h".
|
|
old API:
|
|
//
|
|
// pvExistTest()
|
|
//
|
|
// The server tool is encouraged to accept multiple PV name
|
|
// aliases for the same PV here. However, a unique canonical name
|
|
// must be selected for each PV.
|
|
//
|
|
// returns S_casApp_success and fills in canonicalPVName
|
|
// if the PV is in this server tool
|
|
//
|
|
// returns S_casApp_pvNotFound if the PV does not exist in
|
|
// the server tool
|
|
//
|
|
// The server tool returns the unique canonical name for
|
|
// the pv into the gdd. A gdd is used here because this
|
|
// operation is allowed to complete asynchronously.
|
|
//
|
|
virtual caStatus pvExistTest (const casCtx &ctx, const char *pPVName,
|
|
gdd &canonicalPVName) = 0;
|
|
new API:
|
|
//
|
|
// pvExistTest()
|
|
//
|
|
// The server tool is encouraged to accept multiple PV name
|
|
// aliases for the same PV here. However, one unique canonical name
|
|
// must be selected by the server tool and returned to the
|
|
// server lib for each PV. The server will use this canonical
|
|
// name to prevent internal duplication of data structures for
|
|
// process variables that have multiple aliases.
|
|
//
|
|
// o returns S_casApp_success and a valid canonical name string
|
|
// when the PV is in this server tool
|
|
//
|
|
// o returns S_casApp_pvNotFound if the PV does not exist in
|
|
// the server tool
|
|
//
|
|
// Examples:
|
|
// caServerXXX::pvExistTest(const casCtx &ctx, const char *pPVName)
|
|
// {
|
|
// return pvExistReturn(S_casApp_success, pPVName); // common
|
|
// return pvExistReturn(S_casApp_pvNotFound); // no PV by that name
|
|
//
|
|
// char pName[9] = "myPVName";
|
|
// return pvExistReturn(S_casApp_success, pName); // also common
|
|
// return pvExistReturn(S_casApp_asyncCompletion); // not now
|
|
// }
|
|
//
|
|
virtual pvExistReturn pvExistTest (const casCtx &ctx,
|
|
const char *pPVName)=0;
|
|
|
|
**** API Change ****
|
|
o The server tool must now use one of class casAsyncReadIO, casAsyncWriteIO, or
|
|
casAsyncPVExistIO in place of casAsyncIO. See "casdef.h".
|
|
|
|
**** API Change ****
|
|
o Virtual function prototype change:
|
|
Before: "aitEnum casPV::bestExternalType()"
|
|
After: "aitEnum casPV::bestExternalType() const"
|
|
|
|
**** API Change ****
|
|
o The following virtual functions were added to casPV:
|
|
//
|
|
// Returns the maximum bounding box for all present and
|
|
// future data stored within the PV.
|
|
//
|
|
// The routine "dimension()" returns the maximum
|
|
// number of dimensions in the hypercube (0=scaler,
|
|
// 1=array, 2=plane, 3=cube ...}.
|
|
//
|
|
// The routine "maxBound(dimension)" returns the
|
|
// maximum length of a particular dimension of the
|
|
// hypercube as follows:
|
|
//
|
|
// dim equal to 0 1 3 ...
|
|
// -------------------------------------------
|
|
// hypercube
|
|
// type
|
|
// ---------
|
|
//
|
|
// array array
|
|
// length
|
|
//
|
|
// plane x y
|
|
//
|
|
// cube x y z
|
|
//
|
|
// .
|
|
// .
|
|
// .
|
|
//
|
|
// The default (base) "dimension()" returns zero (scaler).
|
|
// The default (base) "maxBound()" returns scaler bounds
|
|
// for all dimensions.
|
|
//
|
|
// Clients will see that the PV's data is scaler if
|
|
// these routines are not supplied in the derived class.
|
|
//
|
|
// If the "dimension" argument to maxBounds() is set to
|
|
// zero then the bound on the first dimension is being
|
|
// fetched. If the "dimension" argument to maxBound() is
|
|
// set to one then the bound on the second dimension
|
|
// are being fetched...
|
|
//
|
|
virtual unsigned maxDimension() const; // return zero if scaler
|
|
virtual aitIndex maxBound (unsigned dimension) const;
|
|
|
|
The defaults in base class casPV implement identical behavior
|
|
to the past if these routines are not supplied by the derived
|
|
class.
|
|
|
|
Changes between epics 3.13 Beta 6 and 3.13 Beta ????
|
|
|
|
**** API Change ****
|
|
|
|
o The member function "casChannel::postEvent()" has been replaced by
|
|
"casChannel::postAccessRightsEvent()". An access rights state change
|
|
event is now posted to the client each time that
|
|
"casChannel::postAccessRightsEvent()" is called.
|
|
|
|
o The virtual functions "casChannel::interestRegister()"
|
|
and "casChannel::interestDelete()" have been eliminated.
|
|
|
|
o The constructor "caServer::caServer()" no-longer has an argument specifying
|
|
the maximum PV name length. It also no longer has an argument specifying
|
|
the maximum simultaneous IO operations. THIS IS LIKELY TO BREAK YOUR CODE
|
|
BECAUSE THE FIRST TWO ARGUMENTS WERE REMOVED AND THERE ARE DEFAULT ARGUMENTS.
|
|
This change was made because we would like to remove all limits on
|
|
the PV name length (real or perceived). We also felt that if a server
|
|
tool wishes to postpone an asynchronious IO operation then it
|
|
should return S_casApp_postponeAsyncIO from caServer::pvExistTest() and
|
|
caServer::createPV() (instead of relying on the server to keep track of
|
|
the number of simultaneous asynchronous IO operations). This provides a
|
|
less complex and more flexible API.
|
|
|
|
o The member function "casPV::casPV(caServer &cas)" replaces the member
|
|
function "casPV::casPV(const casCtx &ctx, const char * const pPVName)".
|
|
|
|
o The virtual member function
|
|
"caServer::createPV(const casCtx &ctx, const char *pPVName)"
|
|
has been replaced by the virtual member function
|
|
"pvCreateReturn createPV (const casCtx &ctx, const char *pPVAliasName)"
|
|
This change was made in order to allow asynchronous completion of a
|
|
PV create operation.
|
|
|
|
o The data type (class) pvExistReturn has been changed to an enum -
|
|
"enum pvExistReturn {pverExistsHere, pverDoesNotExistHere,
|
|
pverAsyncCompletion, pverNoMemoryForAsyncOP}"
|
|
This impacts the virtual member function
|
|
"pvExistTest (const casCtx &ctx, const char *pPVAliasName)"
|
|
|
|
o The server tool is now required to supply the virtual function
|
|
"casPV::getName()" so that the server is able to identify the process
|
|
variable when diagnostics are printed.
|
|
|
|
o The virtual function casPV::maxSimultAsyncOps() has been eliminated
|
|
in favor of allowing the server tool to return S_casApp_postponeAsyncIO
|
|
from casPV::read() or casPV::write() when there are too many simultaneous
|
|
asynchronous IO operations and the server tool would like to postpone
|
|
the current (and future) request(s) until one of the outstanding asynchronous
|
|
IO operations (read or write) completes.
|
|
|
|
o All "show()" virtual member functions in the interface classes
|
|
have had the "const" attribute added.
|
|
|
|
**** Semantic Change ****
|
|
|
|
o IMPORTANT: It is now the responsibility of the server tool to detect attempts
|
|
by the server lib to create a 2nd PV with the same canonical name as an
|
|
existing PV and avoid this by returning a pointer to the first PV created.
|
|
Likewise, if there are several aliases for one canonical PV name then it is
|
|
the responsibility of the server tool to return "pvExistsHere" from
|
|
"caServerDerived::pvExistTest()" for each of the aliases. Likewise, if there
|
|
are several aliases for one canonical PV name then it is the responsibility
|
|
of the server tool to return a single PV with the canonical name from
|
|
"caServerDerived::createPV()" (even if createPV() is called multiple times
|
|
each with a different alias name). This change was made to simplify the API
|
|
and to eliminate redundant data structures and labor occurring within the server
|
|
tool and the server library.
|
|
|
|
o PV creation is now allowed to complete asynchronously
|
|
|
|
o It is now the responsibility of the server tool to limit the
|
|
number of simultaneous asynchronous IO operations allowed (by returning
|
|
S_casApp_postponeAsyncIO).
|
|
|
|
Changes between epics 3.13 Beta 11 and 3.13 Beta 12
|
|
|
|
**** API Change ****
|
|
o The constructor for class casPV no longer requires a reference to the
|
|
server. For backwards compatibility a reference to the server may still be
|
|
supplied, but it will not be used.
|
|
|
|
Changes after epics 3.13.1
|
|
|
|
**** API Change ****
|
|
o The virtual function caServer::createPV() has been deprecated in favor of the new
|
|
virtual function caServer::attachPV() which provides exactly the same functionality.
|
|
The name was changed so that the purpose of this virtual function is more clear
|
|
to server tool designers. To remain backwards compatible the virtual function
|
|
caServer::createPV() is called by the base implementation of caServer::attachPV().
|
|
In a future release all calls to the virtual member function caServer::createPV()
|
|
will be eliminated.
|
|
|
|
o The class pvCreateReturn has been deprecated in favor of the new class
|
|
pvAttachReturn which provides exactly the same functionality. The name was
|
|
changed so that the purpose of this class is more clear to server tool
|
|
designers. To remain backwards compatible the class pvCreateReturn derives from
|
|
public base class pvAttachReturn. In a future release the class pvCreateReturn
|
|
will be eliminated.
|
|
|
|
o The class casAsyncPVCreateIO has been deprecated in favor of the new class
|
|
casAsyncPVAttachIO which provides exactly the same functionality. The name was
|
|
changed so that the purpose of this class is more clear to server tool
|
|
designers. To remain backwards compatible the class casAsyncPVCreateIO derives from
|
|
public base class casAsyncPVAttachIO. In a future release the class casAsyncPVCreateIO
|
|
will be eliminated.
|
|
|
|
o The hash table template class resTable<T,ID> now requires a PV count estimate
|
|
argument to its the constructor, and its init(PV count estimate) member function
|
|
has been eliminated (server tools frequently implement a string hash table
|
|
based on class resTable<T,ID>).
|
|
|
|
o The delay argument passed to fileDescriptorManager.process(delay) has been changed
|
|
from type osiTime to the C++ primitive type double.
|
|
|
|
o The arithmetic operators in class osiTime now return type double, and not type
|
|
osiTime.
|
|
|
|
o In class osiTimer the use of type osiBool was eliminated in favor of the now universally
|
|
implemented ANSI STD C++ "bool" type.
|
|
|
|
o In class osiTimer type double, and not type osiTime, is returned from virtual member
|
|
function delay().
|
|
|
|
o The public const event mask member data in the caServer class were changed to member
|
|
functions in order to avoid problems on some compiler where const event masks cant be
|
|
created until the server is fully constructed. The constants have been replaced by the
|
|
following member functions.
|
|
casEventMask valueEventMask() const; // DBE_VALUE registerEvent("value")
|
|
casEventMask logEventMask() const; // DBE_LOG registerEvent("log")
|
|
casEventMask alarmEventMask() const; // DBE_ALARM registerEvent("alarm")
|
|
|
|
|