Most errors found with: codespell -L cach,thst,odly,aslo,parm,parms,inpu,ges,prset,pevent,ptd,pring,valu,noo,noe,ned,inout,ro,siz,froms,nd,fo,singl,sart,multy,tthe,allong,ment,inate,nodel,tring,alse,ture,thi,wille,numer Some more manually found (its -> it's) c++20: Do not use apostrophe (e.g. can't) in unquoted #error message
9.4 KiB
Release Notes
This document describes the changes that were included in the release of EPICS noted below. Release entries are now provided in a separate document for each version in the EPICS 7 series, but all are combined into a single page for publishing on the EPICS website. Separate release documents are also included from the older Base 3.15 and 3.16 series.
The external PVA submodules continue to maintain their own release notes files as before, but the entries describing changes in those submodules since version 7.0.5 have been copied into the associated EPICS Release Notes files, and will be added to new EPICS Release Notes published in the future.
EPICS Release 7.0.8
bi "Raw Soft Channel" use MASK
If MASK is non-zero, The raw device support will now apply MASK to the value read into RVAL. eg. allows extraction of a bit from an input integer.
record(longin, "integer") {
field(VAL, "0xff")
}
record(bi, "bit1") {
field(DESC, "extract bit 1")
field(DTYP, "Raw Soft Channel")
field(INP , "integer")
field(MASK, "0x2")
field(ZNAM, "Clear")
field(ONAM, "Set")
}
ANSI escapes in stderr
ANSI escape character sequences may now be printed to the stderr stream. These escapes will appear in logs captured from that stream. Tools which parse and/or render these logs may need to be adjusted to either strip out the escapes, or to translate them into markup. (see ansi2html for example)
Allow explicit append with dbRecordsOnceOnly!=0
Previously setting dbRecordsOnceOnly!=0 prevented any further changes to a record via a .db file. eg.
record(ai, "myrec") {}
dbRecordsOnceOnly!=0 previously disallowed appending fields with either form:
record("*", "myrec") {} # error
record(ai, "myrec") {} # error
Beginning with this release, dbRecordsOnceOnly!=0 allows appending when explicitly intended (when record type is "*").
record("*", "myrec") {} # allowed
record(ai, "myrec") {} # error
Add $EPICS_CLI_TIMEOUT
Add support for CA tools timeout from environment variable $EPICS_CLI_TIMEOUT
which sets the default the default timeout for caget et al.
The -w argument continues to take precedence.
Fixed leak from a non-EPICS thread on WIN32
On Windows targets, if a thread not created by epicsThreadCreate*() directly
or indirectly calls an epicsThread*() function, a specific tracking struct
is allocated. Prior to this release the allocation would not be free()d,
resulting in a memory leak.
A similar issue on POSIX targets was previously fixed.
Change compiler for FreeBSD to clang
The default compiler for FreeBSD targets changes from GCC to clang.
Expose dbCreateAlias in IOC shell
Add a new IOC shell command dbCreateAlias allow record aliases to be added.
Intended for use before iocInit. eg. to add an alias "bar" for a record "foo".
dbLoadRecords("some.db") # includes: record(ai, "foo") { ...
dbCreateAlias("foo", "bar")
iocInit()
dbEvent eventsRemaining missed on cancel
In some cases, RSRV may queue a subscription update, but not flush it. This partially addresses this issue.
subRecord on bad INP links
Previously, if a subRecord has an invalid INP* link, it was silently failing
(and not running the proc function). Now the the status code returned by the
subroutine is returned from dbProcess().
COMMANDLINE_LIBRARY fallback to GNU_DIR
Fall back to the previous behavior when searching for readline.h with older compilers.
Search for readline installed via HomeBrew.
Look for /opt/local/include/readline on OSX.
Always stop worker threads
The SCAN and callback threads are now stopped during normal IOC shutdown.
Allow runtime bypass of free list allocator
The environment variable $EPICS_FREELIST_BYPASS may be set to YES to cause the freeListLib functions to always call directly to malloc()/free(). May be useful when troubleshooting some kinds of memory allocation bugs which would otherwise be "hidden". eg. use-after-free data races. This may also improve the results of dynamic analysis tools which are not aware of this internal free list.
compress record enhancement
The compress record now supports the use of partially-filled buffers when using
any of the N-to-one algorithms. This is achieved by setting the new field PBUF
to YES.
Extended timestamp channel filter
The "ts" filter can now retrieve the record's timestamp in several numeric
and string formats, some of which support full nanosecond precision.
Hal$ caget -a test:channel
test:channel 2021-03-11 18:23:48.265386 42
Hal$ caget -f9 'test:channel.{"ts": {"num": "dbl"}}'
test:channel.{"ts": {"num": "dbl"}} 984331428.265386105
Hal$ caget 'test:channel.{"ts": {"str": "iso"}}'
test:channel.{"ts": {"str": "iso"}} 2021-03-11T18:23:48.265386+0100
Hal$ caget -f1 'test:channel.{"ts": {"num": "ts"}}'
test:channel.{"ts": {"num": "ts"}} 2 984331428.0 265386163.0
More information is included in the filters documentation, which can be found in
the html/filters.html document that is generated during the build
Allow adding new error symbols at any time
errSymbolAdd can now be called after early initialization.
Add conditional output (OOPT) to the longout record
The longout record can now be configured using its new OOPT and OOCH fields to (not) write to its output link depending on the contents of VAL, in a similar manner to the calcout record. More information can be found on the reference page for the longout record type that accompanies this release.
This functionality was suggested in lp# 1398215 and may be added to other output record types if the community finds it useful, please send feedback about the feature to tech-talk.
IOC Shell
Tab completion
When built with optional GNU libreadline support, the interactive IOC shell
will perform tab completion for command names as well as for some arguments
of the built-in commands. For example, the record name argument of dbpr,
and the path name argument of cd.
Externally defined commands have a limited ability to opt into completion by
using the new iocshArgStringRecord and iocshArgStringPath argument types.
Both function identically to iocshArgString but indicate how to suggest
completion strings.
Builds on macOS (darwin-x86 or darwin-aarch64 targets) normally use Apple's
libedit library in readline compatibility mode, which doesn't support the tab
completion API that GNU readline provides. You can use Homebrew or some other
third-party package manager to install the GNU readline package, then edit the
configure/os/CONFIG_SITE.darwinCommon.darwinCommon file to have EPICS use the
real thing to get tab completion in the IOC shell. The default settings in that
file currently look for and use a Homebrew-installed readline if present.
Persist history
Attempt to read and write command to a file (./.iocsh_history by default).
Name may be overwritten with by setting $EPICS_IOCSH_HISTFILE to an
alternate path, or disabled by setting to an empty string.
Changes to help output
Rework the help command output to improve formatting and readability,
and include a visual marker (a line of underlines) between different help commands.
Add FMOD as CALC Expression
The floating point modulo function FMOD(NUM,DEN) has been added to the CALC
expression engine and is available to all software using that (calc and calcout
record types, access security library and some extensions).
Submodule updates
The pvData module was updated to version 8.0.6:
- Compatible changes
- Actually enable JSON-5 output in PVStructure::Formatter::JSON when available.
- Fix unaligned access issues for some ARM/Linux targets.
The pvAccess module was updated to version 7.1.7:
- Changes
- Registering the PVA server with the IOC now sets the
PVAS_SERVER_PORTvariable in the environment.
- Registering the PVA server with the IOC now sets the
The pva2pva module was updated to version 1.4.1:
- Bug Fixes
dbLoadGroupwas fixed
- Additions
- Support for "meta" member at top of array of structs
The pvDatabase module was updated to version 4.7.1:
-
Added data distributor plugin which can be used for distributing data between a group of clients. The plugin is triggered by the request string of the form:
_[distributor=group:<group id>;set:<set_id>;trigger:<field_name>;updates:<n_updates>;mode:<update_mode>]The plugin parameters are optional and are described below:
-
group: this parameter indicates a group that client application belongs to (default value: "default"); groups of clients are completely independent of each other
-
set: this parameter designates a client set that application belongs to within its group (default value: "default")
-
trigger: this is the PV structure field that distinguishes different channel updates (default value: "timeStamp"); for example, for area detector images one could use the "uniqueId" field of the NTND structure
-
updates: this parameter configures how many sequential updates a client (or a set of clients) will receive before the data distributor starts updating the next one (default value: "1")
-
mode: this parameter configures how channel updates are to be distributed between clients in a set:
- one: update goes to one client per set
- all: update goes to all clients in a set
- default is "one" if client set id is not specified, and "all" if set id is specified
-