Compare commits

...

35 Commits

Author SHA1 Message Date
Janet B. Anderson
56fee671fe epics_R3_13_1_1 1999-01-11 15:38:57 +00:00
Marty Kraimer
4c7cfd7b2f added description of -i to help 1999-01-11 14:20:09 +00:00
Janet B. Anderson
28cdb2b5e1 Bug fix for warning and opt flags in Vx builds. 1999-01-07 23:14:16 +00:00
Janet B. Anderson
f006ec6a8e Don't copy vxWorks and vxWorks.sym into base. 1999-01-07 21:50:08 +00:00
Janet B. Anderson
f468f0e33c Changes from Mark Rivers. 1999-01-06 22:21:59 +00:00
Janet B. Anderson
3cfd9a79f5 Fixed VX_GNU_NO definition. 1999-01-06 22:10:43 +00:00
Janet B. Anderson
0c0b5d44ba Added $(DBDINSTALL) $(MENUS) $(RECTYPES) $(BPTS) $(DBDNAME) to clean rule. 1999-01-06 22:04:37 +00:00
Janet B. Anderson
95a399e4a2 Now only create package dir if package is defined. 1999-01-06 21:58:51 +00:00
Janet B. Anderson
4daf75e295 Added vendor compiler dependent options ( -KPIC -D_REENTRANT for solaris) 1999-01-06 21:52:47 +00:00
Janet B. Anderson
0ef60ec09a Added CPPSNCFLAGS to cpp step of state notation language rule 1999-01-06 21:37:23 +00:00
Janet B. Anderson
42bd805108 Created ARCH_DEP_CPPFLAGS for Vx build. 1999-01-06 21:34:55 +00:00
Janet B. Anderson
5e7ec2be6c Bug fix - added space after link definition. 1999-01-06 19:48:22 +00:00
Janet B. Anderson
2c1609e2ed perl now must be in user's path. 1999-01-06 19:43:12 +00:00
Janet B. Anderson
4d0785b899 Release string now contains update name/level only if non blank/non zero. 1999-01-06 19:35:54 +00:00
Marty Kraimer
1fc97eb429 reinitialize eoff in special 1999-01-06 19:14:21 +00:00
Marty Kraimer
54f3de4b0d cosmetic change 1999-01-06 19:11:00 +00:00
Marty Kraimer
4907dfd43d remove defining storage twice 1999-01-06 19:10:06 +00:00
Marty Kraimer
14414ab86f If dbPutNotify called dbProcess and dbProcess returned an error the notify completion callback was called twice. 1999-01-06 18:59:20 +00:00
Marty Kraimer
08761bebff remove restriction that table names must be alphanumeric 1999-01-06 18:54:26 +00:00
Ralph Lange
6619c06109 Bugfix .DEPENDS -> DEPENDS 1999-01-06 16:50:48 +00:00
Jeff Hill
5ba5209891 changes from Salikova 1998-12-21 20:59:30 +00:00
Jeff Hill
5d4eddf424 fixed typo 1998-12-21 17:50:01 +00:00
Jeff Hill
1982c777be Include the next resource id allocated in casr diagnostic 1998-12-21 17:49:05 +00:00
Jeff Hill
842f9e33cf drvEpvxi.h 1998-12-21 17:46:36 +00:00
Jeff Hill
d4f44b9bc9 fixed warning 1998-12-21 17:39:02 +00:00
Jeff Hill
d2acbb21b5 improved the portability of devLib 1998-12-19 01:32:35 +00:00
Jeff Hill
4ab910abd1 renamed createPV() to pvAttach() 1998-12-19 00:04:53 +00:00
Jeff Hill
6f8e2cd675 Changed the remove() function in tsSLList class because users were
confused by it. The name is now removeNextItem() and it is now a private
member of class tsSLNode.
1998-12-18 19:02:47 +00:00
Jeff Hill
9658302528 fixed warning 1998-12-18 18:58:20 +00:00
Janet B. Anderson
1b8da9848e Removed duplicate line. 1998-12-14 17:08:11 +00:00
Jeff Hill
4f983714c7 doc 1998-12-07 23:21:53 +00:00
Jeff Hill
31d5dee317 removed inline frm evt msk alloc 1998-12-01 23:32:15 +00:00
Jeff Hill
e1bc747104 Use EPICS_CA_BEACON_PERIOD 1998-12-01 18:54:45 +00:00
Jeff Hill
82d119fcef fixed warning 1998-11-23 23:51:04 +00:00
Jeff Hill
2ef8e387e0 added build date to corerelease() 1998-11-23 23:49:29 +00:00
89 changed files with 3039 additions and 2776 deletions

58
config/CONFIG.Host.LynxOS Normal file
View File

@@ -0,0 +1,58 @@
# CONFIG.Host.LynxOS
#
# This file is maintained by the EPICS community.
# Sites may override these definitions in CONFIG_SITE.Host.LynxOS
ARCH_CLASS = LynxOS
# Include definitions common to all Unix archs
include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
AR = ar -rc
ARCMD = $(AR) $@
RANLIB = ranlib -t
# Configure OS vendor C compiler
ACC_ANSI = $(ACC) -ansi -mposix -D_X86_
ACC_STRICT = $(ACC) -ansi -mposix -D_X86_ -pedantic
ACC_TRAD = $(ACC)
ACC_WARN_YES = -Wall
ACC_WARN_NO = -w
ACC_OPT_YES = -O
ACC_OPT_NO = -g
ACC_SFLAGS_YES = -Bstatic
ACC_SFLAGS_NO=
ACC_SLIBS_YES =
ACC_SLIBS_NO=
ACC_SHRLIB_CFLAGS_YES =
ACC_SHRLIB_LDFLAGS_YES =
# Configure OS vendor C++ compiler
CCC_NORMAL = $(CCC)
CCC_STRICT = $(CCC)
CCC_TEMPL_INST_FLAG = -pedantic -mposix -D_X86_ -DEXPL_TEMP
CCC_WARN_YES = -Wall
CCC_WARN_NO = -w
CCC_OPT_YES = -O
CCC_OPT_NO = -g
CCC_SFLAGS_YES = -Bstatic
CCC_SFLAGS_NO=
CCC_SLIBS_YES =
CCC_SLIBS_NO=
CCC_DEPENDS_FLAG = -pedantic -mposix -D_X86_
# added smh 6/5/98 : when building fdmgr - seems to use this not ACC
# in effect this overides orig def in CONFIG_COMMON :
# which is GCC_STRICT = $(GCC) -ansi -pedantic
GCC_STRICT = $(GCC)
G++_STRICT = $(G++) -Wtraditional -mposix -D_X86_ -DEXPL_TEMP
ARCH_DEP_CFLAGS = -DLynxOS -mposix -D_X86_
ARCH_DEP_LDFLAGS = -lc -lbsd -lnsl -lm -lposix4d9 -llynx

View File

@@ -23,8 +23,8 @@ ACC_SFLAGS_YES= -non_shared
ACC_SFLAGS_NO= -call_shared
ACC_SLIBS_YES =
ACC_SLIBS_NO=
ACC_SHRLIB_CFLAGS_YES = -shared
ACC_SHRLIB_LDFLAGS_YES =
ACC_SHRLIB_CFLAGS_YES =
ACC_SHRLIB_LDFLAGS_YES = -shared
# Configure OS vendor C++ compiler
CCC = cxx
@@ -42,5 +42,5 @@ CCC_SLIBS_NO=
CCC_DEPENDS_FLAG =
ARCH_DEP_CFLAGS = -D_OSF_SOURCE
ARCH_DEP_LDLIBS = -lnsl
ARCH_DEP_LDLIBS =

View File

@@ -26,6 +26,7 @@ ACC = $(SPARCWORKS)/bin/cc
ACC_ANSI = $(ACC) -Xa
ACC_STRICT = $(ACC) -Xc -v
ACC_TRAD = $(ACC) -Xs
ACC_DEP_CFLAGS = -KPIC -D_REENTRANT
ACC_WARN_YES =
ACC_WARN_NO = -w
ACC_OPT_YES = -O
@@ -34,13 +35,14 @@ ACC_SFLAGS_YES= -Bstatic
ACC_SFLAGS_NO=
ACC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic -lXext -lX
ACC_SLIBS_NO=
ACC_SHRLIB_CFLAGS_YES = -KPIC -D_REENTRANT
ACC_SHRLIB_CFLAGS_YES =
ACC_SHRLIB_LDFLAGS_YES = -G -h $@
# Configure OS vendor C++ compiler
CCC = $(SPARCWORKS)/bin/CC
CCC_NORMAL = $(CCC) +p
CCC_STRICT = $(CCC) +p
CCC_DEP_CFLAGS = -KPIC -D_REENTRANT
CCC_TEMPL_INST_FLAG =
CCC_WARN_YES = +w
CCC_WARN_NO =
@@ -52,6 +54,7 @@ CCC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic -lXext -lX
CCC_SLIBS_NO=
CCC_DEPENDS_FLAG = -xM1
ARCH_DEP_CFLAGS = -DSOLARIS
# socket and nsl needed by libca.a
ARCH_DEP_LDLIBS = -lsocket -lnsl

136
config/CONFIG.LynxOS Normal file
View File

@@ -0,0 +1,136 @@
# $Id$
#
# This file contains definitions for Vx builds
#--------------------------------------------------
# operating system class (include/os/<os_class>)
OS_CLASS = LynxOS
lynx_pc486 =YES
CC = gcc
CXX = g++
#--------------------------------------------------
# vxWorks directory definitions
# The definitions VX_DIR, VX_GNU, GNU_DIR and GNU_LIB
# can be overridden for specific host architectures
# by creating a CONFIG_SITE.Vx.<host_arch> file with
# the override definitions.
# Tornado directory definitions
VX_CONFIG_DIR_YES =
VX_INCLUDE_YES =
VX_GNU_YES =
VX_GNU_BIN_YES =
VX_GNU_LIB_YES =
# pre Torando directory definitions
VX_CONFIG_DIR_NO =
VX_INCLUDE_NO =
VX_GNU_NO =
VX_GNU_BIN_NO =
# directory definitions
VX_DIR =
VX_CONFIG_DIR =
VX_INCLUDE =
VX_GNU =
GNU_BIN = /usr/local/bin
GNU_LIB = /usr/local/lib
#--------------------------------------------------
# VxWorks command definitions
#GCC = $(GNU_BIN)/cc$(CMPLR_SUFFIX) -B$(GNU_LIB)/gcc-lib/ -nostdinc
#AR = $(GNU_BIN)/ar$(CMPLR_SUFFIX)
#CPP = $(GNU_BIN)/cpp$(CMPLR_SUFFIX) -nostdinc
#RANLIB = $(GNU_BIN)/ranlib$(CMPLR_SUFFIX)
#LD = $(GNU_BIN)/ld$(CMPLR_SUFFIX) -r
AR = ar -rc
ARCMD = $(AR) $@
RANLIB = ranlib -t
GCC = gcc
CPP = cpp
LD = ld -r
#--------------------------------------------------
# Tornado C++ crosscompiler definitions
#CPLUSPLUS_YES = G++
#G++ = $(GNU_BIN)/cc$(CMPLR_SUFFIX) -B$(GNU_LIB)/gcc-lib/ -nostdinc
#LD_G++ = $(GNU_BIN)/ld$(CMPLR_SUFFIX) -r
#NM = $(GNU_BIN)/nm$(CMPLR_SUFFIX)
#MUNCH = $(GNU_BIN)/munch
CPLUSPLUS_YES = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
G++ = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
LD_G++ = ld -r
NM = nm
#--------------------------------------------------
# Pre Tornado C++ crosscompiler definitions
# These are pre tornado definitions for Hideos builds (defined for 68k only)
#CPLUSPLUS_NO = CCC
#CCC = $(GNU_DIR)/bin/sun3-g++ -B$(GNU_DIR)/lib/gcc-lib/ -nostdinc -DEXPL_TEMPL
#LD_CCC = $(GNU_DIR)/bin/sun3-ld $(OLD_ARCH_DEP_LDFLAGS) -r
CPLUSPLUS_NO = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
CCC = g++ -DLynxOS -DLynxOS_pc486 -mposix -D_X86_ -DEXPL_TEMP
LD_CCC = ld -r
CCC_NORMAL = $(CCC) $(OLD_ARCH_DEP_CFLAGS)
CCC_STRICT = $(CCC) -ansi -pedantic -Wall -traditional $(OLD_ARCH_DEP_CFLAGS)
CCC_TRAD = $(CCC) -traditional $(OLD_ARCH_DEP_CFLAGS)
CCC_TEMPL_INST_FLAG = -DEXPL_TEMP
CCC_WARN_YES = -Wall
CCC_WARN_NO = -w
CCC_OPT_YES = -O
CCC_OPT_NO = -g
CCC_DEPENDS_FLAG = -pedantic -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
CPU = i486
OS = lynxos
OLD_ARCH_DEP_CFLAGS = -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
# --no-builtin -Wa,"-m68040" -DOS_EQ_$(OS) \
# -DBOARD_EQ_$(BOARD) -DCPU_EQ_$(CPU) -DBOARD=$(BOARD)
OLD_ARCH_DEP_LDFLAGS = -mposix -lc -lbsd -lnsl -lm -lposix4d9 -llynx
# -Ur -N -T$(EPICS_BASE_BIN)/vxldscript.MRI
#--------------------------------------------------
# C compiler definitions
ANSI = gcc -ansi
#--------------------------------------------------
# Command definitions
CPLUSPLUS = g++
# $(CPLUSPLUS_$(TORNADO))
LD_CXX = ld -r
# $(LD_$(CPLUSPLUS))
#--------------------------------------------------
# Operating system flags
OP_SYS_INCLUDES =
# -I$(VX_INCLUDE)
OP_SYS_CFLAGS = -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
# -DvxWorks -DV5_vxWorks -fno-builtin
OP_SYS_LDFLAGS = -DLynxOS -DLynxOS_pc486 -mposix -D_X86_
OP_SYS_LDLIBS = -lc -lbsd -lnsl -lm -lposix4d9 -llynx
#--------------------------------------------------
# Optimization flag overrides
GCC_OPT_YES = -O
# 2 -fstrength-reduce
G++_OPT_YES = -O
# 2 -fstrength-reduce
#--------------------------------------------------
# Link definitions
LINK.c = $(LD) $(LDFLAGS) -o
LINK.cc = $(LD_CXX) $(LDFLAGS) -o

