Compare commits

...

79 Commits

Author SHA1 Message Date
Ralph Lange
65574b5971 Update CONFIG_BASE_VERSION for 3.15.4, remove "not released" from RELEASE_NOTES 2016-05-27 08:54:04 +02:00
Andrew Johnson
4284222b54 Convert GUI_ promptgroup strings to new-style 2016-05-26 16:15:48 +02:00
Ralph Lange
54bab1e2f0 pcas: fix compiler warning (gcc 5.3.1) 2016-05-26 14:14:56 +02:00
Andrew Johnson
df200de27f Fix lsi/lso puts with DBF_STRING data 2016-05-26 13:49:18 +02:00
Ralph Lange
22d6ebe7e1 Merge changes from 3.14 branch up to rev 12642 2016-05-26 13:18:38 +02:00
Ralph Lange
9c3ed1bfe2 catools: fix escape handling when sending long strings 2016-05-26 13:13:29 +02:00
Ralph Lange
23fd4e202b ca: Fix client bug (race condition) in ipAddrToAsciiEngine 2016-05-25 12:26:32 +02:00
Andrew Johnson
a5b8b0b890 Use fabs() in calcPerform 2016-05-24 11:12:25 +02:00
Andrew Johnson
988614ae8a Reset SNAPSHOT after -rc1 tagged 2016-05-22 06:06:53 +02:00
Ralph Lange
fe887b4f83 Update CONFIG_BASE_VERSION for 3.15.4-rc1 2016-05-20 16:37:06 +02:00
Andrew Johnson
7be7ad2768 Merge changes from 3.14 branch, to revno 12640 2016-05-18 10:44:16 -05:00
Andrew Johnson
6c9555310a Update EPICS_TIMEZONE with info for 2016-2021 2016-05-18 10:26:04 -05:00
Andrew Johnson
4ccc2e9d3a Merged my devEnviron branch 2016-05-18 09:48:22 -05:00
Andrew Johnson
122fb6c731 New "getenv" device support for string input types 2016-05-17 19:09:48 -05:00
Andrew Johnson
3b8fd13152 libCom: NTP Time Provider adjusts to OS tick rate changes
Allow the NTP Time provider (used on VxWorks and RTEMS only)
to adapt to changes in the OS clock tick rate after the provider
has been initialized.

Changing the tick rate after iocInit() is not advisable,
other software might still misbehave if initialized before
an OS tick rate change.

Back-ported from the 3.15 branch (commit 12468).
2016-05-17 16:03:27 -05:00
Andrew Johnson
04a9fdb4e3 Clean up warnings from gcc 5.2 2016-05-16 17:02:34 -05:00
Andrew Johnson
3c61880d79 Allow some callback slow-ups before failing tests
The tests occasionally fail on Windows because the server
is busy; this will accept up to 4 slow callbacks without
them causing the build to fail.
2016-05-16 16:55:50 -05:00
Andrew Johnson
8081d3ada4 Merged Till's fix for lp:1581212, modified 2016-05-13 14:48:08 -05:00
Andrew Johnson
6d35ee9c3c Move dbLock.h *after* epicsExportSharedSymbols 2016-05-13 13:40:37 -05:00
Andrew Johnson
b5a0657adc Applied Till's fix for lp:1581212 2016-05-13 13:30:55 -05:00
Andrew Johnson
b87f3eaaee Merged changes from 3.14 branch to revno 12636 2016-05-13 13:12:08 -05:00
Andrew Johnson
6db0e13809 Added CROSS_COMPILER_RUNTEST_ARCHS 2016-05-13 13:00:48 -05:00
Michael Davidsaver
0f6c997288 osdNetIntf: ignore 0.0.0.0 as a broadcast address
It seems in some situations Linux (at least)
sets IFF_BROADCAST bug leaves the bcast address
set to 0.0.0.0.

Fixes lp:1581505
2016-05-13 09:31:26 -04:00
Michael Davidsaver
704c748fbd Revert "libCom/osi: osiSockDiscoverBroadcastAddresses() finds 127.255.255.255"
This reverts commit e805abe971.
2016-05-13 09:14:20 -04:00
Andrew Johnson
82456f83ee Fix Menu declaration test 2016-05-12 16:35:54 -05:00
Andrew Johnson
e98a6bbafa Make <menu>_NUM_CHOICES not an enum tag
Fixes lp:1580972
2016-05-12 15:05:18 -05:00
Andrew Johnson
9b51444fb7 Fix data types and macro name 2016-05-04 18:15:54 -05:00
Andrew Johnson
3be97865b3 Warn instead of building cap5 if xsubpp is missing 2016-05-04 14:41:51 -05:00
Andrew Johnson
67097456e3 Add additional RELEASE file checks
These checks are important for mixing Debian modules with
privately-built applications.
2016-05-03 12:26:40 -05:00
Andrew Johnson
3c8af4c571 Catch bad attribute names/values to prevent a segfault 2016-05-02 11:38:51 -05:00
Michael Davidsaver
26c04844cf add test for lp:1577108 2016-05-01 13:30:45 -04:00
Michael Davidsaver
a3d981ad0a dbLink.c: fix dbGetLink for array of length 1 2016-05-01 13:30:45 -04:00
Ralph Lange
924aa2f93b Set Base version to -pre1-DEV 2016-04-29 12:20:35 +02:00
Ralph Lange
457fb8fa13 Update CONFIG_BASE_VERSION for 3.15.4-pre1 2016-04-29 11:34:05 +02:00
Ralph Lange
b8b259de6f Merge Andrew's libs-prereq branch 2016-04-29 10:42:03 +02:00
Andrew Johnson
7ce8e5ea01 Fix RTEMS Makefile issue 2016-04-28 23:59:39 -05:00
Andrew Johnson
496414c88c Fix for VxWorks 5.5 compiler 2016-04-28 23:28:39 -05:00
Andrew Johnson
2acde8bac7 Merged changes from 3.14 branch to revno 12630 2016-04-28 21:39:55 -05:00
Andrew Johnson
2c69ddbee5 Merged my ioc-arch branch, manually re-based 2016-04-28 19:26:11 -05:00
Andrew Johnson
ba0d5f9443 Disallow single-quoted strings in Perl DBD parser 2016-04-28 19:03:17 -05:00
Andrew Johnson
08fd987c60 Perl script clean-up 2016-04-28 19:00:37 -05:00
Andrew Johnson
5a605fa0c3 Set various EPICS_VERSION_* environment variables
These are set at the same time as the ARCH variable.
Had to add EPICS_VERSION_SHORT and EPICS_VERSION_FULL to epicsVersion.h.

This uses more uniform names, should we change epicsVersion.h names?
We would continue to support the old names in parallel for some time.
2016-04-28 18:58:07 -05:00
Andrew Johnson
0e5dc2a21c More build parameters.
Renamed EPICS_TARGET_ARCH to EPICS_BUILD_TARGET_ARCH
Added EPICS_BUILD_OS_CLASS and EPICS_BUILD_COMPILER_CLASS
2016-04-28 18:56:03 -05:00
Andrew Johnson
230603f4ac Remove ARCH from cdCommands and envPaths files
Set it in iocshRegisterCommon() instead.
Remove ARCH from iocBoot/ioc/Makefile@Common templates.
2016-04-28 18:50:41 -05:00
Andrew Johnson
396ff3c484 Add EPICS_TARGET_ARCH parameter
Set its default value automatically in the generated envData.c
2016-04-28 18:49:10 -05:00
Andrew Johnson
09fbeaf6d3 Merged Ralph's new-promptgroups branch 2016-04-28 18:27:15 -05:00
Andrew Johnson
b4a8a1ac98 Fix dbFreeBase() issue causing segfaults 2016-04-28 18:10:26 -05:00
Andrew Johnson
ee87aecd6e Always have linker search INSTALL_LIB 2016-04-28 14:32:21 -05:00
Andrew Johnson
054a234c70 Parentheses in macro 2016-04-28 13:27:47 -05:00
Andrew Johnson
24ddcd2524 Fix epicsTimeZoneTest.cpp => .c and remove conditional 2016-04-27 12:09:10 -05:00
Michael Davidsaver
2226f3acb9 libCom/test: don't include epicsTimeZoneTest for vxWorks 2016-04-27 12:45:18 -04:00
Andrew Johnson
f0f89b4b1c Fix file paths in comments 2016-04-27 10:28:57 -05:00
Andrew Johnson
fdda079b8f BSD's finite expects a double; make glibc 2.23 happy 2016-04-27 10:28:01 -05:00
Ralph Lange
1f36670175 dbStatic: remove obsolete GUIGROUPS_GBLSOURCE definition 2016-04-27 09:14:51 +02:00
Andrew Johnson
1ede873200 Fixed some space/tab issues in DBD files 2016-04-26 16:20:12 -05:00
Michael Davidsaver
51dd371784 rsrv: add rsrvCS_shutdown to avoid race in destroyAllChannels()
A race can occur between rsrv and cac by way of asLib
whereby casAccessRightsCB() is called after
a channel_in_use has been removed from
chanList/chanPendingUpdateARList.
casAccessRightsCB() would then attempt to remove
the node again, causing corruption.

Create a new rsrvCS_shutdown state when the
channel is not in either list.

Attempt to resolve lp:1571224
2016-04-26 17:06:22 -04:00
Andrew Johnson
72745d7b0c Only make runtests and tapfiles if T_A = EPICS_HOST_ARCH 2016-04-29 16:20:25 -05:00
Andrew Johnson
c933d77963 Add rule to install libraries before linking executables
The rule must be disabled for building libCom and gdd though.
2016-04-26 15:18:31 -05:00
Michael Davidsaver
93597e20d5 add epicsTimeZoneTest to libCom test harness 2016-04-26 09:59:22 -04:00
Michael Davidsaver
f0453faf36 libCom/test: add test for HST time zone
Test US/Hawaii zone which does not observe daylight saving time.
2016-04-26 09:28:09 -04:00
Ralph Lange
473992cfb9 Update release notes 2016-04-26 13:47:12 +02:00
Ralph Lange
6a362f467d rec: implement new promptgroup (gui_group) choices 2016-04-26 13:28:28 +02:00
Andrew Johnson
af07e0fd51 Fix oops in last commit 2016-04-25 12:24:05 -05:00
Andrew Johnson
de38b80795 Apply partial solution for Windows builds of Cap5 2016-04-25 11:54:17 -05:00
Ralph Lange
7bb27ad3e7 dbStatic: deprecate guigroup.h; remove from includes 2016-04-22 17:02:21 +02:00
Ralph Lange
1e1799c30e tools: change RE to allow any value for promptgroup in the Perl DBD parser 2016-04-18 09:56:41 +02:00
Andrew Johnson
8358580190 Merged commit 12623 from 3.14 branch. 2016-04-15 17:38:41 -05:00
Andrew Johnson
24e39b252d Print RTEMS version at startup 2016-04-15 17:37:07 -05:00
Ralph Lange
ce7044c711 dbStatic: collect promptgroup enum choices when reading dbd 2016-04-06 15:38:35 +02:00
Andrew Johnson
177090e35e Merged fixes for lp:1558206 and lp:1563191 from 3.14 branch, revno 12622 2016-03-30 11:26:53 -05:00
Andrew Johnson
430da57a35 Release notes for lp:1563191 2016-03-30 11:00:48 -05:00
Andrew Johnson
d2d637d0c2 Prevent string overflow in recGblInitConstantLink() 2016-03-29 12:04:08 -05:00
Michael Davidsaver
106fae3b26 dbStatic: prevent overflow in dbPutString()
The bounds check should be before the string
copy.  Also zero the last element out of
paranoia (should already be zero).

Fix lp:1563191
2016-03-29 17:36:39 +09:00
Andrew Johnson
3179e65791 Clean-up after lp:1558206 fix 2016-03-16 18:15:14 -05:00
Michael Davidsaver
6b9bfb09a5 pWaitRelease in wrong place
waitRelease==false indicates that pThread
has not be delete'd
2016-03-16 17:43:52 -04:00
Michael Davidsaver
4e312b9f64 libCom: exitWait() from thread exit handler corrupts stack
The epicsThreadCallEntryPoint() function stores a pointer
to a local variable in epicsThread::pWaitReleaseFlag.
Calling epicsAtThreadExit::exitWait() from that thread's
epicsAtThreadExit() handler writes to this pointer
after epicsThreadCallEntryPoint() has returned.
Thus corrupting the stack.

Set pWaitReleaseFlag=NULL before return to prevent this.

fixes lp:1558206
2016-03-16 14:40:37 -04:00
Andrew Johnson
59fea64390 Add missing dependencies for Test.dbd files 2016-03-16 13:10:17 -05:00
Andrew Johnson
f260124733 Ensure mbb* MASK calculated properly 2016-03-10 13:05:00 -06:00
Andrew Johnson
113076a009 Allow quotes in DBD argument strings 2016-03-03 11:19:22 -06:00
106 changed files with 2028 additions and 1411 deletions

View File

@@ -29,14 +29,14 @@ EPICS_VERSION = 3
EPICS_REVISION = 15
# EPICS_MODIFICATION must be a number >=0 and <256
EPICS_MODIFICATION = 3
EPICS_MODIFICATION = 4
# EPICS_PATCH_LEVEL must be a number (win32 resource file requirement)
# Not included if zero
EPICS_PATCH_LEVEL = 0
# This will end in -DEV between official releases
EPICS_DEV_SNAPSHOT=-DEV
#EPICS_DEV_SNAPSHOT=-DEV
#EPICS_DEV_SNAPSHOT=-pre1
#EPICS_DEV_SNAPSHOT=-pre1-DEV
#EPICS_DEV_SNAPSHOT=-pre2
@@ -45,7 +45,7 @@ EPICS_DEV_SNAPSHOT=-DEV
#EPICS_DEV_SNAPSHOT=-rc1-DEV
#EPICS_DEV_SNAPSHOT=-rc2
#EPICS_DEV_SNAPSHOT=-rc2-DEV
#EPICS_DEV_SNAPSHOT=
EPICS_DEV_SNAPSHOT=
# No changes should be needed below here

View File

@@ -118,6 +118,13 @@ CROSS_COMPILER_TARGET_ARCHS=
# configure/os/CONFIG_SITE.<host>.Common files instead.
CROSS_COMPILER_HOST_ARCHS=
# The 'make runtests' and 'make tapfiles' build targets normally only run
# self-tests for the EPICS_HOST_ARCH architecture. If the host can execute
# the self-test programs for any other cross-built architectures such as
# a -debug architecture, those architectures can be named here.
#
CROSS_COMPILER_RUNTEST_ARCHS=
# Build shared libraries (DLLs on Windows).
# Must be either YES or NO. Definitions in the target-specific
# os/CONFIG.Common.<target> and os/CONFIG_SITE.Common.<target> files may

View File

@@ -30,10 +30,8 @@
# local timezone info for vxWorks and RTEMS IOCs. The format is
# <name>::<minutesWest>:<start daylight>:<end daylight>
# where the start and end are mmddhh - that is month,day,hour
# e.g. for ANL in 2015: EPICS_TIMEZONE=CST/CDT::360:030802:110102
# e.g. for ANL in 2016: EPICS_TIMEZONE=CST/CDT::360:031302:110602
#
# DST for 2015 US: Mar 08 - Nov 01
# EU: Mar 29 - Oct 25
# DST for 2016 US: Mar 13 - Nov 06
# EU: Mar 27 - Oct 30
# DST for 2017 US: Mar 12 - Nov 05
@@ -42,11 +40,15 @@
# EU: Mar 25 - Oct 28
# DST for 2019 US: Mar 10 - Nov 03
# EU: Mar 31 - Oct 27
# (see: http://www.timeanddate.com/time/map/)
# DST for 2020 US: Mar 08 - Nov 01
# EU: Mar 29 - Oct 25
# DST for 2021 US: Mar 14 - Nov 07
# EU: Mar 28 - Oct 31
# (see: http://www.timeanddate.com/time/dst/2016.html etc. )
#
# These values are for 2015:
EPICS_TIMEZONE=CST/CDT::360:030802:110102
#EPICS_TIMEZONE=CET/CEST::-60:032902:102502
# These values are for 2016:
EPICS_TIMEZONE=CST/CDT::360:031302:110602
#EPICS_TIMEZONE=CET/CEST::-60:032702:103002
# EPICS_TS_NTP_INET
# NTP time server ip address. Uses boot host if not set.

View File

@@ -24,11 +24,15 @@ else
clean$(DIVIDER)$(ARCH) clean:
endif
cdCommands envPaths dllPath.bat relPaths.sh: \
cdCommands dllPath.bat relPaths.sh: \
$(wildcard $(TOP)/configure/RELEASE*) \
$(wildcard $(TOP)/configure/CONFIG_SITE*) $(INSTALL_BIN)
$(wildcard $(TOP)/configure/CONFIG_SITE*) | $(INSTALL_BIN)
$(CONVERTRELEASE) -a $(ARCH) -t $(IOCS_APPL_TOP) $@
envPaths: $(wildcard $(TOP)/configure/RELEASE*) \
$(wildcard $(TOP)/configure/CONFIG_SITE*) | $(INSTALL_BIN)
$(CONVERTRELEASE) -t $(IOCS_APPL_TOP) $@
realclean:
$(RM) cdCommands envPaths dllPath.bat relPaths.sh

View File

@@ -170,7 +170,13 @@ endif
$(DIRECTORY_TARGETS) :
$(MKDIR) -p $@
$(PRODNAME): $(INSTALL_LIB_INSTALLS)
# Install LIB_INSTALLS libraries before linking executables
$(TESTPRODNAME) $(PRODNAME): | $(INSTALL_LIB_INSTALLS)
# Install built libraries too, unless Makefile says to wait
ifneq ($(DELAY_INSTALL_LIBS),YES)
$(TESTPRODNAME) $(PRODNAME): | $(INSTALL_LIBS) $(INSTALL_DLLSTUB_LIBS)
endif
# RELEASE file consistency checking
checkRelease:
@@ -319,7 +325,9 @@ $(MODNAME): %$(MODEXT): %$(EXE)
# Automated testing
runtests: $(TESTSCRIPTS)
ifneq (,$(findstring $(T_A),$(EPICS_HOST_ARCH) $(CROSS_COMPILER_RUNTEST_ARCHS)))
-$(PERL) -MTest::Harness -e 'runtests @ARGV if @ARGV;' $^
endif
testspec: $(TESTSCRIPTS)
@$(RM) $@
@@ -333,7 +341,9 @@ tapfiles: $(TESTSCRIPTS) $(TAPFILES)
# A .tap file is the output from running the associated test script
%.tap: %.t
ifneq (,$(findstring $(T_A),$(EPICS_HOST_ARCH) $(CROSS_COMPILER_RUNTEST_ARCHS)))
-$(PERL) $< -tap > $@
endif
# If there's a perl test script (.plt) available, use it
%.t: ../%.plt

View File

@@ -57,7 +57,7 @@ SHRLIB_LDLIBS = $(addprefix -l, $($*_LDLIBS) $(LIB_LIBS) $(USR_LIBS)) \
$(LDLIBS)
SHRLIB_DEPLIB_DIRS = $(foreach word, \
$(sort $(dir $($*_DEPLIBS) $(SHRLIB_DEPLIBS))), \
$(sort $(INSTALL_LIB)/ $(dir $($*_DEPLIBS) $(SHRLIB_DEPLIBS))), \
$(shell $(FULLPATHNAME) $(word)))
SHRLIBDIR_LDFLAGS += $(SHRLIB_DEPLIB_DIRS:%=-L%)
@@ -86,7 +86,7 @@ PROD_LDLIBS += $($(firstword $(LDLIBS_STATIC_$(STATIC_BUILD)) \
$(LDLIBS_SHARED_$(SHARED_LIBRARIES))))
PROD_DEPLIB_DIRS = $(foreach word, \
$(sort $(dir $($*_DEPLIBS) $(PROD_DEPLIBS))), \
$(sort $(INSTALL_LIB)/ $(dir $($*_DEPLIBS) $(PROD_DEPLIBS))), \
$(shell $(FULLPATHNAME) $(word)))
PRODDIR_LDFLAGS += $(PROD_DEPLIB_DIRS:%=-L%)

View File

@@ -1,22 +1,22 @@
# CONFIG_SITE.Common.cygwin-x86_64
#
# $Revision-Id$
#
# Site Specific definitions for cygwin-x86_64 target
# Only the local epics system manager should modify this file
# If readline is installed uncomment the following line
# to add command-line editing and history support
#COMMANDLINE_LIBRARY = READLINE
# Uncomment the following line if readline has problems
#LDLIBS_READLINE = -lreadline -lcurses
# It makes sense to include debugging symbols even in optimized builds
# in case you want to attach gdb to the process or examine a core-dump.
# This does cost disk space, but not memory as debug symbols are not
# loaded into RAM when the binary is loaded.
OPT_CFLAGS_YES += -g
OPT_CXXFLAGS_YES += -g
# CONFIG_SITE.Common.cygwin-x86_64
#
# $Revision-Id$
#
# Site Specific definitions for cygwin-x86_64 target
# Only the local epics system manager should modify this file
# If readline is installed uncomment the following line
# to add command-line editing and history support
#COMMANDLINE_LIBRARY = READLINE
# Uncomment the following line if readline has problems
#LDLIBS_READLINE = -lreadline -lcurses
# It makes sense to include debugging symbols even in optimized builds
# in case you want to attach gdb to the process or examine a core-dump.
# This does cost disk space, but not memory as debug symbols are not
# loaded into RAM when the binary is loaded.
OPT_CFLAGS_YES += -g
OPT_CXXFLAGS_YES += -g

View File

