Build System
Major changes have been made to the build system. The good news is that the rules for support and ioc applications are now greatly simplified. The bad news is that it does mean changes for existing 3.14.1 applications. Please see:
ConvertingR3.14.1AppsToR3.14.2
for details. If you are using the function DBD keyword it no longer exists. Please read this conversion document for details.
Application Developer's Guide
The old chapter "New Feature's for 3.14" has been replaced by a new chapter "Getting Started". Please read it. It provides a simplified set of rules that can be used to build most support and ioc applications. Many minor changes have also been made.
dbGetLink
A bug in dbGetLink resulted in nRequest not being given the value 0 if the link is a constant link. This in turn caused the waveform record to always set NORD=NELEM. Thus if an application trys to write a waveform via the steps:
prset->get_array_info(paddr,&no_elements,&offset); << write nNew elements into array >> prset->put_array_info(paddr,nNew);
This sets NORD = nNew. But because of the dbGetLink bug, the soft device support attached to the waveform record sets NORD to NELM.
This problem is fixed. The actual bug was in macros in dbAccessDefs.h
Access Security
The host names are now converted to lower case. This fixes incompatibilities between various platforms.
string records
Both the stringin and stringout records have two new DBF_MENU fields: APST and MPST. These control whether CA monitors are fired if the new VAL field string is identical to the old one. The default (zero) menu value is "On Change" with behaviour identical to before, set to "Always" if you want a record to fire monitors every time the record is processed (analagous to setting ADEL/MDEL=-1 for numeric record types).
epicsMessageQueue
A new facility that provides the capabilities of vxWorks msgQLib. See the Application Developer's Guide (libCom OSI) for details.
epicsStdio and errlogPrintf
A new facility has been added to libCom described by epicsStdio.h. It contains the functions epicsSnprintf and epicsVsnprintf. These are like the C99 functions snprintf and vsnprintf, which are like sprintf and vsprintf except that they accept a argument limiting the number of characters written.
The errlogPrintf facility has been modified to use this facility. Thus it is not longer subject to a possible buffer overflow.
scanPeriod
This is a new function provided by the Database Scanning facility. Given an index for the choices defined by menuScan.h, it returns the scan period in seconds. The argument can just be the scan field of a database record. If the index is not associated with a periodic scan rate, the value 0.0 is returned.
New epicsString.h function
A new function epicsStrCaseCmp has been added. It is like strcmp except that it ignores case.
macLib
macParseDefns did not check for handle==NULL. The documentation for macParseDefns was not correct.
function - New Database Definition Keyword
dbStaticLib and related programs now accept a new keyword in DBD files:
function(name)
Where 'name' is the name of a function with "C" linkage that is included in the IOC binary. This function will be automatically registered with the registry at the same time as the record/device/driver tables, and is intended to make using subroutine records much easier on non-vxWorks systems.. Prior R3.14 releases required there to be a static registration routine for such subroutines.
dbStaticLib has two additional routines to support this, dbDumpFunction() and dbWriteFunctionFP(). dbDumpFunction has been added to the iocsh command table.
iocsh
When executing commands from a script file, iocsh now echoes each command to the terminal before execution. This makes it much easier to see where errors are being reported.
Solaris build requirement
uname must be defined for builds on solaris hosts because it is used to determine the solaris version.
Linux build note
Under linux-x86 only, when SHARED_LIBRARIES=YES it is now possible to have one or more directory paths burned into products as run-time locations for the shared libraries. In configure/os/CONFIG_SITE.Common.linux-x86 add any such absolute paths to the new make variable SHRLIB_SEARCH_DIRS (lib/<arch> will be automatically appended to each directory given).
RULES.Db
A *[nn].db file will be created from an *.template and a *[nn].substitutions file ,where nn has a value between 0 and 99.
Support for 64 bit long
Many changes were made to support architectures on which a long is a 64 bit integer. The basic change was to change:
The changes include the following:
Hardware Link Definitions
The various parts of hardware link definitions now accept HEX values, e.g.
field(INP,"L0 A1 C0 S0xa @")
NOTES:
dbDumpFldDes
A macro has been defined so that client code can be written that is compatible between 3.13 and 3.14.
epicsMutex for posix
Mac OS X
Now supported as development platform and as IOC.
RTEMS
Additional RTEMS-pc386 network drivers are available
iocsh
Configurable iocsh command-line editing support (none, readline, libtecla)
CA Reference Manual
Many additions.
CA Client Library
Bugs related to connection speed when creating new channels and other channels are not found fixed. Bugs related to proper schedualing in file descriptor manager based clients fixed. Many other bugs were fixed. Performance was significantly improved.
Original CA Server Library (still employed in R3.14 by iocCore)
A bug was fixed where the server was in rare situations using excessive CPU.
Portable CA Server LIbrary
Several bugs were fixed when performing integration testing with the channel access gateway.
GDD
Many bugs and missing features fixed.
dbCommon.dbd
Field UDF now has a promptgroup. This allows users to set UDF false via DCTs.
errlog
errlog no longer contains an atexit that calls errlogFlush. This did not work on all operating systems. cantProceed, iocsh, and ca_task_exit all call errlogFlush. Other applications may also have to call if before terminating.
mbboRecord
mbboRecord now implements method cvt_dbaddr for the VAL field. If no state vales or state strings are defined then it sets field_type and dbr_field_type to DBF_USHORT.
timeStamp changes
Changes have been made to:
epicsTime.h now has the definitions:
#define epicsTimeEventBestTime -1 #define epicsTimeEventDeviceTime -2
These are values for the TSE field of dbCommon.
If the TSEL field refers to the TIME field of a record then recGblGetTimeStamp sets TIME equal to the time it gets from the record the TSEL references. This works for both database and channel access links. In this case field TSE is not used.
aiRecord and aoRecord: Setting eoff=egul
Instead of init_record executing code like
if ((pai->linr == menuConvertLINEAR) && pdset->special_linconv) { pai->eoff = pai->egul; }
It now executes:
if ((pai->eslo==1.0) && (pai->eoff==0.0)) { pai->eoff = pai->egul; }
aoRecord has a similar change
This was done so that old device support which does not implement special_linconv still works.
CA puts to disabled record
If a CA client issues a put to a disabled record then, when the record is ena bled, database puts to the record will not make the record process until a CA pu t is again issued. This is fixed.
TPRO - trace processing
If dbProcess is called recursively by different tasks, it did not properly handle TPRO. Consider the following database:
record(ao,"mrkao") { field(OUT,"mrkai CA") field(TPRO,"1") } record(ai,"mrkai") { field(TPRO,"1") }
If a channel access put is sent to mrkao, no message is issued when mrkai is processed.
This is now fixed.
TSconfigure
If in your st.cmd file you issue the command.
TSconfigure(0,0,0,0,0,0,1)
And set the TSE field of any record to a non zero value, then a crash will occur when recGblGetTimeStamp is called.
This is now fixed.
calcoutRecord
nsev not sevr must be checked to decide if dbPutLink should be called.
dbCa
Whenever a connection is made, a request to retrieve the control, display, and alarm linits and the precision and units is automatically issued. Previously this was only done if dbCaGetAttributes was called. This it is no longer necessary to call dbCaGetAttributes.
calcPerform
This now returns a non zero value if the result is nan (not a number).
Record Name Length
The size of the name field has been expanded from 29 to 61, i.e. record names can now have 60 characters.
iocInit
initialProcess is now called before interruptAccept. This means that initial processing will be done before periodically scanned and I/O Inter scanned records start processing.
ellLib
Casts have been removed that suppressed valuable error messages
mbbiRecord
All existing manipulations of UDF in process() are removed and udf is set FALSE when the raw value is successfully read.
selRecord
In do_sel udf is not set false at the beginning. If selm has an invalid value recGblSetSevr(psel,SOFT_ALARM,MAJOR_ALARM) is called.
cdCommands file
Fixed a bug and revised the use of the IOCS_APPL_TOP setting in an
application's
dbStaticLib
All routines with Recdes of Fielddes in their name are obsolete and removed. A new routine dbDumpField replaces dbDumpFldDes.
devAiSoftRaw and devAoSoftRaw
A new state is defined for the LINR field. The name is "SLOPE", which allows any device type to be used with manual settings of the EOFF and ESLO fields. With this setting, the device support's special_linconv() routine is only called when LINR=LINEAR.
The RTEMS TFTP remote filesystem driver now supports a limited form of the chdir() system call. One restriction is that all pathnames passed to chdir() must end in a / character, so IOC shell commands to change directories must be given as
cd ../db/
The unbundled version of the sequencer has been build and tested with this release. You must obtain a version of the sequencer that has been built against alpha2.
A verion of the HPlanGpib support has been built and tested with this release. Again you must obtain a version that builds with alpha2.
A new update to the Application Developer's Guide is available for this release.
change INSTALLDB to DB
change DBDINSTALL
to DBD
This is the first release of 3.14. This is the first release that supports iocCore on platforms besides vxWorks.
iocCore is now supported on the following platforms:
http://www.aps.anl.gov/epics/base/R3-14/2.php
Most of the Application Developer's Guide has only minor changes. The following are new.
It must be emphasized that this is an alpha release.