View File

@@ -95,7 +95,22 @@ OP_SYS_LDLIBS =
#--------------------------------------------------
# Optimization flag overrides
GCC_OPT_YES = -O2 -fstrength-reduce
GCC_OPT_NO =
G++_OPT_YES = -O2 -fstrength-reduce
G++_OPT_NO =
OPT_CFLAGS = $($(ANSI)_OPT_$(VX_OPT))
OPT_CXXFLAGS = $($(CPLUSPLUS)_OPT_$(VX_OPT))
#--------------------------------------------------
# Warning flag overrides
GCC_WARN_YES = -Wall
GCC_WARN_NO = -w
G++_WARN_YES = -Wall
G++_WARN_NO = -w
WARN_CFLAGS = $($(ANSI)_WARN_$(VX_WARN))
WARN_CXXFLAGS = $($(CPLUSPLUS)_WARN_$(VX_WARN))
#--------------------------------------------------
# Link definitions

View File

@@ -10,5 +10,6 @@ CMPLR_SUFFIX = 68k
ARCH_CLASS = 68k
# Architecture specific build flags
ARCH_DEP_CFLAGS = -DCPU=MC68040 -m68040 -DCPU_FAMILY=MC680X0
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
ARCH_DEP_CFLAGS = -m68040

View File

@@ -8,7 +8,8 @@ CMPLR_SUFFIX = sparc
ARCH_CLASS = sparc
# Architecture specific build flags
ARCH_DEP_CFLAGS = -DCPU=SPARC -DCPU_FAMILY=SPARC
ARCH_DEP_CPPFLAGS = -DCPU=SPARC -DCPU_FAMILY=SPARC
ARCH_DEP_CFLAGS =
# Removed -O2 [24/12/96 PMM]
OLD_ARCH_DEP_CXXFLAGS = -fno-builtin -ansi -pipe -nostdinc -DCPU=SPARC \
-DVXWORKS -Dsigned= -Dvolatile= +V

View File

@@ -11,7 +11,8 @@ CMPLR_SUFFIX = mips
ARCH_CLASS = mips
# Architecture specific build flags
ARCH_DEP_CFLAGS = -EB -mcpu=r4000 -mips3 -mgp32 -mfp32 -non_shared -G 0 -DCPU=R4000
ARCH_DEP_CPPFLAGS = -DCPU=R4000
ARCH_DEP_CFLAGS = -EB -mcpu=r4000 -mips3 -mgp32 -mfp32 -non_shared -G 0
# Arch specific flags
GCC += -fsigned-char

View File

@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
ARCH_CLASS = 68k
# Architecture specific build flags
ARCH_DEP_CFLAGS = -DCPU=MC68020 -m68020 -DCPU_FAMILY=MC680X0
ARCH_DEP_CPPFLAGS = -DCPU=MC68020 -DCPU_FAMILY=MC680X0
ARCH_DEP_CFLAGS = -m68020

View File

@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
ARCH_CLASS = 68k
# Architecture specific build flags
ARCH_DEP_CFLAGS = -DCPU=MC68030 -m68030 -DCPU_FAMILY=MC680X0
ARCH_DEP_CPPFLAGS = -DCPU=MC68030 -DCPU_FAMILY=MC680X0
ARCH_DEP_CFLAGS = -m68030

View File

@@ -10,5 +10,6 @@ CMPLR_SUFFIX = ppc
ARCH_CLASS = ppc
# Architecture specific build flags (TRUE=1 via LBL; needed in camessage.c)
ARCH_DEP_CFLAGS = -fno-for-scope -DCPU_FAMILY=PPC -DCPU=PPC604 -D_GNU_TOOL -DTRUE=1
ARCH_DEP_CPPFLAGS = -DCPU_FAMILY=PPC -DCPU=PPC604 -D_GNU_TOOL -DTRUE=1
ARCH_DEP_CFLAGS = -fno-for-scope

View File

@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
ARCH_CLASS = 68k
# Architecture specific build flags
ARCH_DEP_CFLAGS = -DCPU=MC68040 -m68040 -DCPU_FAMILY=MC680X0
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
ARCH_DEP_CFLAGS = -m68040

View File

@@ -11,4 +11,5 @@ CMPLR_SUFFIX = 68k
ARCH_CLASS = 68k
# Architecture specific build flags
ARCH_DEP_CFLAGS = -DCPU=MC68040 -msoft-float -DCPU_FAMILY=MC680X0
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
ARCH_DEP_CFLAGS = -msoft-float

View File

@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
ARCH_CLASS = 68k
# Architecture specific build flags
ARCH_DEP_CFLAGS = -DCPU=MC68040 -m68040 -DCPU_FAMILY=MC680X0
ARCH_DEP_CPPFLAGS = -DCPU=MC68040 -DCPU_FAMILY=MC680X0
ARCH_DEP_CFLAGS = -m68040

View File

@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
ARCH_CLASS = 68k
# Architecture specific build flags
ARCH_DEP_CFLAGS = -DCPU=MC68060 -m68040 -DCPU_FAMILY=MC680X0
ARCH_DEP_CPPFLAGS = -DCPU=MC68060 -DCPU_FAMILY=MC680X0
ARCH_DEP_CFLAGS = -m68040

View File

@@ -11,5 +11,6 @@ CMPLR_SUFFIX = 68k
ARCH_CLASS = 68k
# Architecture specific build flags
ARCH_DEP_CFLAGS = -DCPU=MC68030 -m68030 -DCPU_FAMILY=MC680X0
ARCH_DEP_CPPFLAGS = -DCPU=MC68030 -DCPU_FAMILY=MC680X0
ARCH_DEP_CFLAGS = -m68030

View File

@@ -10,7 +10,8 @@ CMPLR_SUFFIX = 386
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
ARCH_CLASS = pc486
ARCH_DEP_CFLAGS = -DCPU=I80486 -m486 -DCPU_FAMILY=I80x86 -D_X86_
ARCH_DEP_CPPFLAGS = -DCPU=I80486 -DCPU_FAMILY=I80x86 -D_X86_
ARCH_DEP_CFLAGS = -m486
ARCH_DEP_CXXFLAGS += -x 'c++'
ARCH_DEP_CFLAGS += -fno-builtin -fno-defer-pop

View File

@@ -10,7 +10,8 @@ CMPLR_SUFFIX = 386
# $(VX_DIR)/$(HOST_ARCH).$(ARCH_CLASS)/bin
ARCH_CLASS = pc486
ARCH_DEP_CFLAGS = -DCPU=I80486 -m486 -DCPU_FAMILY=I80x86 -D_X86_
ARCH_DEP_CPPFLAGS = -DCPU=I80486 -DCPU_FAMILY=I80x86 -D_X86_
ARCH_DEP_CFLAGS = -m486
ARCH_DEP_CXXFLAGS += -x 'c++'
ARCH_DEP_CFLAGS += -fno-builtin -fno-defer-pop

View File

@@ -11,7 +11,7 @@ EPICS_VERSION=3
EPICS_REVISION=13
EPICS_MODIFICATION=1
EPICS_UPDATE_NAME=
EPICS_UPDATE_LEVEL=0
EPICS_UPDATE_LEVEL=1
EPICS_VERSION_STRING="EPICS Version ${EPICS_VERSION}.${EPICS_REVISION}.${EPICS_MODIFICATION}.${EPICS_UPDATE_NAME}${EPICS_UPDATE_LEVEL}"

View File

@@ -109,6 +109,11 @@ G++_SHRLIB_LDFLAGS_YES = -shared
CC = $($(ANSI)_$(CMPLR))
#---------------------------------------------------------------
# Vendor compiler dependent options
VENDOR_DEP_CFLAGS = $($(ANSI)_DEP_CFLAGS)
VENDOR_DEP_CXXFLAGS = $($(CPLUSPLUS)_DEP_CFLAGS)
#--------------------------------------------------
# C++ compiler
@@ -198,10 +203,11 @@ DEPENDS_RULE = -$(COMPILE.cc) $(DEPENDS_FLAG) $^ > DEPENDS
INCLUDES = -I. -I.. $(USR_INCLUDES) $(TARGET_INCLUDES) $(EPICS_INCLUDES) $(OP_SYS_INCLUDES)
CFLAGS = $(OPT_CFLAGS) $(DEBUG_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS)\
$(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(INCLUDES)
$(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(VENDOR_DEP_CFLAGS) $(STATIC_CFLAGS)\
$(OP_SYS_CFLAGS) $(INCLUDES)
CXXFLAGS = $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS)\
$(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS) $(STATIC_CXXCFLAGS)\
$(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS) $(VENDOR_DEP_CXXFLAGS) $(STATIC_CXXCFLAGS)\
$(OP_SYS_CFLAGS) $(TEMPL_INST_CXXFLAG) $(INCLUDES)
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS)\
@@ -210,7 +216,7 @@ LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS)\
LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(ARCH_DEP_LDLIBS)\
$(STATIC_LDLIBS) $(OP_SYS_LDLIBS)
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS)
CPPFLAGS += $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)
CPPSNCFLAGS = $(INCLUDES)

View File

@@ -0,0 +1,9 @@
# CONFIG_HOST_ARCH.LynxOS
#
# Override values in CONFIG.LynxOS
# Include definitions common to all Unix archs
include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.UnixCommon
WIND_HOST_TYPE = LynxOS

View File

@@ -10,5 +10,3 @@ MKDIR = mkdir
RMDIR = rm -rf
CHMOD = "/bin/chmod"
PERL = /usr/bin/perl

View File

@@ -16,4 +16,3 @@ WIND_HOST_TYPE = x86-win32
# Use std path variables from ms
HOME = $(HOMEDRIVE)$(HOMEPATH)
PERL = C:\\Perl\\bin\\Perl$(EXE)

View File

@@ -11,4 +11,3 @@ TORNADO=YES
WIND_HOST_TYPE = cygwin32
PERL = C:\\Perl\\bin\\Perl$(EXE)

View File

@@ -20,6 +20,7 @@
# sgi
# Linux
# WIN32
# LynxOS
#
# HOST_ARCH now an environment variable
# HOST_ARCH=$(shell /usr/local/epics/startup/HostArch)
@@ -66,7 +67,7 @@ VX_DIR_YES = /usr/local/vw/tornado101
VX_DIR_NO=/usr/local/vw/vxV52p1/vw
# Directory for TORNADO=NO gnu gcc crosscompiler
VX_GNU_NO = $(VX_DIR)/../vxgccV2.2.3.1
VX_GNU_NO = $(VX_DIR_NO)/../vxgccV2.2.3.1
# Directory for TORNADO=NO gnu g++ crosscompiler
# used by applications for hideos builds only
@@ -77,13 +78,11 @@ GNU_DIR = /usr/local/hideos/gnu_install-2.7.2
# GCC (gcc -ansi) GNU
# ACC (acc) OS VENDOR
# HPACC (cc -Aa) OTHER VENDOR
#ANSI=HPACC
ANSI=ACC
# C++ Compiler (for Host builds)
# G++ (g++) GNU C++
# CCC (CC) OS VENDOR C++
#CPLUSPLUS=G++
#Note: if CPLUSPLUS is empty then C++ src codes are not built
#CPLUSPLUS= # use this if site does not have C++ compiler
CPLUSPLUS=CCC

View File

@@ -0,0 +1,15 @@
#
# $Id$
#
# Site Specific Configuration Information
# Only the local epics system manager should modify this file
# APS overrides of definitions
GCC = gcc
G++ = g++
CC = gcc
CCC = g++
ACC = gcc
PLUSPLUS = g++
CXX = g++

View File

@@ -357,7 +357,8 @@ buildInstall :: build $(TARGETS) \
clean::
@echo "Cleaning"
@$(RM) *.i *$(OBJ) *.a $(PROD) $(TESTPROD) $(LIBNAME) $(SHRLIBNAME) $(INC) *$(RES) $(TARGETS)
@$(RM) *.i *$(OBJ) *.a $(PROD) $(TESTPROD) $(LIBNAME) $(SHRLIBNAME) $(INC) *$(RES) $(TARGETS) \
$(DBDINSTALL) $(MENUS) $(RECTYPES) $(BPTS) $(DBDNAME)
#---------------------------------------------------------------
# Products
@@ -440,7 +441,11 @@ endif #ifdef PROD
#
INSTALL_JAVA = $(INSTALL_LOCATION)/javalib
DIRECTORY_TARGETS += $(INSTALL_JAVA) $(INSTALL_JAVA)/$(PACKAGE)
DIRECTORY_TARGETS += $(INSTALL_JAVA)
ifdef PACKAGE
DIRECTORY_TARGETS += $(INSTALL_JAVA)/$(PACKAGE)
endif
vpath %.class $(INSTALL_JAVA)/$(PACKAGE)

View File

@@ -82,11 +82,11 @@ clean::
%: %.o
$(RM) $@
$(LINK.c)$@ $< $(LDLIBS)
$(LINK.c) $@ $< $(LDLIBS)
#$(PROD): $(OBJS)
# $(RM) $@
# $(LINK.c)$@ $(OBJS)
# $(LINK.c) $@ $(OBJS)
%.o: %.c
$(RM) $@
@@ -137,7 +137,7 @@ endif
%.c: ../%.st
@echo "preprocessing $*.st"
@$(RM) $*.i
$(CPP) $(CPPFLAGS) $< $*.i
$(CPP) $(CPPFLAGS) $(CPPSNCFLAGS) $< $*.i
@echo "converting $*.i"
@$(RM) $@
$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $*.i
@@ -177,7 +177,6 @@ binInstalls: $(BIN_INSTALLS)
$(INSTALL) -d -m 555 $^ $(INSTALL_BIN)
$(INSTALL_DBD)/%: %
@echo "Installing $@"
@echo "Installing $@"
@$(INSTALL) -d -m 644 $< $(INSTALL_DBD)

View File

