diff --git a/LITRON/.gitignore b/LITRON/.gitignore new file mode 100644 index 000000000..9a9400531 --- /dev/null +++ b/LITRON/.gitignore @@ -0,0 +1,36 @@ +# Install directories +/bin/ +/cfg/ +/db/ +/dbd/ +/html/ +/include/ +/lib/ +/templates/ +/data/ + +# Local configuration files +/configure/*.local + +# iocBoot generated files +/iocBoot/*ioc*/cdCommands +/iocBoot/*ioc*/dllPath*.bat +/iocBoot/*ioc*/dllCopy.bat +/iocBoot/*ioc*/runIOC.bat +/iocBoot/*ioc*/runIOC.sh +/iocBoot/*ioc*/envPaths +/iocBoot/*ioc*/relPaths.sh + +# iocsh +.iocsh_history + +# Build directories +O.*/ + +# Common files created by other tools +/QtC-* +/.vscode/ +*.orig +*.log +.*.swp +.DS_Store diff --git a/LITRON/LITRON-IOC-01App/Db/Makefile b/LITRON/LITRON-IOC-01App/Db/Makefile new file mode 100644 index 000000000..8eb97279d --- /dev/null +++ b/LITRON/LITRON-IOC-01App/Db/Makefile @@ -0,0 +1,18 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +#DB += xxx.db + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/LITRON/LITRON-IOC-01App/Makefile b/LITRON/LITRON-IOC-01App/Makefile new file mode 100644 index 000000000..c9d734530 --- /dev/null +++ b/LITRON/LITRON-IOC-01App/Makefile @@ -0,0 +1,16 @@ +# Makefile at top of application tree +TOP = .. +include $(TOP)/configure/CONFIG + +# Directories to be built, in any order. +# You can replace these wildcards with an explicit list +DIRS += $(wildcard src* *Src*) +DIRS += $(wildcard db* *Db*) +DIRS += $(wildcard *protocol*) + + +# If the build order matters, add dependency rules like this, +# which specifies that xxxSrc must be built after src: +#xxxSrc_DEPEND_DIRS += src + +include $(TOP)/configure/RULES_DIRS diff --git a/LITRON/LITRON-IOC-01App/src/LITRON-IOC-01Main.cpp b/LITRON/LITRON-IOC-01App/src/LITRON-IOC-01Main.cpp new file mode 100644 index 000000000..4f4bca227 --- /dev/null +++ b/LITRON/LITRON-IOC-01App/src/LITRON-IOC-01Main.cpp @@ -0,0 +1,23 @@ +/* LITRON-IOC-01Main.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/LITRON/LITRON-IOC-01App/src/Makefile b/LITRON/LITRON-IOC-01App/src/Makefile new file mode 100644 index 000000000..b0ff965dd --- /dev/null +++ b/LITRON/LITRON-IOC-01App/src/Makefile @@ -0,0 +1,9 @@ +TOP=../.. +# This file should do very little - it's purpose is to set the APPNAME and then load build.mak + +# this definition is used in build.mak +APPNAME=LITRON-IOC-01 + +# If we are ###-IOC-01 leave this as is, if we are ###-IOC-02 or higher change to ###-IOC-01 and delete build.mak from this directory +# there should only be a single build.mak for all IOCs of a given family and it is located in the ###-IOC-01 directory +include $(TOP)/LITRON-IOC-01App/src/build.mak diff --git a/LITRON/LITRON-IOC-01App/src/build.mak b/LITRON/LITRON-IOC-01App/src/build.mak new file mode 100644 index 000000000..15cdcedf2 --- /dev/null +++ b/LITRON/LITRON-IOC-01App/src/build.mak @@ -0,0 +1,81 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#============================= + +### NOTE: there should only be one build.mak for a given IOC family and this should be located in the ###-IOC-01 directory + +#============================= +# Build the IOC application LITRON-IOC-01 +# We actually use $(APPNAME) below so this file can be included by multiple IOCs + +PROD_IOC = $(APPNAME) +# LITRON-IOC-01.dbd will be created and installed +DBD += $(APPNAME).dbd + +# LITRON-IOC-01.dbd will be made up from these files: +$(APPNAME)_DBD += base.dbd +## ISIS standard dbd ## +$(APPNAME)_DBD += icpconfig.dbd +$(APPNAME)_DBD += pvdump.dbd +$(APPNAME)_DBD += asSupport.dbd +$(APPNAME)_DBD += devIocStats.dbd +$(APPNAME)_DBD += caPutLog.dbd +$(APPNAME)_DBD += calcSupport.dbd +$(APPNAME)_DBD += utilities.dbd +## Stream device support ## +$(APPNAME)_DBD += asyn.dbd +$(APPNAME)_DBD += drvAsynSerialPort.dbd +$(APPNAME)_DBD += drvAsynIPPort.dbd +$(APPNAME)_DBD += luaSupport.dbd +$(APPNAME)_DBD += stream.dbd +## add other dbd here ## +#$(APPNAME)_DBD += xxx.dbd + +# Add all the support libraries needed by this IOC + +## Add additional libraries here ## +#$(APPNAME)_LIBS += xxx + +## ISIS standard libraries ## +## Stream device libraries ## +$(APPNAME)_LIBS += stream +$(APPNAME)_LIBS += lua +$(APPNAME)_LIBS += asyn +## other standard libraries here ## +$(APPNAME)_LIBS += devIocStats +$(APPNAME)_LIBS += pvdump $(MYSQLLIB) easySQLite sqlite +$(APPNAME)_LIBS += caPutLog +$(APPNAME)_LIBS += icpconfig +$(APPNAME)_LIBS += autosave +$(APPNAME)_LIBS += utilities pugixml libjson zlib +$(APPNAME)_LIBS += calc sscan +$(APPNAME)_LIBS += pcrecpp pcre +$(APPNAME)_LIBS += seq pv + +# LITRON-IOC-01_registerRecordDeviceDriver.cpp derives from LITRON-IOC-01.dbd +$(APPNAME)_SRCS += $(APPNAME)_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +$(APPNAME)_SRCS_DEFAULT += $(APPNAME)Main.cpp +$(APPNAME)_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#$(APPNAME)_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +## area detector already includes PVA, so avoid including it twice +ifeq ($(AREA_DETECTOR),) +include $(CONFIG)/CONFIG_PVA_ISIS +endif + +# Finally link to the EPICS Base libraries +$(APPNAME)_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/LITRON/Makefile b/LITRON/Makefile new file mode 100644 index 000000000..19c9068d1 --- /dev/null +++ b/LITRON/Makefile @@ -0,0 +1,31 @@ +# Makefile at top of application tree +TOP = . +include $(TOP)/configure/CONFIG + +# Directories to build, any order +DIRS += configure +DIRS += $(wildcard *Sup) +DIRS += $(wildcard *App) +DIRS += $(wildcard *Top) +DIRS += $(wildcard iocBoot) + +# The build order is controlled by these dependency rules: + +# All dirs except configure depend on configure +$(foreach dir, $(filter-out configure, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += configure)) + +# Any *App dirs depend on all *Sup dirs +$(foreach dir, $(filter %App, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup, $(DIRS)))) + +# Any *Top dirs depend on all *Sup and *App dirs +$(foreach dir, $(filter %Top, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS)))) + +# iocBoot depends on all *App dirs +iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) + +# Add any additional dependency rules here: + +include $(TOP)/configure/RULES_TOP diff --git a/LITRON/configure/CONFIG b/LITRON/configure/CONFIG new file mode 100644 index 000000000..34ace5775 --- /dev/null +++ b/LITRON/configure/CONFIG @@ -0,0 +1,45 @@ +# CONFIG - Load build configuration data +# +# Do not make changes to this file! + +# Allow user to override where the build rules come from +RULES = $(EPICS_BASE) + +# RELEASE files point to other application tops +include $(TOP)/configure/RELEASE +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common + +ifdef T_A + -include $(TOP)/configure/RELEASE.Common.$(T_A) + -include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) +endif + +# Check EPICS_BASE is set properly +ifneq (file,$(origin EPICS_BASE)) + $(error EPICS_BASE must be set in a configure/RELEASE file) +else + ifeq ($(wildcard $(EPICS_BASE)/configure/CONFIG_BASE),) + $(error EPICS_BASE does not point to an EPICS installation) + endif +endif + +CONFIG = $(RULES)/configure +include $(CONFIG)/CONFIG + +# Override the Base definition: +INSTALL_LOCATION = $(TOP) + +# CONFIG_SITE files contain local build configuration settings +include $(TOP)/configure/CONFIG_SITE + +# Host-arch specific settings +-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common + +ifdef T_A + # Target-arch specific settings + -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) + + # Host & target specific settings + -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) +endif + diff --git a/LITRON/configure/CONFIG_SITE b/LITRON/configure/CONFIG_SITE new file mode 100644 index 000000000..212485ebe --- /dev/null +++ b/LITRON/configure/CONFIG_SITE @@ -0,0 +1,43 @@ +# CONFIG_SITE + +# Make any application-specific changes to the EPICS build +# configuration variables in this file. +# +# Host/target specific settings can be specified in files named +# CONFIG_SITE.$(EPICS_HOST_ARCH).Common +# CONFIG_SITE.Common.$(T_A) +# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) + +# CHECK_RELEASE controls the consistency checking of the support +# applications pointed to by the RELEASE* files. +# Normally CHECK_RELEASE should be set to YES. +# Set CHECK_RELEASE to NO to disable checking completely. +# Set CHECK_RELEASE to WARN to perform consistency checking but +# continue building even if conflicts are found. +CHECK_RELEASE = YES + +# Set this when you only want to compile this application +# for a subset of the cross-compiled target architectures +# that Base is built for. +#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32 + +# To install files into a location other than $(TOP) define +# INSTALL_LOCATION here. +#INSTALL_LOCATION= + +# Set this when the IOC and build host use different paths +# to the install location. This may be needed to boot from +# a Microsoft FTP server say, or on some NFS configurations. +#IOCS_APPL_TOP = + +# For application debugging purposes, override the HOST_OPT and/ +# or CROSS_OPT settings from base/configure/CONFIG_SITE +#HOST_OPT = NO +#CROSS_OPT = NO + +# These allow developers to override the CONFIG_SITE variable +# settings without having to modify the configure/CONFIG_SITE +# file itself. +-include $(TOP)/../CONFIG_SITE.local +-include $(TOP)/configure/CONFIG_SITE.local + diff --git a/LITRON/configure/Makefile b/LITRON/configure/Makefile new file mode 100644 index 000000000..925430940 --- /dev/null +++ b/LITRON/configure/Makefile @@ -0,0 +1,8 @@ +TOP=.. + +include $(TOP)/configure/CONFIG + +TARGETS = $(CONFIG_TARGETS) +CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) + +include $(TOP)/configure/RULES diff --git a/LITRON/configure/RELEASE b/LITRON/configure/RELEASE new file mode 100644 index 000000000..f62632490 --- /dev/null +++ b/LITRON/configure/RELEASE @@ -0,0 +1,74 @@ +# RELEASE - Location of external support modules +# +# IF YOU CHANGE ANY PATHS in this file or make API changes to +# any modules it refers to, you should do a "make rebuild" in +# this application's top level directory. +# +# The EPICS build process does not check dependencies against +# any files from outside the application, so it is safest to +# rebuild it completely if any modules it depends on change. +# +# Host- or target-specific settings can be given in files named +# RELEASE.$(EPICS_HOST_ARCH).Common +# RELEASE.Common.$(T_A) +# RELEASE.$(EPICS_HOST_ARCH).$(T_A) +# +# This file is parsed by both GNUmake and an EPICS Perl script, +# so it may ONLY contain definititions of paths to other support +# modules, variable definitions that are used in module paths, +# and include statements that pull in other RELEASE files. +# Variables may be used before their values have been set. +# Build variables that are NOT used in paths should be set in +# the CONFIG_SITE file. + +# Variables and paths to dependent modules: +#MODULES = /path/to/modules +#MYMODULE = $(MODULES)/my-module + +# If using the sequencer, point SNCSEQ at its top directory: +#SNCSEQ = $(MODULES)/seq-ver + +# EPICS_BASE should appear last so earlier modules can override stuff: +EPICS_BASE = C:/Instrument/Apps/EPICS/base/master + +# Set RULES here if you want to use build rules from somewhere +# other than EPICS_BASE: +#RULES = $(MODULES)/build-rules + +# These lines allow developers to override these RELEASE settings +# without having to modify this file directly. +-include $(TOP)/../RELEASE.local +-include $(TOP)/../RELEASE.$(EPICS_HOST_ARCH).local +-include $(TOP)/configure/RELEASE.local + +# Macros required for basic ioc/stream device +ACCESSSECURITY=$(SUPPORT)/AccessSecurity/master +ASUBFUNCTIONS=$(SUPPORT)/asubFunctions/master +ASYN=$(SUPPORT)/asyn/master +AUTOSAVE=$(SUPPORT)/autosave/master +CALC=$(SUPPORT)/calc/master +CAPUTLOG=$(SUPPORT)/caPutLog/master +DEVIOCSTATS=$(SUPPORT)/devIocStats/master +ICPCONFIG=$(SUPPORT)/icpconfig/master +LIBJSON=$(SUPPORT)/libjson/master +LUA=$(SUPPORT)/lua/master +MYSQL=$(SUPPORT)/MySQL/master +ONCRPC=$(SUPPORT)/oncrpc/master +PCRE=$(SUPPORT)/pcre/master +PUGIXML=$(SUPPORT)/pugixml/master +PVDUMP=$(SUPPORT)/pvdump/master +SNCSEQ=$(SUPPORT)/seq/master +SQLITE=$(SUPPORT)/sqlite/master +SSCAN=$(SUPPORT)/sscan/master +STREAMDEVICE=$(SUPPORT)/StreamDevice/master +UTILITIES=$(SUPPORT)/utilities/master +ZLIB=$(SUPPORT)/zlib/master + +# optional extra local definitions here +-include $(TOP)/configure/RELEASE.private + +include $(TOP)/../../../ISIS_CONFIG +-include $(TOP)/../../../ISIS_CONFIG.$(EPICS_HOST_ARCH) + +# IOC-specific support module +LITRON=$(SUPPORT)/litron/master diff --git a/LITRON/configure/RULES b/LITRON/configure/RULES new file mode 100644 index 000000000..6d56e14e8 --- /dev/null +++ b/LITRON/configure/RULES @@ -0,0 +1,6 @@ +# RULES + +include $(CONFIG)/RULES + +# Library should be rebuilt because LIBOBJS may have changed. +$(LIBNAME): ../Makefile diff --git a/LITRON/configure/RULES.ioc b/LITRON/configure/RULES.ioc new file mode 100644 index 000000000..901987c6c --- /dev/null +++ b/LITRON/configure/RULES.ioc @@ -0,0 +1,2 @@ +#RULES.ioc +include $(CONFIG)/RULES.ioc diff --git a/LITRON/configure/RULES_DIRS b/LITRON/configure/RULES_DIRS new file mode 100644 index 000000000..3ba269dcc --- /dev/null +++ b/LITRON/configure/RULES_DIRS @@ -0,0 +1,2 @@ +#RULES_DIRS +include $(CONFIG)/RULES_DIRS diff --git a/LITRON/configure/RULES_TOP b/LITRON/configure/RULES_TOP new file mode 100644 index 000000000..d09d668d5 --- /dev/null +++ b/LITRON/configure/RULES_TOP @@ -0,0 +1,3 @@ +#RULES_TOP +include $(CONFIG)/RULES_TOP + diff --git a/LITRON/iocBoot/Makefile b/LITRON/iocBoot/Makefile new file mode 100644 index 000000000..91e47d0b5 --- /dev/null +++ b/LITRON/iocBoot/Makefile @@ -0,0 +1,6 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/LITRON/iocBoot/iocLITRON-IOC-01/Makefile b/LITRON/iocBoot/iocLITRON-IOC-01/Makefile new file mode 100644 index 000000000..09b391227 --- /dev/null +++ b/LITRON/iocBoot/iocLITRON-IOC-01/Makefile @@ -0,0 +1,6 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +#ARCH = windows-x64 +ARCH = $(EPICS_HOST_ARCH) +TARGETS = envPaths dllPath.bat relPaths.sh runIOC.bat runIOC.sh +include $(TOP)/configure/RULES.ioc diff --git a/LITRON/iocBoot/iocLITRON-IOC-01/config.xml b/LITRON/iocBoot/iocLITRON-IOC-01/config.xml new file mode 100644 index 000000000..2b1dab7ac --- /dev/null +++ b/LITRON/iocBoot/iocLITRON-IOC-01/config.xml @@ -0,0 +1,12 @@ + + + +This is a template description +These are template details + + + + + + + diff --git a/LITRON/iocBoot/iocLITRON-IOC-01/st-common.cmd b/LITRON/iocBoot/iocLITRON-IOC-01/st-common.cmd new file mode 100644 index 000000000..c52d15347 --- /dev/null +++ b/LITRON/iocBoot/iocLITRON-IOC-01/st-common.cmd @@ -0,0 +1,44 @@ +epicsEnvSet "STREAM_PROTOCOL_PATH" "$(LITRON)/data" +epicsEnvSet "DEVICE" "L0" + +##ISIS## Run IOC initialisation +< $(IOCSTARTUP)/init.cmd + +## Device simulation mode IP configuration +$(IFDEVSIM) drvAsynIPPortConfigure("$(DEVICE)", "localhost:$(EMULATOR_PORT=57677)") + +## For recsim: +$(IFRECSIM) drvAsynSerialPortConfigure("$(DEVICE)", "$(PORT=NUL)", 0, 1, 0, 0) + +## For real device: +$(IFNOTDEVSIM) $(IFNOTRECSIM) drvAsynSerialPortConfigure("$(DEVICE)", "$(PORT=NO_PORT_MACRO)", 0, 0, 0, 0) +$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "baud", "$(BAUD=9600)") +$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "bits", "$(BITS=8)") +$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "parity", "$(PARITY=none)") +$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "stop", "$(STOP=1)") +## Hardware flow control off +$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", 0, "clocal", "Y") +$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)",0,"crtscts","N") +## Software flow control off +$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)",0,"ixon","N") +$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)",0,"ixoff","N") + +## Load record instances + +##ISIS## Load common DB records +< $(IOCSTARTUP)/dbload.cmd + +## Load our record instances +dbLoadRecords("$(LITRON)/db/litron.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX)$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE)") + +##ISIS## Stuff that needs to be done after all records are loaded but before iocInit is called +< $(IOCSTARTUP)/preiocinit.cmd + +cd "${TOP}/iocBoot/${IOC}" +iocInit + +## Start any sequence programs +#seq sncxxx,"user=yyf77781" + +##ISIS## Stuff that needs to be done after iocInit is called e.g. sequence programs +< $(IOCSTARTUP)/postiocinit.cmd diff --git a/LITRON/iocBoot/iocLITRON-IOC-01/st.cmd b/LITRON/iocBoot/iocLITRON-IOC-01/st.cmd new file mode 100644 index 000000000..21d66526b --- /dev/null +++ b/LITRON/iocBoot/iocLITRON-IOC-01/st.cmd @@ -0,0 +1,19 @@ +#!../../bin/windows-x64/LITRON-IOC-01 + +## You may have to change LITRON-IOC-01 to something else +## everywhere it appears in this file + +# Increase this if you get <> or discarded messages warnings in your errlog output +errlogInit2(65536, 256) + +< envPaths + +cd "${TOP}" + +## Register all support components +dbLoadDatabase "dbd/LITRON-IOC-01.dbd" +LITRON_IOC_01_registerRecordDeviceDriver pdbbase + +## calling common command file in ioc 01 boot dir +< ${TOP}/iocBoot/iocLITRON-IOC-01/st-common.cmd + diff --git a/Makefile b/Makefile index cabadaab1..59f8a4da6 100644 --- a/Makefile +++ b/Makefile @@ -73,6 +73,7 @@ IOCDIRS += PACE5000 IOCDIRS += MEASM905 IOCDIRS += LM500 IOCDIRS += RKNMNTR +IOCDIRS += LITRON ## check on missing directories IOCMAKES = $(wildcard */Makefile)