Removed the Converting... files for older releases No known problems yet. Updated README.html and regenerated README.1st from it. Added windows-x64 target to the Release notes.
3273 lines
133 KiB
HTML
3273 lines
133 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.12 Release Notes</title>
|
|
</head>
|
|
|
|
<body lang="en">
|
|
<h1 align="center">EPICS Base Release 3.14.12</h1>
|
|
|
|
|
|
<h2 align="center">Changes between 3.14.11 and 3.14.12</h2>
|
|
<!-- Insert new items immediately below here ... -->
|
|
|
|
<h4>Added windows-x64 target</h4>
|
|
|
|
<p>64-bit binaries for Microsoft Windows platforms can now be built using the
|
|
target architecture windows-x64, which is also a valid cross-build target for a
|
|
win32-x86 host. We do not currently support 64-bit MinGW or Cygwin builds.</p>
|
|
|
|
<h4>Deleted osf-alpha targets</h4>
|
|
|
|
<p>Kazuro Furukawa has been unable to compile EPICS Base on this target for the
|
|
last few releases and it's not really needed any more, so the targets have been
|
|
deleted from this release.</p>
|
|
|
|
<h4>Expanded CALC expressions</h4>
|
|
|
|
<p>The calc and calcout records can now accept infix expressions up to 79
|
|
characters long, although you have to use long string support to read or write
|
|
any that are more than 39 characters. The postfix interpreter now sports an
|
|
integer literal token as well as the double literal one, which reduces the
|
|
maximum size of a postfix buffer needed for any specific size of infix buffer by
|
|
a factor of 2/3.</p>
|
|
|
|
<h4>Added Apple iOS target architectures</h4>
|
|
|
|
<p>Tom Pelaia II and Mark Engbretson contributed build configuration files to
|
|
cross-compile Base for Apple's iOS operating system as used in the iPhone and
|
|
iPad. The target architecture for these is ios-arm, and there is also an ios-x86
|
|
target which compiles for the iPhone Simulator running on darwin-x86.</p>
|
|
|
|
<p>To build these for iOS, uncomment the <tt>CROSS_COMPILER_TARGET_ARCHS</tt>
|
|
definition in <tt>configure/os/CONFIG_SITE.darwin-x86.Common</tt> and check the
|
|
settings in <tt>configure/os/CONFIG_SITE.Common.iosCommon</tt>.</p>
|
|
|
|
<h4>Dynamic arrays over CA</h4>
|
|
|
|
<p>Dynamic array sizing was developed by Michael Abbott at the 2010 EPICS
|
|
Codeathon. It permits a CA client to fetch only the currently valid elements of
|
|
an array by specifying a COUNT of zero to either of the ca_array_get_callback()
|
|
or ca_create_subscription() routines. It has never before been legal to pass a
|
|
COUNT of zero to the ca_array_get_callback() routine, but this development does
|
|
introduce a subtle change to the published API of the ca_create_subscription()
|
|
routine.</p>
|
|
|
|
<p>In previous releases a COUNT of zero for a subscription meant use the
|
|
ca_element_count() for the channel, but from this release it can return fewer
|
|
elements (never more), at the behest of the server. The number of elements can
|
|
vary with subsequent array update events, so a client that uses this technique
|
|
must use the count field of the event_handler_args in its callback function each
|
|
time it is called to obtain the correct element count from the server. Note that
|
|
the ca_element_count() value for a channel is only updated at connection time,
|
|
and supplies the maximum number of elements that the server array variable can
|
|
hold.</p>
|
|
|
|
<p>Dynamic arrays are currently only supported by the CA client library and IOC
|
|
server RSRV, the Perl CA library and the catools programs. The portable CAS does
|
|
not understand them, and database links that connect over CA do not attempt to
|
|
use them either. CA clients that try to use this functionality with a server
|
|
that does not support it will receive the same full-sized zero-filled arrays
|
|
that previous releases supported.</p>
|
|
|
|
<h4>CA over TCP connections</h4>
|
|
|
|
<p>Merged the CA-over-TCP changes developed by Ralph and Jeff at the 2008 EPICS
|
|
Codeathon for the CA client library and both servers (CAS and RSRV). This adds
|
|
a new CA configuration variable <tt>CA_NAME_SERVERS</tt> which is used by the
|
|
client library as a list of host names or addresses of CA servers to be
|
|
connected to and queried over TCP sockets. This can be used to tunnel CA
|
|
connections over ssh. See the CA reference manual for more details.</p>
|
|
|
|
<h4>Record Types aai and aao</h4>
|
|
|
|
<ul>
|
|
<li>Fixed bug in memory allocation that caused crashes when linking other records
|
|
to aai or aao.</li>
|
|
<li>Fixed bug where NELM was modified instead of NORD.</li>
|
|
<li>Added Soft Channel device support.</li>
|
|
<li>Added SIOL link and proper simulation mode for Soft Channel support.</li>
|
|
<li>Added MPST, APST and HASH fields for monitor on change support like in
|
|
waveform record.</li>
|
|
</ul>
|
|
|
|
<h4>New capr.pl script</h4>
|
|
|
|
<p>This Perl program attempts to replicate the behaviour of the IOC command
|
|
'dbpr' over Channel Access, printing the fields and values of the named record.
|
|
Run <tt>capr.pl -h</tt> for usage information.</p>
|
|
|
|
<h4>devLib cleanup</h4>
|
|
|
|
<ul>
|
|
<li>Add VME connect/disconnect IRQ calls to the "virtual os" table</li>
|
|
<li>It is now possible to compile all devLib code on targets without runtime
|
|
support</li>
|
|
<li>All internal functions are made static. Some were not before.</li>
|
|
<li>Move VME calls to <tt>devLibVME.h</tt>. <tt>devLib.h</tt> contains general
|
|
defintions and error codes.</li>
|
|
<li>For compatibility <tt>devLib.h</tt> includes <tt>devLibVME.h</tt> unless the
|
|
macro <tt>NO_DEVLIB_COMPAT</tt> is defined.</li>
|
|
<li>The "virtual os" table was renamed from <tt>pdevLibVirtualOS</tt> to
|
|
<tt>pdevLibVME</tt> reflecting the fact that other bus types will need seperate
|
|
tables.</li>
|
|
<li>The "virtual os" table API has been moved to a seperate header file,
|
|
<tt>devLibVMEImpl.h</tt>.</li>
|
|
</ul>
|
|
|
|
<h4>DTYP and INP/OUT order</h4>
|
|
|
|
<p>The fields DTYP and INP/OUT can now be specified in any order.</p>
|
|
|
|
<h4>Rewrite epicsThreadOnce()</h4>
|
|
|
|
<p>Michael Davidsaver suggested a better implementation of epicsThreadOnce()
|
|
which makes it possible for all architectures to detect recursive initialization
|
|
functions. This change also renames the routines to remove the original macro
|
|
and fixes some questionable usage in places.</p>
|
|
|
|
<h4>Many Record Types</h4>
|
|
|
|
<p>Record types were not setting many 'last value' fields at initialization,
|
|
assuming that the VAL field would always hold the default value and thus not
|
|
giving correct initial monitor behavior in some circumstances.</p>
|
|
|
|
<h4>Compress Record Type</h4>
|
|
|
|
<p>Fixed crash when ALG (algorithm) was changed to Average at runtime.</p>
|
|
|
|
<h4>configure/RELEASE Enhancements</h4>
|
|
|
|
<p>Variable definitions in a <tt>configure/RELEASE</tt> file may now use the
|
|
<tt>:=</tt> or <tt>?=</tt> assignment syntax. Release file processing now
|
|
prints a warning if an include file can't be not found (use <tt>-include</tt> if
|
|
this is expected) or if an undefined macro is used, and aborts if a circular
|
|
definition is expanded. The variable <tt>EPICS_HOST_ARCH</tt> can now be used,
|
|
but target-architecture-specific values must be set in a target-specific
|
|
<tt>configure/RELEASE</tt> file such as <tt>RELEASE.Common.linux-x86</tt>.</p>
|
|
|
|
<h4>VxWorks 6.7 support</h4>
|
|
|
|
<p>Added build support for the latest Wind River release.</p>
|
|
|
|
<h4>RTEMS 4.10 support</h4>
|
|
|
|
<p>Added support for the latest release of RTEMS. There is no longer a
|
|
distinction between executive and malloc memory pools. The new mount() API
|
|
is used.</p>
|
|
|
|
<h4>Dependency file generation</h4>
|
|
|
|
<p>Changes to the way in which we generate header dependency files, which are
|
|
now named with a <tt>.d</tt> suffix instead of <tt>.depends</tt>. We now use
|
|
the compiler to generate these if possible, and create them in the
|
|
<tt>O.$(T_A)</tt> directory.</p>
|
|
|
|
<h4>Installed file permissions</h4>
|
|
|
|
<p>We now install libraries and other non-executable files with mode 444 rather
|
|
than 644.</p>
|
|
|
|
<h4>CA Perl5: strings and array subscriptions</h4>
|
|
|
|
<p>In some circumstances a string received from CA might not have been properly
|
|
zero-terminated; this has now been fixed. <tt>CA::create_subscription()</tt>
|
|
would not accept a zero for the subscription array length; this is now
|
|
permitted, in the underlying CA API this means use the native length from the
|
|
server.</p>
|
|
|
|
<h4>Linking Readline on Linux</h4>
|
|
|
|
<p>Different Linux distributions have different requirements when linking
|
|
readline; some need <tt>-lcurses</tt>, others <tt>-lncurses</tt> and others
|
|
don't require either. The <tt>configure/os/CONFIG_SITE.Common.linux-*</tt>
|
|
files now make this configuration easy to choose between different settings for
|
|
the <tt>COMMANDLINE_LIBRARY</tt> variable.</p>
|
|
|
|
<h4>CA Command Line Tools Changes</h4>
|
|
|
|
<p>Three new options were added to the <tt>caget</tt> and <tt>camonitor</tt>
|
|
utilities, to allow printing float values (rounded) as hex, octal or binary.</p>
|
|
|
|
|
|
<h2 align="center">Changes between 3.14.10 and 3.14.11</h2>
|
|
|
|
<h4>Time provider on Win32</h4>
|
|
|
|
<p>A race condition meant that sometimes EPICS programs (including the internal
|
|
programs such as flex and antelope) built for Win32 architectures would not
|
|
start properly on Windows systems that have multiple CPUs. This race has been
|
|
fixed.</p>
|
|
|
|
<h4>Build system dependency change</h4>
|
|
|
|
<p>In order to get GNU make parallel execution (-j option) to work proprely for
|
|
multiple target architectures, a new dependency had to be added. Now all
|
|
cross-compiled builds depend on their host build. This means that when a
|
|
<tt>make <i>crosstargetarch</i></tt> command is issued, the EPICS_HOST_ARCH
|
|
target build will be executed first, followed by the <i>crosstargetarch</i>
|
|
build. Builds done in an O.<i>arch</i> directory will still only build the
|
|
<i>arch</i> targets however.</p>
|
|
|
|
<h4>Channel Access changes</h4>
|
|
|
|
<p>Mantis 361 fix - ca_add_fd_registration users might not receive select
|
|
wakeup</p>
|
|
|
|
<p>Mantis 359 fix - ca client library flow control mode related issues</p>
|
|
|
|
<p>Mantis 357 fix - high throughput multithreaded ca client appl thread could
|
|
be trapped in lib.</p>
|
|
|
|
<ul>
|
|
<li>Discovered during code review. Not seen in practice, but possible</li>
|
|
</ul>
|
|
|
|
<p>Mantis 285 fix - CA Documentation doesn't distinguish sync groups from
|
|
ca_put_callback()</p>
|
|
|
|
<p>Mantis 346 fix - deleting the chid passed in from within put cb handler
|
|
causes failure</p>
|
|
|
|
<p>Mantis 284 fix - channel clear protocol warning messages from PCAS</p>
|
|
|
|
<p>Mantis 237 fix - SEGV from simple CA client during context destroy</p>
|
|
|
|
<p>Mantis 242 fix - invalid DBR type not screened in client library when
|
|
doing a put</p>
|
|
|
|
<h4>Portable Channel Access Server changes</h4>
|
|
|
|
<p> These changes impact the Gateway (Proxy server) and other servers but not
|
|
the IOC.</h4>
|
|
|
|
<p>Mantis 360 fix - server is unresponsive for one of its clients, when
|
|
async io postponed and in flow control mode</p>
|
|
|
|
<p>Mantis 358 fix - PCAS service snap-in has no way to determine if its a put,
|
|
or a put calback.</p>
|
|
|
|
<p>Mantis 356 fix - medm display sometimes hangs until the motor stops when
|
|
controling motor through gw.</p>
|
|
|
|
<p>Mantis 350 fix - Incoming data corruption under heavy CAS load.</p>
|
|
|
|
<p>Mantis 340 fix - leak when performing a read and conversion fails.</p>
|
|
|
|
<p>Mantis 348 fix - A call to 'assert (item.pList == this)'
|
|
failed in ../../../../src/cas/generic/st/ioBlocked.cc line 112</p>
|
|
|
|
<p>Mantis 345 fix - Compilation warning: complaint about missing
|
|
gddDestructor</p>
|
|
|
|
<p>Mantis 343 fix - gddScalar::new() operator is not fully thread safe</p>
|
|
|
|
<p>Mantis 333 fix - resTable::removeAll() does not reset the item count</p>
|
|
|
|
<p>Mantis 335 fix - excas fails in clearOutstandingReads - maybe requires an
|
|
R3.13 client</p>
|
|
|
|
<p>Mantis 329 fix - GW hang, pthread_mutex_lock failed: error Invalid
|
|
argument message</p>
|
|
|
|
<p>Mantis 352 fix - gateway hangs temporarily under heavy load on 8-core
|
|
64bit RHEL5</p>
|
|
|
|
<ul>
|
|
<li>High throughput performance appears to be much better now for both scalars
|
|
and large arrays, but more testing needed in operational gateways</li>
|
|
</ul>
|
|
|
|
<h4>Timer Queue Library</h4>
|
|
|
|
<p>Mantis 336 fix - timer queue should have try / catch block around call to
|
|
user's expiration callback</p>
|
|
|
|
<p>Mantis 332 fix - epicsTimerTest failure, windows vista 64, dual core
|
|
SMP system</p>
|
|
|
|
<h4>LibCom</h4>
|
|
|
|
<p>Mantis 328 fixed - orderly shutdown for soft IOC fails</p>
|
|
|
|
<h4>Application configure files</h4>
|
|
|
|
<p>The configuration directory files installed by makeBaseApp.pl have been
|
|
changing in recent releases to make them work more like the files in the Base
|
|
configuration directory. The CONFIG_APP file has gone, and its functionality is
|
|
now performed by the CONFIG file which should only be modified in exceptional
|
|
circumstances. The variables that used to be set in the CONFIG file now appear
|
|
in the new CONFIG_SITE file, and can be overridden for specific combinations of
|
|
host and target architectures by creating a file with name matching one of these
|
|
patterns:</p>
|
|
|
|
<ul>
|
|
<li>CONFIG_SITE.<host-arch>.Common</li>
|
|
<li>CONFIG_SITE.Common.<target-arch></li>
|
|
<li>CONFIG_SITE.<host-arch>.<target-arch></li>
|
|
</ul>
|
|
|
|
<p>Note that the setting for <tt>CHECK_RELEASE</tt> in the CONFIG_SITE files is
|
|
not compatible with previous releases of Base; if you are creating an
|
|
application that has to work with earlier releases, move the
|
|
<tt>CHECK_RELEASE</tt> setting back to the configure/Makefile where it used to
|
|
live.</p>
|
|
|
|
<p>The RELEASE file(s) can now define the variable <tt>RULES</tt> if you wish
|
|
the application to use build rules from some module other than EPICS_BASE. The
|
|
rules must appear in a configure subdirectory just like they do in Base.</p>
|
|
|
|
<h4>Compile-time assertions</h4>
|
|
|
|
<p>A new macro has been added to epicsAssert.h which performs assertion checks
|
|
at compile-time. <tt>STATIC_ASSERT(<i>expr</i>)</tt> can only be used when
|
|
<tt><i>expr</i></tt> can be evaluated by the compiler, and will cause the
|
|
compilation to fail if it evaluates to false. The resulting compiler error
|
|
message might appear a little obscure, but it does provide some explanation and
|
|
contains the line where the failure was discovered. Future versions of the C++
|
|
standard will probably contain a similar facility <tt>static_assert(<i>expr</i>,
|
|
<i>message</i>)</tt> but will require compiler support to be implemented.</p>
|
|
|
|
<h4>Several changes made to dbDefs.h</h4>
|
|
|
|
<p>The definitions for the macros <tt>YES</tt>, <tt>NO</tt>, <tt>NONE</tt>,
|
|
<tt>min()</tt> and <tt>max()</tt> have been deleted. <tt>YES</tt> and
|
|
<tt>NO</tt> have been replaced by <tt>menuYesNoYES</tt> and <tt>menuYesNoNO</tt>
|
|
from the menuYesNo.h file where they were used in several record types. The
|
|
other macros were not being used anywhere in Base, sncseq or Asyn.</p>
|
|
|
|
<p>The macro <tt>LOCAL</tt> that was a synonym for <tt>static</tt> is now
|
|
deprecated and will be deleted in R3.15, please adjust your code to use the
|
|
latter keyword. All uses of the <tt>READONLY</tt> macro from shareLib.h must
|
|
now be replaced by the keyword <tt>const</tt> as the macro has been deleted.</p>
|
|
|
|
<p>The dbDefs.h file was unnecessarily including various other libCom header
|
|
files which may have to be manually added to out-of-tree source files that
|
|
relied on this. The general rule for header files is that a header should only
|
|
include other headers that are needed for its own inclusion in any source file.
|
|
The <tt>#include</tt> statements that might need to be added are:</p>
|
|
|
|
<ul>
|
|
<li>#include <stdarg.h></li>
|
|
<li>#include "errlog.h"</li>
|
|
<li>#include "errMdef.h"</li>
|
|
<li>#include "ellLib.h"</li>
|
|
<li>#include "epicsTypes.h"</li>
|
|
</ul>
|
|
|
|
<p>A new macro <tt>CONTAINER(pointer, type, member)</tt> has been added which
|
|
calculates and returns a pointer to the parent structure when given a pointer to
|
|
a member, the structure type and the name of the member in that structure. On
|
|
GNU compilers the type of the pointer is checked to ensure that it matches the
|
|
member, so code using this macro should be built using gcc for additional
|
|
confidence.</p>
|
|
|
|
<h4>Long-deprecated errSymFind() function deleted</h4>
|
|
|
|
<p>This functionality was replaced by errSymLookup() many releases ago.</p>
|
|
|
|
<h4>Perl CA library shutdown</h4>
|
|
|
|
<p>The Perl CA library has been modified to properly flush the Channel Access
|
|
I/O queues when a program using the library exits.</p>
|
|
|
|
<h4>bi, bo, mbbi, mbbo ENUM string fields</h4>
|
|
|
|
<p>The existing Channel Access protocol transports 26 bytes for each ENUM
|
|
string, but the fields used to hold ENUM strings in the discrete record types
|
|
were configured to be 16 (mbbi/mbbo) or 20 (bi/bo) bytes long. These have all
|
|
been increased to match the CA limit.</p>
|
|
|
|
<h4>Use of SIGALRM disabled</h4>
|
|
|
|
<p>Previous releases that supported HPUX required that EPICS trap and be able to
|
|
generate the SIGALRM signal in order to break out of a blocking socket system
|
|
call on those systems (Posix only). There were two API routines that had to be
|
|
called by any code using sockets to properly support this. Since we no longer
|
|
support HPUX this code is no longer required, and as it breaks the Posix timer
|
|
interface on Linux it has been disabled in this release. The API routines now do
|
|
nothing on all platforms, and will be removed before the 3.15 Release of
|
|
Base.</p>
|
|
|
|
<h4>Universal Binaries on Darwin</h4>
|
|
|
|
<p>It is now possible to configure Base on Darwin to build universal binaries
|
|
containing an installation-specific choice of 32- and 64-bit CPU architectures.
|
|
This is controlled through the definition of the ARCH_CLASS variable in the
|
|
configure/os/CONFIG_SITE.Common.<arch> file for the particular target
|
|
architecture you are using (darwin-ppc, darwin-x86 or darwin-ppcx86). There are
|
|
comments and example settings in those files. Note that to my knowledge EPICS
|
|
Base has not been thoroughly tested on the 64-bit darwin architectures.</p>
|
|
|
|
<h4>HPUX, SGI and VMS files deleted</h4>
|
|
|
|
<p>We have not supported or tested EPICS Base on HPUX for several releases; the
|
|
support files for this and other unsupported operating systems have been
|
|
removed.</p>
|
|
|
|
<h4>PINI Processing and PHAS values</h4>
|
|
|
|
<p>The PINI field now has its own menu type with four more choices,
|
|
<tt>RUN</tt>, <tt>RUNNING</tt>, <tt>PAUSE</tt> and <tt>PAUSED</tt>. The earlier
|
|
<tt>NO</tt> and <tt>YES</tt> values for this field remain as before and cause
|
|
the same processing as before. The new values cause records to be processed
|
|
during the announcement of the new <tt>initHookAtIocRun</tt>,
|
|
<tt>initHookAfterIocRunning</tt>, <tt>initHookAtIocPause</tt> and
|
|
<tt>initHookAfterIocPaused</tt> states respectively.</p>
|
|
|
|
<p>Records with <tt>PINI=YES</tt> will be processed during the <tt>iocBuild</tt>
|
|
stage of <tt>iocInit</tt>, follwed by records with <tt>PINI=RUN</tt> during the
|
|
<tt>iocRun</tt> stage and records with <tt>PINI=RUNNING</tt> during the
|
|
<tt>initHookAfterIocRunning</tt> stage. If an <tt>iocPause</tt> command is
|
|
given, any records with <tt>PINI=PAUSE</tt> will be processed at the
|
|
<tt>initHookAtIocPause</tt> stage followed by records with <tt>PINI=PAUSED</tt>
|
|
will be processed at the <tt>initHookAfterIocPaused</tt> stage. A subsequent
|
|
<tt>iocRun</tt> command causes the <tt>PINI=RUN</tt> and <tt>PINI=RUNNING</tt>
|
|
records to be processed again.</p>
|
|
|
|
<p>The PHAS field now controls the order in which records are processed as a
|
|
result of the PINI mechanism; within each stage, lower values of PHAS are
|
|
scanned before higher ones.</p>
|
|
|
|
<h4>Additional initHook states</h4>
|
|
|
|
<p>Several new initHook states have been added which are announced while the IOC
|
|
is being paused or restarted. The original states remain unchanged, although a
|
|
couple of the later ones are deprecated where using the new states makes more
|
|
sense. The enum that defines all the states is now:</p>
|
|
|
|
<blockquote>
|
|
<pre>typedef enum {
|
|
initHookAtIocBuild = 0, /* Start of iocBuild/iocInit commands */
|
|
initHookAtBeginning,
|
|
initHookAfterCallbackInit,
|
|
initHookAfterCaLinkInit,
|
|
initHookAfterInitDrvSup,
|
|
initHookAfterInitRecSup,
|
|
initHookAfterInitDevSup,
|
|
initHookAfterInitDatabase,
|
|
initHookAfterFinishDevSup,
|
|
initHookAfterScanInit,
|
|
initHookAfterInitialProcess,
|
|
initHookAfterCaServerInit,
|
|
initHookAfterIocBuilt, /* End of iocBuild command */
|
|
|
|
initHookAtIocRun, /* Start of iocRun command */
|
|
initHookAfterDatabaseRunning,
|
|
initHookAfterCaServerRunning,
|
|
initHookAfterIocRunning, /* End of iocRun/iocInit commands */
|
|
|
|
initHookAtIocPause, /* Start of iocPause command */
|
|
initHookAfterCaServerPaused,
|
|
initHookAfterDatabasePaused,
|
|
initHookAfterIocPaused, /* End of iocPause command */
|
|
|
|
/* Deprecated states, provided for backwards compatibility.
|
|
* These states are announced at the same point they were before,
|
|
* but will not be repeated if the IOC gets paused and restarted.
|
|
*/
|
|
initHookAfterInterruptAccept, /* After initHookAfterDatabaseRunning */
|
|
initHookAtEnd, /* Before initHookAfterIocRunning */
|
|
} initHookState;</pre>
|
|
</blockquote>
|
|
|
|
<p>The two deprecated states will only ever be announced once, whereas the newer
|
|
ones will repeat as often as the <tt>iocPause</tt> and <tt>iocRun</tt> commands
|
|
are executed.</p>
|
|
|
|
<h4>Soft Channel ai device support and SMOO</h4>
|
|
|
|
<p>The (probably unwritten) rules for ai device support have always required
|
|
that any device support which sets the VAL field and returns "2" should also
|
|
perform any other operations normally performed by the ai's convert() routine.
|
|
In practice very few devices did this, but there are some which makes it
|
|
impossible to move that smoothing function into the body of the record. This
|
|
change adds the support for SMOO filtering to the soft channel device support
|
|
for the ai record. The filter is short-circuited when a link recovers from a
|
|
failure.</p>
|
|
|
|
<h4>New link flags for alarm severity/status inheritance</h4>
|
|
|
|
<p>Two new options have been introduced as alternatives to the existing NMS and
|
|
MS flags: MSI (Maximize Severity INVALID) and MSS (Maximize Severity and
|
|
Status).</p>
|
|
|
|
<p>When a link is flagged MSI the receiving record inherits the target's alarm
|
|
severity just as it does with the MS flag, but only if that severity is
|
|
INVALID.</p>
|
|
|
|
<p>When a link is flagged MSS the receiving record inherits the target's alarm
|
|
status as well as its severity, thereby preserving the alarm status through MSS
|
|
chains instead of setting that status to LINK.</p>
|
|
|
|
<h4>Analog records get_alarm_double() semantics changed</h4>
|
|
|
|
<p>The get_alarm_double() routine in several record types has been changed to
|
|
make it easier for CA client applications to display the correct warning and
|
|
alarm limits for a record.</p>
|
|
|
|
<p>Originally these routines would always return the current values from the
|
|
associated alarm limit fields, but now they will return epicsNAN (not-a-number)
|
|
instead if the severity field of the corresponding limit is NO_ALARM. This
|
|
allows CA clients to suppress the display of unused limits.</p>
|
|
|
|
<h4>New math constants epicsNAN and epicsINF</h4>
|
|
|
|
<p>Two new math constants have been added to epicsMath.h: <tt>epicsNAN</tt>
|
|
(not a number) and <tt>epicsINF</tt> (infinity).
|
|
|
|
<h4>New event type DBE_PROPERTY</h4>
|
|
|
|
<p>A new event type (flag in the Channel Access event mask) has been added
|
|
to support subscriptions that get events whenever a property of the PV
|
|
changes. This will allow clients to get notified on changes of control
|
|
limits, graphical limits, state strings etc.</p>
|
|
|
|
<p>The CA commandline tool camonitor and the CA Perl interface support the new
|
|
event type. As a first working example, the mbbi and mbbo records have been
|
|
extended to send a DBE_PROPERTY event when their status strings are modified.
|
|
A more general mechanism to specify sending DBE_PROPERTY events through the DBD
|
|
file will appear in 3.15.</p>
|
|
|
|
<p>Client application developers are encouraged to start using DBE_PROPERTY
|
|
subscriptions to fetch channel attribute data.</p>
|
|
|
|
<h4>Channel Access command line tool changes</h4>
|
|
|
|
<p>The caget/caput/camonitor programs in src/catools now use '\' escape
|
|
sequences for non-printable characters.</p>
|
|
|
|
<p>They provide a new option <tt>-F</tt> to set an output field separator
|
|
to be used instead of the default space character.</p>
|
|
|
|
<h4>New functions for escaping non-printables in epicsString.h</h4>
|
|
|
|
<p>The existing routines used to escape non-printable characters have been
|
|
replaced by a new set of functions that are prototyped in the epicsString.h
|
|
header file:</p>
|
|
|
|
<pre>int epicsStrnRawFromEscaped(char *outbuf, size_t outsize, const char *inbuf, size_t inlen);
|
|
epicsShareFunc int epicsStrnEscapedFromRaw(char *outbuf, size_t outsize, const char *inbuf, size_t inlen);
|
|
epicsShareFunc size_t epicsStrnEscapedFromRawSize(const char *inbuf, size_t inlen);</pre>
|
|
|
|
<p>Both conversion functions take the output buffer (and its size), and the
|
|
input buffer (and its size) as argument. They will convert non-printable
|
|
characters from/to their '\'-escaped versions. The third function scans a raw
|
|
input string and returns the number of characters needed for the escaped
|
|
version.</p>
|
|
|
|
<p>The existing function interfaces will be kept for compatibility, but their
|
|
further use is deprecated.</p>
|
|
|
|
<h4>epicsRingBytes</h4>
|
|
|
|
<p>Partial puts are not supported.
|
|
An attempt to put more bytes than currently free will be rejected.</p>
|
|
|
|
<h4>Long string support</h4>
|
|
|
|
<p>The IOC now provides support for strings longer than 40 characters through
|
|
Channel Access in a manner that is fully backwards compatible with older
|
|
versions of the CA library, although not all CA clients can make use of this at
|
|
the moment.</p>
|
|
|
|
<p>Adding the suffix '$' to the field name of an IOC PV name (through either
|
|
Channel Access or Database Access) causes the native type of that field to be
|
|
reported as an array of DBF_CHAR, as long as the field type is DBF_STRING,
|
|
DBF_INLINK, DBF_OUTLINK or DBF_FWDLINK. It is then possible to use a DBF_CHAR
|
|
array to read, write and monitor values from that field, and the 40 character
|
|
string length limit imposed by the DBF_STRING type is replaced by the amount of
|
|
storage allocated for the string on the IOC (for link fields the limit is
|
|
related to the maximum length of a record name).</p>
|
|
|
|
<p>The caget/caput/camonitor programs in src/catools can now use long strings by
|
|
adding the command-line option <tt>-S</tt> which causes them to handle an array
|
|
of DBF_CHAR as a string. Both MEDM and EDM can already present such DBF_CHAR
|
|
arrays as strings in their text widgets (although you do have to configure the
|
|
widget to format it as text), so this solution already works with some CA
|
|
clients, although by no means all clients support it yet.</p>
|
|
|
|
<h4>Darwin no longer uses _environ</h4>
|
|
|
|
<p>The Darwin version of epicsEnvShow (in src/libCom/osi/os/Darwin/osdEnv.c)
|
|
now uses _NSGetEnviron() to get the pointer to the environment string
|
|
table.</p>
|
|
|
|
<h4>gpHash argument type changed</h4>
|
|
|
|
<p>Out-of-tree users of libCom's gpHash routines should change the type of their
|
|
pointer to their gpHash table to avoid compiler warnings. The first argument to
|
|
all of the <tt>gph...()</tt> routines used to be a <tt>void *</tt> (or a
|
|
pointer to one for <tt>gphInit()</tt>) but is now a <tt>struct
|
|
gphPvt *</tt> (<tt>struct gphPvt **</tt> for <tt>gphInit</tt>) for
|
|
better type safety. The definition of the structure has not been made public,
|
|
although a declaration is provided in <tt>gpHash.h</tt>.</p>
|
|
|
|
<h4>New hash functions in epicsString.h</h4>
|
|
|
|
<p>The existing routines used to hash strings have been replaced by a new
|
|
pair of functions that are prototyped in the epicsString.h header file:</p>
|
|
|
|
<pre>unsigned int epicsStrHash(const char *str, unsigned int seed);
|
|
unsigned int epicsMemHash(const char *str, size_t length, unsigned int seed);</pre>
|
|
|
|
<p>The seed argument should normally be zero, but can be used to chain
|
|
several hash calculations together to create a single value from multiple
|
|
strings or memory buffers. The resulting value should be masked with the
|
|
appropriate number of bits for the desired hash width. These functions both
|
|
use the same algorithm, and on most CPUs should be faster that the previous
|
|
hash functions used in Base. Use epicsStrHash() on nil-terminated strings,
|
|
epicsMemHash() if the data might contain zero bytes.</p>
|
|
|
|
<h4>Support for dynamic loading</h4>
|
|
|
|
<p>The existing OSI epicsFindSymbol API has been expanded to support dynamic
|
|
loading of binary files, on architectures where the facilities necessary to
|
|
implement this are provided (currently Linux, Solaris, Darwin and vxWorks). A
|
|
new but optional command is provided for iocsh which calls the new
|
|
<tt>epicsLoadLibrary()</tt> function. In order to include this command in an
|
|
IOC, you must include the <tt>dlload.dbd</tt> file; the command will then be
|
|
installed when the IOC's <tt>ioc_registerRecordDeviceDriver</tt> routine is
|
|
run.</p>
|
|
|
|
<p>To dynamically load a new routine for use with the sub or aSub record
|
|
types, you also have to register the subroutines at runtime. You can use the
|
|
EPICS build system and the registerRecordDeviceDriver.pl script to write the
|
|
necessary code for you, you just have to create a .dbd file that declares the
|
|
functions in the library and add the derived .cpp file to the library
|
|
sources. The product of your build should be a <tt>LOADABLE_LIBRARY</tt> to
|
|
ensure that the correct linker commands are used.</p>
|
|
|
|
<p>After a shared library is loaded into the IOC using the new iocsh
|
|
<tt>dlload</tt> command you will usually have to run the
|
|
<tt>lib_registerRecordDeviceDriver</tt> routine to register the components
|
|
that were mentioned in the .dbd file. After registration the functions can be
|
|
found as normal by setting the SNAM field of your sub or aSub record
|
|
instances. Once loaded, shared libraries cannot be unloaded again as there is
|
|
no way to be sure that some other part of the IOC doesn't still have a
|
|
pointer to something inside the module.</p>
|
|
|
|
<p>Components provided by a shared library can include functions for sub and
|
|
aSub records, iocsh commands, time providers and sequence programs. Record
|
|
and device support code may be possible, but there are complications in
|
|
creating the .dbd file so we don't recommend it yet. It is possible to load
|
|
libraries after iocInit, but the code is not re-entrant so should only be
|
|
used from the main thread. Adding new record types or device support will
|
|
not work after iocInit.</p>
|
|
|
|
<h4>Perl5 CA library</h4>
|
|
|
|
<p>The <tt>CA::put</tt> and <tt>CA::put_callback</tt> methods now use the
|
|
native type of the PV to determine which data type to use in all cases;
|
|
earlier versions looked at the Perl data type for single-valued PVs, but this
|
|
was truncating some double values into integers.</p>
|
|
|
|
<h4>generalTime and epicsTime updates</h4>
|
|
|
|
<p>Allow time providers to supply timestamps in interrupt context. A pair of
|
|
new API routines in epicsTime.h <tt>epicsTimeGetCurrentInt()</tt> and
|
|
<tt>epicsTimeGetEventInt()</tt> will check the most recently successful
|
|
current-time or event-time provider and forward requests to the routine
|
|
registered by that provider, if any. The priority list is not traversed, so
|
|
if the latest provider has not registered an interrupt-safe routine by
|
|
calling <tt>generalTimeAddIntCurrentProvider()</tt> or
|
|
<tt>generalTimeAddIntEventProvider()</tt> as appropriate, these API routines
|
|
will return failure. The resulting timestamp is not protected against
|
|
backwards movement either.</p>
|
|
|
|
<p>Added a routine <tt>generalTimeHighestCurrentName()</tt> which returns the
|
|
name of the highest prority registered current time provider. Comparing this
|
|
with the name returned by <tt>generalTimeCurrentProviderName()</tt> permits
|
|
an alarm to be generated if an IOC is not able to use the time provider it
|
|
was designed to use. The General Time stringin device support keyword
|
|
<tt>@TOPTCP</tt> has been added to make this name available in a database
|
|
record.</p>
|
|
|
|
<p>The following routines have been renamed, but the old name may still be
|
|
used since a macro with the old name has been added:</p>
|
|
|
|
<blockquote>
|
|
|
|
<table border="1">
|
|
<tbody>
|
|
<tr>
|
|
<th>Old Name</th>
|
|
<th>New Name</th>
|
|
</tr>
|
|
<tr>
|
|
<td><tt>generalTimeCurrentTpRegister</tt></td>
|
|
<td><tt>generalTimeRegisterCurrentProvider</tt></td>
|
|
</tr>
|
|
<tr>
|
|
<td><tt>generalTimeEventTpRegister</tt></td>
|
|
<td><tt>generalTimeRegisterEventProvider</tt></td>
|
|
</tr>
|
|
<tr>
|
|
<td><tt>generalTimeCurrentTpName</tt></td>
|
|
<td><tt>generalTimeCurrentProviderName</tt></td>
|
|
</tr>
|
|
<tr>
|
|
<td><tt>generalTimeEventTpName</tt></td>
|
|
<td><tt>generalTimeEventProviderName</tt></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</blockquote>
|
|
|
|
<p>The routine <tt>generalTimeCreateSyncTimer()</tt> was not useful in
|
|
practice due to time provider initialization issues, nor was its
|
|
implementation protected properly for use on SMP systems so it has been
|
|
deleted. The deprecated and empty <tt>synchronize()</tt> method from the
|
|
epicsTime class has also gone.</p>
|
|
|
|
<h4>RTEMS Release</h4>
|
|
|
|
<p>RTEMS release 4.9.2 or newer is required. EPICS now configures RTEMS to use
|
|
unified executive/malloc memory pools if available (RTEMS 4.10 and up).</p>
|
|
<h4>RTEMS</h4>
|
|
|
|
<p>RTEMS stack sizes have been reduced. This allows more clients in machines
|
|
with limited memory.</p>
|
|
|
|
<p>RTEMS file descriptor allocation has been increased.</p>
|
|
|
|
<h4>Added record aliases</h4>
|
|
|
|
<p>Record definitions can declare their own alias names along with the field
|
|
values, or a separate alias statement can also be used:</p>
|
|
|
|
<blockquote>
|
|
<pre>record(ai,"canonicalName")
|
|
{
|
|
alias("firstAlias")
|
|
}
|
|
alias("canonicalName","secondAlias")</pre>
|
|
</blockquote>
|
|
|
|
<p>Aliases can only be created for records that have already been loaded by
|
|
the IOC, although they don't have to appear in the same .db file. A CA client
|
|
can discover that a record name is an alias by fetching its .NAME field,
|
|
which will always return the canonical name for the record. These new
|
|
routines in the dbStaticLib library handle aliases:</p>
|
|
|
|
<blockquote>
|
|
<pre>long dbCreateAlias(DBENTRY *pdbentry, const char *paliasName);
|
|
int dbIsAlias(DBENTRY *pdbentry);
|
|
int dbGetNAliases(DBENTRY *pdbentry)
|
|
long dbDeleteAliases(DBENTRY *pdbentry);</pre>
|
|
</blockquote>
|
|
|
|
<p>Aliases are located using the existing record instance API. Use
|
|
<tt>dbIsAlias()</tt> to test whether a record is actually an alias or not.
|
|
Aliasees can be deleted like record instances using <tt>dbDeleteRecord()</tt>
|
|
which will not delete the underlying record if the DBENTRY refers to the
|
|
alias (deleting a record instance does delete all its aliases though). The
|
|
<tt>dbDeleteAliases()</tt> routine deletes all aliases of the selected
|
|
record, and will return an error if used on an alias.</p>
|
|
|
|
<p>Any out-of-tree tools that scan through all the records in the database
|
|
using <tt>dbFirstRecord()</tt> and <tt>dbNextRecord()</tt> may need modifying
|
|
to avoid duplicate processing of aliased record instances. Also note that
|
|
the set of info items for a record instance are not shared with its aliases,
|
|
which each have their own info item namespace.</p>
|
|
|
|
<h4>Added support for RTEMS-mvme2700</h4>
|
|
|
|
<p>Supplied by Matt Rippa <mrippa@gemini.edu>. Should work for
|
|
MVME2400, too.</p>
|
|
|
|
<h4>CA Commandline tools: priority support</h4>
|
|
|
|
<p>A new option <tt>-p</tt> was added to all Channel Access command line
|
|
tools to allow specifying the CA priority.</p>
|
|
|
|
<h4>Linux: Use libncurses</h4>
|
|
|
|
<p>Changed linux builds to link against libncurses instead of libcurses
|
|
(suggested by Peter Zumbruch).</p>
|
|
|
|
|
|
<h2 align="center">Changes between 3.14.9 and 3.14.10</h2>
|
|
|
|
<h4>GCC_EXEC_PREFIX references removed from configuration files</h4>
|
|
|
|
<p>Definition of GCC_EXEC_PREFIX removed from CONFIG.CrossCommon and
|
|
unexport of GCC_EXEC_PREFIX removed from vxWorks and RTEMS builds.</p>
|
|
|
|
<h4>RTEMS Release</h4>
|
|
|
|
<p>RTEMS release 4.9 or newer is required. If you are using the RTEMS NFS
|
|
time provider you need to use RTEMS 4.9.1 or newer.</p>
|
|
|
|
<h4>RTEMS epicsEventWaitWithTimeout</h4>
|
|
|
|
<p>Correctly return epicsEventWaitTimeout when event is not pending and
|
|
timeout value is 0.0 seconds.</p>
|
|
|
|
<h4>epicsRingPointer, epicsRingBytes</h4>
|
|
|
|
<p>Fixed a race condition exposed by compilers with more agressive
|
|
optimization.</p>
|
|
|
|
<h4>camonitor timestamp support</h4>
|
|
|
|
<p>The <tt>camonitor</tt> program now supports the ability to display both
|
|
server- and client-side timestamps, simultaneously if requested. The old
|
|
command-line options <tt>-r</tt> <tt>-i</tt> and <tt>-I</tt> that controlled
|
|
the timestamp display have been replaced with a new <tt>-t</tt> option that
|
|
takes additional argument letters to control which timestamp sources and
|
|
output format should be used.</p>
|
|
|
|
<p>See the Command Line Tools section of the Channel Access reference manual
|
|
or run <tt>camonitor -h</tt> for a summary of the options.</p>
|
|
|
|
<h4>New "stdio" stringout device support</h4>
|
|
|
|
<p>A new device support has been added that allows a stringout record to
|
|
output one-line messages to stdout, stderr or the errlog subsystem. Use
|
|
DTYP="stdio" and set the OUT field to one of "@stdout", "@stderr" or
|
|
"@errlog" to control the message destination. A newline is appended to the
|
|
contents of the record's VAL field when printing.</p>
|
|
|
|
<h4>General Time subsystem</h4>
|
|
|
|
<p>The way in which EPICS gets the time has been significantly revised since
|
|
R3.14.9 with the introduction of the General Time subsystem. Two kinds of
|
|
pluggable time providers are now supported, which return either the current
|
|
time or the latest timestamp of a numbered Time Event from a hardware event
|
|
system. All IOCs must have at least one Current Time provider, but Event Time
|
|
providers are optional. The General Time subsystem guarantees that the
|
|
timestamps returned never step backwards, even when switching between time
|
|
providers.</p>
|
|
|
|
<p>A Current Time Provider reports the current wall-clock time if it is able
|
|
to when asked; if it can't it says so, and the time subsystem will then ask
|
|
the next provider in its list and so on until someone replies with the time.
|
|
Event Time providers are handled similarly, except that they are asked for
|
|
the timestamp associated with a particular Time Event number rather than the
|
|
current wall-clock time. The registered time providers can be listed using
|
|
the IOC command <tt>generalTimeReport(int interest)</tt> and some time
|
|
providers also have their own separate report commands.</p>
|
|
|
|
<p>Different target architectures come with different default Current Time
|
|
providers in Base. The Unix-like architectures rely on the underlying
|
|
operating system clock, which normally involves running something like ntpd
|
|
as a separate process. The real-time operating systems vxWorks and RTEMS
|
|
install two Current Time providers; the native operating system clock at the
|
|
lowest priority (this provider includes a task to periodically reset the
|
|
operating system clock from a higher priority time provider), and an NTP time
|
|
provider which synchronizes the underlying operating sytem tick timer with an
|
|
NTP server. Microsoft Windows targets using the Win32 API use a
|
|
Windows-specific time provider which contains a built-in PLL.</p>
|
|
|
|
<p>There are no Event Time providers included with Base except for an
|
|
optional "Last Resort" Event provider which can be installed if a site wants
|
|
to be sure that every Time Event number will have a recent timestamp
|
|
associated with it even if the hardware event system goes down. The Last
|
|
Resort Event Time provider returns the current time for every Time Event
|
|
number. To install this provider, run the command
|
|
<tt>installLastResortEventProvider</tt> from your IOC startup script.</p>
|
|
|
|
<p>Additional information about General Time and the time providers included
|
|
with Base can be found in the IOC Application Developers Guide for R3.14.10,
|
|
sections 9.7 and 20.6. General Time was originally written by David H.
|
|
Thompson and Sheng Peng at ORNL, subsequently worked on by Babak Kalantari
|
|
and Timo Korhonen of PSI, and merged into Base by Peter Denison from Diamond.
|
|
Andrew Johnson provided input into the design at various points and made
|
|
various code revisions after the merge.</p>
|
|
|
|
<h4>New ioc/dllPath.bat file for Win32</h4>
|
|
|
|
<p>When creating an IOC with one of the win32-x86 target architectures, a
|
|
file <tt>dllPath.bat</tt> is now generated in the iocBoot/iocxxx directory
|
|
which can be run to adjust the PATH variable to include all of the support
|
|
application bin directories which might contain DLLs that the IOC uses. The
|
|
PATH also includes the IOC application's own bin directory, which simplifies
|
|
starting up the IOC as well.</p>
|
|
|
|
<h4>New epicsEndian.h header</h4>
|
|
|
|
<p>Any C or C++ code can <tt>#include "epicsEndian.h"</tt> which defines four
|
|
macros. The main one is EPICS_BYTE_ORDER and is defined to be either
|
|
EPICS_ENDIAN_LITTLE or EPICS_ENDIAN_BIG (these are numeric constants 1234 and
|
|
4321 respectively). The fourth macro is called EPICS_FLOAT_WORD_ORDER and is
|
|
needed because some ARM systems use mixed-endian format floats.</p>
|
|
|
|
<p>Note that just knowing the CPU's endianness doesn't tell you the complete
|
|
story about the byte order that your hardware registers will present to the
|
|
CPU; byte swapping is often performed automatically by PCI to VME bridge
|
|
devices and by other kinds of bus converter, so "portable" drivers aren't
|
|
always.</p>
|
|
|
|
<h4>Array Subroutine Record added (aSub)</h4>
|
|
|
|
<p>A heavily modified version of Andy Foster's genSub record type has been
|
|
added, called the aSub (Array Subroutine) record type. The new name is so
|
|
that genSub records can continue to be used in IOCs that need those features
|
|
that have changed or been removed in creating the aSub record type. The main
|
|
differences between genSub and aSub are:</p>
|
|
<ul>
|
|
<li>The fields <tt>UFA..UFU</tt>, <tt>UFVA..UFVU</tt>, <tt>TOVA..TOVU</tt>
|
|
and <tt>VERS</tt> have been removed.</li>
|
|
<li>The <tt>INPA..INPU</tt> and <tt>OUTA..OUTU</tt> link fields can now be
|
|
changed at runtime.</li>
|
|
<li>A new set of fields <tt>NEA..NEU</tt> and <tt>NEVA..NEVU</tt> have been
|
|
added which hold the current element count for the associated input and
|
|
ouput fields. These count fields ensure that putting an array to the
|
|
<tt>A..U</tt> or <tt>VALA..VALU</tt> fields cannot permanently shorten
|
|
the number of elements that the array fields can hold.</li>
|
|
<li>The default value for the <tt>FTA..FTU</tt> and <tt>FTVA..FTVU</tt>
|
|
fields has been changed from "STRING" to "DOUBLE", to reduce the memory
|
|
footprint of unneeded fields.</li>
|
|
<li>aSub subroutines can be asynchronous, using the usual method of setting
|
|
prec->pact to <tt>TRUE</tt> before returning and arranging for the
|
|
record's <tt>process()</tt> routine to be called to signal completion.
|
|
The output links are not written until the asynchronous completion
|
|
callback, and input links are not read at asnychronous completion.</li>
|
|
</ul>
|
|
|
|
<h4>epicsTimeEventDeviceTime support for soft channel input records</h4>
|
|
|
|
<p>The Soft Channel device support for all input record types now supports
|
|
the fetching of the timestamp along with the data when the record's TSE field
|
|
is set to epicsTimeEventDeviceTime (-2). This works for both DB and CA links.
|
|
However the timestamp will only be fetched if the record's TSEL link is not
|
|
set, so you can't point TSEL to another record to read the -2 value into TSE
|
|
(that's because to make this work properly would require that the TSEL link
|
|
be read twice every time the record processes; once in the soft channel
|
|
device support, and again when the record type calls
|
|
<tt>recGblGetTimeStamp()</tt>.</p>
|
|
|
|
<h4>devLib: CR/CSR Support added</h4>
|
|
|
|
<p>Thanks to Eric Bjorklund for providing a patch to devLib that gives access
|
|
to the CR/CSR address space (for those on a VME64 CPU with appropriate
|
|
support from your BSP).</p>
|
|
|
|
<h4>ascaStats, dbcaStats, seqcaStats</h4>
|
|
|
|
<p>Query routines have been added that count CA client connections made by
|
|
Access Security rules and Database Channel Access links. A similar routine
|
|
will be added to version 2.0.12 of the sequencer for counting sequence
|
|
program CA links:</p>
|
|
|
|
<blockquote>
|
|
<pre>void ascaStats(int *pchans, int *pdiscon);
|
|
void dbcaStats(int *pchans, int *pdiscon);
|
|
void seqcaStats(int *pchans, int *pdiscon);</pre>
|
|
</blockquote>
|
|
|
|
<p>The pchans parameter should point to integer storage which will be set to
|
|
the total number of channels open, while the value at the pdiscon pointer
|
|
will be set to the number of channels currently disconnected. Prototypes for
|
|
these routines can be found in the header files asCa.h and dbCaTest.h
|
|
(seqCom.h for the sequencer).</p>
|
|
|
|
<h4>Messages from errlog</h4>
|
|
|
|
<p>J. Lewis Muir provided patches to ensure that all messages printed on the
|
|
IOC's console by the errlog subsystem are sent to the stderr output stream
|
|
rather than to stdout.</p>
|
|
|
|
<h4>ipToAsciiProxy</h4>
|
|
|
|
<p>This thread calls upon vendor libraries which may use significant amounts
|
|
of stack. Account for this by providing the ipToAsciiProxy thread with an
|
|
epicsThreadStackBig stack.</p>
|
|
|
|
<h4>iocBuild, iocRun and iocPause</h4>
|
|
|
|
<p>These three new commands are mainly intended for use with DESY's redundant
|
|
IOC software but they might have some uses for others too. <tt>iocBuild</tt>
|
|
allow an IOC to be initialized and set up ready for a quick start without
|
|
actually making it live; a subsequent <tt>iocRun</tt> will bring it to the
|
|
same state as an <tt>iocInit</tt> would have. Once an IOC has been started
|
|
(using either <tt>iocInit</tt> or <tt>iocBuild</tt> + <tt>iocRun</tt>) the
|
|
<tt>iocPause</tt> command can be used to freeze it, disconnecting its PVs and
|
|
stopping all scan activity. The <tt>iocRun</tt> command restarts the IOC
|
|
from this state.</p>
|
|
|
|
<p>While this might seem like a useful thing to be able to do, we have not
|
|
tested it on IOCs using real-world I/O, and it is not unlikely that pausing
|
|
an operational IOC could cause irremdial havok to any device support,
|
|
sequence programs and other software which is not expecting it, so use with
|
|
care and make sure you test it first. An IOC that is kept paused for more
|
|
than a minute or two could fill up its network buffers and become impossible
|
|
to restart without rebooting.</p>
|
|
|
|
<h4>IOC Support on 64-bit archs</h4>
|
|
|
|
<p>A fairly significant number of changes have been that were necessary to
|
|
allow the IOC code to run properly on 64-bit CPU architectures where a
|
|
<tt>long</tt> is 64 bits wide. This was not as simple as replacing every
|
|
instance of the typename <tt>long</tt> with <tt>epicsInt32</tt> because that
|
|
would have broken a lot of external code unnecessarily. The generated
|
|
record.h file now uses the typenames from epicsTypes.h to declare record
|
|
fields, thus field sizes are the same on both 32- and 64-bit platforms (on
|
|
64-bit, a <tt>DBF_LONG</tt> does <em>not</em> map to <tt>long</tt> but to
|
|
<tt>int</tt>). This change does not affect status return values, which are
|
|
still implemented using the native <tt>long</tt> type for the platform.</p>
|
|
|
|
<h4>Conversion of empty strings to character types</h4>
|
|
|
|
<p>While changing the conversion routines in db/dbConvert.c and
|
|
db/dbFastLinkConv.c to support 64-bit architectures as described above, it
|
|
was noticed that an empty string converts to the value 0 for all types other
|
|
than <tt>DBF_CHAR</tt> and <tt>DBF_UCHAR</tt> where it converts to the ASCII
|
|
character <tt>'0'</tt>, value 0x30. Since these types are usually used for
|
|
storing small integers or boolean values rather than ASCII characters, it was
|
|
decided that this conversion is wrong so it has been changed to match the
|
|
other numeric conversions.</p>
|
|
|
|
<h4>epicsShareAPI deprecated inside IOC</h4>
|
|
|
|
<p>APIs that are intended for use inside the IOC, the <tt>epicsShareAPI</tt>
|
|
attribute is slowly being removed. This keyword is only used on MS Windows
|
|
where it indicates to the compiler that the function should use Pascal
|
|
calling conventions rather than C ones, and was necessary to be able to call
|
|
such functions from MS Visual Basic. APIs for use by client code (CA and
|
|
libCom) will generally retain the attribute if they already had it.</p>
|
|
|
|
<h4>Record types ANSIfied</h4>
|
|
|
|
<p>Thanks to John Hammonds at the EPICS Codeathon, the record type
|
|
implementations have been converted from K&R to ANSI C prototypes.</p>
|
|
|
|
<h4>Added Perl5 CA library</h4>
|
|
|
|
<p>Base now provides a CA client library interface for Perl5 scripts in
|
|
<tt>src/cap5</tt> and includes as examples some implementations of the
|
|
catools programs written in Perl. Documentation on how to use the Perl
|
|
library is available in <tt>base/html/CA.html</tt> after the build completes.
|
|
This library cannot currently be built on Windows targets.</p>
|
|
|
|
<h4>IOC ignores SIGHUP</h4>
|
|
|
|
<p>iocInit() installs an signal handler for ignoring SIGHUP. This fixes a
|
|
problem that appeared with soft IOCs run as a procServ child on some Linux
|
|
systems, where a disconnecting CA client would cause the soft IOC to get a
|
|
SIGHUP and exit.</p>
|
|
|
|
<h4>Build System Reorganization</h4>
|
|
|
|
<p>Several changes have been made to the build system, although these changes
|
|
should not affect the contents of <tt>Makefile</tt>s or any applications
|
|
using Base. They do however require that the version of GNU Make used be 3.81
|
|
or later. These changes are briefly:</p>
|
|
<ul>
|
|
<li><p>A new tool is provided that expands out <tt>@VAR@</tt> macros. By
|
|
default it knows the value of <tt>@TOP@</tt>, <tt>@ARCH@</tt> and any
|
|
paths defined in the application's <tt>configure/RELEASE</tt> file such
|
|
as @EPICS_BASE@, but additional macros can be defined in the
|
|
<tt>Makefile</tt> that uses it by adding to the <tt>EXPAND_VARS</tt>
|
|
variable like the example following, which creates an <tt>@EXE@</tt>
|
|
macro that expands out to <tt>.exe</tt> on windows targets and to nothing
|
|
on other platforms:</p>
|
|
<pre> EXPAND_VARS += EXE=$(EXE)</pre>
|
|
<p>Files that contain <tt>@VAR@</tt> macros to be substituted must have
|
|
an at sign <tt><b>@</b></tt> as the last character of their name and be
|
|
listed in the <tt>EXPAND</tt> variable of their <tt>Makefile</tt>. The
|
|
expanded file will have the same name as the original with the
|
|
<tt><b>@</b></tt> suffix removed, and is then available for compiling or
|
|
installing using any other build mechanism.</p>
|
|
</li>
|
|
<li><p>Support has been added for installing Perl library modules. The
|
|
<tt>Makefile</tt> variable <tt>PERL_MODULES</tt> can be set to a list of
|
|
names of files to be installed into the <tt>$(TOP)/lib/perl</tt>
|
|
directory. The above macro expansion facility can then be used in perl
|
|
programs that use these libraries to set the perl search path to include
|
|
that directory. The syntax for this is as follows:</p>
|
|
<pre> use lib '@TOP@/lib/perl';
|
|
use MyModule;</pre>
|
|
<p>The filenames listed in <tt>PERL_MODULES</tt> can include subdirectory
|
|
path components and the build system will preserve these in the installed
|
|
result.</p>
|
|
</li>
|
|
<li>The Perl scripts that were in <tt>configure/tools</tt> are now found in
|
|
the new <tt>src/tools</tt> directory, and get installed into the
|
|
appropriate <tt>bin/<i>hostarch</i></tt> directory at build time. Some of
|
|
these scripts are no longer required and have been removed, and others
|
|
are being modified to make them more modular, extracting common routines
|
|
into perl library modules.</li>
|
|
<li>The generated files that were created by running make in the
|
|
<tt>configure</tt> directory are no longer required, having been replaced
|
|
by additional mechanisms inside the build system files. This removes a
|
|
common source of build problems.</li>
|
|
</ul>
|
|
|
|
<h4>Access security configuration files</h4>
|
|
|
|
<p>Rules and macros were added for creating an *.acf file, access security
|
|
configuration file, from an *.acs file using the C preprocessor. An .acs file
|
|
has the same format as an .acf file with the addition of '#include
|
|
"<filename>"' and '#define <macroname> <value>' lines. The
|
|
C preprocessor includes the #include files and performs the macro
|
|
substitutions.</p>
|
|
|
|
<h4>Changes to subArray record error behaviour</h4>
|
|
|
|
<p>In previous versions the INDX field of a subArray record was set to zero
|
|
if the array that it reads through its INP field became empty. From this
|
|
release the INDX field will only be modified by the record's process()
|
|
routine if INDX is greater than MALM. In the event that the no data is read
|
|
through the INP link, the subArray's UDF field will be set and a UDF/INVALID
|
|
alarm will be generated.</p>
|
|
|
|
<h4>scanOnce(precord) argument</h4>
|
|
|
|
<p>The argument to <tt>scanOnce()</tt> is a pointer to the record to be
|
|
scanned. This used to be a <tt>void *</tt> pointer, but is now a
|
|
<tt>dbCommon *</tt> pointer. Record types written in C that call
|
|
<tt>scanOnce()</tt> will still compile without having to change the source
|
|
code (although a comiler warning may be generated), but any record types
|
|
implemented in C++ will have to be fixed to cast the record instance pointer
|
|
to a <tt>dbCommon *</tt> instead.</p>
|
|
|
|
<h4>New Architectures</h4>
|
|
|
|
<p>The following target architectures have been added to this release,
|
|
although the core developers lack the ability to test all of them:</p>
|
|
<ul>
|
|
<li>linux-cris
|
|
<ul>
|
|
<li>linux-cris_v10</li>
|
|
<li>linux-cris_v32</li>
|
|
</ul>
|
|
</li>
|
|
<li>linux-xscale_be (tested with MOXA UC-7408 Plus)</li>
|
|
</ul>
|
|
|
|
<h4>Added compile line header search directories</h4>
|
|
|
|
<p>The compile line list of directories to search for header files now
|
|
includes O.Common and the existing os subdirectories of SRC_DIRS
|
|
<src_dir>/os/<OS_CLASS>, <src_dir>/os/posix, and
|
|
<src_dir>/os/default.</p>
|
|
|
|
<h4>Parallel make now supported</h4>
|
|
|
|
<p>The <tt>-j <i>jobs</i></tt> option is now supported for users of GNU Make
|
|
version 3.80 or later. The <tt>-j</tt> option speeds up building by allowing
|
|
multiple jobs (build commands) to be run in parallel; this will have the most
|
|
effect on hosts with multiple symmetric processors, but can also speed up
|
|
uni-processor builds. Builds still work as before when run without
|
|
<tt>-j</tt>, but using the <tt>-j</tt> option with an earlier version of GNU
|
|
make will fail since this relies on the <tt>$(eval)</tt> function which was
|
|
introduced in GNU Make 3.80.</p>
|
|
|
|
<p>The <tt>-j</tt> option has been tested with this version of EPICS Base,
|
|
but it may not work for Extensions or IOC applications unless their
|
|
dependancies are specified correctly.</p>
|
|
|
|
<p>New DIRS directory dependancy specifications are required to determine the
|
|
directory build order with <tt>-j</tt>. For example if we have 2 directories,
|
|
src and configure, and the configure directory must be built before the src
|
|
directory, the Makefile should contain:</p>
|
|
|
|
<blockquote>
|
|
<pre> DIRS = configure src
|
|
src_DEPEND_DIRS = configure</pre>
|
|
</blockquote>
|
|
|
|
<p>The directory dependancy specifications are only needed when <tt>-j</tt>
|
|
is given to make. Without the <tt>-j</tt> the order of directories in the
|
|
DIRS definition determines the build order as before.</p>
|
|
|
|
<h4>Breakpoint tables</h4>
|
|
|
|
<p>Some sites may be using breakpoint tables that are not monotonic in one
|
|
direction. In R3.14.9 both axes of a breaktable had to be monotonic; a table
|
|
will not be loaded if either the raw or engineering values change direction.
|
|
There are situations where this check is too strict however, so a new
|
|
variable named <tt>dbBptNotMonotonic</tt> has been added that disables this
|
|
check if its value is non-zero.</p>
|
|
|
|
<p>Breakpoint tables are often included in an IOC's .dbd file, but they can
|
|
also be loaded from a .db file (although VDCT will probably not understand
|
|
them). Since there is no way to set the above variable inside the
|
|
<tt>dbExpand</tt> program that expands out an IOC's .dbd file (which also
|
|
rejects non-monotonic breaktables), all applications that use such tables
|
|
will have to load those tables separately, using either
|
|
<tt>dbLoadDatabase</tt> or <tt>dbLoadRecords</tt>.</p>
|
|
|
|
<h4>RTEMS on processors with MOTLOAD bootstrap</h4>
|
|
|
|
<p>Added support for more 'Global Environment Variables'. Documented in the
|
|
EPICS/RTEMS tutorial.</p>
|
|
|
|
<h4>RTEMS on processors with PPCBUG bootstrap</h4>
|
|
|
|
<p>Set NTP server as well as nameserver and log server from server bootstrap
|
|
settting.</p>
|
|
|
|
<h4>RTEMS compiler flags</h4>
|
|
|
|
<p>The -ansi flag has been removed from CONFORM_FLAGS_STRICT and
|
|
CONFORM_CXXFLAGS_STRICT -- there are many useful library functions whose
|
|
prototypes are disabled when -ansi is used.</p>
|
|
|
|
<h4>SEL record (Mantis #295)</h4>
|
|
|
|
<p>The value in the SELN field was not being checked against its limit,
|
|
potentially causing a crash on some architectures.</p>
|
|
|
|
<h4>Calc expressions</h4>
|
|
<dl>
|
|
<dt><tt>VAL</tt> keyword</dt>
|
|
<dd>The keyword <tt>VAL</tt> is now supported in CALC expressions. In a
|
|
calc or calcout record it returns the current contents of the VAL field
|
|
(which can be written to by a CA put, so it might <i>not</i> be the
|
|
result from last time the expression was evaluated). In Access Security
|
|
expressions it returns the result of the previous evaluation of the
|
|
rule expression. In other uses of the calcPerform engine, the result
|
|
may not be well-defined.</dd>
|
|
<dt><tt>MIN</tt>, <tt>MAX</tt>, <tt>FINITE</tt>, <tt>ISNAN</tt>
|
|
functions</dt>
|
|
<dd>Thanks to Benjamin Franksen these functions can now accept any number
|
|
of arguments, thus <tt>MAX(A,B,C,D,E,F,G,H,I,J,K,L)</tt> and
|
|
<tt>MIN(A)</tt>are now legal expressions. The <tt>FINITE</tt> function
|
|
returns a non-zero value as long as none of its arguments are NaN or
|
|
Inf values, while <tt>ISNAN</tt> returns non-zero if any of its
|
|
arguments are NaN values.</dd>
|
|
</dl>
|
|
|
|
<h4>softIoc now starts shell by default</h4>
|
|
|
|
<p>To prevent an interactive shell from being started, give a <tt>-S</tt>
|
|
(upper case) option on the softIoc command line. The old <tt>-s</tt> (lower
|
|
case) option is still accepted, but now does nothing.</p>
|
|
|
|
<h4>Error messages from dbLoadRecords</h4>
|
|
|
|
<p>Some error messages output by the dbLoadRecords parser should be easier to
|
|
understand, having been reworded to report what was actually the problem
|
|
rather than just which routine found the error...</p>
|
|
|
|
<h4>Command registration for iocsh</h4>
|
|
|
|
<p>The iocsh command registration data and routines have been moved out of
|
|
the <tt>src/iocsh</tt> directory (which now no longer exists) into a file for
|
|
each library. At the same time, the iocsh implementation code has been moved
|
|
into libCom. There is no <tt>libiocsh.a</tt> library created any more, so any
|
|
applications (such as the sequencer) which explicitly list <tt>iocsh</tt> in
|
|
a <tt>xxx_LIBS</tt> definition in their Makefile(s) will need to be modified
|
|
to have the library name removed. In most cases though the library will have
|
|
been included using the <tt>EPICS_BASE_IOC_LIBS</tt> or
|
|
<tt>EPICS_BASE_HOST_LIBS</tt> variables that are set in Base, and thus no
|
|
changes will be needed.</p>
|
|
|
|
<h2 align="center">Changes between 3.14.8.2 and 3.14.9</h2>
|
|
|
|
<h4>Cygwin Builds</h4>
|
|
|
|
<p>The cygwin make version 3.81-1 does not handle MS-DOS path names and thus
|
|
does not work for EPICS builds with RELEASE file definitions. From the
|
|
discussion on the cygwin mailing list it looks like this will be fixed in
|
|
make version 3.82. In the meantime make version 3.80 or a fixed make can be
|
|
downloaded from <a
|
|
href="https://projects.coin-or.org/BuildTools/wiki/current-issues">this
|
|
website</a>.</p>
|
|
|
|
<h4>New Architectures</h4>
|
|
|
|
<p>The following target architectures have been added to this release,
|
|
although the core developers lack the ability to test all of them:</p>
|
|
<ul>
|
|
<li>darwin-ppcx86</li>
|
|
<li>darwin-x86</li>
|
|
<li>freebsd-x86</li>
|
|
<li>freebsd-x86_64</li>
|
|
<li>interix-x86</li>
|
|
<li>linux-arm</li>
|
|
<li>osf-alpha</li>
|
|
<li>osf-alpha-gnu</li>
|
|
<li>vxWorks-mpc8540</li>
|
|
<li>vxWorks-ppc604_altivec</li>
|
|
</ul>
|
|
|
|
<h4>vxWorks compiler optimization level</h4>
|
|
|
|
<p>Wind River Systems do not support optimization levels beyond <tt>-O2</tt>
|
|
for vxWorks applications compiled using gcc, so optimized vxWorks builds are
|
|
now set to <tt>-O2</tt> only (we currently use <tt>-O3</tt> everywhere
|
|
else).</p>
|
|
|
|
<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 — 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 _ - + : . / \ [ ] < > ;</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.<arch> 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 </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); 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 — 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 "postfix.h"</tt> before the
|
|
<tt>#include "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>Create a POSIX-compliant TZ environment variable from EPICS_TIMEZONE.
|
|
Previous versions had an incorrect format which was ignored by tzset().</p>
|
|
|
|
<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>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 between 3.14.8.1 and 3.14.8.2</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 between 3.14.8 and 3.14.8.1</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 between 3.14.7 and 3.14.8</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 between 3.14.6 and 3.14.7</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 > 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 > 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 between 3.14.5 and 3.14.6</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 <name>Include.dbd from files specified
|
|
in a <name>_DBD macro definition. An include line will be placed in the
|
|
<name>Include.dbd for each file specified in the <name>_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’ 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->pValue->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 between 3.14.4 and 3.14.5</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>
|
|
<base>/bin/<arch>/makeBaseApp.pl -t vlinac vlinac
|
|
<base>/bin/<arch>/makeBaseApp.pl -i -t vlinac vlinac</pre>
|
|
|
|
<p>For further information, see:</p>
|
|
<pre> <top>/vlinacApp/misc/README
|
|
<top>/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 between 3.14.3 and 3.14.4</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 between 3.14.2 and 3.14.3</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 <CR> and then a <CR> 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 between 3.14.1 and 3.14.2</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->get_array_info(paddr,&no_elements,&offset);
|
|
write nNew elements into array >>
|
|
prset->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 between 3.14.0beta2 and 3.14.1</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/<arch> 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 => epicsInt32 for anything that might get transfered to/from
|
|
network buffers</li>
|
|
<li>unsigned long => 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->linr == menuConvertLINEAR) && pdset->special_linconv) {
|
|
pai->eoff = pai->egul;
|
|
}</pre>
|
|
|
|
<p>It now executes:</p>
|
|
<pre> if ((pai->eslo==1.0) && (pai->eoff==0.0)) {
|
|
pai->eoff = pai->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 <top>/configure/CONFIG file (which specifies the path to
|
|
<top> 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 <top>/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 = <name>App</blockquote>
|
|
to
|
|
|
|
<blockquote>
|
|
DBD += <name></blockquote>
|
|
and remove the line<br>
|
|
|
|
|
|
<blockquote>
|
|
DBDEXPAND = <name>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=<name>.h</blockquote>
|
|
to
|
|
|
|
<blockquote>
|
|
DBDINC+=<name></blockquote>
|
|
change
|
|
|
|
<blockquote>
|
|
MENUS=<name>.h</blockquote>
|
|
to
|
|
|
|
<blockquote>
|
|
DBDINC+=<name></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 +=
|
|
<name>_registerRecordDeviceDriver.cpp</blockquote>
|
|
where <name> is the base name of a <name>.dbd file which was
|
|
created from a <name>Include.dbd file and which will be loaded in a
|
|
st.cmd or stcmd.host script (e.g. example).</li>
|
|
<li>In ./iocBoot/ioc<name>/st.cmd files change
|
|
|
|
<blockquote>
|
|
dbLoadDatabase("dbd/exampleApp.dbd")</blockquote>
|
|
to
|
|
|
|
<blockquote>
|
|
dbLoadDatabase("dbd/example.dbd")</blockquote>
|
|
</li>
|
|
<li>In <top>/iocBoot/ioc<name>/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>
|