@@ -9,12 +9,58 @@
<body lang="en">
<h1 align="center">EPICS Base Release 3.15.4</h1>
<p style="color:red">This version of EPICS Base has not been released yet.</p>
<h2 align="center">Changes made on the 3.15 branch since 3.15.3</h2>
<!-- Insert new items immediately below here ... -->
<h3>New string input device support "getenv"</h3>
<p>A new "getenv" device support for both the stringin and lsi (long string
input) record types can be used to read the value of an environment variable
from the IOC at runtime. See base/db/softIocExit.db for sample usage.</p>
<h3>Build rules and DELAY_INSTALL_LIBS</h3>
<p>A new order-only prerequisite build rule has been added to ensure that
library files (and DLL stubs on Windows) get installed before linking any
executables, which resolves parallel build problems on high-powered CPUs. There
are some (rare) cases though where a Makefile has to build an executable and run
it to be able to compile code for a library built by the same Makefile. With
this new build rule GNUmake will complain about a circular dependency and the
build will probably fail in those cases. To avoid this problem the failing
Makefile should set <tt>DELAY_INSTALL_LIBS = YES</tt> before including the
<tt>$(TOP)/configure/RULES</tt> file, disabling the new build rule.</p>
<h3>IOC environment variables and build parameters</h3>
<p>The IOC now sets a number of environment variables at startup that provide
the version of EPICS Base it was built against (EPICS_VERSION_...) and its build
architecture (ARCH). In some cases this allows a single iocBoot/ioc directory to
be used to run the same IOC on several different architectures without any
changes.</p>
<p>There are also 3 new environment parameters (EPICS_BUILD_...) available that
C/C++ code can use to find out the target architecture, OS class and compiler
class it was built with. These may be useful when writing interfaces to other
languages.</p>
<h3>New implementation of promptgroup/gui_group field property</h3>
<p>The mechanism behind the "promptgroup()" field property inside a record type
definition has been changed. Instead of using a fixed set of choices,
the static database access library now collects the used gui group names
while parsing DBD information. Group names should start with a two-digit number
plus space-dash-space to allow proper sorting of groups.</p>
<p>The include file <tt>guigroup.h</tt> that defined the fixed set of choices
has been deprecated. Instead, use the conversion functions between index number
and group string that have been added to dbStaticLib.</p>
<p>When a DBD file containing record-type descriptions is expanded, any
old-style <tt>GUI_xxx</tt> group names will be replaced by a new-style
string for use by the IOC. This permits an older record type to be used with
the 3.15.4 release, although eventually record types should be converted by
hand with better group names used.</p>
<h3>CA server configuration changes</h3>
<p>RSRV now honors EPICS_CAS_INTF_ADDR_LIST and binds only to the provided list
@@ -72,6 +118,81 @@ dbQuietMacroWarnings=1 <i>VxWorks</i>
<h2 align="center">Changes pulled from the 3.14 branch since 3.15.3</h2>
<!-- Insert inherited items immediately below here ... -->
<h3>Making IOC ca_get operations atomic</h3>
<p>When a CA client gets data from an IOC record using a compound data type such
as <tt>DBR_TIME_DOUBLE</tt> the value field is fetched from the database in a
separate call than the other metadata, without keeping the record locked. This
allows some other thread such as a periodic scan thread a chance to interrupt
the get operation and process the record in between. CA monitors have always
been atomic as long as the value data isn't a string or an array, but this race
condition in the CA get path has now been fixed so the record will stay locked
between the two fetch operations.</p>
<p>This fixes <a href="https://bugs.launchpad.net/epics-base/+bug/1581212">
Launchpad bug #1581212</a>, thanks to Till Strauman and Dehong Zhang.</p>
<h3>New CONFIG_SITE variable for running self-tests</h3>
<p>The 'make runtests' and 'make tapfiles' build targets normally only run the
self-tests for the main <tt>EPICS_HOST_ARCH</tt> architecture. If the host is
able to execute self-test programs for other target architectures that are being
built by the host, such as when building a <tt>-debug</tt> version of the host
architecture for example, the names of those other architectures can be added to
the new <tt>CROSS_COMPILER_RUNTEST_ARCHS</tt> variable in either the
<tt>configure/CONFIG_SITE</tt> file or in an appropriate
<tt>configure/os/CONFIG_SITE.&lt;host&gt;.Common</tt> file to have the test
programs for those targets be run as well.</p>
<h3>Additional RELEASE file checks</h3>
<p>An additional check has been added at build-time for the contents of the
configure/RELEASE file(s), which will mostly only affect users of the Debian
EPICS packages published by NSLS-2. Support modules may share an install path,
but all such modules must be listed adjacent to each other in any RELEASE files
that point to them. For example the following will fail the new checks:</p>
<blockquote><pre>
AUTOSAVE = /usr/lib/epics
ASYN = /home/mdavidsaver/asyn
EPICS_BASE = /usr/lib/epics
</pre></blockquote>
<p>giving the compile-time error</p>
<blockquote><pre>
This application's RELEASE file(s) define
EPICS_BASE = /usr/lib/epics
after but not adjacent to
AUTOSAVE = /usr/lib/epics
Module definitions that share paths must be grouped together.
Either remove a definition, or move it to a line immediately
above or below the other(s).
Any non-module definitions belong in configure/CONFIG_SITE.
</pre></blockquote>
<p>In many cases such as the one above the order of the <tt>AUTOSAVE</tt> and
<tt>ASYN</tt> lines can be swapped to let the checks pass, but if the
<tt>AUTOSAVE</tt> module depended on <tt>ASYN</tt> and hence had to appear
before it in the list this error indicates that <tt>AUTOSAVE</tt> should also be
built in its own private area; a shared copy would likely be incompatible with
the version of <tt>ASYN</tt> built in the home directory.</p>
<h3>String field buffer overflows</h3>
<p>Two buffer overflow bugs that can crash the IOC have been fixed, caused by
initializing a string field with a value larger than the field size
(<a href="https://bugs.launchpad.net/bugs/1563191">Launchpad bug
#1563191</a>).</p>
<h3>Fixed stack corruption bug in epicsThread C++ API</h3>
<p>The C++ interface to the epicsThread API could corrupt the stack on thread
exit in some rare circumstances, usually at program exit. This bug has been
fixed (<a href="https://bugs.launchpad.net/bugs/1558206">Launchpad bug
#1558206</a>).</p>
<h3>RTEMS NTP Support Issue</h3>
<p>On RTEMS the NTP Time Provider could in some circumstances get out of sync

View File

@@ -333,6 +333,12 @@ cac::~cac ()
this->ipToAEngine.release ();
// clean-up the list of un-notified msg objects
while ( msgForMultiplyDefinedPV * msg = this->msgMultiPVList.get() ) {
msg->~msgForMultiplyDefinedPV ();
this->mdpvFreeList.release ( msg );
}
errlogFlush ();
osiSockRelease ();
@@ -606,6 +612,8 @@ void cac::transferChanToVirtCircuit (
msgForMultiplyDefinedPV * pMsg = new ( this->mdpvFreeList )
msgForMultiplyDefinedPV ( this->ipToAEngine,
*this, pChan->pName ( guard ), acc );
// cac keeps a list of these objects for proper clean-up in ~cac
this->msgMultiPVList.add ( *pMsg );
// It is possible for the ioInitiate call below to
// call the callback directly if queue quota is exceeded.
// This callback takes the callback lock and therefore we
@@ -1297,6 +1305,8 @@ void cac::pvMultiplyDefinedNotify ( msgForMultiplyDefinedPV & mfmdpv,
epicsGuard < epicsMutex > guard ( this->mutex );
this->exception ( mgr.cbGuard, guard, ECA_DBLCHNL, buf, __FILE__, __LINE__ );
}
// remove from the list and delete msg object
this->msgMultiPVList.remove ( mfmdpv );
mfmdpv.~msgForMultiplyDefinedPV ();
this->mdpvFreeList.release ( & mfmdpv );
}

View File

@@ -237,6 +237,7 @@ private:
resTable < tcpiiu, caServerID > serverTable;
tsDLList < tcpiiu > circuitList;
tsDLList < SearchDest > searchDestList;
tsDLList < msgForMultiplyDefinedPV > msgMultiPVList;
tsFreeList
< class tcpiiu, 32, epicsMutexNOOP >
freeListVirtualCircuit;

View File

@@ -55,8 +55,10 @@ msgForMultiplyDefinedPV::~msgForMultiplyDefinedPV ()
void msgForMultiplyDefinedPV::transactionComplete ( const char * pHostNameRej )
{
// calls into cac for the notification
// the msg object (= this) is being deleted as part of the notification
this->cb.pvMultiplyDefinedNotify ( *this, this->channel, this->acc, pHostNameRej );
// !! dont touch this pointer after this point because object has been deleted !!
// !! dont touch 'this' pointer after this point because object has been deleted !!
}
void * msgForMultiplyDefinedPV::operator new ( size_t size,

View File

@@ -33,6 +33,7 @@
#include "ipAddrToAsciiAsynchronous.h"
#include "tsFreeList.h"
#include "tsDLList.h"
#include "compilerDependencies.h"
#ifdef msgForMultiplyDefinedPVh_epicsExportSharedSymbols
@@ -47,7 +48,9 @@ public:
const char * pAcc, const char * pRej ) = 0;
};
class msgForMultiplyDefinedPV : public ipAddrToAsciiCallBack {
class msgForMultiplyDefinedPV :
public ipAddrToAsciiCallBack,
public tsDLNode < msgForMultiplyDefinedPV > {
public:
msgForMultiplyDefinedPV ( ipAddrToAsciiEngine & engine,
callbackForMultiplyDefinedPV &, const char * pChannelName,
@@ -62,8 +65,8 @@ private:
ipAddrToAsciiTransaction & dnsTransaction;
callbackForMultiplyDefinedPV & cb;
void transactionComplete ( const char * pHostName );
msgForMultiplyDefinedPV ( const msgForMultiplyDefinedPV & );
msgForMultiplyDefinedPV & operator = ( const msgForMultiplyDefinedPV & );
msgForMultiplyDefinedPV ( const msgForMultiplyDefinedPV & );
msgForMultiplyDefinedPV & operator = ( const msgForMultiplyDefinedPV & );
void operator delete ( void * );
};

View File

@@ -1138,6 +1138,20 @@ void CA_add_exception_event(const char *class, SV *sub) {
static
SV * printf_sub = NULL;
#ifndef va_copy
# ifdef __GNUC__
# define va_copy(d, s) __va_copy(d, s)
# else
# define va_copy(d, s) ((d) = (s))
/* The above macro is NOT PORTABLE but works on Windows when
* stdarg.h doesn't provide va_copy(). Some architectures need
* define va_copy(d, s) ((*d) = (*s))
* while others may be even more complicated, but hopefully the
* system stdarg.h header defines va_copy() in those cases.
*/
# endif
#endif
static
int printf_handler(const char *format, va_list args) {
if (! printf_sub)
@@ -1152,11 +1166,7 @@ int printf_handler(const char *format, va_list args) {
ENTER;
SAVETMPS;
#ifdef __GNUC__
__va_copy(argcopy, args);
#else
va_copy(argcopy, args);
#endif
printf_str = NEWSV(0, strlen(format) + 32);
sv_vsetpvf(printf_str, format, &argcopy);

View File

@@ -20,10 +20,19 @@ ifeq ($(OS_CLASS),Darwin)
LOADABLE_SHRLIB_SUFFIX = .$(shell $(PERL) ../perlConfig.pl dlext)
endif
PERL_VERSION = $(shell $(PERL) ../perlConfig.pl version)
PERL_ARCHNAME = $(shell $(PERL) ../perlConfig.pl archname)
PERL_ARCHPATH = $(PERL_VERSION)/$(PERL_ARCHNAME)
ifdef T_A
PERL_VERSION = $(shell $(PERL) ../perlConfig.pl version)
PERL_ARCHNAME = $(shell $(PERL) ../perlConfig.pl archname)
PERL_ARCHPATH := $(PERL_VERSION)/$(PERL_ARCHNAME)
EXTUTILS := $(shell $(PERL) ../perlConfig.pl privlib)/ExtUtils
PERLBIN := $(shell $(PERL) ../perlConfig.pl bin)
XSUBPP := $(firstword $(wildcard $(PERLBIN)/xsubpp $(EXTUTILS)/xsubpp))
ifeq ($(strip $(XSUBPP)),)
$(warning Perl's xsubpp program was not found.)
$(warning The Perl CA module will not be built.)
else
ifeq ($(T_A),$(EPICS_HOST_ARCH)) # No cross-builds (wrong Perl!)
ifeq ($(findstring $(OS_CLASS),WIN32 cygwin32),) # Doesn't build on WIN32
LOADABLE_LIBRARY_HOST = Cap5
@@ -41,6 +50,8 @@ ifeq ($(findstring $(OS_CLASS),WIN32 cygwin32),) # Doesn't build on WIN32
HTMLS = CA.html
endif
endif
endif
endif
Cap5_SRCS = Cap5.xs
Cap5_LIBS = ca Com
@@ -52,10 +63,6 @@ CLEANS += Cap5.c pod2htmd.tmp pod2htmi.tmp
include $(TOP)/configure/RULES
ifdef T_A
EXTUTILS = $(shell $(PERL) ../perlConfig.pl privlib)/ExtUtils
PERLBIN = $(shell $(PERL) ../perlConfig.pl bin)
XSUBPP = $(firstword $(wildcard $(PERLBIN)/xsubpp $(EXTUTILS)/xsubpp))
%.c: ../%.xs
$(RM) $@ $@_new
$(PERL) $(XSUBPP) -typemap $(EXTUTILS)/typemap $< > $@_new && $(MV) $@_new $@

View File

@@ -3,7 +3,13 @@
# This script is used to extract information about the Perl build
# configuration, so the EPICS build system uses the same settings.
use strict;
use Config;
my $arg = shift;
print $Config{$arg};
my $val = $Config{$arg};
$val =~ s{\\}{/}go
if $^O eq 'MSWin32';
print $val;

View File

@@ -492,14 +492,13 @@ int main (int argc, char *argv[])
} else { /* Not an ENUM */
if (charArrAsStr) {
count = len;
dbrType = DBR_CHAR;
ebuf = calloc(strlen(cbuf)+1, sizeof(char));
ebuf = calloc(len, sizeof(char));
if(!ebuf) {
fprintf(stderr, "Memory allocation failed\n");
return 1;
}
epicsStrnRawFromEscaped(ebuf, strlen(cbuf)+1, cbuf, strlen(cbuf));
count = epicsStrnRawFromEscaped(ebuf, len, cbuf, len-1) + 1;
} else {
for (i = 0; i < count; ++i) {
epicsStrnRawFromEscaped(sbuf[i], sizeof(EpicsStr), *(argv+optind+i), sizeof(EpicsStr));

View File

@@ -69,6 +69,11 @@ CLEANS += $(COMMON_DIR)/aitConvertGenerated.cc
USR_CXXFLAGS_Linux = -fno-strict-aliasing
USR_CXXFLAGS_RTEMS = -fno-strict-aliasing
ifeq ($(T_A),$(EPICS_HOST_ARCH))
# genApps and aitGen are needed to finish libgdd
DELAY_INSTALL_LIBS = YES
endif
include $(TOP)/configure/RULES
# Manual dependencies

View File

@@ -348,10 +348,8 @@ caStatus casDGClient::searchResponse ( const caHdrLargeArray & msg,
//
caStatus casDGClient::searchFailResponse ( const caHdrLargeArray * mp )
{
int status;
epicsGuard < epicsMutex > guard ( this->mutex );
status = this->out.copyInHeader ( CA_PROTO_NOT_FOUND, 0,
this->out.copyInHeader ( CA_PROTO_NOT_FOUND, 0,
mp->m_dataType, mp->m_count, mp->m_cid, mp->m_available, 0 );
this->out.commitMsg ();

View File

@@ -402,19 +402,29 @@ struct rset * dbGetRset(const struct dbAddr *paddr)
}
long dbPutAttribute(
const char *recordTypename,const char *name,const char*value)
const char *recordTypename, const char *name, const char *value)
{
DBENTRY dbEntry;
DBENTRY *pdbEntry = &dbEntry;
long status=0;
DBENTRY dbEntry;
DBENTRY *pdbEntry = &dbEntry;
long status = 0;
if(!pdbbase) return(S_db_notFound);
dbInitEntry(pdbbase,pdbEntry);
status = dbFindRecordType(pdbEntry,recordTypename);
if(!status) status = dbPutRecordAttribute(pdbEntry,name,value);
dbFinishEntry(pdbEntry);
if(status) errMessage(status,"dbPutAttribute failure");
return(status);
if (!pdbbase)
return S_db_notFound;
if (!name) {
status = S_db_badField;
goto done;
}
if (!value)
value = "";
dbInitEntry(pdbbase, pdbEntry);
status = dbFindRecordType(pdbEntry, recordTypename);
if (!status)
status = dbPutRecordAttribute(pdbEntry, name, value);
dbFinishEntry(pdbEntry);
done:
if (status)
errMessage(status, "dbPutAttribute failure");
return status;
}
int dbIsValueField(const struct dbFldDes *pdbFldDes)

View File

@@ -4,7 +4,7 @@
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# in file LICENSE that is included with this distribution.
#*************************************************************************
%#include "epicsTypes.h"
%#include "link.h"
@@ -15,59 +15,59 @@
}
field(DESC,DBF_STRING) {
prompt("Descriptor")
promptgroup(GUI_COMMON)
promptgroup("10 - Common")
size(41)
}
field(ASG,DBF_STRING) {
prompt("Access Security Group")
promptgroup(GUI_COMMON)
promptgroup("10 - Common")
special(SPC_AS)
size(29)
}
field(SCAN,DBF_MENU) {
prompt("Scan Mechanism")
promptgroup(GUI_SCAN)
promptgroup("20 - Scan")
special(SPC_SCAN)
interest(1)
menu(menuScan)
}
field(PINI,DBF_MENU) {
prompt("Process at iocInit")
promptgroup(GUI_SCAN)
promptgroup("20 - Scan")
interest(1)
menu(menuPini)
}
field(PHAS,DBF_SHORT) {
prompt("Scan Phase")
promptgroup(GUI_SCAN)
promptgroup("20 - Scan")
special(SPC_SCAN)
interest(1)
}
field(EVNT,DBF_STRING) {
prompt("Event Name")
promptgroup(GUI_SCAN)
promptgroup("20 - Scan")
special(SPC_SCAN)
size(40)
interest(1)
}
field(TSE,DBF_SHORT) {
prompt("Time Stamp Event")
promptgroup(GUI_SCAN)
promptgroup("20 - Scan")
interest(1)
}
field(TSEL,DBF_INLINK) {
prompt("Time Stamp Link")
promptgroup(GUI_SCAN)
promptgroup("20 - Scan")
interest(1)
}
field(DTYP,DBF_DEVICE) {
prompt("Device Type")
promptgroup(GUI_LINKS)
promptgroup("10 - Common")
interest(1)
}
field(DISV,DBF_SHORT) {
prompt("Disable Value")
promptgroup(GUI_SCAN)
promptgroup("20 - Scan")
initial("1")
}
field(DISA,DBF_SHORT) {
@@ -75,7 +75,7 @@
}
field(SDIS,DBF_INLINK) {
prompt("Scanning Disable")
promptgroup(GUI_SCAN)
promptgroup("20 - Scan")
interest(1)
}
%#include "epicsMutex.h"
@@ -131,7 +131,7 @@
}
field(ACKT,DBF_MENU) {
prompt("Alarm Ack Transient")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
special(SPC_NOMOD)
interest(2)
menu(menuYesNo)
@@ -139,7 +139,7 @@
}
field(DISS,DBF_MENU) {
prompt("Disable Alarm Sevrty")
promptgroup(GUI_SCAN)
promptgroup("70 - Alarm")
interest(1)
menu(menuAlarmSevr)
}
@@ -219,7 +219,7 @@
}
field(PRIO,DBF_MENU) {
prompt("Scheduling Priority")
promptgroup(GUI_SCAN)
promptgroup("20 - Scan")
special(SPC_SCAN)
interest(1)
menu(menuPriority)
@@ -235,14 +235,14 @@
}
field(UDF,DBF_UCHAR) {
prompt("Undefined")
promptgroup(GUI_COMMON)
promptgroup("10 - Common")
pp(TRUE)
interest(1)
initial("1")
}
field(UDFS,DBF_MENU) {
prompt("Undefined Alarm Sevrty")
promptgroup(GUI_COMMON)
promptgroup("70 - Alarm")
interest(1)
menu(menuAlarmSevr)
initial("INVALID")
@@ -256,6 +256,6 @@
}
field(FLNK,DBF_FWDLINK) {
prompt("Forward Process Link")
promptgroup(GUI_LINKS)
promptgroup("20 - Scan")
interest(1)
}

View File

@@ -224,6 +224,7 @@ static long dbDbGetValue(struct link *plink, short dbrType, void *pbuffer,
return S_db_badDbrtype;
if (paddr->no_elements == 1 && (!pnRequest || *pnRequest == 1)
&& paddr->special != SPC_DBADDR
&& paddr->special != SPC_ATTRIBUTE) {
ppv_link->getCvt = dbFastGetConvertRoutine[dbfType][dbrType];
status = ppv_link->getCvt(paddr->pfield, pbuffer, paddr);

View File

@@ -39,6 +39,7 @@
#include "dbChannel.h"
#include "dbCommon.h"
#include "dbEvent.h"
#include "dbLock.h"
#include "dbNotify.h"
#include "dbStaticLib.h"
#include "recSup.h"
@@ -153,28 +154,30 @@ int dbChannel_get_count(
* in the dbAccess.c dbGet() and getOptions() routines.
*/
dbScanLock(dbChannelRecord(chan));
switch(buffer_type) {
case(oldDBR_STRING):
status = dbChannelGetField(chan, DBR_STRING, pbuffer, &zero, nRequest, pfl);
status = dbChannelGet(chan, DBR_STRING, pbuffer, &zero, nRequest, pfl);
break;
/* case(oldDBR_INT): */
case(oldDBR_SHORT):
status = dbChannelGetField(chan, DBR_SHORT, pbuffer, &zero, nRequest, pfl);
status = dbChannelGet(chan, DBR_SHORT, pbuffer, &zero, nRequest, pfl);
break;
case(oldDBR_FLOAT):
status = dbChannelGetField(chan, DBR_FLOAT, pbuffer, &zero, nRequest, pfl);
status = dbChannelGet(chan, DBR_FLOAT, pbuffer, &zero, nRequest, pfl);
break;
case(oldDBR_ENUM):
status = dbChannelGetField(chan, DBR_ENUM, pbuffer, &zero, nRequest, pfl);
status = dbChannelGet(chan, DBR_ENUM, pbuffer, &zero, nRequest, pfl);
break;
case(oldDBR_CHAR):
status = dbChannelGetField(chan, DBR_CHAR, pbuffer, &zero, nRequest, pfl);
status = dbChannelGet(chan, DBR_CHAR, pbuffer, &zero, nRequest, pfl);
break;
case(oldDBR_LONG):
status = dbChannelGetField(chan, DBR_LONG, pbuffer, &zero, nRequest, pfl);
status = dbChannelGet(chan, DBR_LONG, pbuffer, &zero, nRequest, pfl);
break;
case(oldDBR_DOUBLE):
status = dbChannelGetField(chan, DBR_DOUBLE, pbuffer, &zero, nRequest, pfl);
status = dbChannelGet(chan, DBR_DOUBLE, pbuffer, &zero, nRequest, pfl);
break;
case(oldDBR_STS_STRING):
@@ -187,10 +190,10 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS;
status = dbChannelGetField(chan, DBR_STRING, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_STRING, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
status = dbChannelGetField(chan, DBR_STRING, pold->value, &zero,
status = dbChannelGet(chan, DBR_STRING, pold->value, &zero,
nRequest, pfl);
}
break;
@@ -203,10 +206,10 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS;
status = dbChannelGetField(chan, DBR_SHORT, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_SHORT, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
status = dbChannelGetField(chan, DBR_SHORT, &pold->value, &zero,
status = dbChannelGet(chan, DBR_SHORT, &pold->value, &zero,
nRequest, pfl);
}
break;
@@ -218,10 +221,10 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS;
status = dbChannelGetField(chan, DBR_FLOAT, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_FLOAT, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
status = dbChannelGetField(chan, DBR_FLOAT, &pold->value, &zero,
status = dbChannelGet(chan, DBR_FLOAT, &pold->value, &zero,
nRequest, pfl);
}
break;
@@ -233,10 +236,10 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS;
status = dbChannelGetField(chan, DBR_ENUM, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_ENUM, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
status = dbChannelGetField(chan, DBR_ENUM, &pold->value, &zero,
status = dbChannelGet(chan, DBR_ENUM, &pold->value, &zero,
nRequest, pfl);
}
break;
@@ -248,10 +251,10 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS;
status = dbChannelGetField(chan, DBR_UCHAR, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_UCHAR, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
status = dbChannelGetField(chan, DBR_UCHAR, &pold->value, &zero,
status = dbChannelGet(chan, DBR_UCHAR, &pold->value, &zero,
nRequest, pfl);
}
break;
@@ -263,10 +266,10 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS;
status = dbChannelGetField(chan, DBR_LONG, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_LONG, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
status = dbChannelGetField(chan, DBR_LONG, &pold->value, &zero,
status = dbChannelGet(chan, DBR_LONG, &pold->value, &zero,
nRequest, pfl);
}
break;
@@ -278,11 +281,11 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS;
status = dbChannelGetField(chan, DBR_DOUBLE, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_DOUBLE, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
options = 0;
status = dbChannelGetField(chan, DBR_DOUBLE, &pold->value, &options,
status = dbChannelGet(chan, DBR_DOUBLE, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -296,12 +299,12 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS | DBR_TIME;
status = dbChannelGetField(chan, DBR_STRING, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_STRING, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->stamp = newSt.time; /* structure copy */
options = 0;
status = dbChannelGetField(chan, DBR_STRING, pold->value, &options,
status = dbChannelGet(chan, DBR_STRING, pold->value, &options,
nRequest, pfl);
}
break;
@@ -315,12 +318,12 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS | DBR_TIME;
status = dbChannelGetField(chan, DBR_SHORT, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_SHORT, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->stamp = newSt.time; /* structure copy */
options = 0;
status = dbChannelGetField(chan, DBR_SHORT, &pold->value, &options,
status = dbChannelGet(chan, DBR_SHORT, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -333,12 +336,12 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS | DBR_TIME;
status = dbChannelGetField(chan, DBR_FLOAT, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_FLOAT, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->stamp = newSt.time; /* structure copy */
options = 0;
status = dbChannelGetField(chan, DBR_FLOAT, &pold->value, &options,
status = dbChannelGet(chan, DBR_FLOAT, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -351,12 +354,12 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS | DBR_TIME;
status = dbChannelGetField(chan, DBR_ENUM, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_ENUM, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->stamp = newSt.time; /* structure copy */
options = 0;
status = dbChannelGetField(chan, DBR_ENUM, &pold->value, &options,
status = dbChannelGet(chan, DBR_ENUM, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -369,12 +372,12 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS | DBR_TIME;
status = dbChannelGetField(chan, DBR_CHAR, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_CHAR, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->stamp = newSt.time; /* structure copy */
options = 0;
status = dbChannelGetField(chan, DBR_CHAR, &pold->value, &options,
status = dbChannelGet(chan, DBR_CHAR, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -387,12 +390,12 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS | DBR_TIME;
status = dbChannelGetField(chan, DBR_LONG, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_LONG, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->stamp = newSt.time; /* structure copy */
options = 0;
status = dbChannelGetField(chan, DBR_LONG, &pold->value, &options,
status = dbChannelGet(chan, DBR_LONG, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -405,12 +408,12 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS | DBR_TIME;
status = dbChannelGetField(chan, DBR_DOUBLE, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_DOUBLE, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->stamp = newSt.time; /* structure copy */
options = 0;
status = dbChannelGetField(chan, DBR_DOUBLE, &pold->value, &options,
status = dbChannelGet(chan, DBR_DOUBLE, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -428,7 +431,7 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS | DBR_UNITS | DBR_GR_LONG | DBR_AL_LONG;
status = dbChannelGetField(chan, DBR_SHORT, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_SHORT, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
strncpy(pold->units, newSt.units, MAX_UNITS_SIZE);
@@ -440,7 +443,7 @@ int dbChannel_get_count(
pold->lower_warning_limit = newSt.lower_warning_limit;
pold->lower_alarm_limit = newSt.lower_alarm_limit;
options = 0;
status = dbChannelGetField(chan, DBR_SHORT, &pold->value, &options,
status = dbChannelGet(chan, DBR_SHORT, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -457,7 +460,7 @@ int dbChannel_get_count(
options = DBR_STATUS | DBR_UNITS | DBR_PRECISION | DBR_GR_DOUBLE |
DBR_AL_DOUBLE;
status = dbChannelGetField(chan, DBR_FLOAT, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_FLOAT, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->precision = (dbr_short_t) newSt.precision.dp;
@@ -470,7 +473,7 @@ int dbChannel_get_count(
pold->upper_warning_limit = epicsConvertDoubleToFloat(newSt.upper_warning_limit);
pold->lower_warning_limit = epicsConvertDoubleToFloat(newSt.lower_warning_limit);
options = 0;
status = dbChannelGetField(chan, DBR_FLOAT, &pold->value, &options,
status = dbChannelGet(chan, DBR_FLOAT, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -486,7 +489,7 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS | DBR_UNITS | DBR_GR_LONG | DBR_AL_LONG;
status = dbChannelGetField(chan, DBR_UCHAR, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_UCHAR, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
strncpy(pold->units, newSt.units, MAX_UNITS_SIZE);
@@ -498,7 +501,7 @@ int dbChannel_get_count(
pold->lower_warning_limit = newSt.lower_warning_limit;
pold->lower_alarm_limit = newSt.lower_alarm_limit;
options = 0;
status = dbChannelGetField(chan, DBR_UCHAR, &pold->value, &options,
status = dbChannelGet(chan, DBR_UCHAR, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -513,7 +516,7 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS | DBR_UNITS | DBR_GR_LONG | DBR_AL_LONG;
status = dbChannelGetField(chan, DBR_LONG, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_LONG, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
strncpy(pold->units, newSt.units, MAX_UNITS_SIZE);
@@ -525,7 +528,7 @@ int dbChannel_get_count(
pold->lower_warning_limit = newSt.lower_warning_limit;
pold->lower_alarm_limit = newSt.lower_alarm_limit;
options = 0;
status = dbChannelGetField(chan, DBR_LONG, &pold->value, &options,
status = dbChannelGet(chan, DBR_LONG, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -542,7 +545,7 @@ int dbChannel_get_count(
options = DBR_STATUS | DBR_UNITS | DBR_PRECISION | DBR_GR_DOUBLE |
DBR_AL_DOUBLE;
status = dbChannelGetField(chan, DBR_DOUBLE, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_DOUBLE, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->precision = (dbr_short_t) newSt.precision.dp;
@@ -555,7 +558,7 @@ int dbChannel_get_count(
pold->lower_warning_limit = newSt.lower_warning_limit;
pold->lower_alarm_limit = newSt.lower_alarm_limit;
options = 0;
status = dbChannelGetField(chan, DBR_DOUBLE, &pold->value, &options,
status = dbChannelGet(chan, DBR_DOUBLE, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -574,7 +577,7 @@ int dbChannel_get_count(
options = DBR_STATUS | DBR_UNITS | DBR_GR_LONG | DBR_CTRL_LONG |
DBR_AL_LONG;
status = dbChannelGetField(chan, DBR_SHORT, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_SHORT, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
strncpy(pold->units, newSt.units, MAX_UNITS_SIZE);
@@ -588,7 +591,7 @@ int dbChannel_get_count(
pold->upper_ctrl_limit = newSt.upper_ctrl_limit;
pold->lower_ctrl_limit = newSt.lower_ctrl_limit;
options = 0;
status = dbChannelGetField(chan, DBR_SHORT, &pold->value, &options,
status = dbChannelGet(chan, DBR_SHORT, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -606,7 +609,7 @@ int dbChannel_get_count(
options = DBR_STATUS | DBR_UNITS | DBR_PRECISION | DBR_GR_DOUBLE |
DBR_CTRL_DOUBLE | DBR_AL_DOUBLE;
status = dbChannelGetField(chan, DBR_FLOAT, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_FLOAT, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->precision = (dbr_short_t) newSt.precision.dp;
@@ -621,7 +624,7 @@ int dbChannel_get_count(
pold->upper_ctrl_limit = epicsConvertDoubleToFloat(newSt.upper_ctrl_limit);
pold->lower_ctrl_limit = epicsConvertDoubleToFloat(newSt.lower_ctrl_limit);
options = 0;
status = dbChannelGetField(chan, DBR_FLOAT, &pold->value, &options,
status = dbChannelGet(chan, DBR_FLOAT, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -638,7 +641,7 @@ int dbChannel_get_count(
memset(pold, '\0', sizeof(struct dbr_ctrl_enum));
/* first get status and severity */
options = DBR_STATUS | DBR_ENUM_STRS;
status = dbChannelGetField(chan, DBR_ENUM, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_ENUM, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
no_str = newSt.no_str;
@@ -648,7 +651,7 @@ int dbChannel_get_count(
strncpy(pold->strs[i], newSt.strs[i], sizeof(pold->strs[i]));
/*now get values*/
options = 0;
status = dbChannelGetField(chan, DBR_ENUM, &pold->value, &options,
status = dbChannelGet(chan, DBR_ENUM, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -665,7 +668,7 @@ int dbChannel_get_count(
options = DBR_STATUS | DBR_UNITS | DBR_GR_LONG | DBR_CTRL_LONG |
DBR_AL_LONG;
status = dbChannelGetField(chan, DBR_UCHAR, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_UCHAR, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
strncpy(pold->units, newSt.units, MAX_UNITS_SIZE);
@@ -679,7 +682,7 @@ int dbChannel_get_count(
pold->upper_ctrl_limit = newSt.upper_ctrl_limit;
pold->lower_ctrl_limit = newSt.lower_ctrl_limit;
options = 0;
status = dbChannelGetField(chan, DBR_UCHAR, &pold->value, &options,
status = dbChannelGet(chan, DBR_UCHAR, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -696,7 +699,7 @@ int dbChannel_get_count(
options = DBR_STATUS | DBR_UNITS | DBR_GR_LONG | DBR_CTRL_LONG |
DBR_AL_LONG;
status = dbChannelGetField(chan, DBR_LONG, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_LONG, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
strncpy(pold->units, newSt.units, MAX_UNITS_SIZE);
@@ -710,7 +713,7 @@ int dbChannel_get_count(
pold->upper_ctrl_limit = newSt.upper_ctrl_limit;
pold->lower_ctrl_limit = newSt.lower_ctrl_limit;
options = 0;
status = dbChannelGetField(chan, DBR_LONG, &pold->value, &options,
status = dbChannelGet(chan, DBR_LONG, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -728,7 +731,7 @@ int dbChannel_get_count(
options = DBR_STATUS | DBR_UNITS | DBR_PRECISION | DBR_GR_DOUBLE |
DBR_CTRL_DOUBLE | DBR_AL_DOUBLE;
status = dbChannelGetField(chan, DBR_DOUBLE, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_DOUBLE, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->precision = (dbr_short_t) newSt.precision.dp;
@@ -743,7 +746,7 @@ int dbChannel_get_count(
pold->upper_ctrl_limit = newSt.upper_ctrl_limit;
pold->lower_ctrl_limit = newSt.lower_ctrl_limit;
options = 0;
status = dbChannelGetField(chan, DBR_DOUBLE, &pold->value, &options,
status = dbChannelGet(chan, DBR_DOUBLE, &pold->value, &options,
nRequest, pfl);
}
break;
@@ -756,13 +759,13 @@ int dbChannel_get_count(
} newSt;
options = DBR_STATUS;
status = dbChannelGetField(chan, DBR_STRING, &newSt, &options, &zero, pfl);
status = dbChannelGet(chan, DBR_STRING, &newSt, &options, &zero, pfl);
pold->status = newSt.status;
pold->severity = newSt.severity;
pold->ackt = newSt.ackt;
pold->acks = newSt.acks;
options = 0;
status = dbChannelGetField(chan, DBR_STRING, pold->value,
status = dbChannelGet(chan, DBR_STRING, pold->value,
&options, nRequest, pfl);
}
break;
@@ -791,8 +794,12 @@ int dbChannel_get_count(
}
break;
default:
return -1;
status = -1;
break;
}
dbScanUnlock(dbChannelRecord(chan));
if (status) return -1;
return 0;
}

View File

@@ -19,7 +19,8 @@
#ifndef INCLdb_field_logh
#define INCLdb_field_logh
#include "epicsTime.h"
#include <epicsTime.h>
#include <epicsTypes.h>
#ifdef __cplusplus
extern "C" {
@@ -32,18 +33,20 @@ extern "C" {
* priority task pending on the event queue wakes up). Strings would slow down
* events for more reasonable size values. DB fields of native type string
* will most likely change infrequently.
*
*
* Strings can be added to the set of types for which updates will be queued
* by defining the macro DB_EVENT_LOG_STRINGS. The code in db_add_event()
* will adjust automatically, it just compares field sizes.
*/
union native_value {
short dbf_int;
short dbf_short;
float dbf_float;
short dbf_enum;
char dbf_char;
long dbf_long;
double dbf_double;
epicsInt8 dbf_char;
epicsInt16 dbf_short;
epicsEnum16 dbf_enum;
epicsInt32 dbf_long;
epicsFloat32 dbf_float;
epicsFloat64 dbf_double;
#ifdef DB_EVENT_LOG_STRINGS
char dbf_string[MAX_STRING_SIZE];
char dbf_string[MAX_STRING_SIZE];
#endif
};

View File

@@ -18,6 +18,7 @@ dbTestIoc_SRCS += dbLinkdset.c
dbTestIoc_LIBS = dbCore ca Com
TARGETS += $(COMMON_DIR)/dbTestIoc.dbd
DBDDEPENDS_FILES += dbTestIoc.dbd$(DEP)
dbTestIoc_DBD += menuGlobal.dbd
dbTestIoc_DBD += menuConvert.dbd
dbTestIoc_DBD += menuScan.dbd
@@ -78,6 +79,7 @@ TESTS += dbCaStatsTest
TESTFILES += ../dbCaStatsTest.db
TARGETS += $(COMMON_DIR)/scanIoTest.dbd
DBDDEPENDS_FILES += scanIoTest.dbd$(DEP)
scanIoTest_DBD += menuGlobal.dbd
scanIoTest_DBD += menuConvert.dbd
scanIoTest_DBD += menuScan.dbd
@@ -98,6 +100,7 @@ testHarness_SRCS += dbChannelTest.c
TESTS += dbChannelTest
TARGETS += $(COMMON_DIR)/dbChArrTest.dbd
DBDDEPENDS_FILES += dbChArrTest.dbd$(DEP)
dbChArrTest_DBD += arrRecord.dbd
TESTPROD_HOST += dbChArrTest
dbChArrTest_SRCS += dbChArrTest.cpp
@@ -148,4 +151,3 @@ arrRecord$(DEP): $(COMMON_DIR)/arrRecord.h
xRecord$(DEP): $(COMMON_DIR)/xRecord.h
dbPutLinkTest$(DEP): $(COMMON_DIR)/xRecord.h
scanIoTest$(DEP): $(COMMON_DIR)/yRecord.h

View File

@@ -99,7 +99,7 @@ MAIN(callbackParallelTest)
myPvt *pcbt[NCALLBACKS];
epicsTimeStamp start;
int noCpus = epicsThreadGetCPUs();
int i, j;
int i, j, slowups, faults;
/* Statistics: min/max/sum/sum^2/n for each priority */
double setupError[NUM_CALLBACK_PRIORITIES][5];
double timeError[NUM_CALLBACK_PRIORITIES][5];
@@ -109,7 +109,7 @@ MAIN(callbackParallelTest)
for (j = 0; j < 5; j++)
setupError[i][j] = timeError[i][j] = defaultError[j];
testPlan(NCALLBACKS * 2 + 1);
testPlan(4);
testDiag("Starting %d parallel callback threads", noCpus);
@@ -138,7 +138,7 @@ MAIN(callbackParallelTest)
pcbt[NCALLBACKS-1]->delay = TEST_DELAY(NCALLBACKS) + 1.0;
pcbt[NCALLBACKS-1]->pass = 0;
testOk1(epicsTimeGetCurrent(&start)==epicsTimeOK);
testOk(epicsTimeGetCurrent(&start)==epicsTimeOK, "Time-of-day clock Ok");
for (i = 0; i < NCALLBACKS ; i++) {
callbackRequest(&pcbt[i]->cb1);
@@ -147,28 +147,43 @@ MAIN(callbackParallelTest)
testDiag("Waiting %.02f sec", pcbt[NCALLBACKS-1]->delay);
epicsEventWait(finished);
slowups = 0;
faults = 0;
for (i = 0; i < NCALLBACKS ; i++) {
if(pcbt[i]->resultFail || pcbt[i]->pass!=2)
testFail("pass = %d for delay = %f", pcbt[i]->pass, pcbt[i]->delay);
testDiag("callback setup fault #%d: pass = %d for delay = %.02f",
++faults, pcbt[i]->pass, pcbt[i]->delay);
else {
double delta = epicsTimeDiffInSeconds(&pcbt[i]->pass1Time, &start);
testOk(fabs(delta) < 0.05, "callback %.02f setup time |%f| < 0.05",
if (fabs(delta) >= 0.05) {
slowups++;
testDiag("callback %.02f setup time |%f| >= 0.05 seconds",
pcbt[i]->delay, delta);
}
updateStats(setupError[i%NUM_CALLBACK_PRIORITIES], delta);
}
}
testOk(faults == 0, "%d faults during callback setup", faults);
testOk(slowups <= 1, "%d slowups during callback setup", slowups);
slowups = 0;
for (i = 0; i < NCALLBACKS ; i++) {
double delta, error;
if(pcbt[i]->resultFail || pcbt[i]->pass!=2)
continue;
delta = epicsTimeDiffInSeconds(&pcbt[i]->pass2Time, &pcbt[i]->pass1Time);
error = delta - pcbt[i]->delay;
testOk(fabs(error) < 0.05, "delay %.02f seconds, callback time error |%.04f| < 0.05",
if (fabs(error) >= 0.05) {
slowups++;
testDiag("delay %.02f seconds, delay error |%.04f| >= 0.05",
pcbt[i]->delay, error);
}
updateStats(timeError[i%NUM_CALLBACK_PRIORITIES], error);
}
testOk(slowups < 5, "%d slowups during callbacks", slowups);
testDiag("Setup time statistics");
printStats(setupError[0], "LOW");

View File

@@ -99,7 +99,7 @@ MAIN(callbackTest)
{
myPvt *pcbt[NCALLBACKS];
epicsTimeStamp start;
int i, j;
int i, j, slowups, faults;
/* Statistics: min/max/sum/sum^2/n for each priority */
double setupError[NUM_CALLBACK_PRIORITIES][5];
double timeError[NUM_CALLBACK_PRIORITIES][5];
@@ -109,7 +109,7 @@ MAIN(callbackTest)
for (j = 0; j < 5; j++)
setupError[i][j] = timeError[i][j] = defaultError[j];
testPlan(NCALLBACKS * 2 + 1);
testPlan(4);
callbackInit();
epicsThreadSleep(1.0);
@@ -135,7 +135,7 @@ MAIN(callbackTest)
pcbt[NCALLBACKS-1]->delay = TEST_DELAY(NCALLBACKS) + 1.0;
pcbt[NCALLBACKS-1]->pass = 0;
testOk1(epicsTimeGetCurrent(&start)==epicsTimeOK);
testOk(epicsTimeGetCurrent(&start)==epicsTimeOK, "Time-of-day clock Ok");
for (i = 0; i < NCALLBACKS ; i++) {
callbackRequest(&pcbt[i]->cb1);
@@ -144,28 +144,43 @@ MAIN(callbackTest)
testDiag("Waiting %.02f sec", pcbt[NCALLBACKS-1]->delay);
epicsEventWait(finished);
slowups = 0;
faults = 0;
for (i = 0; i < NCALLBACKS ; i++) {
if(pcbt[i]->resultFail || pcbt[i]->pass!=2)
testFail("pass = %d for delay = %f", pcbt[i]->pass, pcbt[i]->delay);
testDiag("callback setup fault #%d: pass = %d for delay = %.02f",
++faults, pcbt[i]->pass, pcbt[i]->delay);
else {
double delta = epicsTimeDiffInSeconds(&pcbt[i]->pass1Time, &start);
testOk(fabs(delta) < 0.05, "callback %.02f setup time |%f| < 0.05",
if (fabs(delta) >= 0.05) {
slowups++;
testDiag("callback %.02f setup time |%f| >= 0.05 seconds",
pcbt[i]->delay, delta);
}
updateStats(setupError[i%NUM_CALLBACK_PRIORITIES], delta);
}
}
testOk(faults == 0, "%d faults during callback setup", faults);
testOk(slowups <= 1, "%d slowups during callback setup", slowups);
slowups = 0;
for (i = 0; i < NCALLBACKS ; i++) {
double delta, error;
if(pcbt[i]->resultFail || pcbt[i]->pass!=2)
continue;
delta = epicsTimeDiffInSeconds(&pcbt[i]->pass2Time, &pcbt[i]->pass1Time);
error = delta - pcbt[i]->delay;
testOk(fabs(error) < 0.05, "delay %.02f seconds, callback time error |%.04f| < 0.05",
if (fabs(error) >= 0.05) {
slowups++;
testDiag("delay %.02f seconds, delay error |%.04f| >= 0.05",
pcbt[i]->delay, error);
}
updateStats(timeError[i%NUM_CALLBACK_PRIORITIES], error);
}
testOk(slowups < 5, "%d slowups during callbacks", slowups);
testDiag("Setup time statistics");
printStats(setupError[0], "LOW");

View File

@@ -165,8 +165,9 @@ typedef struct dbBase {
ELLLIST functionList;
ELLLIST variableList;
ELLLIST bptList;
ELLLIST filterList;
void *pathPvt;
ELLLIST filterList;
ELLLIST guiGroupList;
void *pathPvt;
struct dbPvd *ppvd;
struct gphPvt *pgpHash;
short ignoreMissingMenus;

View File

@@ -34,7 +34,6 @@
#include "dbStaticLib.h"
#include "dbStaticPvt.h"
#include "epicsExport.h"
#include "guigroup.h"
#include "link.h"
#include "special.h"
@@ -71,6 +70,7 @@ static void dbRecordtypeEmpty(void);
static void dbRecordtypeBody(void);
static void dbRecordtypeFieldHead(char *name,char *type);
static void dbRecordtypeFieldItem(char *name,char *value);
static short findOrAddGuiGroup(const char *name);
static void dbDevice(char *recordtype,char *linktype,
char *dsetname,char *choicestring);
@@ -495,7 +495,23 @@ static void dbRecordtypeFieldHead(char *name,char *type)
yyerrorAbort("Illegal Field Type");
pdbFldDes->field_type = i;
}
static short findOrAddGuiGroup(const char *name)
{
dbGuiGroup *pdbGuiGroup;
GPHENTRY *pgphentry;
pgphentry = gphFind(pdbbase->pgpHash, name, &pdbbase->guiGroupList);
if (!pgphentry) {
pdbGuiGroup = dbCalloc(1,sizeof(dbGuiGroup));
pdbGuiGroup->name = epicsStrDup(name);
ellAdd(&pdbbase->guiGroupList, &pdbGuiGroup->node);
pdbGuiGroup->key = ellCount(&pdbbase->guiGroupList);
pgphentry = gphAdd(pdbbase->pgpHash, pdbGuiGroup->name, &pdbbase->guiGroupList);
pgphentry->userPvt = pdbGuiGroup;
}
return ((dbGuiGroup *)pgphentry->userPvt)->key;
}
static void dbRecordtypeFieldItem(char *name,char *value)
{
dbFldDes *pdbFldDes;
@@ -517,14 +533,7 @@ static void dbRecordtypeFieldItem(char *name,char *value)
return;
}
if(strcmp(name,"promptgroup")==0) {
int i;
for(i=0; i<GUI_NTYPES; i++) {
if(strcmp(value,pamapguiGroup[i].strvalue)==0) {
pdbFldDes->promptgroup = pamapguiGroup[i].value;
return;
}
}
yyerror("Illegal promptgroup. See guigroup.h for legal values");
pdbFldDes->promptgroup = findOrAddGuiGroup(value);
return;
}
if(strcmp(name,"prompt")==0) {

View File

@@ -31,7 +31,6 @@
#include "postfix.h"
#define DBFLDTYPES_GBLSOURCE
#define GUIGROUPS_GBLSOURCE
#define SPECIAL_GBLSOURCE
#define epicsExportSharedSymbols
@@ -41,7 +40,6 @@
#include "dbStaticPvt.h"
#include "devSup.h"
#include "drvSup.h"
#include "guigroup.h"
#include "link.h"
#include "special.h"
@@ -417,6 +415,7 @@ dbBase * dbAllocBase(void)
ellInit(&pdbbase->variableList);
ellInit(&pdbbase->bptList);
ellInit(&pdbbase->filterList);
ellInit(&pdbbase->guiGroupList);
gphInitPvt(&pdbbase->pgpHash,256);
dbPvdInitPvt(pdbbase);
return (pdbbase);
@@ -442,8 +441,10 @@ void dbFreeBase(dbBase *pdbbase)
drvSup *pdrvSupNext;
brkTable *pbrkTable;
brkTable *pbrkTableNext;
chFilterPlugin *pfilt;
chFilterPlugin *pfiltNext;
chFilterPlugin *pfilt;
chFilterPlugin *pfiltNext;
dbGuiGroup *pguiGroup;
dbGuiGroup *pguiGroupNext;
int i;
DBENTRY dbentry;
@@ -584,6 +585,15 @@ void dbFreeBase(dbBase *pdbbase)
free(pfilt);
pfilt = pfiltNext;
}
pguiGroup = (dbGuiGroup *)ellFirst(&pdbbase->guiGroupList);
while (pguiGroup) {
pguiGroupNext = (dbGuiGroup *)ellNext(&pguiGroup->node);
gphDelete(pdbbase->pgpHash, pguiGroup->name, &pdbbase->guiGroupList);
ellDelete(&pdbbase->guiGroupList, &pguiGroup->node);
free(pguiGroup->name);
free((void *)pguiGroup);
pguiGroup = pguiGroupNext;
}
gphFreeMem(pdbbase->pgpHash);
dbPvdFreeMem(pdbbase);
dbFreePath(pdbbase);
@@ -738,6 +748,31 @@ static long dbAddOnePath (DBBASE *pdbbase, const char *path, unsigned length)
return 0;
}
char *dbGetPromptGroupNameFromKey(DBBASE *pdbbase, const short key)
{
dbGuiGroup *pdbGuiGroup;
if (!pdbbase) return NULL;
for (pdbGuiGroup = (dbGuiGroup *)ellFirst(&pdbbase->guiGroupList);
pdbGuiGroup; pdbGuiGroup = (dbGuiGroup *)ellNext(&pdbGuiGroup->node)) {
if (pdbGuiGroup->key == key) return pdbGuiGroup->name;
}
return NULL;
}
short dbGetPromptGroupKeyFromName(DBBASE *pdbbase, const char *name)
{
GPHENTRY *pgphentry;
if (!pdbbase) return 0;
pgphentry = gphFind(pdbbase->pgpHash, name, &pdbbase->guiGroupList);
if (!pgphentry) {
return 0;
} else {
return ((dbGuiGroup*)pgphentry->userPvt)->key;
}
}
long dbWriteRecord(DBBASE *ppdbbase,const char *filename,
const char *precordTypename,int level)
@@ -937,16 +972,11 @@ long dbWriteRecordTypeFP(
fprintf(fp,"\t\tprompt(\"%s\")\n",pdbFldDes->prompt);
if(pdbFldDes->initial)
fprintf(fp,"\t\tinitial(\"%s\")\n",pdbFldDes->initial);
if(pdbFldDes->promptgroup) {
for(j=0; j<GUI_NTYPES; j++) {
if(pamapguiGroup[j].value == pdbFldDes->promptgroup) {
fprintf(fp,"\t\tpromptgroup(%s)\n",
pamapguiGroup[j].strvalue);
break;
}
}
}
if(pdbFldDes->special) {
if (pdbFldDes->promptgroup) {
fprintf(fp,"\t\tpromptgroup(\"%s\")\n",
dbGetPromptGroupNameFromKey(pdbbase, pdbFldDes->promptgroup));
}
if(pdbFldDes->special) {
if(pdbFldDes->special >= SPC_NTYPES) {
fprintf(fp,"\t\tspecial(%d)\n",pdbFldDes->special);
} else for(j=0; j<SPC_NTYPES; j++) {
@@ -2051,7 +2081,10 @@ long dbPutString(DBENTRY *pdbentry,const char *pstring)
switch (pflddes->field_type) {
case DBF_STRING:
if(!pfield) return(S_dbLib_fieldNotFound);
strncpy((char *)pfield, pstring,pflddes->size);
if(strlen(pstring) >= (size_t)pflddes->size) return S_dbLib_strLen;
strncpy((char *)pfield, pstring, pflddes->size-1);
((char *)pfield)[pflddes->size-1] = 0;
if((pflddes->special == SPC_CALC) && !stringHasMacro) {
char rpcl[RPCL_LEN];
short err;
@@ -2062,7 +2095,6 @@ long dbPutString(DBENTRY *pdbentry,const char *pstring)
calcErrorStr(err), pstring);
}
}
if((short)strlen(pstring) >= pflddes->size) status = S_dbLib_strLen;
break;
case DBF_CHAR:
@@ -3181,14 +3213,9 @@ void dbDumpField(
if(!pdbFldDes->promptgroup) {
printf("\t promptgroup: %d\n",pdbFldDes->promptgroup);
} else {
for(j=0; j<GUI_NTYPES; j++) {
if(pamapguiGroup[j].value == pdbFldDes->promptgroup) {
printf("\t promptgroup: %s\n",
pamapguiGroup[j].strvalue);
break;
}
}
}
printf("\t promptgroup: %s\n",
dbGetPromptGroupNameFromKey(pdbbase, pdbFldDes->promptgroup));
}
printf("\t interest: %hd\n", pdbFldDes->interest);
printf("\t as_level: %d\n",pdbFldDes->as_level);
printf("\t initial: %s\n",

View File

@@ -81,6 +81,10 @@ epicsShareFunc long dbReadDatabaseFP(DBBASE **ppdbbase,
FILE *fp, const char *path, const char *substitutions);
epicsShareFunc long dbPath(DBBASE *pdbbase, const char *path);
epicsShareFunc long dbAddPath(DBBASE *pdbbase, const char *path);
epicsShareFunc char * dbGetPromptGroupNameFromKey(DBBASE *pdbbase,
const short key);
epicsShareFunc short dbGetPromptGroupKeyFromName(DBBASE *pdbbase,
const char *name);
epicsShareFunc long dbWriteRecord(DBBASE *ppdbbase,
const char *filename, const char *precordTypename, int level);
epicsShareFunc long dbWriteRecordFP(DBBASE *ppdbbase,

View File

@@ -42,6 +42,13 @@ typedef struct dbPathNode {
char *directory;
} dbPathNode;
/* Element of the global gui group list */
typedef struct dbGuiGroup {
ELLNODE node;
short key;
char *name;
} dbGuiGroup;
/*The following are in dbPvdLib.c*/
/*directory*/
typedef struct{

View File

@@ -16,68 +16,11 @@
#ifndef __gui_group_h__
#define __gui_group_h__
#define GUI_COMMON 1
#define GUI_ALARMS 2
#define GUI_BITS1 3
#define GUI_BITS2 4
#define GUI_CALC 5
#define GUI_CLOCK 6
#define GUI_COMPRESS 7
#define GUI_CONVERT 8
#define GUI_DISPLAY 9
#define GUI_HIST 10
#define GUI_INPUTS 11
#define GUI_LINKS 12
#define GUI_MBB 13
#define GUI_MOTOR 14
#define GUI_OUTPUT 15
#define GUI_PID 16
#define GUI_PULSE 17
#define GUI_SELECT 18
#define GUI_SEQ1 19
#define GUI_SEQ2 20
#define GUI_SEQ3 21
#define GUI_SUB 22
#define GUI_TIMER 23
#define GUI_WAVE 24
#define GUI_SCAN 25
#define GUI_NTYPES 25
typedef struct mapguiGroup{
char *strvalue;
int value;
}mapguiGroup;
#ifndef GUIGROUPS_GBLSOURCE
extern mapguiGroup pamapguiGroup[];
#else
mapguiGroup pamapguiGroup[GUI_NTYPES] = {
{"GUI_COMMON",GUI_COMMON},
{"GUI_ALARMS",GUI_ALARMS},
{"GUI_BITS1",GUI_BITS1},
{"GUI_BITS2",GUI_BITS2},
{"GUI_CALC",GUI_CALC},
{"GUI_CLOCK",GUI_CLOCK},
{"GUI_COMPRESS",GUI_COMPRESS},
{"GUI_CONVERT",GUI_CONVERT},
{"GUI_DISPLAY",GUI_DISPLAY},
{"GUI_HIST",GUI_HIST},
{"GUI_INPUTS",GUI_INPUTS},
{"GUI_LINKS",GUI_LINKS},
{"GUI_MBB",GUI_MBB},
{"GUI_MOTOR",GUI_MOTOR},
{"GUI_OUTPUT",GUI_OUTPUT},
{"GUI_PID",GUI_PID},
{"GUI_PULSE",GUI_PULSE},
{"GUI_SELECT",GUI_SELECT},
{"GUI_SEQ1",GUI_SEQ1},
{"GUI_SEQ2",GUI_SEQ2},
{"GUI_SEQ3",GUI_SEQ3},
{"GUI_SUB",GUI_SUB},
{"GUI_TIMER",GUI_TIMER},
{"GUI_WAVE",GUI_WAVE},
{"GUI_SCAN",GUI_SCAN}
};
#endif /*GUIGROUPS_GBLSOURCE*/
#error As of Base 3.15.4, the promptgroup implementation has changed. \
This header file (guigroup.h) is invalid and will be removed shortly. \
Instead, you should include dbStaticLib.h, parse the DBD, \
and use dbGetPromptGroupNameFromKey() and dbGetPromptGroupKeyFromName() \
that have been added to dbStaticLib. \
More details in the 3.15.4 release notes and the AppDev Guide.
#endif /*__gui_group_h__*/

View File

@@ -7,6 +7,8 @@
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#include "envDefs.h"
#include "epicsVersion.h"
#include "iocsh.h"
#include "libComRegister.h"
@@ -21,10 +23,29 @@
#include "registryIocRegister.h"
#include "rsrvIocRegister.h"
#define quote(v) #v
#define str(v) quote(v)
void iocshRegisterCommon(void)
{
const char *targetArch = envGetConfigParamPtr(&EPICS_BUILD_TARGET_ARCH);
iocshPpdbbase = &pdbbase;
/* This uses a config param so the user can override it */
if (targetArch) {
epicsEnvSet("ARCH", targetArch);
}
/* Base build version variables */
epicsEnvSet("EPICS_VERSION_MAJOR", str(EPICS_VERSION));
epicsEnvSet("EPICS_VERSION_MIDDLE", str(EPICS_REVISION));
epicsEnvSet("EPICS_VERSION_MINOR", str(EPICS_MODIFICATION));
epicsEnvSet("EPICS_VERSION_PATCH", str(EPICS_PATCH_LEVEL));
epicsEnvSet("EPICS_VERSION_SNAPSHOT", EPICS_DEV_SNAPSHOT);
epicsEnvSet("EPICS_VERSION_SITE", EPICS_SITE_VERSION);
epicsEnvSet("EPICS_VERSION_SHORT", EPICS_VERSION_SHORT);
epicsEnvSet("EPICS_VERSION_FULL", EPICS_VERSION_FULL);
dbStaticIocRegister();
registryIocRegister();
dbIocRegister();

View File

@@ -1112,7 +1112,7 @@ unsigned cid
* casAccessRightsCB()
*
* If access right state changes then inform the client.
*
* asLock is held
*/
static void casAccessRightsCB(ASCLIENTPVT ascpvt, asClientStatus type)
{
@@ -1568,6 +1568,9 @@ static void sendAllUpdateAS ( struct client *client )
else if ( pciu->state == rsrvCS_inServiceUpdatePendAR ) {
access_rights_reply ( pciu );
}
else if ( pciu->state == rsrvCS_shutdown ) {
/* no-op */
}
else {
errlogPrintf (
"%s at %d: corrupt channel state detected durring AR update\n",
@@ -2047,10 +2050,15 @@ static int clear_channel_reply ( caHdrLargeArray *mp,
if ( pciu->state == rsrvCS_inService ||
pciu->state == rsrvCS_pendConnectResp ) {
ellDelete ( &client->chanList, &pciu->node );
pciu->state = rsrvCS_shutdown;
}
else if ( pciu->state == rsrvCS_inServiceUpdatePendAR ||
pciu->state == rsrvCS_pendConnectRespUpdatePendAR ) {
ellDelete ( &client->chanPendingUpdateARList, &pciu->node );
pciu->state = rsrvCS_shutdown;
}
else if ( pciu->state == rsrvCS_shutdown ) {
/* no-op */
}
else {
epicsMutexUnlock( client->chanListLock );

View File

@@ -1134,6 +1134,7 @@ static void destroyAllChannels (
epicsMutexMustLock ( client->chanListLock );
pciu = (struct channel_in_use *) ellGet ( pList );
if(pciu) pciu->state = rsrvCS_shutdown;
epicsMutexUnlock ( client->chanListLock );
if ( ! pciu ) {

View File

@@ -99,12 +99,25 @@ typedef struct client {
char disconnect; /* disconnect detected */
} client;
/* Channel state shows which struct client list a
* channel_in_us::node is in.
*
* client::chanList
* rsrvCS_pendConnectResp, rsrvCS_inService
* client::chanPendingUpdateARList
* rsrvCS_pendConnectRespUpdatePendAR, rsrvCS_inServiceUpdatePendAR
* Not in any list
* rsrvCS_shutdown
*
* rsrvCS_invalid is not used
*/
enum rsrvChanState {
rsrvCS_invalid,
rsrvCS_pendConnectResp,
rsrvCS_inService,
rsrvCS_pendConnectRespUpdatePendAR,
rsrvCS_inServiceUpdatePendAR
rsrvCS_inServiceUpdatePendAR,
rsrvCS_shutdown
};
/*

View File

@@ -45,6 +45,11 @@ Com_SYS_LIBS_WIN32 = ws2_32 advapi32 user32
Com_RCS = Com.rc
ifeq ($(T_A),$(EPICS_HOST_ARCH))
# Antelope & flex are needed to finish libCom
DELAY_INSTALL_LIBS = YES
endif
include $(TOP)/configure/RULES
include $(LIBCOM)/as/RULES

View File

@@ -529,6 +529,12 @@ Init (rtems_task_argument ignored)
putenv ("TERM=xterm");
putenv ("IOCSH_HISTSIZE=20");
/*
* Display some OS information
*/
printf("\n***** RTEMS Version: %s *****\n",
rtems_get_version_string());
/*
* Start network
*/

View File

@@ -155,7 +155,7 @@ epicsShareFunc long
break;
case ABS_VAL:
if (*ptop < 0.0) *ptop = - *ptop;
*ptop = fabs(*ptop);
break;
case EXP:

View File

@@ -8,5 +8,7 @@
# This is a Makefile fragment, see src/libCom/Makefile.
envData.c: $(LIBCOM)/env/envDefs.h $(LIBCOM)/env/bldEnvData.pl \
$(CONFIG)/CONFIG_ENV $(CONFIG)/CONFIG_SITE_ENV
$(PERL) $(LIBCOM)/env/bldEnvData.pl $(INSTALL_QUIETLY) $(CONFIG)
$(CONFIG)/CONFIG_ENV $(CONFIG)/CONFIG_SITE_ENV \
$(wildcard $(CONFIG)/os/CONFIG_SITE_ENV.$(T_A))
$(PERL) $(LIBCOM)/env/bldEnvData.pl $(INSTALL_QUIETLY) -t $(T_A) \
-c $(CMPLR_CLASS) -s $(OS_CLASS) $(CONFIG)

View File

@@ -26,13 +26,13 @@ use Text::Wrap;
my $tool = basename($0);
our ($opt_h, $opt_q);
our ($opt_h, $opt_q, $opt_t, $opt_s, $opt_c);
our $opt_o = 'envData.c';
$Getopt::Std::OUTPUT_HELP_VERSION = 1;
$Text::Wrap::columns = 75;
&HELP_MESSAGE unless getopts('ho:q') && @ARGV == 1;
&HELP_MESSAGE unless getopts('ho:qt:s:c:') && @ARGV == 1;
&HELP_MESSAGE if $opt_h;
my $config = AbsPath(shift);
@@ -52,16 +52,31 @@ while (<SRC>) {
}
close SRC;
# Read the values from the CONFIG_ENV and CONFIG_SITE_ENV files
# A list of configure/CONFIG_* files to read
#
my $config_env = "$config/CONFIG_ENV";
my $config_site_env = "$config/CONFIG_SITE_ENV";
my @configs = ("$config/CONFIG_ENV", "$config/CONFIG_SITE_ENV");
my %values;
readReleaseFiles($config_env, \%values);
readReleaseFiles($config_site_env, \%values);
if ($opt_t) {
my $config_arch_env = "$config/os/CONFIG_SITE_ENV.$opt_t";
push @configs, $config_arch_env
if -f $config_arch_env;
}
# Warn about any vars with no value
my @sources = ($env_defs, @configs);
# Get values from the config files
#
my (%values, @dummy);
readRelease($_, \%values, \@dummy) foreach @configs;
expandRelease(\%values);
# Get values from the command-line
#
$values{EPICS_BUILD_COMPILER_CLASS} = $opt_c if $opt_c;
$values{EPICS_BUILD_OS_CLASS} = $opt_s if $opt_s;
$values{EPICS_BUILD_TARGET_ARCH} = $opt_t if $opt_t;
# Warn about vars with no configured value
#
my @undefs = grep {!exists $values{$_}} @vars;
warn "$tool: No value given for $_\n" foreach @undefs;
@@ -73,13 +88,13 @@ print "Generating $opt_o\n" unless $opt_q;
open OUT, '>', $opt_o
or die "$tool: Cannot create $opt_o: $!\n";
my $sources = join "\n", map {" * $_"} @sources;
print OUT << "END";
/* Generated file $opt_o
*
* Created from
* $env_defs
* $config_env
* $config_site_env
$sources
*/
#include <stddef.h>
@@ -88,18 +103,23 @@ print OUT << "END";
END
# Define all parameters, giving variable name and default value
# Define a default value for each named parameter
#
foreach my $var (@vars) {
my $default = $values{$var} || '';
$default =~ s/^"//;
$default =~ s/"$//;
my $default = $values{$var};
if (defined $default) {
$default =~ s/^"//;
$default =~ s/"$//;
}
else {
$default = '';
}
print OUT "epicsShareDef const ENV_PARAM $var =\n",
" {\"$var\", \"$default\"};\n";
}
# Now create a list of all those parameters
# Also provide a list of all defined parameters
#
print OUT "\n",
"epicsShareDef const ENV_PARAM* env_param_list[] = {\n",
@@ -112,6 +132,9 @@ sub HELP_MESSAGE {
" -h Help: Print this message\n",
" -q Quiet: Only print errors\n",
" -o file Output filename, default is $opt_o\n",
" -t arch Target architecture \$(T_A) name\n",
" -s os Operating system \$(OS_CLASS)\n",
" -c comp Compiler class \$(CMPLR_CLASS)\n",
"\n";
exit 1;

View File

@@ -40,7 +40,7 @@ typedef struct envParam {
} ENV_PARAM;
/*
* bldEnvData looks for "epicsShareExtern const ENV_PARAM"
* bldEnvData.pl looks for "epicsShareExtern const ENV_PARAM <name>;"
*/
epicsShareExtern const ENV_PARAM EPICS_CA_ADDR_LIST;
epicsShareExtern const ENV_PARAM EPICS_CA_CONN_TMO;
@@ -58,6 +58,9 @@ epicsShareExtern const ENV_PARAM EPICS_CAS_SERVER_PORT;
epicsShareExtern const ENV_PARAM EPICS_CA_BEACON_PERIOD; /* deprecated */
epicsShareExtern const ENV_PARAM EPICS_CAS_BEACON_PERIOD;
epicsShareExtern const ENV_PARAM EPICS_CAS_BEACON_PORT;
epicsShareExtern const ENV_PARAM EPICS_BUILD_COMPILER_CLASS;
epicsShareExtern const ENV_PARAM EPICS_BUILD_OS_CLASS;
epicsShareExtern const ENV_PARAM EPICS_BUILD_TARGET_ARCH;
epicsShareExtern const ENV_PARAM EPICS_TIMEZONE;
epicsShareExtern const ENV_PARAM EPICS_TS_NTP_INET;
epicsShareExtern const ENV_PARAM EPICS_IOC_LOG_PORT;

View File

@@ -70,12 +70,12 @@ epicsShareFunc int
/* These macros return 1 if successful, 0 on failure.
* This is analagous to the return value from sscanf()
*/
#define epicsScanLong(str, to, base) !epicsParseLong(str, to, base, NULL)
#define epicsScanULong(str, to, base) !epicsParseULong(str, to, base, NULL)
#define epicsScanLLong(str, to, base) !epicsParseLLong(str, to, base, NULL)
#define epicsScanULLong(str, to, base) !epicsParseULLong(str, to, base, NULL)
#define epicsScanFloat(str, to) !epicsParseFloat(str, to, NULL)
#define epicsScanDouble(str, to) !epicsParseDouble(str, to, NULL)
#define epicsScanLong(str, to, base) (!epicsParseLong(str, to, base, NULL))
#define epicsScanULong(str, to, base) (!epicsParseULong(str, to, base, NULL))
#define epicsScanLLong(str, to, base) (!epicsParseLLong(str, to, base, NULL))
#define epicsScanULLong(str, to, base) (!epicsParseULLong(str, to, base, NULL))
#define epicsScanFloat(str, to) (!epicsParseFloat(str, to, NULL))
#define epicsScanDouble(str, to) (!epicsParseDouble(str, to, NULL))
#ifdef __cplusplus
}

View File

@@ -265,12 +265,16 @@ void ipAddrToAsciiEnginePrivate::run ()
continue;
}
// fix for lp:1580623
// a destructing cac sets pCurrent to NULL, so
// make local copy to avoid race when releasing the guard
ipAddrToAsciiTransactionPrivate *pCur = this->pCurrent;
this->callbackInProgress = true;
{
epicsGuardRelease < epicsMutex > unguard ( guard );
// dont call callback with lock applied
this->pCurrent->pCB->transactionComplete ( this->nameTmp );
pCur->pCB->transactionComplete ( this->nameTmp );
}
this->callbackInProgress = false;

View File

@@ -47,8 +47,11 @@ map {
die "$tool: Variable missing from $infile" unless defined $_;
} $ver, $rev, $mod, $patch, $snapshot, $commit_date;
$commit_date =~ s/^\$\$Date$\$$/\1/;
my $ver_str = "$ver.$rev.$mod";
$ver_str .= ".$patch" if $patch > 0;
my $ver_short = $ver_str;
$ver_str .= $snapshot if $snapshot ne '';
$ver_str .= "-$opt_v" if $opt_v;
@@ -71,10 +74,15 @@ print $OUT <<"END";
#define EPICS_PATCH_LEVEL $patch
#define EPICS_DEV_SNAPSHOT "$snapshot"
#define EPICS_SITE_VERSION "$opt_v"
#define EPICS_VERSION_SHORT "$ver_short"
#define EPICS_VERSION_FULL "$ver_str"
#define EPICS_VERSION_STRING "EPICS $ver_str"
#define epicsReleaseVersion "EPICS R$ver_str $commit_date"
#define VERSION_INT(V,R,M,P) ( ((V)<<24) | ((R)<<16) | ((M)<<8) | (P))
#ifndef VERSION_INT
# define VERSION_INT(V,R,M,P) ( ((V)<<24) | ((R)<<16) | ((M)<<8) | (P))
#endif
#define EPICS_VERSION_INT VERSION_INT($ver, $rev, $mod, $patch)
#endif /* INC_${obase}_H */

View File

@@ -4,7 +4,7 @@
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* in file LICENSE that is included with this distribution.
\*************************************************************************/
//
// $Revision-Id$
@@ -37,22 +37,22 @@ epicsThreadRunable::~epicsThreadRunable () {}
void epicsThreadRunable::run () {}
void epicsThreadRunable::show ( unsigned int ) const {}
class epicsThread :: unableToCreateThread :
class epicsThread :: unableToCreateThread :
public std :: exception {
public:
const char * what () const throw ();
};
const char * epicsThread ::
const char * epicsThread ::
unableToCreateThread :: what () const throw ()
{
return "unable to create thread";
}
void epicsThread :: printLastChanceExceptionMessage (
void epicsThread :: printLastChanceExceptionMessage (
const char * pExceptionTypeName,
const char * pExceptionContext )
{
{
char date[64];
try {
epicsTime cur = epicsTime :: getCurrent ();
@@ -63,51 +63,52 @@ void epicsThread :: printLastChanceExceptionMessage (
}
char name [128];
epicsThreadGetName ( this->id, name, sizeof ( name ) );
errlogPrintf (
errlogPrintf (
"epicsThread: Unexpected C++ exception \"%s\" "
"with type \"%s\" in thread \"%s\" at %s\n",
pExceptionContext, pExceptionTypeName, name, date );
errlogFlush ();
// this should behave as the C++ implementation intends when an
// exception isnt handled. If users dont like this behavior, they
// can install an application specific unexpected handler.
// This behavior matches the C++ implementation when an exception
// isn't handled by the thread code. Users can install their own
// application-specific unexpected handler if preferred.
std::unexpected ();
}
extern "C" void epicsThreadCallEntryPoint ( void * pPvt )
{
epicsThread * pThread =
epicsThread * pThread =
static_cast <epicsThread *> ( pPvt );
bool waitRelease = false;
bool threadDestroyed = false;
try {
pThread->pWaitReleaseFlag = & waitRelease;
pThread->pThreadDestroyed = & threadDestroyed;
if ( pThread->beginWait () ) {
pThread->runable.run ();
// current thread may have run the destructor
// so must not touch the this pointer from
// here on down if waitRelease is true
// The run() routine may have destroyed the epicsThread
// object by now; pThread can only be used below here
// when the threadDestroyed flag is false.
}
}
catch ( const epicsThread::exitException & ) {
}
catch ( std :: exception & except ) {
if ( ! waitRelease ) {
pThread->printLastChanceExceptionMessage (
if ( ! threadDestroyed ) {
pThread->printLastChanceExceptionMessage (
typeid ( except ).name (), except.what () );
}
}
catch ( ... ) {
if ( ! waitRelease ) {
pThread->printLastChanceExceptionMessage (
if ( ! threadDestroyed ) {
pThread->printLastChanceExceptionMessage (
"catch ( ... )", "Non-standard C++ exception" );
}
}
if ( ! waitRelease ) {
if ( ! threadDestroyed ) {
epicsGuard < epicsMutex > guard ( pThread->mutex );
pThread->pThreadDestroyed = NULL;
pThread->terminated = true;
pThread->exitEvent.signal ();
// once the terminated flag is set and we release the lock
// then the "this" pointer must not be touched again
// After the terminated flag is set and guard's destructor
// releases the lock, pThread must never be used again.
}
}
@@ -135,12 +136,12 @@ void epicsThread::exitWait () throw ()
bool epicsThread::exitWait ( const double delay ) throw ()
{
try {
// if destructor is running in managed thread then of
// course we will not wait for the managed thread to
// exit
// When called (usually by a destructor) in the context of
// the managed thread we can't wait for the thread to exit.
// Set the threadDestroyed flag and return success.
if ( this->isCurrentThread() ) {
if ( this->pWaitReleaseFlag ) {
*this->pWaitReleaseFlag = true;
if ( this->pThreadDestroyed ) {
*this->pThreadDestroyed = true;
}
return true;
}
@@ -157,14 +158,14 @@ bool epicsThread::exitWait ( const double delay ) throw ()
}
}
catch ( std :: exception & except ) {
errlogPrintf (
errlogPrintf (
"epicsThread::exitWait(): Unexpected exception "
" \"%s\"\n",
" \"%s\"\n",
except.what () );
epicsThreadSleep ( epicsMin ( delay, 5.0 ) );
}
catch ( ... ) {
errlogPrintf (
errlogPrintf (
"Non-standard unexpected exception in "
"epicsThread::exitWait()\n" );
epicsThreadSleep ( epicsMin ( delay, 5.0 ) );
@@ -174,14 +175,14 @@ bool epicsThread::exitWait ( const double delay ) throw ()
return this->terminated;
}
epicsThread::epicsThread (
epicsThread::epicsThread (
epicsThreadRunable & runableIn, const char * pName,
unsigned stackSize, unsigned priority ) :
runable ( runableIn ), id ( 0 ), pWaitReleaseFlag ( 0 ),
runable ( runableIn ), id ( 0 ), pThreadDestroyed ( 0 ),
begin ( false ), cancel ( false ), terminated ( false )
{
this->id = epicsThreadCreate (
pName, priority, stackSize, epicsThreadCallEntryPoint,
this->id = epicsThreadCreate (
pName, priority, stackSize, epicsThreadCallEntryPoint,
static_cast < void * > ( this ) );
if ( ! this->id ) {
throw unableToCreateThread ();
@@ -193,11 +194,11 @@ epicsThread::~epicsThread () throw ()
while ( ! this->exitWait ( 10.0 ) ) {
char nameBuf [256];
this->getName ( nameBuf, sizeof ( nameBuf ) );
fprintf ( stderr,
fprintf ( stderr,
"epicsThread::~epicsThread(): "
"blocking for thread \"%s\" to exit\n",
"blocking for thread \"%s\" to exit\n",
nameBuf );
fprintf ( stderr,
fprintf ( stderr,
"was epicsThread object destroyed before thread exit ?\n");
}
}
@@ -272,11 +273,6 @@ void epicsThread::sleep (double seconds) throw ()
epicsThreadSleep (seconds);
}
//epicsThread & epicsThread::getSelf ()
//{
// return * static_cast<epicsThread *> ( epicsThreadGetIdSelf () );
//}
const char *epicsThread::getNameSelf () throw ()
{
return epicsThreadGetNameSelf ();
@@ -303,7 +299,7 @@ void epicsThread :: show ( unsigned level ) const throw ()
if ( level > 0u ) {
epicsThreadShow ( this->id, level - 1 );
if ( level > 1u ) {
::printf ( "pWaitReleaseFlag = %p\n", this->pWaitReleaseFlag );
::printf ( "pThreadDestroyed = %p\n", this->pThreadDestroyed );
::printf ( "begin = %c, cancel = %c, terminated = %c\n",
this->begin ? 'T' : 'F',
this->cancel ? 'T' : 'F',
@@ -323,12 +319,12 @@ extern "C" {
epicsThreadPrivateId okToBlockPrivate;
static const int okToBlockNo = 0;
static const int okToBlockYes = 1;
static void epicsThreadOnceIdInit(void *)
{
okToBlockPrivate = epicsThreadPrivateCreate();
}
int epicsShareAPI epicsThreadIsOkToBlock(void)
{
const int *pokToBlock;
@@ -336,7 +332,7 @@ extern "C" {
pokToBlock = (int *) epicsThreadPrivateGet(okToBlockPrivate);
return (pokToBlock ? *pokToBlock : 0);
}
void epicsShareAPI epicsThreadSetOkToBlock(int isOkToBlock)
{
const int *pokToBlock;
@@ -344,12 +340,12 @@ extern "C" {
pokToBlock = (isOkToBlock) ? &okToBlockYes : &okToBlockNo;
epicsThreadPrivateSet(okToBlockPrivate, (void *)pokToBlock);
}
epicsThreadId epicsShareAPI epicsThreadMustCreate (
const char *name, unsigned int priority, unsigned int stackSize,
EPICSTHREADFUNC funptr,void *parm)
EPICSTHREADFUNC funptr,void *parm)
{
epicsThreadId id = epicsThreadCreate (
epicsThreadId id = epicsThreadCreate (
name, priority, stackSize, funptr, parm );
assert ( id );
return id;

View File

@@ -158,10 +158,10 @@ public:
bool isCurrentThread () const throw ();
bool operator == ( const epicsThread & ) const throw ();
void show ( unsigned level ) const throw ();
/* these operate on the current thread */
static void suspendSelf () throw ();
static void sleep (double seconds) throw ();
/* static epicsThread & getSelf (); */
static const char * getNameSelf () throw ();
static bool isOkToBlock () throw ();
static void setOkToBlock ( bool isOkToBlock ) throw ();
@@ -174,7 +174,7 @@ private:
epicsMutex mutex;
epicsEvent event;
epicsEvent exitEvent;
bool * pWaitReleaseFlag;
bool * pThreadDestroyed;
bool begin;
bool cancel;
bool terminated;

View File

@@ -73,6 +73,21 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
struct ifreq *pifreq;
struct ifreq *pnextifreq;
osiSockAddrNode *pNewNode;
if ( pMatchAddr->sa.sa_family == AF_INET ) {
if ( pMatchAddr->ia.sin_addr.s_addr == htonl (INADDR_LOOPBACK) ) {
pNewNode = (osiSockAddrNode *) calloc (1, sizeof (*pNewNode) );
if ( pNewNode == NULL ) {
errlogPrintf ( "osiSockDiscoverBroadcastAddresses(): no memory available for configuration\n" );
return;
}
pNewNode->addr.ia.sin_family = AF_INET;
pNewNode->addr.ia.sin_port = htons ( 0 );
pNewNode->addr.ia.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
ellAdd ( pList, &pNewNode->node );
return;
}
}
/*
* use pool so that we avoid using too much stack space
@@ -100,7 +115,6 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
for ( pifreq = pIfreqList; pifreq <= pIfreqListEnd; pifreq = pnextifreq ) {
uint32_t current_ifreqsize;
struct sockaddr_in if_addr;
/*
* find the next ifreq
@@ -124,7 +138,6 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
ifDepenDebugPrintf ( ("osiSockDiscoverBroadcastAddresses(): interface \"%s\" was not AF_INET\n", pIfreqList->ifr_name) );
continue;
}
if_addr = *(struct sockaddr_in *)&pIfreqList->ifr_addr;
/*
* if it isnt a wildcarded interface then look for
@@ -135,7 +148,8 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
continue;
}
if ( pMatchAddr->ia.sin_addr.s_addr != htonl (INADDR_ANY) ) {
if ( if_addr.sin_addr.s_addr != pMatchAddr->ia.sin_addr.s_addr ) {
struct sockaddr_in *pInetAddr = (struct sockaddr_in *) &pIfreqList->ifr_addr;
if ( pInetAddr->sin_addr.s_addr != pMatchAddr->ia.sin_addr.s_addr ) {
ifDepenDebugPrintf ( ("osiSockDiscoverBroadcastAddresses(): net intf \"%s\" didnt match\n", pIfreqList->ifr_name) );
continue;
}
@@ -156,6 +170,14 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
continue;
}
/*
* dont use the loop back interface
*/
if ( pIfreqList->ifr_flags & IFF_LOOPBACK ) {
ifDepenDebugPrintf ( ("osiSockDiscoverBroadcastAddresses(): ignoring loopback interface: \"%s\"\n", pIfreqList->ifr_name) );
continue;
}
pNewNode = (osiSockAddrNode *) calloc (1, sizeof (*pNewNode) );
if ( pNewNode == NULL ) {
errlogPrintf ( "osiSockDiscoverBroadcastAddresses(): no memory available for configuration\n" );
@@ -174,14 +196,22 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
* interface.
*/
if ( pIfreqList->ifr_flags & IFF_BROADCAST ) {
osiSockAddr baddr;
status = socket_ioctl (socket, SIOCGIFBRDADDR, pIfreqList);
if ( status ) {
errlogPrintf ("osiSockDiscoverBroadcastAddresses(): net intf \"%s\": bcast addr fetch fail\n", pIfreqList->ifr_name);
free ( pNewNode );
continue;
}
pNewNode->addr.sa = pIfreqList->ifr_broadaddr;
ifDepenDebugPrintf ( ( "found broadcast addr = %x\n", ntohl ( pNewNode->addr.ia.sin_addr.s_addr ) ) );
baddr.sa = pIfreqList->ifr_broadaddr;
if (baddr.ia.sin_family==AF_INET && baddr.ia.sin_addr.s_addr != INADDR_ANY) {
pNewNode->addr.sa = pIfreqList->ifr_broadaddr;
ifDepenDebugPrintf ( ( "found broadcast addr = %x\n", ntohl ( baddr.ia.sin_addr.s_addr ) ) );
} else {
ifDepenDebugPrintf ( ( "Ignoring broadcast addr = \n", ntohl ( baddr.ia.sin_addr.s_addr ) ) );
free ( pNewNode );
continue;
}
}
#if defined (IFF_POINTOPOINT)
else if ( pIfreqList->ifr_flags & IFF_POINTOPOINT ) {
@@ -193,22 +223,6 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
}
pNewNode->addr.sa = pIfreqList->ifr_dstaddr;
}
#endif
#if defined(__linux__)
/* On Linux, even though the 'lo' interface doesn't set IFF_BROADCAST
* a broadcast route often exists. Assume that sending to 127.255.255.255
* reaches all local listeners.
*
* $ ip route show table local scope link dev lo
* broadcast 127.0.0.0 proto kernel src 127.0.0.1
* broadcast 127.255.255.255 proto kernel src 127.0.0.1
*/
else if ( pIfreqList->ifr_flags & IFF_LOOPBACK && if_addr.sin_addr.s_addr == htonl(INADDR_LOOPBACK) ) {
memset(&pNewNode->addr.ia, 0, sizeof(pNewNode->addr.ia));
pNewNode->addr.ia.sin_family = AF_INET;
pNewNode->addr.ia.sin_addr.s_addr = htonl(0x7fffffff);
ifDepenDebugPrintf ( ( "assume loopback broadcast addr = %x\n", ntohl ( pNewNode->addr.ia.sin_addr.s_addr ) ) );
}
#endif
else {
ifDepenDebugPrintf ( ( "osiSockDiscoverBroadcastAddresses(): net intf \"%s\": not point to point or bcast?\n", pIfreqList->ifr_name ) );

View File

@@ -19,7 +19,7 @@ extern "C" {
#ifdef isfinite
# undef finite
# define finite(x) isfinite(x)
# define finite(x) isfinite((double)(x))
#endif
epicsShareExtern float epicsNAN;

View File

@@ -98,6 +98,7 @@ TESTS += epicsTimeTest
TESTPROD_HOST += epicsTimeZoneTest
epicsTimeZoneTest_SRCS += epicsTimeZoneTest.c
libComTestHarness_SRCS_RTEMS += epicsTimeZoneTest.c
TESTS += epicsTimeZoneTest
TESTPROD_HOST += epicsThreadTest

View File

@@ -47,6 +47,9 @@ int epicsTimeTest(void);
int epicsTypesTest(void);
int epicsInlineTest(void);
int macDefExpandTest(void);
#ifdef __rtems__
int epicsTimeZoneTest(void);
#endif
int macLibTest(void);
int ringBytesTest(void);
int ringPointerTest(void);
@@ -97,6 +100,11 @@ void epicsRunLibComTests(void)
runTest(epicsTypesTest);
runTest(epicsInlineTest);
runTest(macDefExpandTest);
#ifdef __rtems__
runTest(epicsTimeZoneTest);
#endif
runTest(macLibTest);
runTest(ringBytesTest);
runTest(ringPointerTest);

View File

@@ -17,15 +17,9 @@
#endif
static
void setTZ(const char *base, const char *dst, int offset)
void setTZ(const char *tz)
{
char tz[20];
if(offset!=0 || dst)
sprintf(tz, "%s%d%s", base, offset/3600, dst);
else
sprintf(tz, "%s", base);
testDiag("TZ=\"%s\"", tz);
testDiag("TZ = \"%s\"", tz);
epicsEnvSet("TZ", tz);
tzset();
}
@@ -86,32 +80,52 @@ void test_gmtime(time_t T, int sec, int min, int hour,
MAIN(epicsTimeZoneTest)
{
testPlan(80);
testPlan(160);
/* 1445259616
* Mon Oct 19 09:00:16 2015 EDT
* Mon Oct 19 08:00:16 2015 CDT
* Mon Oct 19 03:00:16 2015 HST (no dst)
* Mon Oct 19 13:00:16 2015 UTC
*/
testDiag("POSIX 1445259616");
setTZ("EST", "EDT", 5*3600);
test_localtime(1445259616ul, 16, 0, 9, 19, 9, 2015, 1, 291, 1);
setTZ("CST", "CDT", 6*3600);
test_localtime(1445259616ul, 16, 0, 8, 19, 9, 2015, 1, 291, 1);
setTZ("UTC", NULL, 0);
setTZ("EST5EDT");
test_localtime(1445259616ul, 16, 0, 9, 19, 9, 2015, 1, 291, 1);
test_gmtime (1445259616ul, 16, 0, 13, 19, 9, 2015, 1, 291, 0);
setTZ("CST6CDT");
test_localtime(1445259616ul, 16, 0, 8, 19, 9, 2015, 1, 291, 1);
test_gmtime (1445259616ul, 16, 0, 13, 19, 9, 2015, 1, 291, 0);
#if defined(__rtems__)
setTZ("HST10HST10");
#else
setTZ("HST10");
#endif
test_localtime(1445259616ul, 16, 0, 3, 19, 9, 2015, 1, 291, 0);
test_gmtime (1445259616ul, 16, 0, 13, 19, 9, 2015, 1, 291, 0);
setTZ("UTC0");
test_localtime(1445259616ul, 16, 0, 13, 19, 9, 2015, 1, 291, 0);
test_gmtime(1445259616ul, 16, 0, 13, 19, 9, 2015, 1, 291, 0);
test_gmtime (1445259616ul, 16, 0, 13, 19, 9, 2015, 1, 291, 0);
/* 1421244931
* Wed Jan 14 09:15:31 2015 EST
* Wed Jan 14 08:15:31 2015 CST
* Wed Jan 14 04:15:31 2015 HST
* Wed Jan 14 14:15:31 2015 UTC
*/
testDiag("POSIX 1421244931");
setTZ("EST", "EDT", 5*3600);
test_localtime(1421244931ul, 31, 15, 9, 14, 0, 2015, 3, 13, 0);
setTZ("CST", "CDT", 6*3600);
test_localtime(1421244931ul, 31, 15, 8, 14, 0, 2015, 3, 13, 0);
setTZ("UTC", NULL, 0);
setTZ("EST5EDT");
test_localtime(1421244931ul, 31, 15, 9, 14, 0, 2015, 3, 13, 0);
test_gmtime (1421244931ul, 31, 15, 14, 14, 0, 2015, 3, 13, 0);
setTZ("CST6CDT");
test_localtime(1421244931ul, 31, 15, 8, 14, 0, 2015, 3, 13, 0);
test_gmtime (1421244931ul, 31, 15, 14, 14, 0, 2015, 3, 13, 0);
#if defined(__rtems__)
setTZ("HST10HST10");
#else
setTZ("HST10");
#endif
test_localtime(1421244931ul, 31, 15, 4, 14, 0, 2015, 3, 13, 0);
test_gmtime (1421244931ul, 31, 15, 14, 14, 0, 2015, 3, 13, 0);
setTZ("UTC0");
test_localtime(1421244931ul, 31, 15, 14, 14, 0, 2015, 3, 13, 0);
test_gmtime(1421244931ul, 31, 15, 14, 14, 0, 2015, 3, 13, 0);
test_gmtime (1421244931ul, 31, 15, 14, 14, 0, 2015, 3, 13, 0);
return testDone();
}

View File

@@ -66,6 +66,7 @@ dbRecStd_SRCS += devSoSoftCallback.c
dbRecStd_SRCS += devTimestamp.c
dbRecStd_SRCS += devStdio.c
dbRecStd_SRCS += devEnviron.c
dbRecStd_SRCS += asSubRecordFunctions.c

128
src/std/dev/devEnviron.c Normal file
View File

@@ -0,0 +1,128 @@
/*************************************************************************\
* Copyright (c) 2016 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/* devEnviron.c */
#include <stdlib.h>
#include <string.h>
#include "alarm.h"
#include "dbCommon.h"
#include "devSup.h"
#include "errlog.h"
#include "recGbl.h"
#include "recSup.h"
#include "lsiRecord.h"
#include "stringinRecord.h"
#include "epicsExport.h"
/* lsi device support */
static long add_lsi(dbCommon *pcommon) {
lsiRecord *prec = (lsiRecord *) pcommon;
if (prec->inp.type != INST_IO)
return S_dev_badInpType;
return 0;
}
static long del_lsi(dbCommon *pcommon) {
return 0;
}
static struct dsxt dsxtLsiEnviron = {
add_lsi, del_lsi
};
static long init_lsi(int pass)
{
if (pass == 0)
devExtend(&dsxtLsiEnviron);
return 0;
}
static long read_lsi(lsiRecord *prec)
{
const char *val = getenv(prec->inp.value.instio.string);
if (val) {
strncpy(prec->val, val, prec->sizv);
prec->val[prec->sizv - 1] = 0;
prec->len = strlen(prec->val);
prec->udf = FALSE;
}
else {
prec->val[0] = 0;
prec->len = 1;
prec->udf = TRUE;
recGblSetSevr(prec, UDF_ALARM, prec->udfs);
}
return 0;
}
lsidset devLsiEnviron = {
5, NULL, init_lsi, NULL, NULL, read_lsi
};
epicsExportAddress(dset, devLsiEnviron);
/* stringin device support */
static long add_stringin(dbCommon *pcommon) {
stringinRecord *prec = (stringinRecord *) pcommon;
if (prec->inp.type != INST_IO)
return S_dev_badInpType;
return 0;
}
static long del_stringin(dbCommon *pcommon) {
return 0;
}
static struct dsxt dsxtSiEnviron = {
add_stringin, del_stringin
};
static long init_stringin(int pass)
{
if (pass == 0)
devExtend(&dsxtSiEnviron);
return 0;
}
static long read_stringin(stringinRecord *prec)
{
const char *val = getenv(prec->inp.value.instio.string);
if (val) {
strncpy(prec->val, val, MAX_STRING_SIZE);
prec->val[MAX_STRING_SIZE - 1] = 0;
prec->udf = FALSE;
}
else {
prec->val[0] = 0;
prec->udf = TRUE;
recGblSetSevr(prec, UDF_ALARM, prec->udfs);
}
return 0;
}
static struct {
dset common;
DEVSUPFUN read;
} devSiEnviron = {
{5, NULL, init_stringin, NULL, NULL}, read_stringin
};
epicsExportAddress(dset, devSiEnviron);

View File

@@ -58,5 +58,8 @@ device(lso,INST_IO,devLsoStdio,"stdio")
device(printf,INST_IO,devPrintfStdio,"stdio")
device(stringout,INST_IO,devSoStdio,"stdio")
device(lsi,INST_IO,devLsiEnviron,"getenv")
device(stringin,INST_IO,devSiEnviron,"getenv")
device(bi, INST_IO, devBiDbState, "Db State")
device(bo, INST_IO, devBoDbState, "Db State")

View File

@@ -19,6 +19,7 @@ Recs_LIBS += dbCore Com
PROD_LIBS = Recs dbRecStd dbCore ca Com
TARGETS += $(COMMON_DIR)/tsTest.dbd
DBDDEPENDS_FILES += tsTest.dbd$(DEP)
tsTest_DBD += xRecord.dbd
TESTPROD_HOST += tsTest
tsTest_SRCS += tsTest.c
@@ -29,6 +30,7 @@ TESTFILES += $(COMMON_DIR)/tsTest.dbd ../xRecord.db
TESTS += tsTest
TARGETS += $(COMMON_DIR)/dbndTest.dbd
DBDDEPENDS_FILES += dbndTest.dbd$(DEP)
dbndTest_DBD += xRecord.dbd
TESTPROD_HOST += dbndTest
dbndTest_SRCS += dbndTest.c
@@ -39,6 +41,7 @@ TESTFILES += $(COMMON_DIR)/dbndTest.dbd
TESTS += dbndTest
TARGETS += $(COMMON_DIR)/arrTest.dbd
DBDDEPENDS_FILES += arrTest.dbd$(DEP)
arrTest_DBD += arrRecord.dbd
TESTPROD_HOST += arrTest
arrTest_SRCS += arrTest.cpp
@@ -49,6 +52,7 @@ TESTFILES += $(COMMON_DIR)/arrTest.dbd ../arrTest.db
TESTS += arrTest
TARGETS += $(COMMON_DIR)/syncTest.dbd
DBDDEPENDS_FILES += syncTest.dbd$(DEP)
syncTest_DBD += xRecord.dbd
TESTPROD_HOST += syncTest
syncTest_SRCS += syncTest.c

File diff suppressed because it is too large Load Diff

View File

@@ -3,13 +3,12 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
menu(aaiPOST) {
choice(aaiPOST_Always,"Always")
choice(aaiPOST_OnChange,"On Change")
choice(aaiPOST_Always,"Always")
choice(aaiPOST_OnChange,"On Change")
}
recordtype(aai) {
include "dbCommon.dbd"
@@ -25,44 +24,44 @@ recordtype(aai) {
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_ALARMS)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_BITS1)
promptgroup("40 - Input")
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Engineering Units Name")
promptgroup(GUI_BITS2)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_CALC)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_CLOCK)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(NELM,DBF_ULONG) {
prompt("Number of Elements")
promptgroup(GUI_COMPRESS)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
initial("1")
}
field(FTVL,DBF_MENU) {
prompt("Field Type of Value")
promptgroup(GUI_CONVERT)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
menu(menuFtype)
@@ -79,7 +78,7 @@ recordtype(aai) {
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_HIST)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -89,27 +88,27 @@ recordtype(aai) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(SIOL,DBF_INLINK) {
prompt("Sim Input Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(MPST,DBF_MENU) {
prompt("Post Value Monitors")
promptgroup(GUI_DISPLAY)
interest(1)
menu(aaiPOST)
prompt("Post Value Monitors")
promptgroup("80 - Display")
interest(1)
menu(aaiPOST)
}
field(APST,DBF_MENU) {
prompt("Post Archive Monitors")
promptgroup(GUI_DISPLAY)
interest(1)
menu(aaiPOST)
}
prompt("Post Archive Monitors")
promptgroup("80 - Display")
interest(1)
menu(aaiPOST)
}
field(HASH,DBF_ULONG) {
prompt("Hash of OnChange data.")
interest(3)

View File

@@ -3,13 +3,12 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
menu(aaoPOST) {
choice(aaoPOST_Always,"Always")
choice(aaoPOST_OnChange,"On Change")
choice(aaoPOST_Always,"Always")
choice(aaoPOST_OnChange,"On Change")
}
recordtype(aao) {
include "dbCommon.dbd"
@@ -25,44 +24,44 @@ recordtype(aao) {
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_ALARMS)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
promptgroup(GUI_BITS1)
promptgroup("50 - Output")
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Engineering Units Name")
promptgroup(GUI_BITS2)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_CALC)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_CLOCK)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(NELM,DBF_ULONG) {
prompt("Number of Elements")
promptgroup(GUI_COMPRESS)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
initial("1")
}
field(FTVL,DBF_MENU) {
prompt("Field Type of Value")
promptgroup(GUI_CONVERT)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
menu(menuFtype)
@@ -79,7 +78,7 @@ recordtype(aao) {
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_HIST)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -89,27 +88,27 @@ recordtype(aao) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(SIOL,DBF_OUTLINK) {
prompt("Sim Output Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(MPST,DBF_MENU) {
prompt("Post Value Monitors")
promptgroup(GUI_DISPLAY)
interest(1)
menu(aaoPOST)
prompt("Post Value Monitors")
promptgroup("80 - Display")
interest(1)
menu(aaoPOST)
}
field(APST,DBF_MENU) {
prompt("Post Archive Monitors")
promptgroup(GUI_DISPLAY)
interest(1)
menu(aaoPOST)
}
prompt("Post Archive Monitors")
promptgroup("80 - Display")
interest(1)
menu(aaoPOST)
}
field(HASH,DBF_ULONG) {
prompt("Hash of OnChange data.")
interest(3)

View File

@@ -217,24 +217,24 @@ monitoring functionality.
include "dbCommon.dbd"
field(VAL,DBF_DOUBLE) {
prompt("Current EGU Value")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
asl(ASL0)
pp(TRUE)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
prop(YES)
}
field(LINR,DBF_MENU) {
prompt("Linearization")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
special(SPC_LINCONV)
pp(TRUE)
interest(1)
@@ -242,133 +242,133 @@ monitoring functionality.
}
field(EGUF,DBF_DOUBLE) {
prompt("Engineer Units Full")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
special(SPC_LINCONV)
pp(TRUE)
interest(1)
}
field(EGUL,DBF_DOUBLE) {
prompt("Engineer Units Low")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
special(SPC_LINCONV)
pp(TRUE)
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Engineering Units")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
prop(YES)
}
field(AOFF,DBF_DOUBLE) {
prompt("Adjustment Offset")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
pp(TRUE)
interest(1)
}
field(ASLO,DBF_DOUBLE) {
prompt("Adjustment Slope")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
pp(TRUE)
interest(1)
initial("1")
}
field(SMOO,DBF_DOUBLE) {
prompt("Smoothing")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
interest(1)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
menu(menuAlarmSevr)
}
field(HYST,DBF_DOUBLE) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(AFTC,DBF_DOUBLE) {
prompt("Alarm Filter Time Constant")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(ADEL,DBF_DOUBLE) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(MDEL,DBF_DOUBLE) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(LALM,DBF_DOUBLE) {
@@ -393,14 +393,14 @@ monitoring functionality.
}
field(ESLO,DBF_DOUBLE) {
prompt("Raw to EGU Slope")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
pp(TRUE)
interest(2)
initial("1")
}
field(EOFF,DBF_DOUBLE) {
prompt("Raw to EGU Offset")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
pp(TRUE)
interest(2)
}
@@ -469,7 +469,7 @@ simulation mode.
field(SIOL,DBF_INLINK) {
prompt("Sim. Input Specification")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SVAL,DBF_DOUBLE) {
@@ -477,7 +477,7 @@ simulation mode.
}
field(SIML,DBF_INLINK) {
prompt("Sim. Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -487,7 +487,7 @@ simulation mode.
}
field(SIMS,DBF_MENU) {
prompt("Simulation Mode Severity")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
@@ -610,7 +610,7 @@ values that the C<read_ai()> routine can put in the RVAL field.
When RVAL is set to I<RVAL_max> the VAL field will be set to EGUF, and when RVAL
is set to I<RVAL_min> the VAL field will become EGUL.
The fomulae to use are:
The formulae to use are:
=over

View File

@@ -273,7 +273,7 @@ information on these fields.
include "dbCommon.dbd"
field(VAL,DBF_DOUBLE) {
prompt("Desired Output")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
asl(ASL0)
pp(TRUE)
}
@@ -282,40 +282,40 @@ information on these fields.
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(OROC,DBF_DOUBLE) {
prompt("Output Rate of Change")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(DOL,DBF_INLINK) {
prompt("Desired Output Loc")
promptgroup(GUI_OUTPUT)
promptgroup("40 - Input")
interest(1)
}
field(OMSL,DBF_MENU) {
prompt("Output Mode Select")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
menu(menuOmsl)
}
field(OIF,DBF_MENU) {
prompt("Out Full/Incremental")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
menu(aoOIF)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
prop(YES)
}
field(LINR,DBF_MENU) {
prompt("Linearization")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
special(SPC_LINCONV)
pp(TRUE)
interest(1)
@@ -323,24 +323,24 @@ information on these fields.
}
field(EGUF,DBF_DOUBLE) {
prompt("Eng Units Full")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
special(SPC_LINCONV)
pp(TRUE)
interest(1)
}
field(EGUL,DBF_DOUBLE) {
prompt("Eng Units Low")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
special(SPC_LINCONV)
pp(TRUE)
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Engineering Units")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
prop(YES)
}
field(ROFF,DBF_ULONG) {
prompt("Raw Offset")
@@ -349,128 +349,128 @@ information on these fields.
}
field(EOFF,DBF_DOUBLE) {
prompt("EGU to Raw Offset")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
pp(TRUE)
interest(2)
}
field(ESLO,DBF_DOUBLE) {
prompt("EGU to Raw Slope")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
pp(TRUE)
interest(2)
initial("1")
}
field(DRVH,DBF_DOUBLE) {
prompt("Drive High Limit")
promptgroup(GUI_OUTPUT)
promptgroup("30 - Action")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
}
field(DRVL,DBF_DOUBLE) {
prompt("Drive Low Limit")
promptgroup(GUI_OUTPUT)
promptgroup("30 - Action")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
prop(YES)
}
field(AOFF,DBF_DOUBLE) {
prompt("Adjustment Offset")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
pp(TRUE)
interest(1)
}
field(ASLO,DBF_DOUBLE) {
prompt("Adjustment Slope")
promptgroup(GUI_CONVERT)
promptgroup("60 - Convert")
pp(TRUE)
interest(1)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
prop(YES)
menu(menuAlarmSevr)
}
field(HYST,DBF_DOUBLE) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(ADEL,DBF_DOUBLE) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(MDEL,DBF_DOUBLE) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(RVAL,DBF_LONG) {
@@ -529,12 +529,12 @@ information on these fields.
}
field(SIOL,DBF_OUTLINK) {
prompt("Sim Output Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -544,19 +544,19 @@ information on these fields.
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(IVOA,DBF_MENU) {
prompt("INVALID output action")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
menu(menuIvoa)
}
field(IVOV,DBF_DOUBLE) {
prompt("INVALID output value")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
}
field(OMOD,DBF_UCHAR) {

View File

@@ -3,47 +3,46 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(bi) {
include "dbCommon.dbd"
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(VAL,DBF_ENUM) {
prompt("Current Value")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
asl(ASL0)
pp(TRUE)
}
field(ZSV,DBF_MENU) {
prompt("Zero Error Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(OSV,DBF_MENU) {
prompt("One Error Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(COSV,DBF_MENU) {
prompt("Change of State Svr")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(ZNAM,DBF_STRING) {
prompt("Zero Name")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
pp(TRUE)
interest(1)
size(26)
@@ -51,7 +50,7 @@ recordtype(bi) {
}
field(ONAM,DBF_STRING) {
prompt("One Name")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
pp(TRUE)
interest(1)
size(26)
@@ -83,7 +82,7 @@ recordtype(bi) {
}
field(SIOL,DBF_INLINK) {
prompt("Sim Input Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SVAL,DBF_ULONG) {
@@ -91,7 +90,7 @@ recordtype(bi) {
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -101,7 +100,7 @@ recordtype(bi) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}

View File

@@ -3,42 +3,41 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(bo) {
include "dbCommon.dbd"
field(VAL,DBF_ENUM) {
prompt("Current Value")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
asl(ASL0)
pp(TRUE)
}
field(OMSL,DBF_MENU) {
prompt("Output Mode Select")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
menu(menuOmsl)
}
field(DOL,DBF_INLINK) {
prompt("Desired Output Loc")
promptgroup(GUI_OUTPUT)
promptgroup("40 - Input")
interest(1)
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(HIGH,DBF_DOUBLE) {
prompt("Seconds to Hold High")
promptgroup(GUI_OUTPUT)
promptgroup("30 - Action")
interest(1)
}
field(ZNAM,DBF_STRING) {
prompt("Zero Name")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
pp(TRUE)
interest(1)
size(26)
@@ -46,7 +45,7 @@ recordtype(bo) {
}
field(ONAM,DBF_STRING) {
prompt("One Name")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
pp(TRUE)
interest(1)
size(26)
@@ -80,21 +79,21 @@ recordtype(bo) {
}
field(ZSV,DBF_MENU) {
prompt("Zero Error Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(OSV,DBF_MENU) {
prompt("One Error Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(COSV,DBF_MENU) {
prompt("Change of State Sevr")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
@@ -120,12 +119,12 @@ recordtype(bo) {
}
field(SIOL,DBF_OUTLINK) {
prompt("Sim Output Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -135,19 +134,19 @@ recordtype(bo) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(IVOA,DBF_MENU) {
prompt("INVALID outpt action")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
menu(menuIvoa)
}
field(IVOV,DBF_USHORT) {
prompt("INVALID output value")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
}
}

View File

@@ -10,11 +10,12 @@ recordtype(calc) {
include "dbCommon.dbd"
field(VAL,DBF_DOUBLE) {
prompt("Result")
promptgroup("50 - Output")
asl(ASL0)
}
field(CALC,DBF_STRING) {
prompt("Calculation")
promptgroup(GUI_CALC)
promptgroup("30 - Action")
special(SPC_CALC)
pp(TRUE)
size(80)
@@ -22,120 +23,120 @@ recordtype(calc) {
}
field(INPA,DBF_INLINK) {
prompt("Input A")
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPB,DBF_INLINK) {
prompt("Input B")
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPC,DBF_INLINK) {
prompt("Input C")
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPD,DBF_INLINK) {
prompt("Input D")
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPE,DBF_INLINK) {
prompt("Input E")
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPF,DBF_INLINK) {
prompt("Input F")
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPG,DBF_INLINK) {
prompt("Input G")
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPH,DBF_INLINK) {
prompt("Input H")
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPI,DBF_INLINK) {
prompt("Input I")
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPJ,DBF_INLINK) {
prompt("Input J")
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPK,DBF_INLINK) {
prompt("Input K")
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPL,DBF_INLINK) {
prompt("Input L")
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Units Name")
promptgroup(GUI_DISPLAY)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Rng")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -143,7 +144,7 @@ recordtype(calc) {
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -151,7 +152,7 @@ recordtype(calc) {
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -159,35 +160,35 @@ recordtype(calc) {
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
menu(menuAlarmSevr)
}
field(AFTC, DBF_DOUBLE) {
prompt("Alarm Filter Time Constant")
promptgroup(GUI_ALARMS)
interest(1)
}
field(AFVL, DBF_DOUBLE) {
prompt("Alarm Filter Value")
special(SPC_NOMOD)
interest(3)
}
field(AFTC, DBF_DOUBLE) {
prompt("Alarm Filter Time Constant")
promptgroup("70 - Alarm")
interest(1)
}
field(AFVL, DBF_DOUBLE) {
prompt("Alarm Filter Value")
special(SPC_NOMOD)
interest(3)
}
field(HYST,DBF_DOUBLE) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(ADEL,DBF_DOUBLE) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(MDEL,DBF_DOUBLE) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(A,DBF_DOUBLE) {

View File

@@ -34,7 +34,7 @@ recordtype(calcout) {
}
field(VAL,DBF_DOUBLE) {
prompt("Result")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
asl(ASL0)
}
field(PVAL,DBF_DOUBLE) {
@@ -42,7 +42,7 @@ recordtype(calcout) {
}
field(CALC,DBF_STRING) {
prompt("Calculation")
promptgroup(GUI_CALC)
promptgroup("30 - Action")
special(SPC_CALC)
pp(TRUE)
size(80)
@@ -55,79 +55,79 @@ recordtype(calcout) {
field(INPA,DBF_INLINK) {
prompt("Input A")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPB,DBF_INLINK) {
prompt("Input B")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPC,DBF_INLINK) {
prompt("Input C")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPD,DBF_INLINK) {
prompt("Input D")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPE,DBF_INLINK) {
prompt("Input E")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPF,DBF_INLINK) {
prompt("Input F")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPG,DBF_INLINK) {
prompt("Input G")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPH,DBF_INLINK) {
prompt("Input H")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPI,DBF_INLINK) {
prompt("Input I")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPJ,DBF_INLINK) {
prompt("Input J")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPK,DBF_INLINK) {
prompt("Input K")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPL,DBF_INLINK) {
prompt("Input L")
special(SPC_MOD)
promptgroup(GUI_CALC)
promptgroup("42 - Input G-L")
interest(1)
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
special(SPC_MOD)
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(INAV,DBF_MENU) {
@@ -222,13 +222,13 @@ recordtype(calcout) {
}
field(OOPT,DBF_MENU) {
prompt("Output Execute Opt")
promptgroup(GUI_CALC)
promptgroup("50 - Output")
interest(1)
menu(calcoutOOPT)
}
field(ODLY,DBF_DOUBLE) {
prompt("Output Execute Delay")
promptgroup(GUI_ALARMS)
promptgroup("50 - Output")
asl(ASL0)
interest(1)
}
@@ -239,13 +239,13 @@ recordtype(calcout) {
}
field(DOPT,DBF_MENU) {
prompt("Output Data Opt")
promptgroup(GUI_CALC)
promptgroup("30 - Action")
interest(1)
menu(calcoutDOPT)
}
field(OCAL,DBF_STRING) {
prompt("Output Calculation")
promptgroup(GUI_CALC)
promptgroup("30 - Action")
special(SPC_CALC)
pp(TRUE)
size(80)
@@ -257,7 +257,7 @@ recordtype(calcout) {
}
field(OEVT,DBF_STRING) {
prompt("Event To Issue")
promptgroup(GUI_CLOCK)
promptgroup("30 - Action")
special(SPC_MOD)
asl(ASL0)
size(40)
@@ -271,71 +271,71 @@ recordtype(calcout) {
}
field(IVOA,DBF_MENU) {
prompt("INVALID output action")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
menu(menuIvoa)
}
field(IVOV,DBF_DOUBLE) {
prompt("INVALID output value")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
}
field(EGU,DBF_STRING) {
prompt("Units Name")
promptgroup(GUI_DISPLAY)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Rng")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -343,7 +343,7 @@ recordtype(calcout) {
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -351,7 +351,7 @@ recordtype(calcout) {
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -359,7 +359,7 @@ recordtype(calcout) {
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -367,17 +367,17 @@ recordtype(calcout) {
}
field(HYST,DBF_DOUBLE) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(ADEL,DBF_DOUBLE) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(MDEL,DBF_DOUBLE) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(A,DBF_DOUBLE) {

View File

@@ -60,7 +60,7 @@ recordtype(compress) {
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_COMPRESS)
promptgroup("40 - Input")
interest(1)
}
field(RES,DBF_SHORT) {
@@ -71,56 +71,56 @@ recordtype(compress) {
}
field(ALG,DBF_MENU) {
prompt("Compression Algorithm")
promptgroup(GUI_ALARMS)
promptgroup("30 - Action")
special(SPC_RESET)
interest(1)
menu(compressALG)
}
field(NSAM,DBF_ULONG) {
prompt("Number of Values")
promptgroup(GUI_COMPRESS)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
initial("1")
}
field(N,DBF_ULONG) {
prompt("N to 1 Compression")
promptgroup(GUI_COMPRESS)
promptgroup("30 - Action")
special(SPC_RESET)
interest(1)
initial("1")
}
field(IHIL,DBF_DOUBLE) {
prompt("Init High Interest Lim")
promptgroup(GUI_COMPRESS)
promptgroup("30 - Action")
interest(1)
}
field(ILIL,DBF_DOUBLE) {
prompt("Init Low Interest Lim")
promptgroup(GUI_COMPRESS)
promptgroup("30 - Action")
interest(1)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(EGU,DBF_STRING) {
prompt("EngineeringUnits")
promptgroup(GUI_DISPLAY)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)

View File

@@ -3,145 +3,145 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
menu(dfanoutSELM) {
choice(dfanoutSELM_All,"All")
choice(dfanoutSELM_Specified,"Specified")
choice(dfanoutSELM_Mask,"Mask")
choice(dfanoutSELM_All,"All")
choice(dfanoutSELM_Specified,"Specified")
choice(dfanoutSELM_Mask,"Mask")
}
recordtype(dfanout) {
include "dbCommon.dbd"
field(VAL,DBF_DOUBLE) {
prompt("Desired Output")
promptgroup("40 - Input")
asl(ASL0)
pp(TRUE)
}
field(SELM,DBF_MENU) {
prompt("Select Mechanism")
promptgroup(GUI_LINKS)
interest(1)
menu(dfanoutSELM)
}
field(SELN,DBF_USHORT) {
prompt("Link Selection")
interest(1)
initial("1")
}
field(SELL,DBF_INLINK) {
prompt("Link Selection Loc")
promptgroup(GUI_LINKS)
interest(1)
}
field(SELM,DBF_MENU) {
prompt("Select Mechanism")
promptgroup("30 - Action")
interest(1)
menu(dfanoutSELM)
}
field(SELN,DBF_USHORT) {
prompt("Link Selection")
interest(1)
initial("1")
}
field(SELL,DBF_INLINK) {
prompt("Link Selection Loc")
promptgroup("30 - Action")
interest(1)
}
field(OUTA,DBF_OUTLINK) {
prompt("Output Spec A")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(OUTB,DBF_OUTLINK) {
prompt("Output Spec B")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(OUTC,DBF_OUTLINK) {
prompt("Output Spec C")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(OUTD,DBF_OUTLINK) {
prompt("Output Spec D")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(OUTE,DBF_OUTLINK) {
prompt("Output Spec E")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(OUTF,DBF_OUTLINK) {
prompt("Output Spec F")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(OUTG,DBF_OUTLINK) {
prompt("Output Spec G")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(OUTH,DBF_OUTLINK) {
prompt("Output Spec H")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(DOL,DBF_INLINK) {
prompt("Desired Output Loc")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(OMSL,DBF_MENU) {
prompt("Output Mode Select")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
menu(menuOmsl)
}
field(EGU,DBF_STRING) {
prompt("Units name")
promptgroup(GUI_DISPLAY)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup("80 - Display")
interest(1)
prop(YES)
}
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -149,7 +149,7 @@ recordtype(dfanout) {
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -157,7 +157,7 @@ recordtype(dfanout) {
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -165,7 +165,7 @@ recordtype(dfanout) {
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -173,17 +173,17 @@ recordtype(dfanout) {
}
field(HYST,DBF_DOUBLE) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(ADEL,DBF_DOUBLE) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(MDEL,DBF_DOUBLE) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(LALM,DBF_DOUBLE) {

View File

@@ -3,15 +3,14 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(event) {
include "dbCommon.dbd"
field(VAL,DBF_STRING) {
prompt("Event Name To Post")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
special(SPC_MOD)
asl(ASL0)
size(40)
@@ -25,12 +24,12 @@ recordtype(event) {
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(SIOL,DBF_INLINK) {
prompt("Sim Input Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SVAL,DBF_STRING) {
@@ -39,7 +38,7 @@ recordtype(event) {
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -49,7 +48,7 @@ recordtype(event) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}

View File

@@ -20,7 +20,7 @@ recordtype(fanout) {
}
field(SELM,DBF_MENU) {
prompt("Select Mechanism")
promptgroup(GUI_LINKS)
promptgroup("30 - Action")
interest(1)
menu(fanoutSELM)
}
@@ -31,7 +31,7 @@ recordtype(fanout) {
}
field(SELL,DBF_INLINK) {
prompt("Link Selection Loc")
promptgroup(GUI_LINKS)
promptgroup("30 - Action")
interest(1)
}
field(OFFS,DBF_SHORT) {
@@ -46,82 +46,82 @@ recordtype(fanout) {
}
field(LNK0,DBF_FWDLINK) {
prompt("Forward Link 0")
promptgroup(GUI_LINKS)
promptgroup("51 - Output 0-7")
interest(1)
}
field(LNK1,DBF_FWDLINK) {
prompt("Forward Link 1")
promptgroup(GUI_LINKS)
promptgroup("51 - Output 0-7")
interest(1)
}
field(LNK2,DBF_FWDLINK) {
prompt("Forward Link 2")
promptgroup(GUI_LINKS)
promptgroup("51 - Output 0-7")
interest(1)
}
field(LNK3,DBF_FWDLINK) {
prompt("Forward Link 3")
promptgroup(GUI_LINKS)
promptgroup("51 - Output 0-7")
interest(1)
}
field(LNK4,DBF_FWDLINK) {
prompt("Forward Link 4")
promptgroup(GUI_LINKS)
promptgroup("51 - Output 0-7")
interest(1)
}
field(LNK5,DBF_FWDLINK) {
prompt("Forward Link 5")
promptgroup(GUI_LINKS)
promptgroup("51 - Output 0-7")
interest(1)
}
field(LNK6,DBF_FWDLINK) {
prompt("Forward Link 6")
promptgroup(GUI_LINKS)
promptgroup("51 - Output 0-7")
interest(1)
}
field(LNK7,DBF_FWDLINK) {
prompt("Forward Link 7")
promptgroup(GUI_LINKS)
promptgroup("51 - Output 0-7")
interest(1)
}
field(LNK8,DBF_FWDLINK) {
prompt("Forward Link 8")
promptgroup(GUI_LINKS)
promptgroup("52 - Output 8-F")
interest(1)
}
field(LNK9,DBF_FWDLINK) {
prompt("Forward Link 9")
promptgroup(GUI_LINKS)
promptgroup("52 - Output 8-F")
interest(1)
}
field(LNKA,DBF_FWDLINK) {
prompt("Forward Link 10")
promptgroup(GUI_LINKS)
promptgroup("52 - Output 8-F")
interest(1)
}
field(LNKB,DBF_FWDLINK) {
prompt("Forward Link 11")
promptgroup(GUI_LINKS)
promptgroup("52 - Output 8-F")
interest(1)
}
field(LNKC,DBF_FWDLINK) {
prompt("Forward Link 12")
promptgroup(GUI_LINKS)
promptgroup("52 - Output 8-F")
interest(1)
}
field(LNKD,DBF_FWDLINK) {
prompt("Forward Link 13")
promptgroup(GUI_LINKS)
promptgroup("52 - Output 8-F")
interest(1)
}
field(LNKE,DBF_FWDLINK) {
prompt("Forward Link 14")
promptgroup(GUI_LINKS)
promptgroup("52 - Output 8-F")
interest(1)
}
field(LNKF,DBF_FWDLINK) {
prompt("Forward Link 15")
promptgroup(GUI_LINKS)
promptgroup("52 - Output 8-F")
interest(1)
}
}

View File

@@ -3,9 +3,8 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
menu(histogramCMD) {
choice(histogramCMD_Read,"Read")
@@ -26,7 +25,7 @@ recordtype(histogram) {
}
field(NELM,DBF_USHORT) {
prompt("Num of Array Elements")
promptgroup(GUI_HIST)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
initial("1")
@@ -46,14 +45,14 @@ recordtype(histogram) {
}
field(ULIM,DBF_DOUBLE) {
prompt("Upper Signal Limit")
promptgroup(GUI_HIST)
promptgroup("30 - Action")
special(SPC_RESET)
interest(1)
prop(YES)
}
field(LLIM,DBF_DOUBLE) {
prompt("Lower Signal Limit ")
promptgroup(GUI_HIST)
promptgroup("30 - Action")
special(SPC_RESET)
interest(1)
prop(YES)
@@ -69,13 +68,13 @@ recordtype(histogram) {
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(SVL,DBF_INLINK) {
prompt("Signal Value Location")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(BPTR,DBF_NOACCESS) {
@@ -92,7 +91,7 @@ recordtype(histogram) {
}
field(MDEL,DBF_SHORT) {
prompt("Monitor Count Deadband")
promptgroup(GUI_HIST)
promptgroup("80 - Display")
interest(1)
}
field(MCNT,DBF_SHORT) {
@@ -102,13 +101,13 @@ recordtype(histogram) {
}
field(SDEL,DBF_DOUBLE) {
prompt("Monitor Seconds Dband")
promptgroup(GUI_HIST)
promptgroup("80 - Display")
special(SPC_RESET)
interest(1)
}
field(SIOL,DBF_INLINK) {
prompt("Sim Input Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SVAL,DBF_DOUBLE) {
@@ -116,7 +115,7 @@ recordtype(histogram) {
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -126,19 +125,19 @@ recordtype(histogram) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(HOPR,DBF_ULONG) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_ULONG) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}

View File

@@ -3,121 +3,120 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(longin) {
include "dbCommon.dbd"
field(VAL,DBF_LONG) {
prompt("Current value")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
asl(ASL0)
pp(TRUE)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Units name")
promptgroup(GUI_DISPLAY)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(HOPR,DBF_LONG) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_LONG) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(HIHI,DBF_LONG) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOLO,DBF_LONG) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HIGH,DBF_LONG) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOW,DBF_LONG) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(HYST,DBF_LONG) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(AFTC, DBF_DOUBLE) {
prompt("Alarm Filter Time Constant")
promptgroup(GUI_ALARMS)
interest(1)
prompt("Alarm Filter Time Constant")
promptgroup("70 - Alarm")
interest(1)
}
field(AFVL, DBF_DOUBLE) {
prompt("Alarm Filter Value")
special(SPC_NOMOD)
interest(3)
prompt("Alarm Filter Value")
special(SPC_NOMOD)
interest(3)
}
field(ADEL,DBF_LONG) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(MDEL,DBF_LONG) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(LALM,DBF_LONG) {
@@ -137,7 +136,7 @@ recordtype(longin) {
}
field(SIOL,DBF_INLINK) {
prompt("Sim Input Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SVAL,DBF_LONG) {
@@ -145,7 +144,7 @@ recordtype(longin) {
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -155,7 +154,7 @@ recordtype(longin) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}

View File

@@ -3,136 +3,135 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(longout) {
include "dbCommon.dbd"
field(VAL,DBF_LONG) {
prompt("Desired Output")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
asl(ASL0)
pp(TRUE)
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(DOL,DBF_INLINK) {
prompt("Desired Output Loc")
promptgroup(GUI_OUTPUT)
promptgroup("40 - Input")
interest(1)
}
field(OMSL,DBF_MENU) {
prompt("Output Mode Select")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
menu(menuOmsl)
}
field(EGU,DBF_STRING) {
prompt("Units name")
promptgroup(GUI_DISPLAY)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(DRVH,DBF_LONG) {
prompt("Drive High Limit")
promptgroup(GUI_OUTPUT)
promptgroup("30 - Action")
pp(TRUE)
interest(1)
prop(YES)
}
field(DRVL,DBF_LONG) {
prompt("Drive Low Limit")
promptgroup(GUI_OUTPUT)
promptgroup("30 - Action")
pp(TRUE)
interest(1)
prop(YES)
}
field(HOPR,DBF_LONG) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_LONG) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(HIHI,DBF_LONG) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOLO,DBF_LONG) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HIGH,DBF_LONG) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOW,DBF_LONG) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(HYST,DBF_LONG) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(ADEL,DBF_LONG) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(MDEL,DBF_LONG) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(LALM,DBF_LONG) {
@@ -152,12 +151,12 @@ recordtype(longout) {
}
field(SIOL,DBF_OUTLINK) {
prompt("Sim Output Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -167,19 +166,19 @@ recordtype(longout) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(IVOA,DBF_MENU) {
prompt("INVALID output action")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
menu(menuIvoa)
}
field(IVOV,DBF_LONG) {
prompt("INVALID output value")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
}
}

View File

@@ -158,9 +158,10 @@ static long put_array_info(DBADDR *paddr, long nNew)
{
lsiRecord *prec = (lsiRecord *) paddr->precord;
if (nNew == prec->sizv)
--nNew; /* truncated string */
prec->val[nNew] = 0; /* ensure data is terminated */
if (nNew >= prec->sizv)
nNew = prec->sizv - 1; /* truncated string */
if (paddr->field_type == DBF_CHAR)
prec->val[nNew] = 0; /* ensure data is terminated */
return 0;
}

View File

@@ -34,7 +34,7 @@ recordtype(lsi) {
}
field(SIZV,DBF_USHORT) {
prompt("Size of buffers")
promptgroup(GUI_OUTPUT)
promptgroup("40 - Input")
special(SPC_NOMOD)
interest(1)
initial("41")
@@ -49,24 +49,24 @@ recordtype(lsi) {
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(MPST,DBF_MENU) {
prompt("Post Value Monitors")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
menu(menuPost)
}
field(APST,DBF_MENU) {
prompt("Post Archive Monitors")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
menu(menuPost)
}
field(SIML,DBF_INLINK) {
prompt("Simulation Mode Link")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
}
field(SIMM,DBF_MENU) {
@@ -76,13 +76,13 @@ recordtype(lsi) {
}
field(SIMS,DBF_MENU) {
prompt("Simulation Mode Severity")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(SIOL,DBF_INLINK) {
prompt("Sim Input Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
}
}

View File

@@ -200,9 +200,10 @@ static long put_array_info(DBADDR *paddr, long nNew)
{
lsoRecord *prec = (lsoRecord *) paddr->precord;
if (nNew == prec->sizv)
--nNew; /* truncated string */
prec->val[nNew] = 0; /* ensure data is terminated */
if (nNew >= prec->sizv)
nNew = prec->sizv - 1; /* truncated string */
if (paddr->field_type == DBF_CHAR)
prec->val[nNew] = 0; /* ensure data is terminated */
return 0;
}

View File

@@ -34,7 +34,7 @@ recordtype(lso) {
}
field(SIZV,DBF_USHORT) {
prompt("Size of buffers")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
special(SPC_NOMOD)
interest(1)
initial("41")
@@ -50,47 +50,47 @@ recordtype(lso) {
}
field(DOL,DBF_INLINK) {
prompt("Desired Output Link")
promptgroup(GUI_OUTPUT)
promptgroup("40 - Input")
interest(1)
}
field(IVOA,DBF_MENU) {
prompt("INVALID Output Action")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
menu(menuIvoa)
}
field(IVOV,DBF_STRING) {
prompt("INVALID Output Value")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
size(40)
}
field(OMSL,DBF_MENU) {
prompt("Output Mode Select")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
menu(menuOmsl)
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(MPST,DBF_MENU) {
prompt("Post Value Monitors")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
menu(menuPost)
}
field(APST,DBF_MENU) {
prompt("Post Archive Monitors")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
menu(menuPost)
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode link")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -100,13 +100,13 @@ recordtype(lso) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(SIOL,DBF_OUTLINK) {
prompt("Sim Output Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
}

View File

@@ -120,9 +120,9 @@ static long init_record(mbbiDirectRecord *prec, int pass)
if (prec->siol.type == CONSTANT)
recGblInitConstantLink(&prec->siol, DBF_USHORT, &prec->sval);
/* Initialize MASK if the user didn't */
if (prec->mask == 0)
prec->mask = (1 << prec->nobt) - 1;
/* Initialize MASK if the user set NOBT instead */
if (prec->mask == 0 && prec->nobt <= 32)
prec->mask = ((epicsUInt64) 1u << prec->nobt) - 1;
if (pdset->init_record) {
status = pdset->init_record(prec);

View File

@@ -10,19 +10,19 @@ recordtype(mbbiDirect) {
include "dbCommon.dbd"
field(VAL,DBF_USHORT) {
prompt("Current Value")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
asl(ASL0)
pp(TRUE)
}
field(NOBT,DBF_SHORT) {
prompt("Number of Bits")
promptgroup(GUI_MBB)
promptgroup("40 - Input")
special(SPC_NOMOD)
interest(1)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_MBB)
promptgroup("40 - Input")
interest(1)
}
field(RVAL,DBF_ULONG) {
@@ -46,12 +46,12 @@ recordtype(mbbiDirect) {
}
field(SHFT,DBF_USHORT) {
prompt("Shift")
promptgroup(GUI_MBB)
promptgroup("40 - Input")
interest(1)
}
field(SIOL,DBF_INLINK) {
prompt("Sim Input Specifctn")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(1)
}
field(SVAL,DBF_ULONG) {
@@ -59,7 +59,7 @@ recordtype(mbbiDirect) {
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -69,7 +69,7 @@ recordtype(mbbiDirect) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}

View File

@@ -137,9 +137,9 @@ static long init_record(mbbiRecord *prec, int pass)
if (prec->siol.type == CONSTANT)
recGblInitConstantLink(&prec->siol, DBF_USHORT, &prec->sval);
/* Initialize MASK if the user didn't */
if (prec->mask == 0)
prec->mask = (1 << prec->nobt) - 1;
/* Initialize MASK if the user set NOBT instead */
if (prec->mask == 0 && prec->nobt <= 32)
prec->mask = ((epicsUInt64) 1u << prec->nobt) - 1;
if (pdset->init_record)
status = pdset->init_record(prec);

View File

@@ -3,32 +3,31 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(mbbi) {
include "dbCommon.dbd"
field(VAL,DBF_ENUM) {
prompt("Current Value")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
asl(ASL0)
pp(TRUE)
}
field(NOBT,DBF_SHORT) {
field(NOBT,DBF_USHORT) {
prompt("Number of Bits")
promptgroup(GUI_MBB)
promptgroup("40 - Input")
special(SPC_NOMOD)
interest(1)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_MBB)
promptgroup("40 - Input")
interest(1)
}
field(ZRVL,DBF_ULONG) {
prompt("Zero Value")
promptgroup(GUI_BITS1)
promptgroup("41 - Input 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -36,7 +35,7 @@ recordtype(mbbi) {
}
field(ONVL,DBF_ULONG) {
prompt("One Value")
promptgroup(GUI_BITS1)
promptgroup("41 - Input 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -44,7 +43,7 @@ recordtype(mbbi) {
}
field(TWVL,DBF_ULONG) {
prompt("Two Value")
promptgroup(GUI_BITS1)
promptgroup("41 - Input 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -52,7 +51,7 @@ recordtype(mbbi) {
}
field(THVL,DBF_ULONG) {
prompt("Three Value")
promptgroup(GUI_BITS1)
promptgroup("41 - Input 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -60,7 +59,7 @@ recordtype(mbbi) {
}
field(FRVL,DBF_ULONG) {
prompt("Four Value")
promptgroup(GUI_BITS1)
promptgroup("41 - Input 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -68,7 +67,7 @@ recordtype(mbbi) {
}
field(FVVL,DBF_ULONG) {
prompt("Five Value")
promptgroup(GUI_BITS1)
promptgroup("41 - Input 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -76,7 +75,7 @@ recordtype(mbbi) {
}
field(SXVL,DBF_ULONG) {
prompt("Six Value")
promptgroup(GUI_BITS1)
promptgroup("41 - Input 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -84,7 +83,7 @@ recordtype(mbbi) {
}
field(SVVL,DBF_ULONG) {
prompt("Seven Value")
promptgroup(GUI_BITS1)
promptgroup("41 - Input 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -92,7 +91,7 @@ recordtype(mbbi) {
}
field(EIVL,DBF_ULONG) {
prompt("Eight Value")
promptgroup(GUI_BITS2)
promptgroup("42 - Input 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -100,7 +99,7 @@ recordtype(mbbi) {
}
field(NIVL,DBF_ULONG) {
prompt("Nine Value")
promptgroup(GUI_BITS2)
promptgroup("42 - Input 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -108,7 +107,7 @@ recordtype(mbbi) {
}
field(TEVL,DBF_ULONG) {
prompt("Ten Value")
promptgroup(GUI_BITS2)
promptgroup("42 - Input 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -116,7 +115,7 @@ recordtype(mbbi) {
}
field(ELVL,DBF_ULONG) {
prompt("Eleven Value")
promptgroup(GUI_BITS2)
promptgroup("42 - Input 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -124,7 +123,7 @@ recordtype(mbbi) {
}
field(TVVL,DBF_ULONG) {
prompt("Twelve Value")
promptgroup(GUI_BITS2)
promptgroup("42 - Input 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -132,7 +131,7 @@ recordtype(mbbi) {
}
field(TTVL,DBF_ULONG) {
prompt("Thirteen Value")
promptgroup(GUI_BITS2)
promptgroup("42 - Input 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -140,7 +139,7 @@ recordtype(mbbi) {
}
field(FTVL,DBF_ULONG) {
prompt("Fourteen Value")
promptgroup(GUI_BITS2)
promptgroup("42 - Input 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -148,7 +147,7 @@ recordtype(mbbi) {
}
field(FFVL,DBF_ULONG) {
prompt("Fifteen Value")
promptgroup(GUI_BITS2)
promptgroup("42 - Input 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -156,7 +155,7 @@ recordtype(mbbi) {
}
field(ZRST,DBF_STRING) {
prompt("Zero String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -164,7 +163,7 @@ recordtype(mbbi) {
}
field(ONST,DBF_STRING) {
prompt("One String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -172,7 +171,7 @@ recordtype(mbbi) {
}
field(TWST,DBF_STRING) {
prompt("Two String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -180,7 +179,7 @@ recordtype(mbbi) {
}
field(THST,DBF_STRING) {
prompt("Three String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -188,7 +187,7 @@ recordtype(mbbi) {
}
field(FRST,DBF_STRING) {
prompt("Four String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -196,7 +195,7 @@ recordtype(mbbi) {
}
field(FVST,DBF_STRING) {
prompt("Five String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -204,7 +203,7 @@ recordtype(mbbi) {
}
field(SXST,DBF_STRING) {
prompt("Six String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -212,7 +211,7 @@ recordtype(mbbi) {
}
field(SVST,DBF_STRING) {
prompt("Seven String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -220,7 +219,7 @@ recordtype(mbbi) {
}
field(EIST,DBF_STRING) {
prompt("Eight String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -228,7 +227,7 @@ recordtype(mbbi) {
}
field(NIST,DBF_STRING) {
prompt("Nine String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -236,7 +235,7 @@ recordtype(mbbi) {
}
field(TEST,DBF_STRING) {
prompt("Ten String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -244,7 +243,7 @@ recordtype(mbbi) {
}
field(ELST,DBF_STRING) {
prompt("Eleven String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -252,7 +251,7 @@ recordtype(mbbi) {
}
field(TVST,DBF_STRING) {
prompt("Twelve String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -260,7 +259,7 @@ recordtype(mbbi) {
}
field(TTST,DBF_STRING) {
prompt("Thirteen String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -268,7 +267,7 @@ recordtype(mbbi) {
}
field(FTST,DBF_STRING) {
prompt("Fourteen String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -276,7 +275,7 @@ recordtype(mbbi) {
}
field(FFST,DBF_STRING) {
prompt("Fifteen String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -284,136 +283,136 @@ recordtype(mbbi) {
}
field(ZRSV,DBF_MENU) {
prompt("State Zero Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(ONSV,DBF_MENU) {
prompt("State One Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(TWSV,DBF_MENU) {
prompt("State Two Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(THSV,DBF_MENU) {
prompt("State Three Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(FRSV,DBF_MENU) {
prompt("State Four Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(FVSV,DBF_MENU) {
prompt("State Five Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(SXSV,DBF_MENU) {
prompt("State Six Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(SVSV,DBF_MENU) {
prompt("State Seven Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(EISV,DBF_MENU) {
prompt("State Eight Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(NISV,DBF_MENU) {
prompt("State Nine Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(TESV,DBF_MENU) {
prompt("State Ten Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(ELSV,DBF_MENU) {
prompt("State Eleven Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(TVSV,DBF_MENU) {
prompt("State Twelve Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(TTSV,DBF_MENU) {
prompt("State Thirteen Sevr")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(FTSV,DBF_MENU) {
prompt("State Fourteen Sevr")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(FFSV,DBF_MENU) {
prompt("State Fifteen Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(AFTC, DBF_DOUBLE) {
prompt("Alarm Filter Time Constant")
promptgroup(GUI_ALARMS)
interest(1)
}
field(AFVL, DBF_DOUBLE) {
prompt("Alarm Filter Value")
special(SPC_NOMOD)
interest(3)
}
field(AFTC, DBF_DOUBLE) {
prompt("Alarm Filter Time Constant")
promptgroup("70 - Alarm")
interest(1)
}
field(AFVL, DBF_DOUBLE) {
prompt("Alarm Filter Value")
special(SPC_NOMOD)
interest(3)
}
field(UNSV,DBF_MENU) {
prompt("Unknown State Severity")
promptgroup(GUI_MBB)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(COSV,DBF_MENU) {
prompt("Change of State Svr")
promptgroup(GUI_MBB)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
@@ -449,12 +448,12 @@ recordtype(mbbi) {
}
field(SHFT,DBF_USHORT) {
prompt("Shift")
promptgroup(GUI_MBB)
promptgroup("40 - Input")
interest(1)
}
field(SIOL,DBF_INLINK) {
prompt("Sim Input Specifctn")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(1)
}
field(SVAL,DBF_ULONG) {
@@ -462,7 +461,7 @@ recordtype(mbbi) {
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -472,7 +471,7 @@ recordtype(mbbi) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}

View File

@@ -123,9 +123,9 @@ static long init_record(mbboDirectRecord *prec, int pass)
if (recGblInitConstantLink(&prec->dol, DBF_USHORT, &prec->val))
prec->udf = FALSE;
/* Initialize MASK if the user didn't */
if (prec->mask == 0)
prec->mask = (1 << prec->nobt) - 1;
/* Initialize MASK if the user set NOBT instead */
if (prec->mask == 0 && prec->nobt <= 32)
prec->mask = ((epicsUInt64) 1u << prec->nobt) - 1;
if (pdset->init_record) {
status = pdset->init_record(prec);

View File

@@ -10,13 +10,13 @@ recordtype(mbboDirect) {
include "dbCommon.dbd"
field(VAL,DBF_USHORT) {
prompt("Word")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
asl(ASL0)
pp(TRUE)
}
field(OMSL,DBF_MENU) {
prompt("Output Mode Select")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
special(SPC_RESET)
pp(TRUE)
interest(1)
@@ -24,128 +24,128 @@ recordtype(mbboDirect) {
}
field(NOBT,DBF_SHORT) {
prompt("Number of Bits")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
special(SPC_NOMOD)
interest(1)
}
field(DOL,DBF_INLINK) {
prompt("Desired Output Loc")
promptgroup(GUI_MBB)
promptgroup("40 - Input")
interest(1)
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
interest(1)
}
field(B0,DBF_UCHAR) {
prompt("Bit 0")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B1,DBF_UCHAR) {
prompt("Bit 1")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B2,DBF_UCHAR) {
prompt("Bit 2")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B3,DBF_UCHAR) {
prompt("Bit 3")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B4,DBF_UCHAR) {
prompt("Bit 4")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B5,DBF_UCHAR) {
prompt("Bit 5")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B6,DBF_UCHAR) {
prompt("Bit 6")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B7,DBF_UCHAR) {
prompt("Bit 7")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B8,DBF_UCHAR) {
prompt("Bit 8")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 9-F")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B9,DBF_UCHAR) {
prompt("Bit 9")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 9-F")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BA,DBF_UCHAR) {
prompt("Bit 10")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 9-F")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BB,DBF_UCHAR) {
prompt("Bit 11")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 9-F")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BC,DBF_UCHAR) {
prompt("Bit 12")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 9-F")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BD,DBF_UCHAR) {
prompt("Bit 13")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 9-F")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BE,DBF_UCHAR) {
prompt("Bit 14")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 9-F")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BF,DBF_UCHAR) {
prompt("Bit 15")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 9-F")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -181,17 +181,17 @@ recordtype(mbboDirect) {
}
field(SHFT,DBF_ULONG) {
prompt("Shift")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
interest(1)
}
field(SIOL,DBF_OUTLINK) {
prompt("Sim Output Specifctn")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(1)
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -201,19 +201,19 @@ recordtype(mbboDirect) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(IVOA,DBF_MENU) {
prompt("INVALID outpt action")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
interest(2)
menu(menuIvoa)
}
field(IVOV,DBF_USHORT) {
prompt("INVALID output value")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
interest(2)
}
}

View File

@@ -143,9 +143,9 @@ static long init_record(mbboRecord *prec, int pass)
if (recGblInitConstantLink(&prec->dol, DBF_USHORT, &prec->val))
prec->udf = FALSE;
/* Initialize MASK if the user didn't */
if (prec->mask == 0)
prec->mask = (1 << prec->nobt) - 1;
/* Initialize MASK if the user set NOBT instead */
if (prec->mask == 0 && prec->nobt <= 32)
prec->mask = ((epicsUInt64) 1u << prec->nobt) - 1;
if (pdset->init_record) {
status = pdset->init_record(prec);

View File

@@ -3,15 +3,14 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(mbbo) {
include "dbCommon.dbd"
field(VAL,DBF_ENUM) {
prompt("Desired Value")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
special(SPC_DBADDR)
asl(ASL0)
pp(TRUE)
@@ -20,29 +19,29 @@ recordtype(mbbo) {
}
field(DOL,DBF_INLINK) {
prompt("Desired Output Loc")
promptgroup(GUI_MBB)
promptgroup("40 - Input")
interest(1)
}
field(OMSL,DBF_MENU) {
prompt("Output Mode Select")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
interest(1)
menu(menuOmsl)
}
field(NOBT,DBF_SHORT) {
field(NOBT,DBF_USHORT) {
prompt("Number of Bits")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
special(SPC_NOMOD)
interest(1)
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
interest(1)
}
field(ZRVL,DBF_ULONG) {
prompt("Zero Value")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -50,7 +49,7 @@ recordtype(mbbo) {
}
field(ONVL,DBF_ULONG) {
prompt("One Value")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -58,7 +57,7 @@ recordtype(mbbo) {
}
field(TWVL,DBF_ULONG) {
prompt("Two Value")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -66,7 +65,7 @@ recordtype(mbbo) {
}
field(THVL,DBF_ULONG) {
prompt("Three Value")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -74,7 +73,7 @@ recordtype(mbbo) {
}
field(FRVL,DBF_ULONG) {
prompt("Four Value")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -82,7 +81,7 @@ recordtype(mbbo) {
}
field(FVVL,DBF_ULONG) {
prompt("Five Value")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -90,7 +89,7 @@ recordtype(mbbo) {
}
field(SXVL,DBF_ULONG) {
prompt("Six Value")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -98,7 +97,7 @@ recordtype(mbbo) {
}
field(SVVL,DBF_ULONG) {
prompt("Seven Value")
promptgroup(GUI_BITS1)
promptgroup("51 - Output 0-7")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -106,7 +105,7 @@ recordtype(mbbo) {
}
field(EIVL,DBF_ULONG) {
prompt("Eight Value")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -114,7 +113,7 @@ recordtype(mbbo) {
}
field(NIVL,DBF_ULONG) {
prompt("Nine Value")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -122,7 +121,7 @@ recordtype(mbbo) {
}
field(TEVL,DBF_ULONG) {
prompt("Ten Value")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -130,7 +129,7 @@ recordtype(mbbo) {
}
field(ELVL,DBF_ULONG) {
prompt("Eleven Value")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -138,7 +137,7 @@ recordtype(mbbo) {
}
field(TVVL,DBF_ULONG) {
prompt("Twelve Value")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -146,7 +145,7 @@ recordtype(mbbo) {
}
field(TTVL,DBF_ULONG) {
prompt("Thirteen Value")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -154,7 +153,7 @@ recordtype(mbbo) {
}
field(FTVL,DBF_ULONG) {
prompt("Fourteen Value")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -162,7 +161,7 @@ recordtype(mbbo) {
}
field(FFVL,DBF_ULONG) {
prompt("Fifteen Value")
promptgroup(GUI_BITS2)
promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
base(HEX)
@@ -170,7 +169,7 @@ recordtype(mbbo) {
}
field(ZRST,DBF_STRING) {
prompt("Zero String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -178,7 +177,7 @@ recordtype(mbbo) {
}
field(ONST,DBF_STRING) {
prompt("One String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -186,7 +185,7 @@ recordtype(mbbo) {
}
field(TWST,DBF_STRING) {
prompt("Two String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -194,7 +193,7 @@ recordtype(mbbo) {
}
field(THST,DBF_STRING) {
prompt("Three String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -202,7 +201,7 @@ recordtype(mbbo) {
}
field(FRST,DBF_STRING) {
prompt("Four String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -210,7 +209,7 @@ recordtype(mbbo) {
}
field(FVST,DBF_STRING) {
prompt("Five String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -218,7 +217,7 @@ recordtype(mbbo) {
}
field(SXST,DBF_STRING) {
prompt("Six String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -226,7 +225,7 @@ recordtype(mbbo) {
}
field(SVST,DBF_STRING) {
prompt("Seven String")
promptgroup(GUI_BITS1)
promptgroup("81 - Display 0-7")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -234,7 +233,7 @@ recordtype(mbbo) {
}
field(EIST,DBF_STRING) {
prompt("Eight String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -242,7 +241,7 @@ recordtype(mbbo) {
}
field(NIST,DBF_STRING) {
prompt("Nine String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -250,7 +249,7 @@ recordtype(mbbo) {
}
field(TEST,DBF_STRING) {
prompt("Ten String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -258,7 +257,7 @@ recordtype(mbbo) {
}
field(ELST,DBF_STRING) {
prompt("Eleven String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -266,7 +265,7 @@ recordtype(mbbo) {
}
field(TVST,DBF_STRING) {
prompt("Twelve String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -274,7 +273,7 @@ recordtype(mbbo) {
}
field(TTST,DBF_STRING) {
prompt("Thirteen String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -282,7 +281,7 @@ recordtype(mbbo) {
}
field(FTST,DBF_STRING) {
prompt("Fourteen String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -290,7 +289,7 @@ recordtype(mbbo) {
}
field(FFST,DBF_STRING) {
prompt("Fifteen String")
promptgroup(GUI_BITS2)
promptgroup("82 - Display 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
@@ -298,126 +297,126 @@ recordtype(mbbo) {
}
field(ZRSV,DBF_MENU) {
prompt("State Zero Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(ONSV,DBF_MENU) {
prompt("State One Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(TWSV,DBF_MENU) {
prompt("State Two Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(THSV,DBF_MENU) {
prompt("State Three Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(FRSV,DBF_MENU) {
prompt("State Four Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(FVSV,DBF_MENU) {
prompt("State Five Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(SXSV,DBF_MENU) {
prompt("State Six Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(SVSV,DBF_MENU) {
prompt("State Seven Severity")
promptgroup(GUI_BITS1)
promptgroup("71 - Alarm 0-7")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(EISV,DBF_MENU) {
prompt("State Eight Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(NISV,DBF_MENU) {
prompt("State Nine Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(TESV,DBF_MENU) {
prompt("State Ten Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(ELSV,DBF_MENU) {
prompt("State Eleven Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(TVSV,DBF_MENU) {
prompt("State Twelve Severity")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(TTSV,DBF_MENU) {
prompt("State Thirteen Sevr")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(FTSV,DBF_MENU) {
prompt("State Fourteen Sevr")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(FFSV,DBF_MENU) {
prompt("State Fifteen Sevr")
promptgroup(GUI_BITS2)
promptgroup("72 - Alarm 8-15")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(UNSV,DBF_MENU) {
prompt("Unknown State Sevr")
promptgroup(GUI_MBB)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(COSV,DBF_MENU) {
prompt("Change of State Sevr")
promptgroup(GUI_MBB)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
@@ -462,17 +461,17 @@ recordtype(mbbo) {
}
field(SHFT,DBF_USHORT) {
prompt("Shift")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
interest(1)
}
field(SIOL,DBF_OUTLINK) {
prompt("Sim Output Specifctn")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(1)
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -482,19 +481,19 @@ recordtype(mbbo) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_MBB)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(IVOA,DBF_MENU) {
prompt("INVALID outpt action")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
interest(2)
menu(menuIvoa)
}
field(IVOV,DBF_USHORT) {
prompt("INVALID output value")
promptgroup(GUI_MBB)
promptgroup("50 - Output")
interest(2)
}
}

View File

@@ -3,21 +3,21 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(permissive) {
include "dbCommon.dbd"
field(LABL,DBF_STRING) {
prompt("Button Label")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
pp(TRUE)
interest(1)
size(20)
}
field(VAL,DBF_USHORT) {
prompt("Status")
promptgroup("40 - Input")
asl(ASL0)
pp(TRUE)
}

View File

@@ -28,7 +28,7 @@ recordtype(printf) {
}
field(SIZV,DBF_USHORT) {
prompt("Size of VAL buffer")
promptgroup(GUI_OUTPUT)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
initial("41")
@@ -39,69 +39,69 @@ recordtype(printf) {
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(FMT,DBF_STRING) {
prompt("Format String")
promptgroup(GUI_CALC)
promptgroup("30 - Action")
pp(TRUE)
size(81)
}
field(IVLS,DBF_STRING) {
prompt("Invalid Link String")
promptgroup(GUI_CALC)
promptgroup("30 - Action")
size(16)
initial("LNK")
}
field(INP0,DBF_INLINK) {
prompt("Input 0")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(INP1,DBF_INLINK) {
prompt("Input 1")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(INP2,DBF_INLINK) {
prompt("Input 2")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(INP3,DBF_INLINK) {
prompt("Input 3")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(INP4,DBF_INLINK) {
prompt("Input 4")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(INP5,DBF_INLINK) {
prompt("Input 5")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(INP6,DBF_INLINK) {
prompt("Input 6")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(INP7,DBF_INLINK) {
prompt("Input 7")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(INP8,DBF_INLINK) {
prompt("Input 8")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(INP9,DBF_INLINK) {
prompt("Input 9")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
%/* Number of INPx fields defined */

View File

@@ -3,9 +3,8 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
menu(selSELM) {
choice(selSELM_Specified,"Specified")
@@ -17,12 +16,13 @@ recordtype(sel) {
include "dbCommon.dbd"
field(VAL,DBF_DOUBLE) {
prompt("Result")
promptgroup("40 - Input")
asl(ASL0)
special(SPC_NOMOD)
}
field(SELM,DBF_MENU) {
prompt("Select Mechanism")
promptgroup(GUI_INPUTS)
promptgroup("30 - Action")
menu(selSELM)
}
field(SELN,DBF_USHORT) {
@@ -30,124 +30,124 @@ recordtype(sel) {
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(NVL,DBF_INLINK) {
prompt("Index Value Location")
promptgroup(GUI_INPUTS)
promptgroup("30 - Action")
interest(1)
}
field(INPA,DBF_INLINK) {
prompt("Input A")
promptgroup(GUI_SELECT)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPB,DBF_INLINK) {
prompt("Input B")
promptgroup(GUI_SELECT)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPC,DBF_INLINK) {
prompt("Input C")
promptgroup(GUI_SELECT)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPD,DBF_INLINK) {
prompt("Input D")
promptgroup(GUI_SELECT)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPE,DBF_INLINK) {
prompt("Input E")
promptgroup(GUI_SELECT)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPF,DBF_INLINK) {
prompt("Input F")
promptgroup(GUI_SELECT)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPG,DBF_INLINK) {
prompt("Input G")
promptgroup(GUI_SELECT)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPH,DBF_INLINK) {
prompt("Input H")
promptgroup(GUI_SELECT)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPI,DBF_INLINK) {
prompt("Input I")
promptgroup(GUI_SELECT)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPJ,DBF_INLINK) {
prompt("Input J")
promptgroup(GUI_SELECT)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPK,DBF_INLINK) {
prompt("Input K")
promptgroup(GUI_SELECT)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPL,DBF_INLINK) {
prompt("Input L")
promptgroup(GUI_SELECT)
promptgroup("42 - Input G-L")
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Units Name")
promptgroup(GUI_DISPLAY)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Rng")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -155,7 +155,7 @@ recordtype(sel) {
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -163,7 +163,7 @@ recordtype(sel) {
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -171,7 +171,7 @@ recordtype(sel) {
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -179,17 +179,17 @@ recordtype(sel) {
}
field(HYST,DBF_DOUBLE) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(ADEL,DBF_DOUBLE) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(MDEL,DBF_DOUBLE) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(A,DBF_DOUBLE) {

View File

@@ -20,7 +20,7 @@ recordtype(seq) {
}
field(SELM,DBF_MENU) {
prompt("Select Mechanism")
promptgroup(GUI_INPUTS)
promptgroup("30 - Action")
interest(1)
menu(seqSELM)
}
@@ -31,7 +31,7 @@ recordtype(seq) {
}
field(SELL,DBF_INLINK) {
prompt("Link Selection Loc")
promptgroup(GUI_INPUTS)
promptgroup("30 - Action")
interest(1)
}
field(OFFS,DBF_SHORT) {
@@ -50,17 +50,17 @@ recordtype(seq) {
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(DLY0,DBF_DOUBLE) {
prompt("Delay 0")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DOL0,DBF_INLINK) {
prompt("Input link 0")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DO0,DBF_DOUBLE) {
@@ -69,17 +69,17 @@ recordtype(seq) {
}
field(LNK0,DBF_OUTLINK) {
prompt("Output Link 0")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DLY1,DBF_DOUBLE) {
prompt("Delay 1")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DOL1,DBF_INLINK) {
prompt("Input link1")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DO1,DBF_DOUBLE) {
@@ -88,17 +88,17 @@ recordtype(seq) {
}
field(LNK1,DBF_OUTLINK) {
prompt("Output Link 1")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DLY2,DBF_DOUBLE) {
prompt("Delay 2")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DOL2,DBF_INLINK) {
prompt("Input link 2")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DO2,DBF_DOUBLE) {
@@ -107,17 +107,17 @@ recordtype(seq) {
}
field(LNK2,DBF_OUTLINK) {
prompt("Output Link 2")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DLY3,DBF_DOUBLE) {
prompt("Delay 3")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DOL3,DBF_INLINK) {
prompt("Input link 3")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DO3,DBF_DOUBLE) {
@@ -126,17 +126,17 @@ recordtype(seq) {
}
field(LNK3,DBF_OUTLINK) {
prompt("Output Link 3")
promptgroup(GUI_SEQ1)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DLY4,DBF_DOUBLE) {
prompt("Delay 4")
promptgroup(GUI_SEQ2)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DOL4,DBF_INLINK) {
prompt("Input link 4")
promptgroup(GUI_SEQ2)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DO4,DBF_DOUBLE) {
@@ -145,17 +145,17 @@ recordtype(seq) {
}
field(LNK4,DBF_OUTLINK) {
prompt("Output Link 4")
promptgroup(GUI_SEQ2)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DLY5,DBF_DOUBLE) {
prompt("Delay 5")
promptgroup(GUI_SEQ2)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DOL5,DBF_INLINK) {
prompt("Input link 5")
promptgroup(GUI_SEQ2)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DO5,DBF_DOUBLE) {
@@ -164,17 +164,17 @@ recordtype(seq) {
}
field(LNK5,DBF_OUTLINK) {
prompt("Output Link 5")
promptgroup(GUI_SEQ2)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DLY6,DBF_DOUBLE) {
prompt("Delay 6")
promptgroup(GUI_SEQ2)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DOL6,DBF_INLINK) {
prompt("Input link 6")
promptgroup(GUI_SEQ2)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DO6,DBF_DOUBLE) {
@@ -183,17 +183,17 @@ recordtype(seq) {
}
field(LNK6,DBF_OUTLINK) {
prompt("Output Link 6")
promptgroup(GUI_SEQ2)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DLY7,DBF_DOUBLE) {
prompt("Delay 7")
promptgroup(GUI_SEQ3)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DOL7,DBF_INLINK) {
prompt("Input link 7")
promptgroup(GUI_SEQ3)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DO7,DBF_DOUBLE) {
@@ -202,17 +202,17 @@ recordtype(seq) {
}
field(LNK7,DBF_OUTLINK) {
prompt("Output Link 7")
promptgroup(GUI_SEQ3)
promptgroup("41 - Link 0-7")
interest(1)
}
field(DLY8,DBF_DOUBLE) {
prompt("Delay 8")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOL8,DBF_INLINK) {
prompt("Input link 8")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DO8,DBF_DOUBLE) {
@@ -221,17 +221,17 @@ recordtype(seq) {
}
field(LNK8,DBF_OUTLINK) {
prompt("Output Link 8")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DLY9,DBF_DOUBLE) {
prompt("Delay 9")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOL9,DBF_INLINK) {
prompt("Input link 9")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DO9,DBF_DOUBLE) {
@@ -240,17 +240,17 @@ recordtype(seq) {
}
field(LNK9,DBF_OUTLINK) {
prompt("Output Link 9")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DLYA,DBF_DOUBLE) {
prompt("Delay 10")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOLA,DBF_INLINK) {
prompt("Input link 10")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOA,DBF_DOUBLE) {
@@ -259,17 +259,17 @@ recordtype(seq) {
}
field(LNKA,DBF_OUTLINK) {
prompt("Output Link 10")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DLYB,DBF_DOUBLE) {
prompt("Delay 11")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOLB,DBF_INLINK) {
prompt("Input link 11")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOB,DBF_DOUBLE) {
@@ -278,17 +278,17 @@ recordtype(seq) {
}
field(LNKB,DBF_OUTLINK) {
prompt("Output Link 11")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DLYC,DBF_DOUBLE) {
prompt("Delay 12")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOLC,DBF_INLINK) {
prompt("Input link 12")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOC,DBF_DOUBLE) {
@@ -297,17 +297,17 @@ recordtype(seq) {
}
field(LNKC,DBF_OUTLINK) {
prompt("Output Link 12")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DLYD,DBF_DOUBLE) {
prompt("Delay 13")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOLD,DBF_INLINK) {
prompt("Input link 13")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOD,DBF_DOUBLE) {
@@ -316,17 +316,17 @@ recordtype(seq) {
}
field(LNKD,DBF_OUTLINK) {
prompt("Output Link 13")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DLYE,DBF_DOUBLE) {
prompt("Delay 14")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOLE,DBF_INLINK) {
prompt("Input link 14")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOE,DBF_DOUBLE) {
@@ -335,17 +335,17 @@ recordtype(seq) {
}
field(LNKE,DBF_OUTLINK) {
prompt("Output Link 14")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DLYF,DBF_DOUBLE) {
prompt("Delay 15")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOLF,DBF_INLINK) {
prompt("Input link 15")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
field(DOF,DBF_DOUBLE) {
@@ -354,7 +354,7 @@ recordtype(seq) {
}
field(LNKF,DBF_OUTLINK) {
prompt("Output Link 15")
promptgroup(GUI_SEQ3)
promptgroup("42 - Link 8-F")
interest(1)
}
}

View File

@@ -3,15 +3,14 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(state) {
include "dbCommon.dbd"
field(VAL,DBF_STRING) {
prompt("Value")
promptgroup(GUI_DISPLAY)
promptgroup("40 - Input")
asl(ASL0)
pp(TRUE)
size(20)

View File

@@ -3,9 +3,8 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
menu(stringinPOST) {
choice(stringinPOST_OnChange,"On Change")
@@ -15,7 +14,7 @@ recordtype(stringin) {
include "dbCommon.dbd"
field(VAL,DBF_STRING) {
prompt("Current Value")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
asl(ASL0)
pp(TRUE)
size(40)
@@ -28,24 +27,24 @@ recordtype(stringin) {
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(MPST,DBF_MENU) {
prompt("Post Value Monitors")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
menu(stringinPOST)
}
field(APST,DBF_MENU) {
prompt("Post Archive Monitors")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
menu(stringinPOST)
}
field(SIOL,DBF_INLINK) {
prompt("Sim Input Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SVAL,DBF_STRING) {
@@ -55,7 +54,7 @@ recordtype(stringin) {
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -65,7 +64,7 @@ recordtype(stringin) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}

View File

@@ -3,9 +3,8 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
menu(stringoutPOST) {
choice(stringoutPOST_OnChange,"On Change")
@@ -15,7 +14,7 @@ recordtype(stringout) {
include "dbCommon.dbd"
field(VAL,DBF_STRING) {
prompt("Current Value")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
asl(ASL0)
pp(TRUE)
size(40)
@@ -28,40 +27,40 @@ recordtype(stringout) {
}
field(DOL,DBF_INLINK) {
prompt("Desired Output Loc")
promptgroup(GUI_OUTPUT)
promptgroup("40 - Input")
interest(1)
}
field(OMSL,DBF_MENU) {
prompt("Output Mode Select")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
menu(menuOmsl)
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(1)
}
field(MPST,DBF_MENU) {
prompt("Post Value Monitors")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
menu(stringoutPOST)
}
field(APST,DBF_MENU) {
prompt("Post Archive Monitors")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
menu(stringoutPOST)
}
field(SIOL,DBF_OUTLINK) {
prompt("Sim Output Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -71,19 +70,19 @@ recordtype(stringout) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(IVOA,DBF_MENU) {
prompt("INVALID output action")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
menu(menuIvoa)
}
field(IVOV,DBF_STRING) {
prompt("INVALID output value")
promptgroup(GUI_OUTPUT)
promptgroup("50 - Output")
interest(2)
size(40)
}

View File

@@ -3,9 +3,8 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(subArray) {
include "dbCommon.dbd"
@@ -21,57 +20,57 @@ recordtype(subArray) {
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_COMMON)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(FTVL,DBF_MENU) {
prompt("Field Type of Value")
promptgroup(GUI_ALARMS)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
menu(menuFtype)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_BITS1)
promptgroup("40 - Input")
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Engineering Units Name")
promptgroup(GUI_BITS2)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_CALC)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_CLOCK)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(MALM,DBF_ULONG) {
prompt("Maximum Elements ")
promptgroup(GUI_CLOCK)
prompt("Maximum Elements")
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
initial("1")
}
field(NELM,DBF_ULONG) {
prompt("Number of Elements")
promptgroup(GUI_COMPRESS)
promptgroup("30 - Action")
pp(TRUE)
initial("1")
}
field(INDX,DBF_ULONG) {
prompt("Substring Index")
promptgroup(GUI_CONVERT)
promptgroup("30 - Action")
pp(TRUE)
}
field(BUSY,DBF_SHORT) {

View File

@@ -15,14 +15,14 @@ recordtype(sub) {
}
field(INAM,DBF_STRING) {
prompt("Init Routine Name")
promptgroup(GUI_SUB)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
size(40)
}
field(SNAM,DBF_STRING) {
prompt("Subroutine Name")
promptgroup(GUI_SUB)
promptgroup("30 - Action")
special(SPC_MOD)
interest(1)
size(40)
@@ -37,127 +37,127 @@ recordtype(sub) {
}
field(INPA,DBF_INLINK) {
prompt("Input A")
promptgroup(GUI_INPUTS)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPB,DBF_INLINK) {
prompt("Input B")
promptgroup(GUI_INPUTS)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPC,DBF_INLINK) {
prompt("Input C")
promptgroup(GUI_INPUTS)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPD,DBF_INLINK) {
prompt("Input D")
promptgroup(GUI_INPUTS)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPE,DBF_INLINK) {
prompt("Input E")
promptgroup(GUI_INPUTS)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPF,DBF_INLINK) {
prompt("Input F")
promptgroup(GUI_INPUTS)
promptgroup("41 - Input A-F")
interest(1)
}
field(INPG,DBF_INLINK) {
prompt("Input G")
promptgroup(GUI_INPUTS)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPH,DBF_INLINK) {
prompt("Input H")
promptgroup(GUI_INPUTS)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPI,DBF_INLINK) {
prompt("Input I")
promptgroup(GUI_INPUTS)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPJ,DBF_INLINK) {
prompt("Input J")
promptgroup(GUI_INPUTS)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPK,DBF_INLINK) {
prompt("Input K")
promptgroup(GUI_INPUTS)
promptgroup("42 - Input G-L")
interest(1)
}
field(INPL,DBF_INLINK) {
prompt("Input L")
promptgroup(GUI_INPUTS)
promptgroup("42 - Input G-L")
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Units Name")
promptgroup(GUI_DISPLAY)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Rng")
promptgroup(GUI_DISPLAY)
prompt("High Operating Range")
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(BRSV,DBF_MENU) {
prompt("Bad Return Severity")
promptgroup(GUI_SUB)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -165,7 +165,7 @@ recordtype(sub) {
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -173,7 +173,7 @@ recordtype(sub) {
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -181,7 +181,7 @@ recordtype(sub) {
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
prop(YES)
@@ -189,17 +189,17 @@ recordtype(sub) {
}
field(HYST,DBF_DOUBLE) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(ADEL,DBF_DOUBLE) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(MDEL,DBF_DOUBLE) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(A,DBF_DOUBLE) {

View File

@@ -13,6 +13,7 @@ include $(TOP)/configure/CONFIG
PROD_LIBS = dbRecStd dbCore ca Com
TARGETS += $(COMMON_DIR)/recTestIoc.dbd
DBDDEPENDS_FILES += recTestIoc.dbd$(DEP)
recTestIoc_DBD = base.dbd
TESTFILES += $(COMMON_DIR)/recTestIoc.dbd
@@ -26,6 +27,7 @@ TESTFILES += ../arrayOpTest.db
TESTS += arrayOpTest
TARGETS += $(COMMON_DIR)/analogMonitorTest.dbd
DBDDEPENDS_FILES += analogMonitorTest.dbd$(DEP)
analogMonitorTest_DBD += base.dbd
TESTPROD_HOST += analogMonitorTest
analogMonitorTest_SRCS += analogMonitorTest.c
@@ -35,6 +37,14 @@ testHarness_SRCS += analogMonitorTest_registerRecordDeviceDriver.cpp
TESTFILES += $(COMMON_DIR)/analogMonitorTest.dbd ../analogMonitorTest.db
TESTS += analogMonitorTest
TARGETS += $(COMMON_DIR)/regressTest.dbd
regressTest_DBD += base.dbd
TESTPROD_HOST += regressTest
regressTest_SRCS += regressTest.c
regressTest_SRCS += regressTest_registerRecordDeviceDriver.cpp
TESTFILES += $(COMMON_DIR)/regressTest.dbd ../regressArray1.db
TESTS += regressTest
# epicsRunRecordTests runs all the test programs in a known working order.
testHarness_SRCS += epicsRunRecordTests.c

View File

@@ -0,0 +1,9 @@
record(waveform, "wf") {
field(FTVL, "DOUBLE")
field(NELM, "1")
field(FLNK, "co")
}
record(calcout, "co") {
field(CALC, "A")
field(INPA, "wf")
}

View File

@@ -0,0 +1,73 @@
/*************************************************************************\
* Copyright (c) 2016 Michael Davidsaver
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#include <dbUnitTest.h>
#include <testMain.h>
#include <dbAccess.h>
#include <errlog.h>
#include <calcoutRecord.h>
#include <waveformRecord.h>
/*
* Test the some identified regressions
*/
void regressTest_registerRecordDeviceDriver(struct dbBase *);
/*
* https://bugs.launchpad.net/epics-base/+bug/1577108
*/
static
void testArrayLength1(void)
{
waveformRecord *precwf;
calcoutRecord *precco;
double *pbuf;
testdbPrepare();
testdbReadDatabase("regressTest.dbd", NULL, NULL);
regressTest_registerRecordDeviceDriver(pdbbase);
testdbReadDatabase("regressArray1.db", NULL, NULL);
precwf = (waveformRecord*)testdbRecordPtr("wf");
precco = (calcoutRecord*)testdbRecordPtr("co");
eltc(0);
testIocInitOk();
eltc(1);
dbScanLock((dbCommon*)precwf);
pbuf = (double*)precwf->bptr;
dbScanUnlock((dbCommon*)precwf);
testdbPutFieldOk("wf", DBF_DOUBLE, 2.0);
dbScanLock((dbCommon*)precwf);
testOk(precwf->nord==1, "wf.NORD = %u == 1", (unsigned)precwf->nord);
testOk(pbuf[0]==2.0, "wf.VAL[0] = %f == 2.0", pbuf[0]);
dbScanUnlock((dbCommon*)precwf);
dbScanLock((dbCommon*)precco);
testOk(precco->a==2.0, "co.A = %f == 2.0", precco->a);
dbScanUnlock((dbCommon*)precco);
testdbGetFieldEqual("co", DBF_DOUBLE, 2.0);
testIocShutdownOk();
testdbCleanup();
}
MAIN(regressTest)
{
testPlan(5);
testArrayLength1();
return testDone();
}

View File

@@ -56,50 +56,50 @@ recordtype(waveform) {
}
field(RARM,DBF_SHORT) {
prompt("Rearm the waveform")
promptgroup(GUI_WAVE)
promptgroup("30 - Action")
pp(TRUE)
interest(1)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Engineering Units Name")
promptgroup(GUI_DISPLAY)
prompt("Engineering Units")
promptgroup("80 - Display")
interest(1)
size(16)
prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
prop(YES)
}
field(NELM,DBF_ULONG) {
prompt("Number of Elements")
promptgroup(GUI_WAVE)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
initial("1")
}
field(FTVL,DBF_MENU) {
prompt("Field Type of Value")
promptgroup(GUI_WAVE)
promptgroup("30 - Action")
special(SPC_NOMOD)
interest(1)
menu(menuFtype)
@@ -120,12 +120,12 @@ recordtype(waveform) {
}
field(SIOL,DBF_INLINK) {
prompt("Sim Input Specifctn")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIML,DBF_INLINK) {
prompt("Sim Mode Location")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
@@ -135,22 +135,22 @@ recordtype(waveform) {
}
field(SIMS,DBF_MENU) {
prompt("Sim mode Alarm Svrty")
promptgroup(GUI_INPUTS)
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(MPST,DBF_MENU) {
prompt("Post Value Monitors")
promptgroup(GUI_DISPLAY)
interest(1)
menu(waveformPOST)
prompt("Post Value Monitors")
promptgroup("80 - Display")
interest(1)
menu(waveformPOST)
}
field(APST,DBF_MENU) {
prompt("Post Archive Monitors")
promptgroup(GUI_DISPLAY)
interest(1)
menu(waveformPOST)
}
prompt("Post Archive Monitors")
promptgroup("80 - Display")
interest(1)
menu(waveformPOST)
}
field(HASH,DBF_ULONG) {
prompt("Hash of OnChange data.")
interest(3)

View File

@@ -1,7 +1,15 @@
# $Revision-Id$
#
# softIocExit.db
record(sub,"$(IOC):exit") {
field(DESC,"Exit subroutine")
field(SCAN,"Passive")
field(SNAM,"exit")
field(DESC,"Exit subroutine")
field(SCAN,"Passive")
field(SNAM,"exit")
}
record(stringin,"$(IOC):BaseVersion") {
field(DESC,"EPICS Base Version")
field(DTYP,"getenv")
field(INP,"@EPICS_VERSION_FULL")
field(PINI,"YES")
field(DISP,1)
}

View File

@@ -2,101 +2,102 @@ recordtype(xxx) {
include "dbCommon.dbd"
field(VAL,DBF_DOUBLE) {
prompt("Current EGU Value")
asl(ASL0)
promptgroup("40 - Input")
asl(ASL0)
pp(TRUE)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_INPUTS)
promptgroup("40 - Input")
special(SPC_NOMOD)
interest(1)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Engineering Units")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
size(16)
}
field(HOPR,DBF_FLOAT) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(LOPR,DBF_FLOAT) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(HIHI,DBF_FLOAT) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
}
field(LOLO,DBF_FLOAT) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
}
field(HIGH,DBF_FLOAT) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
}
field(LOW,DBF_FLOAT) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(HYST,DBF_DOUBLE) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
promptgroup("70 - Alarm")
interest(1)
}
field(ADEL,DBF_DOUBLE) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(MDEL,DBF_DOUBLE) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
promptgroup("80 - Display")
interest(1)
}
field(LALM,DBF_DOUBLE) {

View File

@@ -1,5 +1,4 @@
TOP = ../..
include $(TOP)/configure/CONFIG
ARCH = _ARCH_
TARGETS = envPaths
include $(TOP)/configure/RULES.ioc

Some files were not shown because too many files have changed in this diff Show More