Files
epics-base/documentation/RELEASE_NOTES.html
2006-11-29 20:29:06 +00:00

1986 lines
75 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>EPICS Base R3.14.x Release Notes</title>
</head>
<body lang="en">
<h1 align="center">EPICS Base Release 3.14.x</h1>
<h2 align="center">Changes since 3.14.8.2</h2>
<!-- Insert new items below here ... -->
<h4>cas</h4>
<p>There was a bug in the portable channel access server library that prevented
the PV Gateway from being able to handle and pass on alarm acknowledgements from
the EPICS Alarm Handler ALH. This has been fixed in this release and should only
require that the gatewey be recomplied against this version of Base.</p>
<h4>dbLoadTemplate</h4>
<p>The parser for the substitutions file accepted by dbLoadTemplate() has been
revised, and is now stricter than it used to be &mdash; unmatched characters
that were accepted and discarded without warning before will now generate
errors. The quote characters at the two ends of a quoted string value must now
match, although either single or double quotes can be used. Escaped characters
inside a quoted string should pass safely through to the underlying
dbLoadRecord() command. The characters permitted in a bareword parameter (i.e. a
filename or value that is not inside quotes) have been reduced from the overly
wide set allowed before; the permitted characters now comprise: <tt>a-z A-Z 0-9
_ - + : . / \ [ ] &lt; &gt; ;</tt></p>
<h4>Escaped characters in record fields</h4>
<p>Field value strings loaded from a database file by dbLoadRecords() can now
use C89-compatible escaped character codes such as \", \', \t, \n, \064 and
\x7e. The parser also now checks for and reports strings that have a newline
character in them as an error - if you want a newline in a field, use the \n
escaped version. These escapes only apply to the value part of a field() entry
in .db file though; no other strings have escape codes translated.</p>
<h4>libCom/test and db/test</h4>
<p>These test programs are no longer installed into the bin/<i>arch</i>
directory. Running all these programs on any host architecture is as simple as
typing <tt>make runtests</tt> in the base top level directory or in any
appropriate subdirectory. The runtests target uses Perl's Test::Harness module
to execute all of the test programs and summarize the result. It is also
possible to run individual tests as desired, by executing them from the relevent
O.&lt;arch&gt; directory; the program output is designed to be comprehensible to
humans.</p>
<p>For vxWorks and RTEMS, a test harness has been created that will run all of
the test programs in a suitable order. At a vxWorks target shell, type:</p>
<blockquote>
<pre>ld &lt;/path/to/base/bin/vxWorks-<i>arch</i>/vxTestHarness.munch
cd "/path/to/writable/directory"
epicsRunLibComTests</pre>
</blockquote>
<p>On RTEMS, boot the <tt>bin/<i>arch</i>/rtemsTestHarness</tt> binary.</p>
<p>You may wish to capture the output from running these to a file to more
easily check the results, since there is no wrapper program to collect and
summarize the results of the individual test programs.</p>
<h4>Breakpoint tables</h4>
<p>The handling of breakpoint table data has been reworked. It is now possible
to give table data in either ascending or descending order, and the breakpoint
data may have a negative slope such that the engineering values increase while
the raw values decrease and vice versa. The only restriction on the data is that
is must be monatonically increasing or decreasing, so you can't use a breakpoint
table for curves that have local minima or maxima. This restriction is checked
for when the breakpoint table is loaded.</p>
<h4>Support for vxWorks 6</h4>
<p>The build configuration support for vxWorks 6.x has changed significantly,
having been recombined with the older vxWorks 5.x support. The two target
architectures <tt>vxWorks6-mv2100</tt> and <tt>vxWorks6-mv5100</tt> have been
removed; IOCs built under vxWorks 6.x using these architectures must revert to
the original <tt>vxWorks-ppc603_long</tt> and <tt>vxWorks-ppc604_long</tt>
architectures instead. The configuration file CONFIG_SITE.Common.vxWorksCommon
now specifies the vxWorks version number, as well as the filesystem path to
the installation of vxWorks using the WIND_BASE variable.</p>
<h4>postfix and calcPerform</h4>
<p>The calc expression parser and exective have undergone a signficant overhaul,
although the API and expression language supported are backwards compatible with
one minor exception, described below. Significant improvements have been made to
both the API and the expression language: Multiple values can be calculated and
assignments made in a calc expression; Error reporting for humans is now
supported by the expression parser, and code can discover what inputs and
outputs are needed and generated by an expression.</p>
<p>Assignment operations are now possible, using the new <tt>:=</tt> operator
which must have an expression variable (<tt>A</tt> through <tt>L</tt>) to its
immediate left. Multiple expressions can be included in the calculation string,
separated by a semicolon <tt>;</tt>, all but one of which must be assignments.
The value of the whole string is determined by the single non-assignment
expression, which may appear anywhere in the string. For example, the following
string causes a single CALC record to output the successive values of a sine
curve in 1 degree intervals: <tt>sin(a);&nbsp;a:=a+d2r</tt></p>
<p>Previously any expression that performed an invalid operation which would
generate a NaN or Inf result would be stopped immediately and return an error to
the caller. Now it is possible to perform operations that generate NaN or
infinite results, and the results are returned as normal. The result of the
expression or the value assigned to a variable may thus be a NaN or an
infinity. To permit this to be checked within the expression, the new operators
<tt>finite()</tt>, <tt>isinf()</tt> and <tt>isnan()</tt> have been added to the
expression language. The literal values <tt>Inf</tt> and <tt>NaN</tt> are also
now supported in expressions.</p>
<p>The only incompatible change to the expression language was to change the
<tt>NOT</tt> operator from performing a unary minus operation to an integer
bitwise not; the former meaning is illogical and as a result was probably not
used much, if at all &mdash; nobody complained when I discussed this on
tech-talk...</p>
<p>The extended API and the expression language are now discussed in detail in
chapter 19 (libCom) of the R3.14.9 version of the IOC Application Developer's
Guide.</p>
<h4>calc and calcout record, asLib</h4>
<p>As a result of the above changes to the calc expression parser and executive,
both the calc and calcout records and the Access Security library have been
modified to take advantage of the new error diagnostics. The Access Security
library has been made to reject any expression that contains an assignment
operation, to prevent any possible security holes that might be caused by this
significant change to the expression rules.</p>
<p>The calc and calcout records have had some subtle changes applied: To
mitigate the effects of the Inf/NaN behaviour change, the result of an
expression is checked for NaN, which will result in the UDF field being set and
an Undefined/INVALID_ALARM being raised as a result.</p>
<p>An empty string is no longer a legal expression, therefor the CALC and OCAL
fields have been changed so that their default value is a literal <tt>"0"</tt>
string. Also any calcout record device support must now add the line
<tt>#include&nbsp;"postfix.h"</tt> before the
<tt>#include&nbsp;"calcoutRecord.h"</tt> line in the source code.</p>
<h4>recGblAlarmHook</h4>
<p>The <tt>recGblResetAlarms()</tt> routine (which is called by all record types
towards the end of record processing) now optionally calls a single hook routine
via the function pointer <tt>recGblAlarmHook</tt> after it has updated a
record's alarm status and severity. See regGbl.h for the hook routine prototype
definition, the routine is also given the previous values of the record's status
and severity. The hook routine must not block, since this would hold up record
processing.</p>
<h4>ai, bi, mbbi and mbbiDirect records</h4>
<p>These record types now support raw simulation mode. If the value of the SIMM
field is 2 (enum string "RAW"), the SIOL link value is placed into the RVAL
field and passed through the raw to engineering units conversion process just
like the real device support's raw value would be.</p>
<h4>dbpr</h4>
<p>The TIME field of a record is now displayed in a human readable format. TIME
used to have an interest level of 4 since it was output in hex and not very easy
to understand, but it has now been moved to interest level 2.</p>
<h4>configure/RELEASE*</h4>
<p>The <tt>convertRelease.pl</tt> parser now supports the use of
<tt>-include</tt> statements in configure/RELEASE files as well as
<tt>include</tt> statements.</p>
<h4>MIPS support</h4>
<p>Changes were needed to the <tt>configure/tools/munch.pl</tt> script to
support vxWorks-MIPS targets.</p>
<h4>epicsUnitTest</h4>
<p>A new facility is provided in libCom for use in generating automated test
programs. Many (but not all) of the test programs in <tt>libCom/test</tt> have
been converted to use this facility.</p>
<h4>dbStaticLib</h4>
<p>Off-by-one buffer overflow error fixed in dbFindField() which only seemed to
affect vxWorks-(intel) targets.</p>
<h4>RTEMS</h4>
<p>Added space for user extensions. This provides the infrastructure for the
spy command.</p>
<p>Fixed error in epicsThreadGetName for non-EPICS threads.</p>
<p>Added hooks for application routines to supply special network configuration
parameters.
The RTEMS startup code calls epicsRtemsInitPreSetBootConfigFromNVRAM just
before reading values from NVRAM and
epicsRtemsInitPostSetBootConfigFromNVRAM just afterwards. See
epicsRtemsInitHooks.h for prototypes and global variables.</p>
<h4>libCom</h4>
<h4>e_flex</h4>
<p><tt>e_flex</tt> has been modified to accept DOS line endings as well as Unix
ones. The <tt>scan.c</tt> file was recreated using <tt>e_flex</tt> itself and
the <tt>flex.skel</tt> file on the modified <tt>scan.l.DISTRIB</tt> source.
<tt>initscan.c</tt> is not required or used for the EPICS build, so it has been
removed.</p>
<h4>devLib</h4>
<p>devLib is now built for all architectures, whereas before it was only built
on RTEMS and vxWorks. However for it to be usable there must be an appropriate
table of OS-specific routines provided. For those OSs that don't implement these
routines a default table is defined which will result in an error on any attempt
to use devLib routines, but the default table can be overridden in an external
library that provides an appropriate table. This subtle change was implemented
to allow use of the SIS 3100 PCI to VME bridge from Linux, and needs no change
to the other implementations of <tt>devLibOSD.c</tt>.</p>
<h4>iocsh</h4>
<p>Added epicsThreadResume command.</p>
<h4>libCom</h4>
<p>mallocMustSucceed and callocMustSucceed accept 0-byte requests. Note that
these routines may return a NULL pointer in such cases.</p>
<h4>Mac OS X (Darwin)</h4>
<p>Added support for EPICS_HOST_ARCH=darwin-ppcx86 for building libraries/applications
which will run on both PowerPC and Intel x86 targets.</p>
<p>Added support for EPICS_HOST_ARCH=darwin-x86.</p>
<h2 align="center">Changes since 3.14.8.1</h2>
<h4>epicsStrtod</h4>
<p>On architectures whose native version of strtod() actually works properly
(i.e. converts +/-Inf[inity] and NaN strings to their double equivalents) we
managed to break the use of this in the R3.14.8.1 release. This is now
fixed.</p>
<h2 align="center">Changes since 3.14.8</h2>
<h4>Version Numbering</h4>
<p>This release adds a fourth level of version number, which we haven't used
since R3.13.1.1. The intention is to imply that R3.14.8.1 includes some small
but important changes since R3.14.8 but no signficant new behaviours or API
modifications. This fourth level has required us to modify the version number
system and the macros in the epicsVersion.h file slightly though. We have taken
the opportunity to introduce a new variable <tt>EPICS_SITE_VERSION</tt> to the
file configure/CONFIG_SITE that adds an optional site-specific version number;
sites that were achieving this by editing the configure/CONFIG_BASE_VERSION file
should switch to setting <tt>EPICS_SITE_VERSION</tt> instead.</p>
<h4>CA</h4>
<p>Mantis entries fixed:</p>
<p>232 - non-preemptive mode client relying on ca_poll does not always
reconnect</p>
<h4>Win32 symbol changes</h4>
<p>These changes are required to allow software outside of Base to be built on
win32 architectures.</p>
<ul>
<li>win32 epicsShareAPI changes to libCom
<p>The win32 Pascal calling convention (epicsShareAPI) has been removed
from the following header files in libCom/misc: adjustment.h,
cantProceed.h, epicsConvert.h, epicsStdlib.h, epicsString.h.</p>
</li>
<li>epicsString
<p>A new function epicsStrtok_r has been added because win32 does not
implement strtok_r.</p>
</li>
<li>epicsStdlib
<p>All function described in epicsStdlib.h are now implemented in
epicsStdlib.c</p>
</li>
<li>win32 epicsShareExtern changes in dbStaticLib
<p>The type name mapping array mapdbfType defined in dbFldTypes.h has had
the correct export modifier keywords added to it for use on win32.</p>
</li>
</ul>
<h2 align="center">Changes since 3.14.7</h2>
<h4>New host targets</h4>
<p>Configure files are now available to support the win32-x86-mingw (MinGW
C++ compiler) and win32-x86-cygwin (WIN32 API with cygwin C++ compiler) host
targets.</p>
<p>Configure files were also added for linux-x86_64 and solaris-sparc64 but
these files are for experimental purposes only and to show that we are
working on these targets. Currently these two 64 bit targets are not passing
our test suite, so they must not be used in production systems.</p>
<h4>Runtime Hardware Address Changes</h4>
<p>An Extended Device Support mechanism has been introduced which is designed
as a safe way to widen the API between iocCore and the device support
software it interfaces with. An extended device support can now be notified
of changes to a record's hardware address, and is given the chance to approve
or reject that change.</p>
<p>As a result of introducing this notification mechanism, any device support
that was capable of handling runtime address changes in prior versions of
Base will have to be updated to provide the new interface, since the absence
of extended device support is now taken to mean that runtime address changes
are not understood by the device support. This requirement is not expected to
affect many EPICS sites.</p>
<h4>POSIX thread priority scheduling</h4>
<p>POSIX thread priority scheduling is now supported. There is a new user
option USE_POSIX_THREAD_PRIORITY_SCHEDULING in the CONFIG_SITE configure file
for using POSIX thread priority scheduling. For now the default value is NO.
This has only been tested on a few versions of linux. On linux, in order, to
use real time priorities the option must be set to YES and the ioc must be
started with root privilages.</p>
<h4>VX_DIR</h4>
<p>The definition VX_DIR was removed from configure/RELEASE and moved to
configure/os/CONFIG_SITE.Common.vxWorksCommon. The configure/RELEASE* files
should contain location definitions for EPICS modules only.</p>
<h4>RTEMS_BASE</h4>
<p>The definition RTEMS_BASE (and RTEMS_VERSION) were removed from
configure/RELEASE and moved to configure/os/CONFIG_SITE.Common.RTEMS. The
configure/RELEASE* files should contain location definitions for EPICS
modules only.</p>
<h4>event generator and event receiver record support</h4>
All apsEvent specific record support has been removed from base
<h4>drvTS and apsEvent support</h4>
<p>The following files have been removed from base: drvTS.h drvTS.c, egDefs.h
egRecord.c egRecord.dbd egeventRecord.c egeventRecord.c egeventRecord.dbd
erDefs.h erDefs.h erRecord.c erRecord.dbd ereventDefs.h ereventRecord.c
ereventRecord.dbd</p>
<p>These are removed from EPICS base. The version that previously came with
base was the version that worked with the APS event system. It is available
from APS. The version that works with the newer event systems that evolved
from the APS system is available from the Swiss Light Source.</p>
<h4>task watchdog</h4>
<p>It was possible for taskwd (task watchdog) to not detect when some of the
standard tasks failed. This is because they were passing their threadid
rather than using epicsThreadGetIdSelf. It was possible to call taskwdInsert
before the threadid was actually set.</p>
<h4>dbLock and dbBkpt</h4>
<p>dbLockGetLockId incorrectly always returned 0. dbBkpt (database breakpoint
facility) is the only code that needed this. This caused unknown errors if
the dbBkpt facility is used.</p>
<h4>gpHashLib.c</h4>
<p>The maximum size was initialized to 65636 instead of 65536.</p>
<h4>epicsExport.h</h4>
<p>Add additional cast to prevent 'strict aliaising' warnings.</p>
<h4>iocsh</h4>
<p>I/O redirection from vxWorks startup scripts now works.</p>
<h4>dbRecordsOnceOnly</h4>
<p>This new variable which can be controlled using the iocsh <tt>var</tt>
command (or by simple assignment in the vxWorks shell) allows users to change
the behaviour of <tt>dbLoadRecords()</tt> when it finds a duplicate record
definition. The default behaviour has always been to permit multiple record()
statements for the same record name when loading record instances, but by
setting <tt>dbRecordsOnceOnly</tt> to any non-zero value, duplicates will
instead generate an error message instead. It is expected that this will
only be used in special circumstances, to detect the presence of
unintentional duplicates where it is known that they should not exist.</p>
<h4>select record</h4>
<p>This record now sets and posts monitors on its SELN field indicating which
of the inputs was selected, independent of which selection mechanism was
selected via the SELM field. This makes it much more useful, especially when
the High, Low or Median mechanisms are chosen.</p>
<h4>macLib</h4>
<p>Macro expansions in any program using the macLib facility from libCom can
now include a default value which will be used if the macro named is not
defined at the moment of substitution. The syntax for this is
<tt>$(name=default)</tt> or <tt>${name=default}</tt>. The default string can
itself contain other macros like this: <tt>$(name=$(default))</tt>. This
feature has actually been present since R3.14.6.</p>
<h4>errlog</h4>
<p>On a powerPC, during iocInit, a crash could occur. In particular the
SYNAPPS version of save_restore experienced crashes. This is now fixed.</p>
<h4>ca</h4>
<p>Mantis entries fixed.</p>
<p>221 - should shutdown full duplex comm on udp sockets if not used</p>
<p>192 - concurrency bug in channel access to local DB</p>
<p>181 - ca_host_name() now returns the host name of the client, not the
host:port of the server</p>
<p>161 - issues surrounding manipulation of CA contexts</p>
<p>153 - CA (caput) client does not reconnect after server
suspend-continue-shutdown cycle</p>
<p>111 - non-preemptive clients disconnect if ca_poll() isnt called
regularly</p>
<h4>portable ca server</h4>
<p>Mantis entries fixed.</p>
<p>196 - portable server library intermittent hang on UNIX systems</p>
<p>191 - corrupt value when doing a put through portable server (little
endian host)</p>
<p>175 - example portable server array PV 'alan' does not have time stamps</p>
<h4>gdd (used by portable server)</h4>
<p>Mantis entries fixed.</p>
<p>211 - GDD: aitConvertStringEnum16 does nothing if
pEnumStringTable==NULL</p>
<h4>RTEMS port</h4>
<p>Added support for setting NFS server/mount information from PPCBUG
argument strings.</p>
<p>rtems_shutdown_executive is now called on IOC exit. On many BSPs this
will return control to the bootstrap PROM.</p>
<p>Set POSIX TZ environment variable from NVRAM, or failing that, from
EPICS_TIMEZONE.</p>
<p>Cleaned up support for obtaining network configuration from NVRAM.</p>
<p>Added support for some additional boards.</p>
<p>Set iocsh prompt from host name.</p>
<p>Initialize in-memory filesystem from tar image following executable in
bootstrap flash memory. This allows for fully standalone IOCs -- no TFTP/NFS
server required.</p>
<p>Set IOC_NAME and IOC_STARTUP_SCRIPT environment variables from bootstrap
parameters.</p>
<h4>vxWorks port</h4>
<p>Fixed mantis entry.</p>
<p>179 -base does not build with vxWorks 6.0</p>
<p>225 - On vxWorks epicsThreadCreate returned -1 instead of 0 if a thread
could not be created. This is fixed.</p>
<h4>OS X port</h4>
<p>Builds on Tiger.</p>
<p>Readline now used by default.</p>
<h4>WIN32 port</h4>
<p>Fixed mantis entries.</p>
<p>195 - explicitly unloading Com.dll causes crash</p>
<p>230 - assert fail of caget, caput, etc under msvc 8</p>
<p>231 - manifest files not installed under visual C++ 8</p>
<h4>POSIX port</h4>
<p>Fixed mantis entries.</p>
<p>186 - failure after exit command if log client is running</p>
<p>222 - osiSpawnDetachedProcess doesnt close open files in dupicate process
on POSIX</p>
<h2 align="center">Changes since 3.14.6</h2>
<h4>selRecord</h4>
<p>The select record type has for a long time made use of a coule of magic
numbers (1e+30 and -1e+30) to mean "not a real value", which prevents the
record from working properly if one or other of these appears as an actual
data value. These have been changed to use +Inf and -Inf or NaN instead, so
+/-1e+30 may be used as a data value.</p>
<h4>ai, ao, dfanout and subroutine Records</h4>
<p>These record types have been modified to respond better to NaN values as
follows: if the VAL field contains a NaN value, the UDF field will be set and
an undefined value alarm will be triggered.</p>
<h4>epicsStdlib.h/epicsStrtod()</h4>
<p>epicsStdlib.h declares epicsStrtod() which provides a version of strtod
which handles NAN/INF on all architectures. All uses of strtod() in base
have been converted to use epicsStrtod().</p>
<p>epicsStdlib.h also declares epicsScanFloat() and epicsScanDouble() which
replace calls to sscanf with routines which handle NAN/INF on all
architectures.</p>
<h4>epicsThreadCreate Stacksize Posix</h4>
<p>The posix implementation of epicsThreadCreate() now makes pthread calls to
set the stack size. The sizes returned by epicsThreadGetStackSize() for the
inputs epicsThreadStackSmall, epicsThreadStackMedium and epicsThreadStackBig are
128K, 256K and 512K respectively on at least the architectures Linux, Solaris,
HPUX and Darwin (different values are used on vxWorks and RTEMS). This allows
creation of many more threads on most systems.</p>
<h4>dbNotify</h4>
<p>dbNotifyCancel now waits if the userCallback is active when dbNotifyCancel
is called. Previously it just returned. NOTE CAREFULLY. This means that the
userCallback must not free the putNotify structure.</p>
<h4>CA commandline tools</h4>
<p>caget and camonitor now have an additional "-s" option to explicitly
request server-side string conversion, which - in case of the regular CA
server - leads to "precision" info (e.g. the PREC field of an EPICS record)
being honoured.</p>
<h4>POSIX signals</h4>
<p>Signals are blocked in all but the main thread. Applications/drivers
which require signal delivery to a subthread will need to be modified.</p>
<h4>epicsExit</h4>
<p>Three new functions are implemented: <tt>epicsExit</tt>,
<tt>epicsExitCallAtExits</tt>, and <tt>epicsAtExit</tt>. These are similar to
<tt>exit</tt> and <tt>atexit</tt>, i.e. they provide the ability to register
a function to be called when the process exits. They are provided becase
neither vxWorks or win32 properly implement <tt>exit</tt> and
<tt>atexit</tt>. Note that they apply to an IOC stopping NOT to a thread
exiting.</p>
<h4>epicsStdio and epicsStdioRedirect</h4>
<p>In order to support iocsh redirection of <tt>stdin</tt>, <tt>stdout</tt>,
and <tt>stderr</tt>, <tt>epicsStdio.h</tt> defines the following new
functions: <tt>epicsGetStdin</tt>, <tt>epicsGetStdout</tt>,
<tt>epicsGetStderr</tt>, <tt>epicsSetStdin</tt>, <tt>epicsSetStdout</tt>,
<tt>epicsSetStderr</tt>, and <tt>epicsStdoutPrintf</tt>.
<tt>epicsStdioRedirect.h</tt> defines macros that redefine <tt>stdin</tt>,
<tt>stdout</tt>, <tt>stderr</tt>, and <tt>printf</tt>.</p>
<p>Any code that includes <tt>epicsStdioRedirect.h</tt> will automatically
have it's stdio redirected. It has been added to many files in base. If code
called by dbior wants it's output redirected, it must also include this
file.</p>
<h4>IOC Test Facilities</h4>
<p>Any command that previously had an argument for a report file name no
longer has the argument. The new iocsh redirection capability is now used.
For example the former command:</p>
<pre> dbl "0" reportName</pre>
<pre>Is now:</pre>
<pre> dbl &gt; reportName</pre>
Note that this does NOT work on the vxWorks shell only on iocsh. On the
vxWorks shell the following command can be given:
<pre> iocshCmd("dbl &gt; reportName")</pre>
<h4>errlog</h4>
<p>errlog now calls <tt>epicsAtExit</tt> and releases all resources when
<tt>epicsExitCallAtExits</tt> is called.</p>
<h4>libCom</h4>
<p>epicsStrGlobMatch() routine added.</p>
<h4>iocsh</h4>
<p>Input/output redirection added.</p>
<p>iocshCmd routine added (callable from vxWorks shell).</p>
<p>help command uses globbing.</p>
<h4>calcoutRecord</h4>
<p>The ODLY (Output Delay) was not handled properly. This is fixed.</p>
<h4>compressRecord</h4>
<p>make sure reset gets called when size of INP array changes.</p>
<h4>dbAccess DBR_ENUM_STRS for field DTYP</h4>
<p>Data Base Request Option DBR_ENUM_STRS for the DTYP field of soft records
can cause an IOC to crash.</p>
<h4>RTEMS</h4>
<p>RTEMS implementation of epicsMessageQueuePending() now works.</p>
<p>Added support for MVME2100 BSP.</p>
<p>Added support for building RTEMS bootable images.</p>
<h4>iocBoot/ioc* build change</h4>
<p>The cdCommands and envPaths files are now created in ioc* directory only
when the ARCH defined in the ioc*/Makefile is present in BUILD_ARCHS for the
build.</p>
<h2 align="center">Changes since 3.14.5</h2>
<h4>CA command line tools complete</h4>
<p>The complete set of Channel Access command line tools (caget, caput,
camonitor, cainfo) is available as announced during the May 2004 Collab.
meeting. Documentation is part of the CA Reference Manual. Be aware of
possible name conflicts with existing local tools.</p>
<h4>IOC template file configure/RULES.iocBoot removed</h4>
<p>The directory name wildcards that were defined here have been moved to
iocBoot/Makefile, which as a result is no longer unique in having its own
configure/RULES file.</p>
<h4>APS Virtual Linac template removed</h4>
<p>This is really a demo and a complete EPICS IOC application, not a
template. It will be made available separately.</p>
<h4>EPICS_HOST_ARCH win32-x86-cygwin renamed to cygwin-x86</h4>
<p>The EPICS_HOST_ARCH win32-x86-cygwin was renamed cygwin-x86 to avoid
confusion about what OS interfaces are used on Windows: native win32 or
cygwin's emulation of POSIX. Now we have</p>
<ul>
<li>win32-x86 Uses native win32 interfaces with MS compiler.</li>
<li>win32-x86-borland Uses native win32 interfaces with borland
compiler.</li>
<li>win32-x86-gnu Uses native win32 interfaces with cygwin gnu compiler.
(Not implemented yet.)</li>
<li>cygwin-x86 Uses cygwin POSIX interfaces with cygwin gnu compiler.</li>
</ul>
<h4>EPICS_TS_NTP_INET</h4>
<p>The time server's IP address used by the vxWorks clock routines was not
reading the default value from the generated envData.c file but going
straight to the boot host if no environment variable by that name was set.</p>
<h4>CONFIG_ENV and CONFIG_SITE_ENV</h4>
<p>These files are now parsed by a program that recognizes and ignores
comment lines. Previous versions of this parser would extract settings from
these files even if they appear on a line starting with a '#' character, so
the last line containing a setting for any variable would give the value used
as the default. This was first noticed in R3.14.5 where a commented-out
setting for the <code>EPICS_TIMEZONE</code> parameter was added
<em>after</em> the uncommented version.</p>
<h4>db test shell commands</h4>
<p>Many of the commands crashed if given no arguments. They are now more
crash proof.</p>
<h4>db_access - conversion of double to float</h4>
<p>When a CA user asked for display or control limits as a float a 0 value
was returned as -1.17549435E-38. This is now fixed.</p>
<h4>New DBD rule</h4>
<p>A new dbd rule will create a &lt;name&gt;Include.dbd from files specified
in a &lt;name&gt;_DBD macro definition. An include line will be placed in the
&lt;name&gt;Include.dbd for each file specified in the &lt;name&gt;_DBD
definition. If a Makefile contains</p>
<pre> DBD=xxx.dbd
xxx_DBD = f1.dbd f2.dbd f3.dbd </pre>
<p>an xxxInclude.dbd file will be created containing the lines</p>
<pre> include "f1.dbd"
include "f2.dbd"
include "f1.dbd"</pre>
<p>and dbExpand will be invoked to create the xxx.dbd file from the
xxxInclude.dbd.</p>
<h4>Solaris Builds</h4>
<p>Old solaris 6 specific compiler options have been removed.</p>
<h4>New make targets cvsclean and archclean</h4>
<p>The new top level Makefile only target, cvsclean, removes cvs .#* files in
all dirs of the top directory tree.</p>
<p>The new archclean target is like the clean target except that O.Common
directories are not removed.</p>
<h4>epicsString</h4>
<p>Add epicsSnStrPrintEscaped.</p>
<h4>epicsExport</h4>
<p>epicsExportAddress(typ,obj) now generates an extern named pvar_typ_obj and
epicsExportRegistrar(func) an extern named pvar_func_obj. Previously both
just named the variable pobj.</p>
<p>epicsRegisterFunction(name) in conjunction with the dbd 'function' keyword
can be used to register functions referred to by record subroutine name
fields.</p>
<h4>Access Security</h4>
<p>The access security configuration rules now accept quoted strings where
just names were allowed previously.</p>
<p>All dump routines now have FP version.</p>
<p>A new shell command "ascar(int level)" is now available. It produces a
report of the INP channel access connections. Level (0,1,2) produces (a
summary report, summary plus unconnected channels, summary plus report of all
channels)</p>
<h4>Channel Access Client Library</h4>
<ul>
<li>Fixed "subscription updates intermittently do not resume when
unresponsive circuit reconnects" bug
<ul>
<li>Scope:
<p>This bug was introduced in R3.14.5 and does not exist in any other
release.</p>
</li>
<li>Symptom:
<p>Subscription updates intermittently do not resume depending on
circumstances when unresponsive circuit reconnects</p>
</li>
<li>Additional Information:
<p>A decision was made to add a change to EPICS R3.14.5 so that when
a TCP circuit is temporarily unresponsive the channel, but not the
circuit, is immediately disconnected. This change was determined to
be necessary to improve overall system robustness in the face of IOC
or network overload. Unfortunately, an error was made when installing
these changes. I am sorry about any inconvenience that this has
caused. Thanks to Ken Evans at the APS for discovering this
problem.</p>
</li>
</ul>
</li>
<li>Fixed "ca_replace_access_rights_event() fails if passed a nill function
pointer" bug
<ul>
<li>Scope:
<p>This bug probably exists in all R3.14 releases.</p>
</li>
<li>Symptom:
<p>Passing a nill function pointer to
ca_replace_access_rights_event() should install a noop handler, but
this currently causes a failure.</p>
</li>
<li>Additional information:
<p>Regression tests have been installed to detect this mistake.</p>
</li>
</ul>
</li>
<li>Fixed "CA client library crash when clear channel request occurs in get
callback handler" bug
<ul>
<li>Scope:
<p>This bug was introduced in R3.14.5 and does not exist in any other
release.</p>
</li>
<li>Symptom:
<p>CA client library crash when clear channel request occurs in get
callback handler</p>
</li>
<li>Additional information:
<p>When testing the striptool application, Ken Evans, discovered a
bug in the CA client library occurring when a clear channel request
occurs in get callback handler. Regression tests have been updated so
that this mistake will not slip through testing undetected in a
future release.</p>
</li>
</ul>
</li>
<li>Fixed "Double server subscription install when subscription request
occurs in connection callback handler" bug
<ul>
<li>Scope:
<p>This bug was introduced in R3.14.5 and does not exist in any other
release. Subscription request must be made from within connection
callback handler</p>
</li>
<li>Symptom:
<p>It has been discovered (by Ken Evans while testing the gateway)
that certain subscription requests were persisting in the gateway
after clients had deleted them. This bug causes additional resources
to be consumed, but does not result in a crash.</p>
</li>
<li>Additional information
<p>Additional debugging has revealed that the CA client library in
this situation inadvertently made the subscription request twice:
once at the users&#x2019; request, and later on again when the
library auto installed subscriptions for disconnected channels.</p>
</li>
</ul>
</li>
<li>Fixed "failure when deleting channel in get callback handler" bug
<ul>
<li>Scope:
<p>Probably introduced in a previous R3.14 release.</p>
</li>
<li>Symptom:
<p>An intermittent C++ exceptions during regression testing.</p>
</li>
</ul>
</li>
</ul>
<ul>
<li>Behavior Changes
<ul>
<li>Process blocks attempting to exit if the application does not call
ca_context_destroy()
<p>In EPICS release R3.14 the CA client library is implemented using
axillary threads. If the application does not call
ca_context_destroy() these threads will still be running, and
depending on operating system conventions the process may
<em>not</em> exit if the main thread exits, but axillary threads are
still running. Note that ca_context_destroy() is functionally
equivalent to the deprecated call ca_task_exit().</p>
</li>
</ul>
</li>
</ul>
<h4>Channel Access Portable Server (used by the CA gateway and others)</h4>
<ul>
<li>Fixed "assert fail when writing string through Portable CA Server" bug
<ul>
<li>Scope:
<p>This bug is only present in the portable CA server and so it does
<em>not</em> impact IOC based applications. The bug is present in the
CA gateway and any portable CA server based application. This problem
may have been recently introduced when GDD was patched to properly
handle fixed sized strings.</p>
</li>
<li>Symptom:
<p>Failure, when writing large string through the portable CA server.
There appears to be a possibility of the wrong string being written
when a smaller string is used. You may see the following message.</p>
<p>A call to "assert (! this-&gt;pValue-&gt;unreference ())" failed
in ..\..\..\..\include\smartGDDPointer.h line 88.</p>
</li>
<li>Additional Information:
<p>Thanks to Stephanie Alison at SLAC for discovering the bug and to
Ken Evans at the APS for reminding me to fix it.</p>
</li>
</ul>
</li>
</ul>
<h2 align="center">Changes since 3.14.4</h2>
<h4>dbtr</h4>
<p>Don't seg-fault if no argument is passed to dbtr.</p>
<h4>New build targets.</h4>
<p>New files have been created in configure/os to allow
CROSS_COMPILER_TARGET_ARCHS to include solaris-sparc-gnu and
solaris-sparc-debug when EPICS_HOST_ARCH is solaris-sparc. Also
CROSS_COMPILER_TARGET_ARCHS can now include linux-x86-debug when
EPICS_HOST_ARCH is linux-x86.</p>
<h4>New epicsString.h function</h4>
<p>A new function epicsStrnCaseCmp has been added. It is like strncmp except
that it ignores case.</p>
<h4>R3.13 compatability files</h4>
<p>R3.13 compatability files are no longer generated automatically during the
build. configure/CONFIG_SITE contains two new macros for building
compatibility files. They are set to NO but can be set to YES. The macros
are:</p>
<ul>
<li>COMPAT_TOOLS_313
<p>This will install the compatibility files needed to build R3.13
extensions built with this R3.14 base.</p>
</li>
<li>COMPAT_313
<p>This will install the compatibility files needed to build R3.13
extensions and IOC applications built with this R3.14 base.</p>
</li>
</ul>
<h4>APS Virtual LINAC Templates</h4>
<p>A new set of templates has been included in R3.14.5 to implement a Virtual
LINAC in an ioc using databases and sequence programs. The Virtual LINAC
simulates the generation and transmission of an electron beam down a LINAC.
Several steering coils, BPMs, and other typical accelerator components are
simulated to provide a realistic interaction between the operator and the
"LINAC". Since it is an entirely soft application, it will work on any
platform. An medm display is provided as the primary GUI. It can also be used
to experiment with other CA client tools.</p>
<p>To install the templates, use the following commands:</p>
<pre> mkdir <top>
cd <top>
&lt;base&gt;/bin/&lt;arch&gt;/makeBaseApp.pl -t vlinac vlinac
&lt;base&gt;/bin/&lt;arch&gt;/makeBaseApp.pl -i -t vlinac vlinac</pre>
<p>For further information, see:</p>
<pre> &lt;top&gt;/vlinacApp/misc/README
&lt;top&gt;/vlinacApp/misc/Virtual_Linac_Info.pdf</pre>
<h4>Stringin record time-stamp soft device support</h4>
Add simple device support for converting time to nicely-formatted string
using INP field as epicsTimeToStrftime format string:
<pre>record(stringin, "$(user)now")
{
field(DESC, "Current time and date")
field(DTYP, "Soft Timestamp")
field(INP, "@%Y-%m-%d %H:%M:%S.%03f")
}</pre>
<h4>Channel Access Portable Server (used by the CA gateway and others)</h4>
<ul>
<li>Fixed failure occurring if client disconnected while asynchronous PV
attach was outstanding, or, for enumerated native type process variables,
while enumerated string table cache asynchronous IO was outstanding. This
problem does not occur in IOCs because they are not yet based on the
portable server library. This bug was first detected by Ken Evans in the
production CA gateway at the APS.</li>
</ul>
<h4>Channel Access Original Server (used in IOC)</h4>
<ul>
<li>A bug causing the server threads to become stuck in a state where they
process requests, but no longer send responses, if in the past the system
was experiencing network buffer starvation has been fixed. This problem
existed probably in all previous EPICS releases, but network buffer
starvation issues have become more prevalent starting with Tornado
2.0.</li>
<li>Users noticed that UDP related output from the casr diagnostic was
easily confused with the information from casr for TCP circuits. This has
been fixed.</li>
</ul>
<h4>Channel Access Client Library</h4>
<ul>
<li>Disconnect behavior is now more robust in response to congestion. When
a channel times out, the channel is disconnected, but not the circuit.
The circuit is only disconnected when the internal TCP/IP keepalive timer
fires or if teh IOC reboots with the same IP address. This will result in
less UDP search traffic during periods of congestion and also less TCP/IP
circuit thrashing. A side effect will be that if a user turns off a
vxWorks IOC, changes its IP address, and then reboots it, then the user
will need to wait out the full duration of the TCP/IP keepalive timer
before the client will reconnect. This is undoubtedly a negative side
effect, but it is felt that the improvements in robustness justify the
confusion resulting in the small number of situations that a vxWorks
IOC's IP address is changed.</li>
<li>In previous releases if a directory service returns the address of a CA
server that does <em>not</em> have the PV that is being sought then the
client library could end up sending search requests at a very high rate.
This problem has been fixed by placing all disconnected channels in a
queue implementing a short delay prior to there being ready again for
periodic name resolution requests.</li>
<li>In previous R3.14 releases the CA client library's search datagram
interval exponential backoff was flawed. CA's search datagram interval
exponential backoff should proceed following the sequence 30mS, 60mS,
120mS, 240mS, and so on. Or a similar behavior with higher initial delays
resulting from a round trip time delay estimate greater than 30 mS.
However, instead the backoff delays were 30mS, 30mS, 30mS, 30mS, 30mS,
30mS, 60mS, 120mS, 240mS, and on. This bug also impacted what CA does
when a channel disconnects or there is a beacon anomaly ( a new server
event). The intent was to start the search delay for disconnected
channels in these situations at 2 seconds but due to the above bug the
delay was more like 64mS. This bug appears only in earlier versions of
EPICS R3.14.</li>
<li>A bug has been found in the CA repeater supplied with EPICS R3.14.2
through R3.14.4 (inclusive). The symptom will be clients running for more
than a few minuites do not connect to a newly introduced server. Fixed in
R3.14.5.</li>
</ul>
<h4>dbCa</h4>
<p>Better error messages are now generated.</p>
<p>dbCaPutLinkCallback is a new function. It provides the ability to
implement record/driver support that does not complete until a channel access
put callback has completed. See the Application Developer's Guide for
details.</p>
<p>dbCaAddLinkCallback is a new function. The caller can provide a connect
and monitor callback. See the Application Developer's Guide for details.</p>
<h4>devXxSoftCallback</h4>
<p>Soft device that uses dbCaPutLinkCallback has been written for ao, bo,
calcout, longout, mbbo, mbboDirect, and stringout records. The dbd
definitions have been added to devSoft.dbd. In other to use the new support
the DTYP field is defined:</p>
<pre> field(DTYP,"Async Soft Channel")</pre>
<h4>calcoutRecord</h4>
<p>The CALC and OCAL fields now have a size of 40 so that they are the same
as the calcRecord.</p>
<p>calcoutRecord now has associated device support. The default support will
act just like the old calcout. Support bis also available that uses
dbCaPutLinkCallback.</p>
<h4>mbbiRecord</h4>
<p>The fields ZRST,...,FFST are now special(SPC_MOD).</p>
<h4>mbboRecord</h4>
<p>The fields ZRST,...,FFST are now special(SPC_MOD). init_record now checks
to see if state strings or values are defined during pass 0. Previously if
another record had a DBR_STRING link to an mbboRecord it thought the field
was a USHORT instead of an ENUM.</p>
<h4>epicsString</h4>
<p>A new function has been added epicsStrPrintEscaped, which converts the
standard C escape characters to \xxx characters.</p>
<h4>IOC shell system command</h4>
<p>The 'system' command has been added to the IOC shell. To enable this
command, add <code>registrar(iocshSystemCommand)</code> to an application
database description file.</p>
<center>
<h2>Changes since 3.14.3</h2>
</center>
<h4>sCalcPostfix</h4>
<p>This has been removed from base.</p>
<h4>Format string checking</h4>
<p>'printf-style' functions like errlogPrintf have their arguments verified
against their format string when compiled with gcc.</p>
<h4>IOC shell command-line editing on vxWorks</h4>
<p>The IOC shell now uses the vxWorks ledLib routines so command-line editing
is now the same in the IOC shell as it is in the vxWorks shell.</p>
<h4>CA client library crashes when the same PV name is on multiple
servers</h4>
<p>If the CA client library was searching for a PV name that was hosted on
more than one server a segmentation violation occurred when printing a
diagnostic message resulting in a failure of the CA client library. The bug
was introduced in R3.14.3. The code was tested on WIN32 prior to release, but
the problem has so far been reproduced only on Linux.</p>
<p>Thanks to Ernest Williams at the SNS for discovering and helping to
diagnose the problem.</p>
<h4>Disconnection callback function called when CA channel known to be
disconnected</h4>
<p>If a CA circuit timed out during the connect sequence then the CA client
library called the applications's disconnect callback function indicating a
disconnect state transition when the channel was already known to be
disconnected. This has caused the sequencer to improperly maintain its
connected channel count. Other CA client side tools may also be impacted.</p>
<p>Recent versions of vxWorks appear to experience a connect failure if the
vxWorks IP kernel reassigns the same ephemeral TCP port number as was
assigned during a previous lifetime. The IP kernel on the vxWorks system
hosting the CA server might have a stale entry for this ephemeral port that
has not yet timed out which prevents the client from connecting with the
ephemeral port assigned by the IP kernel. Eventually, after EPICS_CA_CONN_TMO
seconds, the TCP connect sequence is aborted and the client library closes
the socket, opens a new socket, receives a new ephemeral port assignment, and
successfully connects.</p>
<p>Thanks to Mark Rivers for initially reporting the bug and energetically
assisting with identifying the cause.</p>
<center>
<h2>Changes since 3.14.2</h2>
</center>
<h4>TPRO output</h4>
<p>The record processing trace output generated when the <code>.TPRO</code>
field of a record is non-zero now includes the name of the thread that is
actually doing the processing.</p>
<h4>calcRecord and calcoutRecord</h4>
<p>Previously if a dbGetLink failed on one of the input links, dbGetLink was
not called for the remaining links. Now it is.</p>
<h4>put notify</h4>
<p>put notify did not act properly if a record had disp=TRUE, i.e. if puts
are disabled. It now returns putNotifyPutDisabled.</p>
<h4>fastlock.h</h4>
<p>This is no longer supported</p>
<h4>devLib</h4>
<p>devLib is now supported on vxWorks and RTEMS. It has been moved from
src/vxWorks/src to src/libCom/osi. devLibVirtualOS has been extended to
support allocating A24 addresss and an init method.</p>
<h4>vxWorks dependent modules moved</h4>
The following have been moved from src/vxWorks/src to
src/libCom/osi/os/vxWorks: camacLib.h, drvTS.c, drvTS.h, epicsDynLink.c,
epicsDynLink.h, module_types.h, task_params.h, veclist.c. Brief documentation
has been added to the Application Developer's Guide.
<h4>Close-On-Exec flag set for all sockets created in EPICS base</h4>
<p>On POSIX systems if a Channel Access application spawns off 3rd party
software with an exec() call then all open file desriptors are inherited
unless the close-on-exec flag is set for each file descriptor. A new wrapper
function was created so that all sockets created in EPICS base will have the
close-on-exec flag set on POSIX systems. The function which spawns the CA
repeater with exec() used to close all open files except stdin/stdout/stderr.
This step was no longer required and therefore was removed from the code.</p>
<h4>Temporary Files on Windows</h4>
<p>The tmpfile() function on windows requires that all temporary files be
stored in the root folder. The antelope (yacc) tool in base was calling
tmpfile() and this was causing problems at sites where win32 systems use
remotely mounted secure file systems. A wrapper function called "FILE *
epicsTempFile()" that creates a temporary file on WIN32 with a name epicsNNN
using one of the following paths was installed into libCom. It searches
starting with (1) below and stops when it finds a specified path that exists.
On POSIX systems, and systems that default to POSIX behavior, epicsTempFile()
simply calls tmpfile().</p>
<ol>
<li>where the TMP environment variable specifies</li>
<li>in c:\tmp</li>
<li>in the current working directory</li>
</ol>
<h4>envPaths file</h4>
<p>For operating systems other than vxWorks, there is now a target file
created in each <code>iocBoot/ioc</code> directory called
<code>envPaths</code>, which performs the same functions as the
<code>cdCommands</code> file in vxWorks but using environment variables. The
entries in <code>envPaths</code> are derived from the contents of the
application's <code>configure/RELEASE</code> file.</p>
<h4>Macros in database filenames</h4>
<p>Database (<code>.db</code> and <code>.dbd</code>) filenames passed to
<code>dbLoadDatabase</code>, <code>dbLoadRecords</code> and inside
<code>dbLoadTemplate</code> substitutions files will now have environment
variable macros expanded before opening. These are expressed using the
standard <code>${MACRO}</code> syntax. Inside a template substitutions file
the filename must be enclosed in double quotation marks if macros are
used.</p>
<h4>registerRecordDeviceDriver output subroutine renamed</h4>
<p>The registration routine generated by the registerRecordDeviceDriver.pl
perl script now includes the name of the application, thus requiring a
one-line change to any IOC startup files produced with earlier R3.14 releases
of base. The actual name is taken from a second command line argument
supplied to the script by the modified make rules, and is derived from the
name of the fully expanded dbd file from which the necessary information is
extracted. The change needed to every startup script involves using this new
name in place of the old <code>registerRecordDeviceDriver</code>. Assuming
that your application's fully expanded dbd file is called
<code>example.dbd</code> you would modify the lines</p>
<blockquote>
<pre>dbLoadDatabase("dbd/example.dbd",0,0)
registerRecordDeviceDriver(pdbbase)</pre>
</blockquote>
<p>to become</p>
<blockquote>
<pre>dbLoadDatabase("dbd/example.dbd",0,0)
example_registerRecordDeviceDriver(pdbbase)</pre>
</blockquote>
<h4>dbExpand <code>-o outfile</code> option</h4>
<p>A commandline option <code>-o</code> has been added to the dbExpand
program to allow the name of its output file to be specified. If there are
any errors in the input file(s) the output file will not be generated or
modified at all. The rules to expand DBD files have been changed to make use
of this.</p>
<h4>New keyword <code>variable()</code> supported in dbd files</h4>
<p>Database definition (.dbd) files can now contain declarations of simple
static variables, a facility intended for driver debugging purposes. These
<code>variable(name)</code> or <code>variable(name,type)</code> declarations
are preserved by dbExpand (<code>type</code> is <code>int</code> if omitted),
and will be converted by registerRecordDeviceDriver.pl into code that
registers them with iocsh. The variables themselves must be defined in some
existing C or C++ code and marked using the macro
<code>epicsExportAddress(type,name)</code>. Only plain <code>int</code> and
<code>double</code> types are supported.</p>
<p><strong>macEnvExpand</strong></p>
<p>A facility for performing macro expansion using environment variables as
macro definitions has been added to libCom/macLib. The ioc shell now performs
macro expansion using this on all input lines (other than comments) before
printing and executing the line.</p>
<p><strong>iocsh var command</strong></p>
<p>For simple applications such as controlling the value of debugging flags.
Devlopers with more complex expression handling requirements should consider
use of the <strong>cexp</strong> package. The available variables are defined
by the new <code>variable</code> dbd file keyword.</p>
<p><strong>iocshArgPersistentString</strong></p>
<p>Tell iocsh to make a copy of the argument string before passing it to the
handler function.</p>
<p><strong>epicsStrDup</strong></p>
<p>Operating-system independent replacement for strdup().</p>
<p><strong>epicsMessageQueue</strong></p>
<p>The epicsMessageQueue API has been changed. All functions and methods to
receive a message now have an additional argument which specifies the size of
the receiver buffer. The receive functions/methods return -1 and the
received message is discarded if the received message will not fit in the
buffer. See the Application Developer's Guide (libCom OSI) for details.</p>
<p>This is an incompatible change. All R3.14.2 applications which use
epicsMessageQueue must be modified before they can be compiled and used with
R3.14.3</p>
<h4>Error Message Logging</h4>
<p>A bug occurring only in Microsoft Windows port of the error message
logging client was fixed. The symptoms were problems getting a Microsoft
Windows based IOC to make entries in the log file.</p>
<p>A bug occurring in the error message logging server where a partial
message arrives w/o a &lt;CR&gt; and then a &lt;CR&gt; from a previous
message was found in the input buffer was fixed. The problem must have
existed for a long time but probably was not occurring frequently. The
symptom was garbled output in the log file.</p>
<p>An IP kernel deadlock vulnerability occurring when vxWorks's tNetTask
calls logMsg because of a transient mbuf starvation situation has been fixed.
The fix was to not call logFdAdd for the log client's socket and instead
create a specialized vxWorks device driver which calls errlogPrintf for each
incoming message and then call logFdAdd for a file descriptor opened with
that device driver. The desirable functional change being errlogPrintf's
capability to discard messages when it gets behind (because of a transient
mbuf starvation situation). The fix also means that any code that calls
errlogAddListener on vxWorks, e.g. CMLOG, will now receive the logMsg
messages.</p>
<h4>Channel Access Client Library Client Context Cleanup Race Condition</h4>
<p>The symptom is a CA client program that fails with a segmentation
violation on Linux shortly after calling ca_task_exit()or
ca_context_destroy(). A fix will show up in R3.14.3. Regression tests were
updated to detect this type of problem.</p>
<h4>Red Hat 7.3 Linux Process Rundown Bug</h4>
<p>There appears to be a bug in the Red Hat 7.3 process rundown where posix
thread support is defective when file scope destructors are being run. The
symptom was a hang during process exit. A workaround was installed.</p>
<h4>Multiple CA Servers on MAC OSX</h4>
<p>A patch was made to allow multiple CA servers on MAC OSX. OSX is a recent
branch off of BSD and therefore requires socket option SO_REUSEPORT.</p>
<center>
<h2>Changes since 3.14.1</h2>
</center>
<p><strong>Build System</strong></p>
<p>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:</p>
<p><a
href="../2-docs/ConvertingR3.14.1AppsToR3.14.2.html">ConvertingR3.14.1AppsToR3.14.2</a></p>
<p>for details. If you are using the <strong>function</strong> DBD keyword it
no longer exists. Please read this conversion document for details.</p>
<p><strong>Application Developer's Guide</strong></p>
<p>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.</p>
<p><strong>dbGetLink</strong></p>
<p>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:</p>
<pre> prset-&gt;get_array_info(paddr,&amp;no_elements,&amp;offset);
write nNew elements into array &gt;&gt;
prset-&gt;put_array_info(paddr,nNew);</pre>
<p>This sets NORD = nNew. But because of the dbGetLink bug, the soft device
support attached to the waveform record sets NORD to NELM.</p>
<p>This problem is fixed. The actual bug was in macros in dbAccessDefs.h</p>
<p><strong>Access Security</strong></p>
<p>The host names are now converted to lower case. This fixes
incompatibilities between various platforms.</p>
<p><strong>string records</strong></p>
<p>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).</p>
<p><strong>epicsMessageQueue</strong></p>
<p>A new facility that provides the capabilities of vxWorks msgQLib. See the
Application Developer's Guide (libCom OSI) for details.</p>
<p><strong>epicsStdio and errlogPrintf</strong></p>
<p>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.</p>
<p>The errlogPrintf facility has been modified to use this facility. Thus it
is not longer subject to a possible buffer overflow.</p>
<p><strong>scanPeriod</strong></p>
<p>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.</p>
<p><strong>New epicsString.h function</strong></p>
<p>A new function epicsStrCaseCmp has been added. It is like strcmp except
that it ignores case.</p>
<p><strong>macLib</strong></p>
<p>macParseDefns did not check for handle==NULL. The documentation for
macParseDefns was not correct.</p>
<center>
<h2>Changes since beta2</h2>
</center>
<p><strong>function - New Database Definition Keyword</strong></p>
<p>dbStaticLib and related programs now accept a new keyword in DBD files:</p>
<pre>function(name)</pre>
<p>Where <code>name</code> 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.</p>
<p>dbStaticLib has two additional routines to support this, dbDumpFunction()
and dbWriteFunctionFP(). dbDumpFunction has been added to the iocsh command
table.</p>
<p><strong>iocsh</strong></p>
<p>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.</p>
<p><strong>Solaris build requirement</strong></p>
<p><code>uname</code> must be defined for builds on solaris hosts because it
is used to determine the solaris version.</p>
<p><strong>Linux build note</strong></p>
<p>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/&lt;arch&gt; will be automatically appended to each directory given).</p>
<p><strong>RULES.Db</strong></p>
<p>A <code>*[nn].db</code> file will be created from an
<code>*.template</code> and a <code>*[nn].substitutions</code> file ,where
<code>nn</code> has a value between 0 and 99.</p>
<p><strong>Support for 64 bit long</strong></p>
<p>Many changes were made to support architectures on which a long is a 64
bit integer. The basic change was to change:</p>
<ul>
<li>long =&gt; epicsInt32 for anything that might get transfered to/from
network buffers</li>
<li>unsigned long =&gt; epicsUInt32 for anything that might get transfered
to/from network buffers</li>
</ul>
<p>The changes include the following:</p>
<ul>
<li>cvtFast</li>
<li>xxxRecord.h NOTE: In addition to the changes for long all enum fields
are now epicsEnum16</li>
<li>dbStaticLib</li>
<li>db_access</li>
<li>dbConvert and dbFastLinkConv</li>
</ul>
<p><strong>Hardware Link Definitions</strong></p>
<p>The various parts of hardware link definitions now accept HEX values,
e.g.</p>
<pre>field(INP,"L0 A1 C0 S0xa @")</pre>
<p>NOTES:</p>
<ul>
<li>This may not be compatible with Database Configuration Tools</li>
<li>If records are written via dbStaticLib the falues will NOT be written
in HEX.</li>
</ul>
<p><strong>dbDumpFldDes</strong></p>
<p>A macro has been defined so that client code can be written that is
compatible between 3.13 and 3.14.</p>
<p><b>epicsMutex for posix</b></p>
<ul>
<li>No longer supports epicsMutexLockWithTimeout. This was done to allow a
more efficient posix implementation.</li>
<li>If PTHREAD_MUTEX_RECURSIVE is provided then the implementation uses
only pthread_mutex. This is much faster (2 to 3 times as fast) as the
previous implementation.</li>
</ul>
<p><strong>Mac OS X</strong></p>
<p>Now supported as development platform and as IOC.</p>
<p><strong>RTEMS</strong></p>
<p>Additional RTEMS-pc386 network drivers are available</p>
<p><strong>iocsh</strong></p>
<p>Configurable iocsh command-line editing support (none, readline,
libtecla)</p>
<p><strong>CA Reference Manual</strong></p>
<p>Many additions.</p>
<p><strong>CA Client Library</strong></p>
<p>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.</p>
<p><strong>Original CA Server Library (still employed in R3.14 by
iocCore)</strong></p>
<p>A bug was fixed where the server was in rare situations using excessive
CPU.</p>
<p><strong>Portable CA Server LIbrary</strong></p>
<p>Several bugs were fixed when performing integration testing with the
channel access gateway.</p>
<p><strong>GDD</strong></p>
<p>Many bugs and missing features fixed.</p>
<center>
<h2>Changes since beta1</h2>
</center>
<p><strong>dbCommon.dbd</strong></p>
<p>Field UDF now has a promptgroup. This allows users to set UDF false via
DCTs.</p>
<p><strong>errlog</strong></p>
<p>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.</p>
<p><strong>mbboRecord</strong></p>
<p>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.</p>
<p><strong>timeStamp changes</strong></p>
<p>Changes have been made to:</p>
<ul>
<li>Allow device support to set the time stamp (field TIME) of a
record.</li>
<li>Allow a record to receive it's time stamp from another record,</li>
</ul>
<p>epicsTime.h now has the definitions:</p>
<pre>#define epicsTimeEventBestTime -1
#define epicsTimeEventDeviceTime -2</pre>
<p>These are values for the TSE field of dbCommon.</p>
<ul>
<li><strong>epicsTimeEventBestTime</strong> means that code supplying the
time stamp should get the most accurate time possible. Currently this
only has meaning on vxWorks and if drvTS is supplying the time via some
hardware timing system. It means get the latest time from the hardware
system rather than from the vxWorks tick time. drvTs previously accepted
a hardcoded value of -1.</li>
<li><strong>epicsTimeEventDeviceTime</strong> means that recGblGetTimeStamp
doesn't modify the time field. This allows device support to supply the
time stamp.</li>
</ul>
<p>If the <strong>TSEL</strong> field refers to the <strong>TIME</strong>
field of a record then <strong>recGblGetTimeStamp</strong> sets
<strong>TIME</strong> equal to the time it gets from the record the
<strong>TSEL</strong> references. This works for both database and channel
access links. In this case field TSE is not used.</p>
<pre> </pre>
<p><strong>aiRecord and aoRecord: Setting eoff=egul</strong></p>
<p>Instead of init_record executing code like</p>
<pre> if ((pai-&gt;linr == menuConvertLINEAR) &amp;&amp; pdset-&gt;special_linconv) {
pai-&gt;eoff = pai-&gt;egul;
}</pre>
<p>It now executes:</p>
<pre> if ((pai-&gt;eslo==1.0) &amp;&amp; (pai-&gt;eoff==0.0)) {
pai-&gt;eoff = pai-&gt;egul;
}</pre>
<p>aoRecord has a similar change</p>
<p>This was done so that old device support which does not implement
special_linconv still works.</p>
<p><strong>CA puts to disabled record</strong></p>
<p>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.</p>
<p><strong>TPRO - trace processing</strong></p>
<p>If dbProcess is called recursively by different tasks, it did not properly
handle TPRO. Consider the following database:</p>
<pre>record(ao,"mrkao") {
field(OUT,"mrkai CA")
field(TPRO,"1")
}
record(ai,"mrkai") {
field(TPRO,"1")
}</pre>
<p>If a channel access put is sent to mrkao, no message is issued when mrkai
is processed.</p>
<p>This is now fixed.</p>
<p><strong>TSconfigure</strong></p>
<p>If in your st.cmd file you issue the command.</p>
<p>TSconfigure(0,0,0,0,0,0,1)</p>
<p>And set the TSE field of any record to a non zero value, then a crash will
occur when recGblGetTimeStamp is called.</p>
<p>This is now fixed.</p>
<p><strong>calcoutRecord</strong></p>
<p>nsev not sevr must be checked to decide if dbPutLink should be called.</p>
<p><strong>dbCa</strong></p>
<p>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.</p>
<p><strong>calcPerform</strong></p>
<p>This now returns a non zero value if the result is nan (not a number).</p>
<p><strong>Record Name Length</strong></p>
<p>The size of the name field has been expanded from 29 to 61, i.e. record
names can now have 60 characters.</p>
<p><strong>iocInit</strong></p>
<p>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.</p>
<p><strong>ellLib</strong></p>
<p>Casts have been removed that suppressed valuable error messages</p>
<p><strong>mbbiRecord</strong></p>
<p>All existing manipulations of UDF in process() are removed and udf is set
FALSE when the raw value is successfully read.</p>
<p><strong>selRecord</strong></p>
<p>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.</p>
<p><strong>cdCommands file</strong></p>
<p>Fixed a bug and revised the use of the IOCS_APPL_TOP setting in an
application's &lt;top&gt;/configure/CONFIG file (which specifies the path to
&lt;top&gt; as seen by the IOC) to apply the same modifications to all paths
output in the cdCommands file.</p>
<p><strong>dbStaticLib</strong></p>
<p>All routines with Recdes of Fielddes in their name are obsolete and
removed. A new routine dbDumpField replaces dbDumpFldDes.</p>
<center>
<h2>Changes since alpha2</h2>
</center>
All changes for release 3.13.5 that also apply to 3.14 have been made.
<p><b>devAiSoftRaw and devAoSoftRaw</b></p>
<p>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.</p>
<p>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</p>
<p>cd ../db/</p>
<center>
<h1>EPICS Release base 3.14.0alpha2</h1>
</center>
Since the alpha1 release some major changes were made to the build system, to
some of the libCom facilities, and to the iocsh facilities.
<p>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.</p>
<p>A verion of the HPlanGpib support has been built and tested with this
release. Again you must obtain a version that builds with alpha2.</p>
<p>A new update to the Application Developer's Guide is available for this
release.</p>
<h3>Build changes</h3>
<ul>
<li>Operating system independant builds are now done in an O.Common
subdirectory and then installed instead of being performed directly in an
install directory.</li>
<li>Build definition names (e.g. RECTYPES, MENUS, DBDNAME, and BPTS) have
been changed to specify the name of the file to be created and installed
instead of the source file name.</li>
<li>All db and dbd related definitions and rules have been moved into
base/configure/RULES.Db file. The rules now allow multiple dbd files and
registerRecordDeviceDriver files to be created in a single Makefile.</li>
<li>"gnumake depends" no longer depends on a complete buildInstall.</li>
</ul>
<h3>Converting alpha1 applications to alpha2</h3>
Build modifications in alpha2 require the following changes to existing R3.14
applications.
<ul>
<li>Remove the now unused RULES files
<blockquote>
./configure/RULES.Db<br>
./configure/RULES.registerRecordDeviceDriver</blockquote>
</li>
<li>Delete the following line in ./configure/RULES
<blockquote>
include $(TOP)/configure/RULES.registerRecordDeviceDriver</blockquote>
</li>
<li>In &lt;top&gt;/configure/Makefile change
<blockquote>
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(T_A) $@ $(TOP)</blockquote>
to
<blockquote>
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(EPICS_HOST_ARCH) $(T_A) $@
$(TOP)</blockquote>
and add the line
<blockquote>
depends: install</blockquote>
to the bottom of the Makefile.</li>
<li>In all *App/*Db/Makefiles change
<blockquote>
include $(TOP)/configure/RULES.Db</blockquote>
to
<blockquote>
include $(TOP)/configure/RULES</blockquote>
</li>
<li>In all *App/src/Makefile files change
<blockquote>
DBDNAME = &lt;name&gt;App</blockquote>
to
<blockquote>
DBD += &lt;name&gt;</blockquote>
and remove the line<br>
<blockquote>
DBDEXPAND = &lt;name&gt;Include.dbd</blockquote>
NOTE: If any of your *App/*Db/Makefiles contain "DBDNAME =" lines you
should make these same changes in that *Db dirctory.</li>
<li>In all *App/src/Makefile Makefiles change
<blockquote>
RECTYPES=&lt;name&gt;.h</blockquote>
to
<blockquote>
DBDINC+=&lt;name&gt;</blockquote>
change
<blockquote>
MENUS=&lt;name&gt;.h</blockquote>
to
<blockquote>
DBDINC+=&lt;name&gt;</blockquote>
change
<blockquote>
BPTS</blockquote>
to
<blockquote>
DBD</blockquote>
change
<blockquote>
INSTALLDB</blockquote>
to
<blockquote>
DB</blockquote>
change
<blockquote>
DBDINSTALL</blockquote>
to
<blockquote>
DBD</blockquote>
</li>
<li>In all example *App/src/Makefile files change
<blockquote>
example_SRCS_DEFAULT += registerRecordDeviceDriver.c</blockquote>
to
<blockquote>
example_SRCS_DEFAULT += &lt;name&gt;_registerRecordDeviceDriver.cpp
</blockquote>
where &lt;name&gt; is the base name of a &lt;name&gt;.dbd file which was
created from a &lt;name&gt;Include.dbd file and which will be loaded in a
st.cmd or stcmd.host script (e.g. example).</li>
<li>In ./iocBoot/ioc&lt;name&gt;/st.cmd files change
<blockquote>
dbLoadDatabase("dbd/exampleApp.dbd")</blockquote>
to
<blockquote>
dbLoadDatabase("dbd/example.dbd")</blockquote>
</li>
<li>In &lt;top&gt;/iocBoot/ioc&lt;name&gt;/stcmd.host files change
<blockquote>
dbLoadDatabase("../../dbd/exampleApp.dbd",0,0)</blockquote>
to
<blockquote>
dbLoadDatabase("../../dbd/example.dbd",0,0)</blockquote>
</li>
</ul>
<h3>EPICS_HOST_ARCH changes</h3>
<p>GNU compiler builds are now determined by the value of EPICS_HOST_ARCH and
are no longer specified in CONFIG_SITE. All references to the ANSI
(ACC/GCC) and CPLUSPLUS (CCC/G++) macros have been removed.</p>
<h3>libCom</h3>
<p>Most of the library routines and files starting with the prefix osi have
been changed to start with epics. Several also had major changes to their
user interface. See the latest version of the Application Developer's Guide
for details.</p>
<center>
<h2>EPICS Release base 3.14.0alpha1 Notes</h2>
</center>
<p><br>
</p>
<p>This is the first release of 3.14. This is the first release that supports
iocCore on platforms besides vxWorks.</p>
<p>iocCore is now supported on the following platforms:</p>
<ul>
<li>vxWorks
<blockquote>
Tornado II is required.</blockquote>
</li>
<li>RTEMS
<blockquote>
An open source real time operating system. It has been tested on
MVME167 and MC68360 processors. RTEMS also supports
powerPC.</blockquote>
</li>
<li>solaris
<blockquote>
Has been tested on solaris 2.6 and solaris 8 with Sun workshop 6.0 (C++
5.2). Sun workshop 5.0 (C++ 5.0) will not compile this version of
EPICS.</blockquote>
</li>
<li>Linux
<blockquote>
Has been tested on Redhat x86 platforms.</blockquote>
</li>
<li>winNT
<blockquote>
Testing has been done with visual C++ 6.0.</blockquote>
</li>
</ul>
<p>A new version of the Application Developers Guide is available. The
following gives links to the new Application Developer's Guide and to RTEMS
information.</p>
<blockquote>
<a
href="http://www.aps.anl.gov/epics/base/R3-14/index.php">http://www.aps.anl.gov/epics/base/R3-14/index.php</a></blockquote>
<p>Most of the Application Developer's Guide has only minor changes. The
following are new.</p>
<ul>
<li>Chapter 2 describes the new features for 3.14.</li>
<li>Chapter 4 describes the build facility for 3.14</li>
<li>Chapters 19 and 20 describe libCom, which was not previously
documented.</li>
</ul>
<p><br>
It must be emphasized that this is an alpha release.</p>
<ul>
<li>Please don't use it for existing operational systems</li>
<li>Don't build your operational CA clients with it.</li>
<li>The APIs for new components in libCom are still evolving so if you use
them be prepared for changes.</li>
<li>HPUX - No support currently because we could not find good support for
multithreading.</li>
</ul>
<h4>Building Applications</h4>
<ul>
<li>For new applications see Chapters 2 (New Features) and Chapter 4 (Build
Facility) of the Application Developer's Guide.</li>
<li>For existing applications the old config rules are still supported.
Some changes, however, are needed. Documentation is being prepared and
will appear in these release notes sooon.</li>
</ul>
</body>
</html>