@@ -50,28 +50,19 @@ extern struct dbBase *pdbbase;
static brkTable *findBrkTable(short linr)
{
brkTable *pbrkTable;
dbMenu *pdbMenu;
char name[50];
char *pname = name;
int len,ind;
pdbMenu = dbFindMenu(pdbbase,"menuConvert");
len = strlen(pdbMenu->papChoiceValue[linr]);
if(len>=sizeof(name)) {
epicsPrintf("Break Tables(findBrkTable) choice name too long\n");
if(!pdbMenu) {
epicsPrintf("findBrkTable: menuConvert does not exist\n");
return(0);
}
strcpy(pname,pdbMenu->papChoiceValue[linr]);
for(ind=0; ind<strlen(pname); ind++) {
if(!isalnum(pname[ind])) {
pname[ind] = '\0';
break;
}
if(linr<0 || linr>=pdbMenu->nChoice) {
epicsPrintf("findBrkTable linr %d but menuConvert has %d choices\n",
linr,pdbMenu->nChoice);
return(0);
}
pbrkTable = dbFindBrkTable(pdbbase,pname);
return(pbrkTable);
return(dbFindBrkTable(pdbbase,pdbMenu->papChoiceValue[linr]));
}
long cvtRawToEngBpt(double *pval,short linr,short init, void **ppbrk,

View File

@@ -137,7 +137,7 @@ HDRVERSIONID(caerrh, "@(#) $Id$")
#define ECA_DEFUNCT DEFMSG(CA_K_FATAL, 34)
#define ECA_EMPTYSTR DEFMSG(CA_K_WARNING, 35)
#define ECA_NOREPEATER DEFMSG(CA_K_WARNING, 36)
#define ECA_NOCHANMSG DEFMSG(CA_K_WARNNING, 37)
#define ECA_NOCHANMSG DEFMSG(CA_K_WARNING, 37)
#define ECA_DLCKREST DEFMSG(CA_K_WARNING, 38)
#define ECA_SERVBEHIND DEFMSG(CA_K_WARNING, 39)
#define ECA_NOCAST DEFMSG(CA_K_WARNING, 40)

View File

@@ -199,3 +199,28 @@ Changes between epics 3.13 Beta 11 and 3.13 Beta 12
o The constructor for class casPV no longer requires a reference to the
server. For backwards compatibility a reference to the server may still be
supplied, but it will not be used.
Changes after epics 3.13.1
**** API Change ****
o The virtual function caServer::createPV() has been deprecated in favor of the new
virtual function caServer::attachPV() which provides exactly the same functionality.
The name was changed so that the purpose of this virtual function is more clear
to server tool designers. To remain backwards compatible the virtual function
caServer::createPV() is called by the base implementation of caServer::attachPV().
In a future release all calls to the virtual member function caServer::createPV()
will be eliminated.
o The class pvCreateReturn has been deprecated in favor of the new class
pvAttachReturn which provides exactly the same functionality. The name was
changed so that the purpose of this class is more clear to server tool
designers. To remain backwards compatible the class pvCreateReturn derives from
public base class pvAttachReturn. In a future release the class pvCreateReturn
will be eliminated.
o The class casAsyncPVCreateIO has been deprecated in favor of the new class
casAsyncPVAttachIO which provides exactly the same functionality. The name was
changed so that the purpose of this class is more clear to server tool
designers. To remain backwards compatible the class casAsyncPVCreateIO derives from
public base class casAsyncPVAttachIO. In a future release the class casAsyncPVCreateIO
will be eliminated.

View File

@@ -34,7 +34,7 @@ LIBSRCS += casAsyncXXIO.cc
LIBSRCS += casAsyncRdIOI.cc
LIBSRCS += casAsyncWtIOI.cc
LIBSRCS += casAsyncExIOI.cc
LIBSRCS += casAsyncPVCIOI.cc
LIBSRCS += casAsyncAtIOI.cc
LIBSRCS += casEventSys.cc
LIBSRCS += casMonitor.cc
LIBSRCS += casMonEvent.cc

View File

@@ -4,6 +4,9 @@
//
// $Id$
// $Log$
// Revision 1.2 1997/05/13 14:23:02 jbk
// added comments at top
//
#include <stdio.h>
#include <string.h>
@@ -158,7 +161,7 @@ pvExistReturn monServer::pvExistTest(const casCtx& c,const char* pvname)
return pvExistReturn(S_casApp_pvNotFound);
}
casPV* monServer::createPV(const casCtx& c,const char* pvname)
casPV* monServer::pvAttach(const casCtx& c,const char* pvname)
{
monNode* node;

View File

@@ -7,6 +7,9 @@
*
* $Id$
* $Log$
* Revision 1.2 1997/05/13 14:23:02 jbk
* added comments at top
*
*/
#include "casdef.h"
@@ -47,7 +50,7 @@ public:
// CAS virtual overloads
virtual pvExistReturn pvExistTest(const casCtx& c,const char* pvname);
virtual casPV* createPV(const casCtx& c,const char* pvname);
virtual casPV* pvAttach(const casCtx& c,const char* pvname);
// CAS application management functions
int repeaterConnect(void);

View File

@@ -197,9 +197,9 @@ pvExistReturn exServer::pvExistTest
}
//
// exServer::createPV()
// exServer::pvAttach()
//
pvCreateReturn exServer::createPV
pvAttachReturn exServer::pvAttach
(const casCtx &ctx, const char *pName)
{
//
@@ -360,10 +360,10 @@ void exAsyncCreateIO::expire()
pPV = this->pvi.createPV(this->cas, aitFalse, this->scanOn);
if (pPV) {
this->postIOCompletion (pvCreateReturn(*pPV));
this->postIOCompletion (pvAttachReturn(*pPV));
}
else {
this->postIOCompletion (pvCreateReturn(S_casApp_noMemory));
this->postIOCompletion (pvAttachReturn(S_casApp_noMemory));
}
}

View File

@@ -316,7 +316,7 @@ public:
void show (unsigned level) const;
pvExistReturn pvExistTest (const casCtx&, const char *pPVName);
pvCreateReturn createPV (const casCtx &ctx, const char *pPVName);
pvAttachReturn pvAttach (const casCtx &ctx, const char *pPVName);
void installAliasName(pvInfo &info, const char *pAliasName);
inline void removeAliasName(pvEntry &entry);
@@ -538,14 +538,14 @@ private:
// exAsyncCreateIO
// (PV create async IO)
//
class exAsyncCreateIO : public casAsyncPVCreateIO, public exOSITimer {
class exAsyncCreateIO : public casAsyncPVAttachIO, public exOSITimer {
public:
//
// exAsyncCreateIO()
//
exAsyncCreateIO(pvInfo &pviIn, exServer &casIn,
const casCtx &ctxIn, aitBool scanOnIn) :
casAsyncPVCreateIO(ctxIn), exOSITimer(0.00001),
casAsyncPVAttachIO(ctxIn), exOSITimer(0.00001),
pvi(pviIn), cas(casIn), scanOn(scanOnIn) {}
~exAsyncCreateIO()

View File

@@ -1,6 +1,9 @@
// $Id$
// $Log$
// Revision 1.4 1997/06/25 05:56:38 jhill
// align with API changes
//
// Revision 1.3 1997/06/13 09:15:47 jhill
// connect proto changes
//
@@ -172,29 +175,29 @@ pvExistReturn serv::pvExistTest(const casCtx&,const char* pvname)
return pvExistReturn(rc);
}
pvCreateReturn serv::createPV(const casCtx& in,const char* pvname)
pvAttachReturn serv::pvAttach(const casCtx& in,const char* pvname)
{
casPV* pPV=NULL;
int val;
Debug1("createPV: %s\n",pvname);
Debug1("pvAttach: %s\n",pvname);
if(strncmp(pvname,prefix,prefix_len)==0)
{
// we may have this one, number is after underscore
if(sscanf(&pvname[prefix_len+1],"%d",&val)==1)
{
Debug("createPV: I am making this PV\n");
Debug("pvAttach: I am making this PV\n");
if(val>=0 && val<pv_total)
pPV=new servPV(*this,pvname,db_sync[val]);
}
}
if (pPV) {
return pvCreateReturn(*pPV);
return pvAttachReturn(*pPV);
}
else {
return pvCreateReturn(S_casApp_pvNotFound);
return pvAttachReturn(S_casApp_pvNotFound);
}
}

View File

@@ -2,6 +2,9 @@
/*
* $Id$
* $Log$
* Revision 1.3 1997/06/13 09:15:48 jhill
* connect proto changes
*
* Revision 1.2 1997/03/05 21:16:23 jbk
* Fixes cvs log id at top
*
@@ -73,7 +76,7 @@ public:
virtual ~serv(void);
virtual pvExistReturn pvExistTest(const casCtx& c,const char* pvname);
virtual pvCreateReturn createPV(const casCtx& c,const char* pvname);
virtual pvAttachReturn pvAttach(const casCtx& c,const char* pvname);
int InitDB(void);
int Main(void);

View File

@@ -29,6 +29,9 @@
*
* History
* $Log$
* Revision 1.8 1997/08/05 00:46:56 jhill
* fixed warnings
*
* Revision 1.7 1997/06/25 05:09:00 jhill
* removed templInst.cc
*
@@ -130,6 +133,17 @@ epicsShareFunc pvCreateReturn caServer::createPV (const casCtx &, const char *)
return S_casApp_pvNotFound;
}
//
// caServer::pvAttach()
//
epicsShareFunc pvAttachReturn caServer::pvAttach (const casCtx &ctx, const char *pAliasName)
{
//
// remain backwards compatible (call deprecated routine)
//
return this->createPV(ctx, pAliasName);
}
//
// caServer::registerEvent()
//

View File

@@ -29,6 +29,9 @@
*
* History
* $Log$
* Revision 1.13 1998/10/27 18:28:19 jhill
* fixed warnings
*
* Revision 1.12 1998/10/23 00:28:19 jhill
* fixed HP-UX warnings
*
@@ -74,7 +77,14 @@
#include "server.h"
#include "casCtxIL.h" // casCtx in line func
static const osiTime CAServerMaxBeaconPeriod (5.0 /* sec */);
//
// the maximum beacon period if EPICS_CA_BEACON_PERIOD isnt available
//
static const osiTime CAServerMaxBeaconPeriod (15.0 /* sec */);
//
// the initial beacon period
//
static const osiTime CAServerMinBeaconPeriod (1.0e-3 /* sec */);
@@ -162,9 +172,10 @@ debugLevel (0u),
pvCountEstimate (nPV<100u?100u:nPV),
haveBeenInitialized (FALSE)
{
caStatus status;
int resLibStatus;
caStatus status;
int resLibStatus;
double maxPeriod;
assert (&adapter != NULL);
if (this->osiMutex::init ()) {
@@ -207,11 +218,23 @@ haveBeenInitialized (FALSE)
resLibStatus = this->uintResTable<casRes>::init
(this->pvCountEstimate*2u);
if (resLibStatus) {
errMessage (S_cas_noMemory,
"integer resource id table init failed");
errMessage (S_cas_noMemory, "integer resource id table init failed");
return;
}
status = envGetDoubleConfigParam (&EPICS_CA_BEACON_PERIOD, &maxPeriod);
if (status || maxPeriod<=0.0) {
this->maxBeaconInterval = CAServerMaxBeaconPeriod;
ca_printf (
"EPICS \"%s\" float fetch failed\n", EPICS_CA_BEACON_PERIOD.name);
ca_printf (
"Setting \"%s\" = %f\n", EPICS_CA_BEACON_PERIOD.name,
(double) this->maxBeaconInterval);
}
else {
this->maxBeaconInterval = maxPeriod;
}
this->haveBeenInitialized = TRUE;
return;
}
@@ -306,14 +329,14 @@ void caServerI::advanceBeaconPeriod()
//
// return if we are already at the plateau
//
if (this->beaconPeriod >= CAServerMaxBeaconPeriod) {
if (this->beaconPeriod >= this->maxBeaconInterval) {
return;
}
this->beaconPeriod += this->beaconPeriod;
if (this->beaconPeriod >= CAServerMaxBeaconPeriod) {
this->beaconPeriod = CAServerMaxBeaconPeriod;
if (this->beaconPeriod >= this->maxBeaconInterval) {
this->beaconPeriod = this->maxBeaconInterval;
}
}

View File

@@ -29,23 +29,9 @@
*
* History
* $Log$
* Revision 1.2 1997/06/13 09:15:54 jhill
* connect proto changes
*
* Revision 1.1 1997/04/10 19:38:14 jhill
* installed
*
* Revision 1.2 1996/11/06 22:15:53 jhill
* allow monitor init read to using rd async io
*
* Revision 1.1 1996/11/02 01:01:02 jhill
* installed
*
*
*
*/
#include "server.h"
#include "casAsyncIOIIL.h" // casAsyncIOI in line func
#include "casChannelIIL.h" // casChannelI in line func
@@ -53,54 +39,54 @@
#include "casCoreClientIL.h" // casCoreClient in line func
//
// casAsyncPVCIOI::casAsyncPVCIOI()
// casAsyncAtIOI::casAsyncAtIOI()
//
epicsShareFunc casAsyncPVCIOI::casAsyncPVCIOI(const casCtx &ctx,
casAsyncPVCreateIO &ioIn) :
casAsyncIOI(*ctx.getClient(), ioIn),
msg(*ctx.getMsg()),
retVal(S_cas_badParameter)
epicsShareFunc casAsyncAtIOI::casAsyncAtIOI (const casCtx &ctx,
casAsyncPVAttachIO &ioIn) :
casAsyncIOI (*ctx.getClient(), ioIn),
msg (*ctx.getMsg()),
retVal (S_cas_badParameter)
{
assert (&this->msg);
this->client.installAsyncIO(*this);
this->client.installAsyncIO (*this);
}
//
// casAsyncPVCIOI::~casAsyncPVCIOI()
// casAsyncAtIOI::~casAsyncAtIOI()
//
casAsyncPVCIOI::~casAsyncPVCIOI()
casAsyncAtIOI::~casAsyncAtIOI()
{
this->client.removeAsyncIO(*this);
this->client.removeAsyncIO (*this);
}
//
// casAsyncPVCIOI::postIOCompletion()
// casAsyncAtIOI::postIOCompletion()
//
epicsShareFunc caStatus casAsyncPVCIOI::postIOCompletion(const pvCreateReturn &retValIn)
epicsShareFunc caStatus casAsyncAtIOI::postIOCompletion(const pvAttachReturn &retValIn)
{
this->retVal = retValIn;
return this->postIOCompletionI();
return this->postIOCompletionI ();
}
//
// casAsyncPVCIOI::cbFuncAsyncIO()
// casAsyncAtIOI::cbFuncAsyncIO()
// (called when IO completion event reaches top of event queue)
//
caStatus casAsyncPVCIOI::cbFuncAsyncIO()
caStatus casAsyncAtIOI::cbFuncAsyncIO()
{
caStatus status;
switch (this->msg.m_cmmd) {
case CA_PROTO_CLAIM_CIU:
status = this->client.createChanResponse(this->msg, this->retVal);
break;
default:
this->reportInvalidAsynchIO(this->msg.m_cmmd);
status = S_cas_internal;
break;
}
switch (this->msg.m_cmmd) {
case CA_PROTO_CLAIM_CIU:
status = this->client.createChanResponse (this->msg, this->retVal);
break;
default:
this->reportInvalidAsynchIO (this->msg.m_cmmd);
status = S_cas_internal;
break;
}
return status;
}

View File

@@ -29,6 +29,9 @@
*
* History
* $Log$
* Revision 1.4 1998/02/05 22:51:34 jhill
* include resourceLib.h
*
* Revision 1.3 1997/08/05 00:47:02 jhill
* fixed warnings
*
@@ -88,3 +91,10 @@ epicsShareFunc casAsyncPVCreateIO::~casAsyncPVCreateIO()
{
}
//
// This must be virtual so that derived destructor will
// be run indirectly. Therefore it cannot be inline.
//
epicsShareFunc casAsyncPVAttachIO::~casAsyncPVAttachIO()
{
}

View File

@@ -29,6 +29,11 @@
*
* History
* $Log$
* Revision 1.10 1998/10/28 23:51:00 jhill
* server nolonger throws exception when a poorly formed get/put call back
* request arrives. Instead a get/put call back response is sent which includes
* unsuccessful status
*
* Revision 1.9 1998/07/08 15:38:04 jhill
* fixed lost monitors during flow control problem
*
@@ -153,7 +158,7 @@ caStatus casCoreClient::asyncSearchResponse(casDGIntfIO &,
{
return S_casApp_noSupport;
}
caStatus casCoreClient::createChanResponse(const caHdr &, const pvCreateReturn &)
caStatus casCoreClient::createChanResponse(const caHdr &, const pvAttachReturn &)
{
return S_casApp_noSupport;
}

View File

@@ -29,6 +29,9 @@
*
* History
* $Log$
* Revision 1.15 1998/04/20 18:11:01 jhill
* better debug mesg
*
* Revision 1.14 1998/04/10 23:13:14 jhill
* fixed byte swap problems, and use default port if server tool returns PV IP addr, but no port
*
@@ -164,7 +167,7 @@ caStatus casDGClient::searchAction()
// monitor prior to calling PV exist test so that when
// the server runs out of memory we dont reply to
// search requests, and therefore dont thrash through
// caServer::pvExistTest() and casCreatePV::createPV()
// caServer::pvExistTest() and casCreatePV::pvAttach()
//
#ifdef vxWorks
# error code needs to be implemented here when we port

View File

@@ -29,6 +29,9 @@
*
* History
* $Log$
* Revision 1.9 1998/10/27 18:28:20 jhill
* fixed warnings
*
* Revision 1.8 1998/05/05 16:26:31 jhill
* fixed warnings
*
@@ -125,16 +128,16 @@ int casEventRegistry::initRegistry()
//
// casEventRegistry::maskAllocator()
//
inline casEventMask casEventRegistry::maskAllocator()
casEventMask casEventRegistry::maskAllocator()
{
casEventMask evMask;
casEventMask evMask;
this->mutex.osiLock();
if (this->allocator<CHAR_BIT*sizeof(evMask.mask)) {
evMask.mask = 1u<<(this->allocator++);
}
if (this->allocator<CHAR_BIT*sizeof(evMask.mask)) {
evMask.mask = 1u<<(this->allocator++);
}
this->mutex.osiUnlock();
return evMask;
return evMask;
}
//

View File

@@ -29,6 +29,9 @@
*
* History
* $Log$
* Revision 1.18 1998/11/18 18:52:49 jhill
* fixed casChannelI undefined symbols on WIN32
*
* Revision 1.17 1998/10/23 00:28:20 jhill
* fixed HP-UX warnings
*
@@ -278,7 +281,7 @@ class casAsyncIO;
class casAsyncReadIO;
class casAsyncWriteIO;
class casAsyncPVExistIO;
class casAsyncPVCreateIO;
class casAsyncPVAttachIO;
class casAsyncIOI : public casEvent, public tsDLNode<casAsyncIOI> {
public:
@@ -376,7 +379,7 @@ class casDGIntfIO;
//
// casAsyncExIOI
//
// (server internal asynchronous read IO class)
// (server internal asynchronous PV exist test IO class)
//
class casAsyncExIOI : public casAsyncIOI {
public:
@@ -398,25 +401,25 @@ private:
};
//
// casAsyncPVCIOI
// casAsyncAtIOI
//
// (server internal asynchronous read IO class)
// (server internal asynchronous PV attach IO class)
//
class casAsyncPVCIOI : public casAsyncIOI {
class casAsyncAtIOI : public casAsyncIOI {
public:
epicsShareFunc casAsyncPVCIOI(const casCtx &ctx, casAsyncPVCreateIO &ioIn);
virtual ~casAsyncPVCIOI();
epicsShareFunc casAsyncAtIOI(const casCtx &ctx, casAsyncPVAttachIO &ioIn);
virtual ~casAsyncAtIOI();
//
// place notification of IO completion on the event queue
//
epicsShareFunc caStatus postIOCompletion(const pvCreateReturn &retVal);
epicsShareFunc caStatus postIOCompletion(const pvAttachReturn &retVal);
epicsShareFunc caStatus cbFuncAsyncIO();
casAsyncIO &getAsyncIO();
private:
caHdr const msg;
pvCreateReturn retVal;
pvAttachReturn retVal;
};
class casChannel;

View File

@@ -29,6 +29,11 @@
*
* History
* $Log$
* Revision 1.26 1998/10/28 23:51:01 jhill
* server nolonger throws exception when a poorly formed get/put call back
* request arrives. Instead a get/put call back response is sent which includes
* unsuccessful status
*
* Revision 1.25 1998/09/24 20:40:07 jhill
* o block if unable to get buffer space for the exception message
* o subtle changes related to properly dealing with situations where
@@ -962,10 +967,11 @@ caStatus casStrmClient::clientNameAction()
*/
caStatus casStrmClient::claimChannelAction()
{
const caHdr *mp = this->ctx.getMsg();
char *pName = (char *) this->ctx.getData();
unsigned nameLength;
caStatus status;
const caHdr *mp = this->ctx.getMsg();
char *pName = (char *) this->ctx.getData();
caServerI &cas = *this->ctx.getServer();
unsigned nameLength;
caStatus status;
/*
* The available field is used (abused)
@@ -994,7 +1000,6 @@ caStatus casStrmClient::claimChannelAction()
return S_cas_badProtocol; // disconnect client
}
if (mp->m_postsize == 0u) {
return S_cas_badProtocol; // disconnect client
}
@@ -1014,8 +1019,12 @@ caStatus casStrmClient::claimChannelAction()
//
this->osiLock();
this->asyncIOFlag = 0u;
const pvCreateReturn pvcr =
(*this->ctx.getServer())->createPV (this->ctx, pName);
//
// attach to the PV
//
pvAttachReturn pvar = cas->pvAttach (this->ctx, pName);
//
// prevent problems when they initiate
// async IO but dont return status
@@ -1024,18 +1033,17 @@ caStatus casStrmClient::claimChannelAction()
if (this->asyncIOFlag) {
status = S_cas_success;
}
else if (pvcr.getStatus() == S_casApp_asyncCompletion) {
status = this->createChanResponse(*mp,
pvCreateReturn(S_cas_badParameter));
else if (pvar.getStatus() == S_casApp_asyncCompletion) {
status = this->createChanResponse(*mp, S_cas_badParameter);
errMessage(S_cas_badParameter,
"- expected asynch IO creation from caServer::createPV()");
"- expected asynch IO creation from caServer::pvAttach()");
}
else if (pvcr.getStatus() == S_casApp_postponeAsyncIO) {
else if (pvar.getStatus() == S_casApp_postponeAsyncIO) {
status = S_casApp_postponeAsyncIO;
this->ctx.getServer()->addItemToIOBLockedList(*this);
}
else {
status = this->createChanResponse(*mp, pvcr);
status = this->createChanResponse(*mp, pvar);
}
this->osiUnlock();
return status;
@@ -1046,7 +1054,7 @@ caStatus casStrmClient::claimChannelAction()
//
// LOCK must be applied
//
caStatus casStrmClient::createChanResponse(const caHdr &hdr, const pvCreateReturn &pvcr)
caStatus casStrmClient::createChanResponse(const caHdr &hdr, const pvAttachReturn &pvar)
{
casPVI *pPV;
casChannel *pChan;
@@ -1056,11 +1064,11 @@ caStatus casStrmClient::createChanResponse(const caHdr &hdr, const pvCreateRetur
unsigned dbrType;
caStatus status;
if (pvcr.getStatus() != S_cas_success) {
return this->channelCreateFailed(&hdr, pvcr.getStatus());
if (pvar.getStatus() != S_cas_success) {
return this->channelCreateFailed(&hdr, pvar.getStatus());
}
pPV = pvcr.getPV();
pPV = pvar.getPV();
//
// If status is ok and the PV isnt set then guess that the
@@ -1096,7 +1104,7 @@ caStatus casStrmClient::createChanResponse(const caHdr &hdr, const pvCreateRetur
pChan = (*pPV)->createChannel(this->ctx,
this->pUserName, this->pHostName);
if (!pChan) {
pvcr.getPV()->deleteSignal();
pvar.getPV()->deleteSignal();
return this->channelCreateFailed(&hdr, S_cas_noMemory);
}
@@ -1175,7 +1183,7 @@ caStatus createStatus)
if (createStatus == S_casApp_asyncCompletion) {
errMessage(S_cas_badParameter,
"- no asynchronous IO create in createPV() ?");
"- no asynchronous IO create in pvAttach() ?");
errMessage(S_cas_badParameter,
"- or S_casApp_asyncCompletion was async IO competion code ?");
}

View File

@@ -30,6 +30,12 @@
* Modification Log:
* -----------------
* $Log$
* Revision 1.21 1998/12/07 23:21:53 jhill
* doc
*
* Revision 1.20 1998/09/24 20:40:56 jhill
* new error message
*
* Revision 1.19 1998/06/18 00:09:39 jhill
* installed bwd compat casPV constructor
*
@@ -249,14 +255,41 @@ private:
class casPV;
class epicsShareClass pvCreateReturn {
//
// pvAttachReturn
//
class epicsShareClass pvAttachReturn {
public:
pvCreateReturn(caStatus statIn)
{ this->pPV = NULL; this->stat = statIn; }
pvCreateReturn(casPV &pv)
{ this->pPV = &pv; this->stat = S_casApp_success; }
pvAttachReturn ()
{
this->pPV = NULL;
//
// A pv name is required for success
//
this->stat = S_cas_badParameter;
}
const pvCreateReturn &operator = (caStatus rhs)
pvAttachReturn (caStatus statIn)
{
this->pPV = NULL;
if (statIn==S_casApp_success) {
//
// A pv name is required for success
//
this->stat = S_cas_badParameter;
}
else {
this->stat = statIn;
}
}
pvAttachReturn (casPV &pv)
{
this->pPV = &pv;
this->stat = S_casApp_success;
}
const pvAttachReturn &operator = (caStatus rhs)
{
this->pPV = NULL;
if (rhs == S_casApp_success) {
@@ -269,7 +302,7 @@ public:
}
//
// const pvCreateReturn &operator = (casPV &pvIn)
// const pvAttachReturn &operator = (casPV &pvIn)
//
// The above assignement operator is not included
// because it does not match the strict definition of an
@@ -278,7 +311,7 @@ public:
// pointer here because the server library _will_ make
// controlled modification of the PV in the future.
//
const pvCreateReturn &operator = (casPV *pPVIn)
const pvAttachReturn &operator = (casPV *pPVIn)
{
if (pPVIn!=NULL) {
this->stat = S_casApp_success;
@@ -297,6 +330,16 @@ private:
caStatus stat;
};
//
// pvCreateReturn (depricated)
// (the class "pvCreateReturn" will be deleted in a future release)
//
class epicsShareClass pvCreateReturn : public pvAttachReturn {
public:
pvCreateReturn (caStatus statIn) : pvAttachReturn(statIn) {};
pvCreateReturn (casPV &pvIn) : pvAttachReturn (pvIn) {};
};
#include "casEventMask.h" // EPICS event select class
#include "casInternal.h" // CA server private
@@ -336,6 +379,10 @@ public:
//
// pvExistTest()
//
// This function is called by the server library when it needs to
// determine if a named PV exists (or could be created) in the
// server tool.
//
// The request is allowed to complete asynchronously
// (see Asynchronous IO Classes below).
//
@@ -356,22 +403,27 @@ public:
const char *pPVAliasName);
//
// createPV() is called _every_ time that a PV is attached to
// by a client. The name supplied here may be a PV canonical
// (base) name or it may instead be a PV alias name.
// pvAttach()
//
// This function is called _every_ time that a client attaches to the PV.
// The name supplied here will be either a canonical PV name or an alias
// PV name.
//
// The request is allowed to complete asynchronously
// (see Asynchronous IO Classes below).
//
// IMPORTANT:
// It is a responsability of the server tool
// to detect attempts by the server lib to create a 2nd PV with
// the same name as an existing PV. It is also the responsability
// of the server tool to detect attempts by the server lib to
// create a 2nd PV with a name that is an alias of an existing PV.
// In these situations the server tool should avoid PV duplication
// by returning a pointer to an existing PV (and not create a new
// PV).
// It is a responsibility of the server tool to detect attempts by
// the server library to attach to an existing PV. If the PV does not
// exist then the server tool should create it. Otherwise, the server
// tool should return a pointer to the preexisting PV.
//
// The server tool is encouraged to accept multiple PV name aliases
// for the same PV here.
//
// In all situations the server tool should avoid PV duplication
// by returning a pointer to an existing PV if the PV alias name
// matches a preexisting PV's name or any of its aliases.
//
// example return from this procedure:
// return pPV; // success (pass by pointer)
@@ -386,7 +438,7 @@ public:
// asynchronous IO operation (create or exist) completes
// against the server.
//
epicsShareFunc virtual pvCreateReturn createPV (const casCtx &ctx,
epicsShareFunc virtual pvAttachReturn pvAttach (const casCtx &ctx,
const char *pPVAliasName);
//
@@ -402,6 +454,15 @@ public:
// caServer to a caServerI
//
friend class casPVI;
//
// createPV() (deprecated)
// The virtual member function "createPV" will be deleted in a
// future release. The base implementation of pvAttach() currently
// calls createPV().
//
epicsShareFunc virtual pvCreateReturn createPV (const casCtx &ctx,
const char *pPVAliasName);
};
//
@@ -702,7 +763,7 @@ public:
// Virtual Function Asynchronous IO Class
// ----------------- ---------------------
// caServer::pvExistTest() casAsyncPVExistIO
// caServer::createPV() casAsyncCreatePVIO
// caServer::pvAttach() casAsyncPVAttachIO
// casPV::read() casAsyncReadIO
// casPV::write() casAsyncWriteIO
//
@@ -902,30 +963,30 @@ public:
};
//
// casAsyncPVCreateIO
// - for use with caServer::createPV()
// casAsyncPVAttachIO
// - for use with caServer::pvAttach()
//
class casAsyncPVCreateIO : public casAsyncIO, private casAsyncPVCIOI {
class casAsyncPVAttachIO : public casAsyncIO, private casAsyncAtIOI {
public:
//
// casAsyncPVCreateIO()
// casAsyncPVAttachIO()
//
epicsShareFunc casAsyncPVCreateIO(const casCtx &ctx) :
casAsyncPVCIOI(ctx, *this) {}
epicsShareFunc casAsyncPVAttachIO (const casCtx &ctx) :
casAsyncAtIOI(ctx, *this) {}
//
// force virtual destructor
//
epicsShareFunc virtual ~casAsyncPVCreateIO();
epicsShareFunc virtual ~casAsyncPVAttachIO();
//
// place notification of IO completion on the event queue
// (this function does not delete the casAsyncIO object).
// Only the first call to this function has any effect.
//
epicsShareFunc caStatus postIOCompletion(const pvCreateReturn &retValIn)
epicsShareFunc caStatus postIOCompletion(const pvAttachReturn &retValIn)
{
return this->casAsyncPVCIOI::postIOCompletion (retValIn);
return this->casAsyncAtIOI::postIOCompletion (retValIn);
}
//
@@ -937,9 +998,20 @@ public:
//
epicsShareFunc caServer *getCAS() const
{
return this->casAsyncPVCreateIO::getCAS();
return this->casAsyncAtIOI::getCAS();
}
};
//
// casAsyncPVCreateIO (deprecated)
// (this class will be deleted in a future release)
//
class casAsyncPVCreateIO : public casAsyncPVAttachIO {
public:
epicsShareFunc casAsyncPVCreateIO(const casCtx &ctx) :
casAsyncPVAttachIO (ctx) {}
epicsShareFunc virtual ~casAsyncPVCreateIO();
};
#endif // ifdef includecasdefh (this must be the last line in this file)

View File

@@ -29,6 +29,14 @@
*
* History
* $Log$
* Revision 1.30 1998/12/01 18:54:45 jhill
* Use EPICS_CA_BEACON_PERIOD
*
* Revision 1.29 1998/10/28 23:51:01 jhill
* server nolonger throws exception when a poorly formed get/put call back
* request arrives. Instead a get/put call back response is sent which includes
* unsuccessful status
*
* Revision 1.28 1998/10/27 18:28:20 jhill
* fixed warnings
*
@@ -522,7 +530,7 @@ public:
casDGIntfIO &outMsgIO, const caNetAddr &outAddr,
const caHdr &, const pvExistReturn &);
virtual caStatus createChanResponse(
const caHdr &, const pvCreateReturn &);
const caHdr &, const pvAttachReturn &);
virtual caStatus readResponse(
casChannelI *, const caHdr &, gdd *, const caStatus);
virtual caStatus readNotifyResponse(
@@ -672,7 +680,7 @@ public:
// one function for each CA request type that has
// asynchronous completion
//
virtual caStatus createChanResponse(const caHdr &, const pvCreateReturn &);
virtual caStatus createChanResponse(const caHdr &, const pvAttachReturn &);
caStatus readResponse(casChannelI *pChan, const caHdr &msg,
gdd *pDesc, const caStatus status);
caStatus readNotifyResponse(casChannelI *pChan, const caHdr &msg,
@@ -963,6 +971,7 @@ private:
//casCtx ctx;
tsDLList<casStrmClient> clientList;
tsDLList<casIntfOS> intfList;
osiTime maxBeaconInterval;
osiTime beaconPeriod;
caServer &adapter;
unsigned debugLevel;

View File

@@ -5,6 +5,9 @@
//
//
// $Log$
// Revision 1.17 1998/11/11 01:31:59 jhill
// reduced socket buffer size
//
// Revision 1.16 1998/06/16 02:35:52 jhill
// use aToIPAddr and auto attach to winsock if its a static build
//
@@ -81,7 +84,6 @@ caStatus casStreamIO::init()
{
int yes = TRUE;
int status;
int i;
/*
* see TCP(4P) this seems to make unsollicited single events much
@@ -124,6 +126,8 @@ caStatus casStreamIO::init()
* joh 11-10-98
*/
#if 0
int i;
/*
* set TCP buffer sizes to be synergistic
* with CA internal buffering

View File

@@ -34,11 +34,13 @@ int main ()
list.add(*pFred);
list.add(*pFredII);
{
tsSLIter<fred> iter(list);
tsSLIterRm<fred> iter(list);
pFredBack = iter();
assert(pFredBack == pFredII);
pFredBack = iter();
assert(pFredBack == pFred);
iter.remove(); // removes pFred
}
list.remove(*pFredII); // removes *pFred !!
list.add(*pFred);
pFredBack = list.get();
assert (pFredBack == pFred);

View File

@@ -31,6 +31,9 @@
*
* History
* $Log$
* Revision 1.14 1998/10/23 16:40:47 jhill
* fixed missing new line at EOF
*
* Revision 1.13 1998/10/23 00:20:41 jhill
* attempted to clean up HP-UX warnings
*
@@ -105,6 +108,20 @@ public:
private:
T *pNext;
//
// removeNextItem ()
//
// removes the item after this node
//
void removeNextItem ()
{
T *pItem = this->pNext;
if (pItem) {
tsSLNode<T> *pNode = pItem;
this->pNext = pNode->pNext;
}
}
};
@@ -136,21 +153,6 @@ public:
this->insert (item, *this);
}
//
// remove ()
// **** removes item after "itemBefore" ****
// (itemBefore might be the list header object and therefore
// will not always be of type T)
//
void remove (tsSLNode<T> &itemBefore)
{
T *pItem = itemBefore.pNext;
if (pItem) {
tsSLNode<T> *pNode = pItem;
itemBefore.pNext = pNode->pNext;
}
}
//
// get ()
//
@@ -158,7 +160,7 @@ public:
{
tsSLNode<T> *pThisNode = this;
T *pItem = pThisNode->pNext;
this->remove(*this);
pThisNode->removeNextItem();
return pItem;
}

View File

@@ -24,6 +24,7 @@ SRCS.c = \
../dbCa.c\
../dbcar.c\
../devLib.c\
../devLibVxWorks.c\
../initHooks.c
LIBOBJS = \
@@ -45,7 +46,8 @@ LIBOBJS = \
taskwd.o\
dbCa.o \
dbcar.o \
devLib.o
devLib.o \
devLibVxWorks.o
PROD += initHooks.o

View File

@@ -206,7 +206,6 @@ static long putNotify(PUTNOTIFY *ppn)
status=dbProcess(precord);
if(status!=0) {
ppn->status = status;
issueCallback(ppn);
}
ret_pending:
return(S_db_Pending);

File diff suppressed because it is too large Load Diff

View File

@@ -52,14 +52,9 @@
* .02 06-14-93 joh needs devAllocInterruptVector() routine
*/
#ifndef INCdevLibh
#define INCdevLibh 1
#if defined(devLibGlobal) && !defined(INCvmeh)
#include "vme.h"
#endif
#include <dbDefs.h>
/*
@@ -73,90 +68,179 @@ typedef enum {
atISA, /* memory mapped ISA access (until now only on PC) */
atLast /* atLast must be the last enum in this list */
} epicsAddressType;
#ifdef devLibGlobal
char *epicsAddressTypeName[]
= {
"VME A16",
"VME A24",
"VME A32",
"ISA"
};
#endif
/*
* we use a translation between an EPICS encoding
* and a vxWorks encoding here
* to reduce dependency of drivers on vxWorks
*
* we assume that the BSP are configured to use these
* address modes by default
* pointer to an array of strings for each of
* the above address types
*/
#define EPICSAddrTypeNoConvert -1
#ifdef devLibGlobal
int EPICStovxWorksAddrType[]
= {
VME_AM_SUP_SHORT_IO,
VME_AM_STD_SUP_DATA,
VME_AM_EXT_SUP_DATA,
EPICSAddrTypeNoConvert
};
#endif
extern const char *epicsAddressTypeName[];
long devAddressMap(void); /* print an address map */
/*
* devReadProbe()
*
* a bus error safe "wordSize" read at the specified address which returns
* unsuccessful status if the device isnt present
*/
long devReadProbe (unsigned wordSize, volatile const void *ptr, void *pValueRead);
/*
* devWriteProbe
*
* a bus error safe "wordSize" write at the specified address which returns
* unsuccessful status if the device isnt present
*/
long devWriteProbe (unsigned wordSize, volatile void *ptr, const void *pValueWritten);
long devRegisterAddress(
const char *pOwnerName,
epicsAddressType addrType,
void *baseAddress,
unsigned long size, /* bytes */
void **pLocalAddress);
const char *pOwnerName,
epicsAddressType addrType,
size_t logicalBaseAddress,
size_t size, /* bytes */
volatile void **pPhysicalAddress);
long devUnregisterAddress(
epicsAddressType addrType,
void *baseAddress,
const char *pOwnerName);
epicsAddressType addrType,
size_t logicalBaseAddress,
const char *pOwnerName);
/*
* allocate and register an unoccupied address block
*/
long devAllocAddress(
const char *pOwnerName,
epicsAddressType addrType,
unsigned long size,
unsigned alignment, /*n ls bits zero in addr*/
void **pLocalAddress);
const char *pOwnerName,
epicsAddressType addrType,
size_t size,
unsigned alignment, /*n ls bits zero in addr*/
volatile void **pLocalAddress);
/*
* some CPU`s will maintain these in independent spaces
* connect ISR to a VME interrupt vector
*/
typedef enum {intCPU, intVME, intVXI} epicsInterruptType;
long devConnectInterrupt(
epicsInterruptType intType,
unsigned vectorNumber,
void (*pFunction)(),
void *parameter);
long devConnectInterruptVME(
unsigned vectorNumber,
void (*pFunction)(void *),
void *parameter);
/*
* connect ISR to an ISA interrupt level
* (not implemented)
* (API should be reviewed)
*/
long devConnectInterruptISA(
unsigned interruptLevel,
void (*pFunction)(void *),
void *parameter);
/*
* connect ISR to a PCI interrupt
* (not implemented)
* (API should be reviewed)
*/
long devConnectInterruptPCI(
unsigned bus,
unsigned device,
unsigned function,
void (*pFunction)(void *),
void *parameter);
/*
* disconnect ISR from a VME interrupt vector
*
* The parameter pFunction should be set to the C function pointer that
* was connected. It is used as a key to prevent a driver from inadvertently
* removing an interrupt handler that it didn't install
*/
long devDisconnectInterrupt(
epicsInterruptType intType,
unsigned vectorNumber,
void (*pFunction)());
long devDisconnectInterruptVME(
unsigned vectorNumber,
void (*pFunction)(void *));
long devEnableInterruptLevel(
epicsInterruptType intType,
unsigned level);
long devDisableInterruptLevel(
epicsInterruptType intType,
unsigned level);
/*
* disconnect ISR from an ISA interrupt level
* (not implemented)
* (API should be reviewed)
*
* The parameter pFunction should be set to the C function pointer that
* was connected. It is used as a key to prevent a driver from inadvertently
* removing an interrupt handler that it didn't install
*/
long devDisconnectInterruptISA(
unsigned interruptLevel,
void (*pFunction)(void *));
/*
* disconnect ISR from a PCI interrupt
* (not implemented)
* (API should be reviewed)
*
* The parameter pFunction should be set to the C function pointer that
* was connected. It is used as a key to prevent a driver from inadvertently
* removing an interrupt handler that it didn't install
*/
long devDisconnectInterruptPCI(
unsigned bus,
unsigned device,
unsigned function,
void (*pFunction)(void *));
/*
* determine if a VME interrupt vector is in use
*
* returns boolean
*/
int devInterruptInUseVME (unsigned vectorNumber);
/*
* determine if an ISA interrupt level is in use
* (not implemented)
*
* returns boolean
*/
int devInterruptLevelInUseISA (unsigned interruptLevel);
/*
* determine if a PCI interrupt is in use
* (not implemented)
*
* returns boolean
*/
int devInterruptInUsePCI (unsigned bus, unsigned device,
unsigned function);
typedef enum {intVME, intVXI, intISA} epicsInterruptType;
/*
* enable VME interrupt level
*/
long devEnableInterruptLevelVME (unsigned level);
/*
* enable ISA interrupt level
*/
long devEnableInterruptLevelISA (unsigned level);
/*
* not implemented - API needs to be reviewed
*/
long devEnableInterruptLevelPCI (unsigned level,
unsigned bus, unsigned device, unsigned function);
/*
* disable VME interrupt level
*/
long devDisableInterruptLevelVME (unsigned level);
/*
* disable ISA interrupt level
*/
long devDisableInterruptLevelISA (unsigned level);
/*
* not implemented - API needs to be reviewed
*/
long devDisableInterruptLevelPCI (unsigned level,
unsigned bus, unsigned device, unsigned function);
/*
* Routines to allocate and free memory in the A24 memory region.
@@ -198,11 +282,60 @@ void devLibA24Free(void *pBlock);
*/
#define devPtrAlignTest(PTR) (!(devCreateAlignmentMask(*PTR)&(long)(PTR)))
/*
* virtual OS layer for devLib.c
*/
struct devLibVirtualOS {
/*
* maps logical address to physical address, but does not detect
* two device drivers that are using the same address range
*/
long (*pDevMapAddr) (epicsAddressType addrType, unsigned options,
size_t logicalAddress, size_t size, volatile void **ppPhysicalAddress);
/*
* a bus error safe "wordSize" read at the specified address which returns
* unsuccessful status if the device isnt present
*/
long (*pDevReadProbe) (unsigned wordSize, volatile const void *ptr, void *pValueRead);
/*
* a bus error safe "wordSize" write at the specified address which returns
* unsuccessful status if the device isnt present
*/
long (*pDevWriteProbe) (unsigned wordSize, volatile void *ptr, const void *pValueWritten);
/*
* connect ISR to a VME interrupt vector
* (required for backwards compatibility)
*/
long (*pDevConnectInterruptVME) (unsigned vectorNumber,
void (*pFunction)(), void *parameter);
/*
* disconnect ISR from a VME interrupt vector
* (required for backwards compatibility)
*/
long (*pDevDisconnectInterruptVME) (unsigned vectorNumber,
void (*pFunction)(void *));
/*
* enable VME interrupt level
*/
long (*pDevEnableInterruptLevelVME) (unsigned level);
/*
* disable VME interrupt level
*/
long (*pDevDisableInterruptLevelVME) (unsigned level);
};
/*
* error codes (and messages) associated with devLib.c
*/
#define S_dev_vectorInUse (M_devLib| 1) /*Interrupt vector in use*/
#define S_dev_vxWorksVecInstlFail (M_devLib| 2) /*vxWorks interrupt vector install failed*/
#define S_dev_success 0
#define S_dev_vectorInUse (M_devLib| 1) /*interrupt vector in use*/
#define S_dev_vecInstlFail (M_devLib| 2) /*interrupt vector install failed*/
#define S_dev_uknIntType (M_devLib| 3) /*Unrecognized interrupt type*/
#define S_dev_vectorNotInUse (M_devLib| 4) /*Interrupt vector not in use by caller*/
#define S_dev_badA16 (M_devLib| 5) /*Invalid VME A16 address*/
@@ -211,11 +344,11 @@ void devLibA24Free(void *pBlock);
#define S_dev_uknAddrType (M_devLib| 8) /*Unrecognized address space type*/
#define S_dev_addressOverlap (M_devLib| 9) /*Specified device address overlaps another device*/
#define S_dev_identifyOverlap (M_devLib| 10) /*This device already owns the address range*/
#define S_dev_vxWorksAddrMapFail (M_devLib| 11) /*vxWorks refused address map*/
#define S_dev_addrMapFail (M_devLib| 11) /*unable to map address*/
#define S_dev_intDisconnect (M_devLib| 12) /*Interrupt at vector disconnected from an EPICS device*/
#define S_dev_internal (M_devLib| 13) /*Internal failure*/
#define S_dev_vxWorksIntEnFail (M_devLib| 14) /*vxWorks interrupt enable failure*/
#define S_dev_vxWorksIntDissFail (M_devLib| 15) /*vxWorks interrupt disable failure*/
#define S_dev_intEnFail (M_devLib| 14) /*unable to enable interrupt level*/
#define S_dev_intDissFail (M_devLib| 15) /*unable to disable interrupt level*/
#define S_dev_noMemory (M_devLib| 16) /*Memory allocation failed*/
#define S_dev_addressNotFound (M_devLib| 17) /*Specified device address unregistered*/
#define S_dev_noDevice (M_devLib| 18) /*No device at specified address*/
@@ -231,4 +364,56 @@ void devLibA24Free(void *pBlock);
#define S_dev_hdwLimit (M_devLib| 28) /*Input exceeds Hardware Limit*/
#define S_dev_deviceDoesNotFit (M_devLib| 29) /*Unable to locate address space for device*/
#define S_dev_deviceTMO (M_devLib| 30) /*device timed out*/
#define S_dev_badFunction (M_devLib| 31) /*bad function pointer*/
#define S_dev_badVector (M_devLib| 32) /*bad interrupt vector*/
#define S_dev_badArgument (M_devLib| 33) /*bad function argument*/
/*
* NOTE: this routine has been deprecated. It exits
* for backwards compatibility purposes only.
*
* Please use one of devConnectInterruptVME, devConnectInterruptPCI,
* devConnectInterruptISA etc. devConnectInterrupt will be removed
* in a future release.
*/
long devConnectInterrupt(
epicsInterruptType intType,
unsigned vectorNumber,
void (*pFunction)(),
void *parameter);
/*
* NOTE: this routine has been deprecated. It exits
* for backwards compatibility purposes only.
*
* Please use one of devDisconnectInterruptVME, devDisconnectInterruptPCI,
* devDisconnectInterruptISA etc. devDisconnectInterrupt will be removed
* in a future release.
*/
long devDisconnectInterrupt(
epicsInterruptType intType,
unsigned vectorNumber,
void (*pFunction)());
/*
* NOTE: this routine has been deprecated. It exits
* for backwards compatibility purposes only.
*
* Please use one of devEnableInterruptLevelVME, devEnableInterruptLevelPCI,
* devEnableInterruptLevelISA etc. devEnableInterruptLevel will be removed
* in a future release.
*/
long devEnableInterruptLevel(epicsInterruptType intType, unsigned level);
/*
* NOTE: this routine has been deprecated. It exits
* for backwards compatibility purposes only.
*
* Please use one of devDisableInterruptLevelVME, devDisableInterruptLevelISA,
* devDisableInterruptLevelPCI etc. devDisableInterruptLevel will be removed
* in a future release.
*/
long devDisableInterruptLevel (epicsInterruptType intType, unsigned level);
#endif /* devLib.h*/

View File

@@ -114,7 +114,8 @@ long vxDevWriteProbe (unsigned wordSize, volatile void *ptr, const void *pValue)
*/
const struct devLibVirtualOS devLibVirtualOS =
{vxDevMapAddr, vxDevReadProbe, vxDevWriteProbe,
devConnectInterruptVME, devDisconnectInterruptVME};
devConnectInterruptVME, devDisconnectInterruptVME,
devEnableInterruptLevelVME, devDisableInterruptLevelVME};
#define SUCCESS 0
@@ -185,66 +186,65 @@ long devDisconnectInterruptVME (
}
/*
* devEnableInterruptLevel()
*
* wrapper to minimize driver dependency on vxWorks
* enable VME interrupt level
*/
long devEnableInterruptLevel(
epicsInterruptType intType,
unsigned level)
long devEnableInterruptLevelVME (unsigned level)
{
int s;
switch (intType) {
case intVME:
case intVXI:
s = sysIntEnable (level);
if(s!=OK){
return S_dev_intEnFail;
}
break;
case intISA:
# if CPU == I80386
s = sysIntEnablePIC (level);
if (s!=OK) {
return S_dev_intEnFail;
}
# endif
default:
return S_dev_uknIntType;
s = sysIntEnable (level);
if (s!=OK) {
return S_dev_intEnFail;
}
return SUCCESS;
}
/*
* devDisableInterruptLevel()
*
* wrapper to minimize driver dependency on vxWorks
* enable ISA interrupt level
*/
long devDisableInterruptLevel (
epicsInterruptType intType,
unsigned level)
long devEnableInterruptLevelISA (unsigned level)
{
# if CPU == I80386
int s;
s = sysIntEnablePIC (level);
if (s!=OK) {
return S_dev_intEnFail;
}
return SUCCESS;
# else
return S_dev_intEnFail;
# endif
}
/*
* disable ISA interrupt level
*/
long devDisableInterruptLevelISA (unsigned level)
{
# if CPU == I80386
int s;
s = sysIntDisablePIC (level);
if (s!=OK) {
return S_dev_intEnFail;
}
# else
return S_dev_intEnFail;
# endif
return SUCCESS;
}
/*
* disable VME interrupt level
*/
long devDisableInterruptLevelVME (unsigned level)
{
int s;
switch (intType) {
case intVME:
case intVXI:
s = sysIntDisable (level);
if(s!=OK){
return S_dev_intDissFail;
}
break;
case intISA:
# if CPU == I80386
s = sysIntDisablePIC (level);
if (s!=OK) {
return S_dev_intEnFail;
}
# endif
default:
return S_dev_uknIntType;
s = sysIntDisable (level);
if (s!=OK) {
return S_dev_intDissFail;
}
return SUCCESS;

View File

@@ -892,7 +892,7 @@ LOCAL int ab_driver_init()
p6008 = (void *)AB_BASE_ADDR;
p6008 += link;
}
status = devRegisterAddress("drvAb",atVMEA24,(void *)p6008,
status = devRegisterAddress("drvAb",atVMEA24,(long)p6008,
sizeof(ab_region),(void **)&p6008);
if(status) {
errMessage(status,"drvAb");

File diff suppressed because it is too large Load Diff

View File

@@ -293,22 +293,23 @@ char *ext_type_name[]
;
typedef struct extender_device{
ELLNODE node;
ELLLIST extenders; /* sub extenders */
ELLNODE node;
ELLLIST extenders; /* sub extenders */
struct extender_device *pParent;
enum ext_type type;
int la;
int la_low; /* inclusive */
int la_high; /* inclusive */
unsigned long A24_base;
unsigned long A24_size;
unsigned long A32_base;
unsigned long A32_size;
unsigned la_mapped:1; /* device present */
unsigned A24_mapped:1;
unsigned A32_mapped:1;
unsigned A24_ok:1;
unsigned A32_ok:1;
struct slot_zero_device *pSZD;
enum ext_type type;
int la;
int la_low; /* inclusive */
int la_high; /* inclusive */
unsigned long A24_base;
unsigned long A24_size;
unsigned long A32_base;
unsigned long A32_size;
unsigned la_mapped:1; /* device present */
unsigned A24_mapped:1;
unsigned A32_mapped:1;
unsigned A24_ok:1;
unsigned A32_ok:1;
}VXIE;
/*
@@ -317,22 +318,19 @@ typedef struct extender_device{
* available
*/
typedef struct slot_zero_device{
ELLNODE node;
void (*set_modid)(
struct slot_zero_device *pvxisz,
unsigned slot);
void (*clear_modid)(
struct slot_zero_device *pvxisz);
VXIE *pvxie;
struct vxi_csr *pcsr;
unsigned char la;
unsigned reg:1;
unsigned msg:1;
unsigned nicpu030:1;
ELLNODE node;
void (*set_modid)(struct slot_zero_device *pvxisz, unsigned slot);
void (*clear_modid)(struct slot_zero_device *pvxisz);
EPVXISTAT (*report)(unsigned la, unsigned level);
VXIE *pvxie;
struct vxi_csr *pcsr;
unsigned char la;
unsigned reg:1;
unsigned msg:1;
}VXISZ;
typedef struct epvxiLibDeviceConfig{
void (*pio_report_func)(); /* ptr to io report func */
void (*pio_report_func)(); /* ptr to io report func */
void *pDriverConfig; /* ptr to driver config */
void *pMsgConfig; /* msg driver config area */
void *pFatAddrBase;
@@ -341,16 +339,14 @@ typedef struct epvxiLibDeviceConfig{
VXISZ *pvxisz; /* ptr to slot zero info */
unsigned long driverID; /* unique driver id */
int taskID; /* opened by this id */
unsigned short make;
unsigned short model;
short slot;
short commander_la;
unsigned short make;
unsigned short model;
short slot;
short commander_la;
short extender_la; /* logical address of bus repeater */
short slot_zero_la;
unsigned char class;
unsigned char class;
unsigned st_passed:1; /* self test passed */
unsigned msg_dev_online:1;
unsigned slot0_dev:1;
unsigned msg_dev_online:1;
unsigned A24_mapped:1;
unsigned A32_mapped:1;
}VXIDI;
@@ -470,7 +466,7 @@ int epvxiResourceMangerOK;
#ifndef SRCepvxiLib
extern
#endif
void *epvxi_local_base;
volatile void *epvxi_local_base;
#define VXIBASE(LA) VXI_LA_TO_PA(LA, epvxi_local_base)

View File

@@ -549,12 +549,9 @@ LOCAL EPVXISTAT epvxiReadFastHandshake(
}
cmd = MBC_BR;
status = vxMemProbe(
&pcsr->dir.r.dd.msg.dlow,
WRITE,
sizeof(pcsr->dir.r.dd.msg.dlow),
&cmd);
if(status == OK){
status = devReadProbe (sizeof(cmd),
&pcsr->dir.r.dd.msg.dlow, &cmd);
if(status == SUCCESS){
break;
}
fhm = FALSE;
@@ -576,13 +573,9 @@ LOCAL EPVXISTAT epvxiReadFastHandshake(
}
fhm = TRUE;
}
status = vxMemProbe(
&pcsr->dir.r.dd.msg.dlow,
READ,
sizeof(pcsr->dir.r.dd.msg.dlow),
&resp);
if(status == OK){
status = devReadProbe (sizeof(resp),
&pcsr->dir.r.dd.msg.dlow, &resp);
if(status == SUCCESS){
break;
}
fhm = FALSE;

View File

@@ -181,7 +181,7 @@ LOCAL void hpe1368a_init_card(unsigned la, void *pArg)
hpe1368a_int_service,
la);
if(r0 == ERROR){
errMessage(S_dev_vxWorksVecInstlFail, NULL);
errMessage(S_dev_vecInstlFail, NULL);
return;
}

View File

@@ -260,7 +260,7 @@ LOCAL void KscV215_init_card(unsigned la, void *pArg)
(void *) la);
if(status == ERROR){
epvxiClose(la, KscV215DriverId);
errMessage(S_dev_vxWorksVecInstlFail,
errMessage(S_dev_vecInstlFail,
"KscV215 init failed- device left open");
return;
}

View File

@@ -371,7 +371,7 @@ LOCAL mz8310Stat mz8310_setup_int(unsigned card, unsigned channel)
mz8310_int_service,
(int)&mzconf[card].icf[channel]);
if(status != OK)
return S_dev_vxWorksVecInstlFail;
return S_dev_vecInstlFail;
sysIntEnable(mz8310_strap[channel].irq);

View File

@@ -31,7 +31,6 @@
*
*/
#define DRVBB232_C
#include <vxWorks.h>
#include <stdlib.h>

View File

@@ -58,10 +58,7 @@ typedef struct {
msgParmBlock *pparmBlock;
} drvBB232Link;
#ifndef DRVBB232_C
extern
#endif
msgDrvBlock drvBB232Block;
extern msgDrvBlock drvBB232Block;
#define BB232_DEFAULT_AGE (sysClkRateGet()) /* 1 second */

View File

@@ -380,8 +380,11 @@ struct link *plink; /* I/O link structure from record */
return(NULL);
}
sprintf(name, "%s", pparmBlock->pdrvBlock->taskName);
if ((taskId = taskSpawn(name, pparmBlock->pdrvBlock->taskPri, pparmBlock->pdrvBlock->taskOpt, pparmBlock->pdrvBlock->taskStack, msgTask, pparmBlock->pdrvBlock, pmsgLink)) == ERROR)
{
if ((taskId = taskSpawn(
name, pparmBlock->pdrvBlock->taskPri, pparmBlock->pdrvBlock->taskOpt,
pparmBlock->pdrvBlock->taskStack, msgTask, pparmBlock->pdrvBlock,
pmsgLink,
0,0,0,0,0,0,0,0)) == ERROR) {
printf("Message driver: Failed to start link task %s\n", name);
/* BUG --delete the FASTLOCK in here */
status = ERROR;

View File

@@ -69,9 +69,6 @@ typedef struct {
msgParmBlock *pparmBlock;
} devTy232Link;
#ifndef DRVTY232_C
extern
#endif
msgDrvBlock drv232Block;
extern msgDrvBlock drv232Block;
#endif

View File

@@ -8,6 +8,9 @@
* $Id$
*
* $Log$
* Revision 1.8 1998/06/16 03:10:51 jhill
* added sgi support
*
* Revision 1.7 1998/04/16 21:16:35 jhill
* removed redundant solaris test
*
@@ -88,7 +91,7 @@ typedef struct {
#endif
#ifndef vxWorks
#if (_POSIX_C_SOURCE < 3) && !defined(SOLARIS) && !defined(HP_UX) && !defined(linux) &&!defined(sgi)
#if (_POSIX_C_SOURCE < 3) && !defined(SOLARIS) && !defined(HP_UX) && !defined(linux) && !defined(sgi) && !defined(LynxOS)
struct timespec
{

View File

@@ -137,7 +137,7 @@ HDRVERSIONID(caerrh, "@(#) $Id$")
#define ECA_DEFUNCT DEFMSG(CA_K_FATAL, 34)
#define ECA_EMPTYSTR DEFMSG(CA_K_WARNING, 35)
#define ECA_NOREPEATER DEFMSG(CA_K_WARNING, 36)
#define ECA_NOCHANMSG DEFMSG(CA_K_WARNNING, 37)
#define ECA_NOCHANMSG DEFMSG(CA_K_WARNING, 37)
#define ECA_DLCKREST DEFMSG(CA_K_WARNING, 38)
#define ECA_SERVBEHIND DEFMSG(CA_K_WARNING, 39)
#define ECA_NOCAST DEFMSG(CA_K_WARNING, 40)

View File

@@ -17,7 +17,9 @@ while (<VARS>)
if (/CVS_DATE="\\(.*)"/) { $cvs_date = $1; }
}
$ver_str = "$ver.$rev.$mod.$upd_name.$upd_level";
$ver_str = "$ver.$rev.$mod";
$ver_str = "$ver_str.$upd_name" if $upd_name;
$ver_str = "$ver_str.$upd_level" if $upd_level;
print "Found EPICS Version $ver_str\n";

View File

@@ -15,9 +15,6 @@ IOC_CORE_OBJS = \
PROD = iocCore
vpath vxWorks% $(VX_CONFIG_DIR)/$(T_A)
INSTALLS = vxWorks vxWorks.sym
include $(TOP)/config/RULES.Vx
iocCore: $(IOC_CORE_OBJS)

View File

@@ -34,11 +34,13 @@ int main ()
list.add(*pFred);
list.add(*pFredII);
{
tsSLIter<fred> iter(list);
tsSLIterRm<fred> iter(list);
pFredBack = iter();
assert(pFredBack == pFredII);
pFredBack = iter();
assert(pFredBack == pFred);
iter.remove(); // removes pFred
}
list.remove(*pFredII); // removes *pFred !!
list.add(*pFred);
pFredBack = list.get();
assert (pFredBack == pFred);

View File

@@ -31,6 +31,9 @@
*
* History
* $Log$
* Revision 1.14 1998/10/23 16:40:47 jhill
* fixed missing new line at EOF
*
* Revision 1.13 1998/10/23 00:20:41 jhill
* attempted to clean up HP-UX warnings
*
@@ -105,6 +108,20 @@ public:
private:
T *pNext;
//
// removeNextItem ()
//
// removes the item after this node
//
void removeNextItem ()
{
T *pItem = this->pNext;
if (pItem) {
tsSLNode<T> *pNode = pItem;
this->pNext = pNode->pNext;
}
}
};
@@ -136,21 +153,6 @@ public:
this->insert (item, *this);
}
//
// remove ()
// **** removes item after "itemBefore" ****
// (itemBefore might be the list header object and therefore
// will not always be of type T)
//
void remove (tsSLNode<T> &itemBefore)
{
T *pItem = itemBefore.pNext;
if (pItem) {
tsSLNode<T> *pNode = pItem;
itemBefore.pNext = pNode->pNext;
}
}
//
// get ()
//
@@ -158,7 +160,7 @@ public:
{
tsSLNode<T> *pThisNode = this;
T *pItem = pThisNode->pNext;
this->remove(*this);
pThisNode->removeNextItem();
return pItem;
}

View File

@@ -17,7 +17,9 @@ while (<VARS>)
if (/CVS_DATE="\\(.*)"/) { $cvs_date = $1; }
}
$ver_str = "$ver.$rev.$mod.$upd_name.$upd_level";
$ver_str = "$ver.$rev.$mod";
$ver_str = "$ver_str.$upd_name" if $upd_name;
$ver_str = "$ver_str.$upd_level" if $upd_level;
print "Found EPICS Version $ver_str\n";

View File

@@ -0,0 +1,73 @@
/*
* LynxOS specific socket include
*/
#ifndef osiSockH
#define osiSockH
#ifdef __cplusplus
extern "C" {
#endif
#include <errno.h>
#include <sys/types.h>
#include <sys/param.h> /* for MAXHOSTNAMELEN */
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <netdb.h>
#include <unistd.h> /* close() and others */
/*
* as far as I can tell there is no header file for these
*/
int gethostname(char *name, int namelen);
int sethostname(char *name, int namelen);
#ifdef __cplusplus
}
#endif
typedef int SOCKET;
#define INVALID_SOCKET (-1)
#define SOCKERRNO errno
#define SOCKERRSTR (strerror(errno))
#define socket_close(S) close(S)
#if 1
/*
* only for LynxOS v2.4.0
*/
# define socket_ioctl(A,B,C) ioctl(A,B,(char *)C)
#else
# define socket_ioctl(A,B,C) ioctl(A,B,C)
#endif
typedef int osiSockIoctl_t;
#define FD_IN_FDSET(FD) ((FD)<FD_SETSIZE&&(FD)>=0)
#define SOCK_EWOULDBLOCK EWOULDBLOCK
#define SOCK_ENOBUFS ENOBUFS
#define SOCK_ECONNRESET ECONNRESET
#define SOCK_ETIMEDOUT ETIMEDOUT
#define SOCK_EADDRINUSE EADDRINUSE
#define SOCK_ECONNREFUSED ECONNREFUSED
#define SOCK_ECONNABORTED ECONNABORTED
#define SOCK_EINPROGRESS EINPROGRESS
#define SOCK_EISCONN EISCONN
#define SOCK_EALREADY EALREADY
#define SOCK_EINVAL EINVAL
#define SOCK_EINTR EINTR
#define SOCK_EPIPE EPIPE
#define INADDR_LOOPBACK 0x7F000001
#endif /*osiSockH*/

View File

@@ -294,6 +294,7 @@ where
app Application name (the created directory will have \"App\" appended to name)
ioc IOC name (the created directory will have \"ioc\" prepended to name)
-i Specifies that ioc boot directories will be generated
-t type Set the application type (-l for a list of valid types)
If not specified, type is taken from environment
If not found in environment, \"default\" is used

View File

@@ -3,9 +3,9 @@ eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
# Called from within the object directory.
# Searches the .substitutions files (from the command line) for
# "file xxx {" entries to create a .DEPENDS file
# "file xxx {" entries to create a DEPENDS file
open(OUT, ">.DEPENDS") or die "Cannot open .DEPENDS: $!";
open(OUT, ">DEPENDS") or die "Cannot open DEPENDS: $!";
foreach $file (@ARGV) {
open(IN, "<$file") or die "Cannot open $file: $!";

View File

@@ -28,10 +28,10 @@ LIBOBJS += $(EPICS_BASE_BIN)/pidRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/pulseCounterRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/pulseDelayRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/pulseTrainRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/scanRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/recWaitCa.o
#LIBOBJS += $(EPICS_BASE_BIN)/recDynLink.o
#LIBOBJS += $(EPICS_BASE_BIN)/recDynLinkTest.o
#LIBOBJS += $(EPICS_BASE_BIN)/scanRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/selRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/seqRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/stateRecord.o

View File

@@ -1,5 +1,11 @@
/* $Id$
* $Log$
* Revision 1.8 1998/11/23 23:49:29 jhill
* added build date to corerelease()
*
* Revision 1.7 1997/04/30 19:12:25 mrk
* Fix compiler warning messages
*
* Revision 1.6 1995/02/13 16:46:04 jba
* Removed date from epicsRelease.
*
@@ -27,6 +33,10 @@
char *epicsRelease1 = epicsReleaseVersion;
int coreRelease()
{
printf("############################################################################\n### %s\n### %s\n############################################################################\n", epicsRelease, epicsRelease1);
printf ("############################################################################\n");
printf ("### %s\n", epicsRelease);
printf ("### %s\n", epicsRelease1);
printf ("### @(#)Built date %s\n", __DATE__);
printf ("############################################################################\n");
return(0);
}

View File

@@ -237,6 +237,7 @@ static long special(DBADDR *paddr,int after)
return(S_db_noMod);
}
pai->init=TRUE;
pai->eoff = pai->egul;
if(!(pdset->special_linconv)) return(0);
return((*pdset->special_linconv)(pai,after));
default:

View File

@@ -300,6 +300,7 @@ static long special(paddr,after)
return(S_db_noMod);
}
pao->init=TRUE;
pao->eoff = pao->egul;
if(!(pdset->special_linconv)) return(0);
return((*pdset->special_linconv)(pao,after));
default:

View File

@@ -190,6 +190,8 @@ LOCAL void *casCalloc (size_t count, size_t size);
LOCAL void *casMalloc (size_t size);
LOCAL unsigned nextRsrvResourceID;
/*
* CAMESSAGE()
@@ -1746,7 +1748,6 @@ struct dbAddr *pAddr,
unsigned cid
)
{
static unsigned bucketID;
unsigned *pCID;
struct channel_in_use *pchannel;
int status;
@@ -1783,7 +1784,7 @@ unsigned cid
* bypass read only warning
*/
pCID = (unsigned *) &pchannel->sid;
*pCID = bucketID++;
*pCID = nextRsrvResourceID++;
/*
* Verify that this id is not in use
@@ -2201,3 +2202,10 @@ LOCAL void *casMalloc(size_t size)
return malloc(size);
}
/*
* getNextRsrvResourceID()
*/
unsigned getNextRsrvResourceID()
{
return nextRsrvResourceID;
}

View File

@@ -477,6 +477,8 @@ void casr (unsigned level)
freeListItemsAvail (rsrvChanFreeList),
freeListItemsAvail (rsrvEventFreeList));
printf ("The next resource ID allocated will be %u\n", getNextRsrvResourceID());
if(pCaBucket){
printf( "The server's resource id conversion table:\n");
FASTLOCK(&clientQlock);

View File

@@ -295,6 +295,8 @@ struct client *pc
void write_notify_reply(void *pArg);
unsigned getNextRsrvResourceID();
/*
* !!KLUDGE!!
*

File diff suppressed because it is too large Load Diff

View File

@@ -52,14 +52,9 @@
* .02 06-14-93 joh needs devAllocInterruptVector() routine
*/
#ifndef INCdevLibh
#define INCdevLibh 1
#if defined(devLibGlobal) && !defined(INCvmeh)
#include "vme.h"
#endif
#include <dbDefs.h>
/*
@@ -73,90 +68,179 @@ typedef enum {
atISA, /* memory mapped ISA access (until now only on PC) */
atLast /* atLast must be the last enum in this list */
} epicsAddressType;
#ifdef devLibGlobal
char *epicsAddressTypeName[]
= {
"VME A16",
"VME A24",
"VME A32",
"ISA"
};
#endif
/*
* we use a translation between an EPICS encoding
* and a vxWorks encoding here
* to reduce dependency of drivers on vxWorks
*
* we assume that the BSP are configured to use these
* address modes by default
* pointer to an array of strings for each of
* the above address types
*/
#define EPICSAddrTypeNoConvert -1
#ifdef devLibGlobal
int EPICStovxWorksAddrType[]
= {
VME_AM_SUP_SHORT_IO,
VME_AM_STD_SUP_DATA,
VME_AM_EXT_SUP_DATA,
EPICSAddrTypeNoConvert
};
#endif
extern const char *epicsAddressTypeName[];
long devAddressMap(void); /* print an address map */
/*
* devReadProbe()
*
* a bus error safe "wordSize" read at the specified address which returns
* unsuccessful status if the device isnt present
*/
long devReadProbe (unsigned wordSize, volatile const void *ptr, void *pValueRead);
/*
* devWriteProbe
*
* a bus error safe "wordSize" write at the specified address which returns
* unsuccessful status if the device isnt present
*/
long devWriteProbe (unsigned wordSize, volatile void *ptr, const void *pValueWritten);
long devRegisterAddress(
const char *pOwnerName,
epicsAddressType addrType,
void *baseAddress,
unsigned long size, /* bytes */
void **pLocalAddress);
const char *pOwnerName,
epicsAddressType addrType,
size_t logicalBaseAddress,
size_t size, /* bytes */
volatile void **pPhysicalAddress);
long devUnregisterAddress(
epicsAddressType addrType,
void *baseAddress,
const char *pOwnerName);
epicsAddressType addrType,
size_t logicalBaseAddress,
const char *pOwnerName);
/*
* allocate and register an unoccupied address block
*/
long devAllocAddress(
const char *pOwnerName,
epicsAddressType addrType,
unsigned long size,
unsigned alignment, /*n ls bits zero in addr*/
void **pLocalAddress);
const char *pOwnerName,
epicsAddressType addrType,
size_t size,
unsigned alignment, /*n ls bits zero in addr*/
volatile void **pLocalAddress);
/*
* some CPU`s will maintain these in independent spaces
* connect ISR to a VME interrupt vector
*/
typedef enum {intCPU, intVME, intVXI} epicsInterruptType;
long devConnectInterrupt(
epicsInterruptType intType,
unsigned vectorNumber,
void (*pFunction)(),
void *parameter);
long devConnectInterruptVME(
unsigned vectorNumber,
void (*pFunction)(void *),
void *parameter);
/*
* connect ISR to an ISA interrupt level
* (not implemented)
* (API should be reviewed)
*/
long devConnectInterruptISA(
unsigned interruptLevel,
void (*pFunction)(void *),
void *parameter);
/*
* connect ISR to a PCI interrupt
* (not implemented)
* (API should be reviewed)
*/
long devConnectInterruptPCI(
unsigned bus,
unsigned device,
unsigned function,
void (*pFunction)(void *),
void *parameter);
/*
* disconnect ISR from a VME interrupt vector
*
* The parameter pFunction should be set to the C function pointer that
* was connected. It is used as a key to prevent a driver from inadvertently
* removing an interrupt handler that it didn't install
*/
long devDisconnectInterrupt(
epicsInterruptType intType,
unsigned vectorNumber,
void (*pFunction)());
long devDisconnectInterruptVME(
unsigned vectorNumber,
void (*pFunction)(void *));
long devEnableInterruptLevel(
epicsInterruptType intType,
unsigned level);
long devDisableInterruptLevel(
epicsInterruptType intType,
unsigned level);
/*
* disconnect ISR from an ISA interrupt level
* (not implemented)
* (API should be reviewed)
*
* The parameter pFunction should be set to the C function pointer that
* was connected. It is used as a key to prevent a driver from inadvertently
* removing an interrupt handler that it didn't install
*/
long devDisconnectInterruptISA(
unsigned interruptLevel,
void (*pFunction)(void *));
/*
* disconnect ISR from a PCI interrupt
* (not implemented)
* (API should be reviewed)
*
* The parameter pFunction should be set to the C function pointer that
* was connected. It is used as a key to prevent a driver from inadvertently
* removing an interrupt handler that it didn't install
*/
long devDisconnectInterruptPCI(
unsigned bus,
unsigned device,
unsigned function,
void (*pFunction)(void *));
/*
* determine if a VME interrupt vector is in use
*
* returns boolean
*/
int devInterruptInUseVME (unsigned vectorNumber);
/*
* determine if an ISA interrupt level is in use
* (not implemented)
*
* returns boolean
*/
int devInterruptLevelInUseISA (unsigned interruptLevel);
/*
* determine if a PCI interrupt is in use
* (not implemented)
*
* returns boolean
*/
int devInterruptInUsePCI (unsigned bus, unsigned device,
unsigned function);
typedef enum {intVME, intVXI, intISA} epicsInterruptType;
/*
* enable VME interrupt level
*/
long devEnableInterruptLevelVME (unsigned level);
/*
* enable ISA interrupt level
*/
long devEnableInterruptLevelISA (unsigned level);
/*
* not implemented - API needs to be reviewed
*/
long devEnableInterruptLevelPCI (unsigned level,
unsigned bus, unsigned device, unsigned function);
/*
* disable VME interrupt level
*/
long devDisableInterruptLevelVME (unsigned level);
/*
* disable ISA interrupt level
*/
long devDisableInterruptLevelISA (unsigned level);
/*
* not implemented - API needs to be reviewed
*/
long devDisableInterruptLevelPCI (unsigned level,
unsigned bus, unsigned device, unsigned function);
/*
* Routines to allocate and free memory in the A24 memory region.
@@ -198,11 +282,60 @@ void devLibA24Free(void *pBlock);
*/
#define devPtrAlignTest(PTR) (!(devCreateAlignmentMask(*PTR)&(long)(PTR)))
/*
* virtual OS layer for devLib.c
*/
struct devLibVirtualOS {
/*
* maps logical address to physical address, but does not detect
* two device drivers that are using the same address range
*/
long (*pDevMapAddr) (epicsAddressType addrType, unsigned options,
size_t logicalAddress, size_t size, volatile void **ppPhysicalAddress);
/*
* a bus error safe "wordSize" read at the specified address which returns
* unsuccessful status if the device isnt present
*/
long (*pDevReadProbe) (unsigned wordSize, volatile const void *ptr, void *pValueRead);
/*
* a bus error safe "wordSize" write at the specified address which returns
* unsuccessful status if the device isnt present
*/
long (*pDevWriteProbe) (unsigned wordSize, volatile void *ptr, const void *pValueWritten);
/*
* connect ISR to a VME interrupt vector
* (required for backwards compatibility)
*/
long (*pDevConnectInterruptVME) (unsigned vectorNumber,
void (*pFunction)(), void *parameter);
/*
* disconnect ISR from a VME interrupt vector
* (required for backwards compatibility)
*/
long (*pDevDisconnectInterruptVME) (unsigned vectorNumber,
void (*pFunction)(void *));
/*
* enable VME interrupt level
*/
long (*pDevEnableInterruptLevelVME) (unsigned level);
/*
* disable VME interrupt level
*/
long (*pDevDisableInterruptLevelVME) (unsigned level);
};
/*
* error codes (and messages) associated with devLib.c
*/
#define S_dev_vectorInUse (M_devLib| 1) /*Interrupt vector in use*/
#define S_dev_vxWorksVecInstlFail (M_devLib| 2) /*vxWorks interrupt vector install failed*/
#define S_dev_success 0
#define S_dev_vectorInUse (M_devLib| 1) /*interrupt vector in use*/
#define S_dev_vecInstlFail (M_devLib| 2) /*interrupt vector install failed*/
#define S_dev_uknIntType (M_devLib| 3) /*Unrecognized interrupt type*/
#define S_dev_vectorNotInUse (M_devLib| 4) /*Interrupt vector not in use by caller*/
#define S_dev_badA16 (M_devLib| 5) /*Invalid VME A16 address*/
@@ -211,11 +344,11 @@ void devLibA24Free(void *pBlock);
#define S_dev_uknAddrType (M_devLib| 8) /*Unrecognized address space type*/
#define S_dev_addressOverlap (M_devLib| 9) /*Specified device address overlaps another device*/
#define S_dev_identifyOverlap (M_devLib| 10) /*This device already owns the address range*/
#define S_dev_vxWorksAddrMapFail (M_devLib| 11) /*vxWorks refused address map*/
#define S_dev_addrMapFail (M_devLib| 11) /*unable to map address*/
#define S_dev_intDisconnect (M_devLib| 12) /*Interrupt at vector disconnected from an EPICS device*/
#define S_dev_internal (M_devLib| 13) /*Internal failure*/
#define S_dev_vxWorksIntEnFail (M_devLib| 14) /*vxWorks interrupt enable failure*/
#define S_dev_vxWorksIntDissFail (M_devLib| 15) /*vxWorks interrupt disable failure*/
#define S_dev_intEnFail (M_devLib| 14) /*unable to enable interrupt level*/
#define S_dev_intDissFail (M_devLib| 15) /*unable to disable interrupt level*/
#define S_dev_noMemory (M_devLib| 16) /*Memory allocation failed*/
#define S_dev_addressNotFound (M_devLib| 17) /*Specified device address unregistered*/
#define S_dev_noDevice (M_devLib| 18) /*No device at specified address*/
@@ -231,4 +364,56 @@ void devLibA24Free(void *pBlock);
#define S_dev_hdwLimit (M_devLib| 28) /*Input exceeds Hardware Limit*/
#define S_dev_deviceDoesNotFit (M_devLib| 29) /*Unable to locate address space for device*/
#define S_dev_deviceTMO (M_devLib| 30) /*device timed out*/
#define S_dev_badFunction (M_devLib| 31) /*bad function pointer*/
#define S_dev_badVector (M_devLib| 32) /*bad interrupt vector*/
#define S_dev_badArgument (M_devLib| 33) /*bad function argument*/
/*
* NOTE: this routine has been deprecated. It exits
* for backwards compatibility purposes only.
*
* Please use one of devConnectInterruptVME, devConnectInterruptPCI,
* devConnectInterruptISA etc. devConnectInterrupt will be removed
* in a future release.
*/
long devConnectInterrupt(
epicsInterruptType intType,
unsigned vectorNumber,
void (*pFunction)(),
void *parameter);
/*
* NOTE: this routine has been deprecated. It exits
* for backwards compatibility purposes only.
*
* Please use one of devDisconnectInterruptVME, devDisconnectInterruptPCI,
* devDisconnectInterruptISA etc. devDisconnectInterrupt will be removed
* in a future release.
*/
long devDisconnectInterrupt(
epicsInterruptType intType,
unsigned vectorNumber,
void (*pFunction)());
/*
* NOTE: this routine has been deprecated. It exits
* for backwards compatibility purposes only.
*
* Please use one of devEnableInterruptLevelVME, devEnableInterruptLevelPCI,
* devEnableInterruptLevelISA etc. devEnableInterruptLevel will be removed
* in a future release.
*/
long devEnableInterruptLevel(epicsInterruptType intType, unsigned level);
/*
* NOTE: this routine has been deprecated. It exits
* for backwards compatibility purposes only.
*
* Please use one of devDisableInterruptLevelVME, devDisableInterruptLevelISA,
* devDisableInterruptLevelPCI etc. devDisableInterruptLevel will be removed
* in a future release.
*/
long devDisableInterruptLevel (epicsInterruptType intType, unsigned level);
#endif /* devLib.h*/

View File

@@ -114,7 +114,8 @@ long vxDevWriteProbe (unsigned wordSize, volatile void *ptr, const void *pValue)
*/
const struct devLibVirtualOS devLibVirtualOS =
{vxDevMapAddr, vxDevReadProbe, vxDevWriteProbe,
devConnectInterruptVME, devDisconnectInterruptVME};
devConnectInterruptVME, devDisconnectInterruptVME,
devEnableInterruptLevelVME, devDisableInterruptLevelVME};
#define SUCCESS 0
@@ -185,66 +186,65 @@ long devDisconnectInterruptVME (
}
/*
* devEnableInterruptLevel()
*
* wrapper to minimize driver dependency on vxWorks
* enable VME interrupt level
*/
long devEnableInterruptLevel(
epicsInterruptType intType,
unsigned level)
long devEnableInterruptLevelVME (unsigned level)
{
int s;
switch (intType) {
case intVME:
case intVXI:
s = sysIntEnable (level);
if(s!=OK){
return S_dev_intEnFail;
}
break;
case intISA:
# if CPU == I80386
s = sysIntEnablePIC (level);
if (s!=OK) {
return S_dev_intEnFail;
}
# endif
default:
return S_dev_uknIntType;
s = sysIntEnable (level);
if (s!=OK) {
return S_dev_intEnFail;
}
return SUCCESS;
}
/*
* devDisableInterruptLevel()
*
* wrapper to minimize driver dependency on vxWorks
* enable ISA interrupt level
*/
long devDisableInterruptLevel (
epicsInterruptType intType,
unsigned level)
long devEnableInterruptLevelISA (unsigned level)
{
# if CPU == I80386
int s;
s = sysIntEnablePIC (level);
if (s!=OK) {
return S_dev_intEnFail;
}
return SUCCESS;
# else
return S_dev_intEnFail;
# endif
}
/*
* disable ISA interrupt level
*/
long devDisableInterruptLevelISA (unsigned level)
{
# if CPU == I80386
int s;
s = sysIntDisablePIC (level);
if (s!=OK) {
return S_dev_intEnFail;
}
# else
return S_dev_intEnFail;
# endif
return SUCCESS;
}
/*
* disable VME interrupt level
*/
long devDisableInterruptLevelVME (unsigned level)
{
int s;
switch (intType) {
case intVME:
case intVXI:
s = sysIntDisable (level);
if(s!=OK){
return S_dev_intDissFail;
}
break;
case intISA:
# if CPU == I80386
s = sysIntDisablePIC (level);
if (s!=OK) {
return S_dev_intEnFail;
}
# endif
default:
return S_dev_uknIntType;
s = sysIntDisable (level);
if (s!=OK) {
return S_dev_intDissFail;
}
return SUCCESS;

View File

@@ -181,7 +181,7 @@ LOCAL void hpe1368a_init_card(unsigned la, void *pArg)
hpe1368a_int_service,
la);
if(r0 == ERROR){
errMessage(S_dev_vxWorksVecInstlFail, NULL);
errMessage(S_dev_vecInstlFail, NULL);
return;
}