From 242d58e64acdf6309e870ed77389d2fea4d361d3 Mon Sep 17 00:00:00 2001
From: Joao Paulo Martins <joaopaulo.martins@ess.eu>
Date: Fri, 2 Oct 2020 19:06:22 +0200
Subject: [PATCH] First version running in TS2

---
 cmds/evm-simple.cmd                           | 51 ------------------
 cmds/evr-test.cmd                             | 25 +++++++++
 cmds/llrflab.cmd                              | 48 +++++++++++++----
 cmds/ts2.cmd                                  | 53 ++++++++++++++-----
 configure/CONFIG_MODULE                       |  2 +-
 tools/ioc@ts2evm.service                      | 39 ++++++++++++++
 .../ts2evmApp/Db/ts2_evm_controls.template    | 18 +++----
 7 files changed, 149 insertions(+), 87 deletions(-)
 delete mode 100755 cmds/evm-simple.cmd
 create mode 100644 cmds/evr-test.cmd
 create mode 100644 tools/ioc@ts2evm.service

diff --git a/cmds/evm-simple.cmd b/cmds/evm-simple.cmd
deleted file mode 100755
index edd4758..0000000
--- a/cmds/evm-simple.cmd
+++ /dev/null
@@ -1,51 +0,0 @@
-# .cmd
-require "mrfioc2" "2.2.1rc1"
-#require "supercycleEngine"  "master"
-require ts2evm,develop
-
-epicsEnvSet(REFTABS_DIR, "/home/iocuser/timing/reftabs")
-
-epicsEnvSet(PREFIX, "TD-RFLAB:TS-EVG-01")
-epicsEnvSet(PSCE,   "TD-RFLAB:TS-SCE-01") 
-epicsEnvSet(PEVG,   "TD-RFLAB:TS-EVG-01")
-
-# Load standard timing modules environment
-iocshLoad "$(mrfioc2_DIR)/mtca.iocsh"
-iocshLoad "$(mrfioc2_DIR)/ts.iocsh"
-iocshLoad "$(mrfioc2_DIR)/evm.iocsh" "P=$(PREFIX), OBJ=EVM, PCIID=09:00.0, U=:EVRU-, D=:EVRD-"
-
-dbLoadRecords("ts2_evm_controls.template", "P=$(PREFIX):, EVGPREFIX=$(PREFIX):")
-
-iocInit
-
-iocshLoad "$(mrfioc2_DIR)/evgr.iocsh"               "P=$(PEVG), INTRF=, INTPPS="
-
-dbpf $(PREFIX):Enable-Sel "Ena Master"
-dbpf $(PREFIX):1ppsInp-Sel "Sys Clk"
-
-# Set MXC0 to generate 14 Hz
-dbpf $(PREFIX):Mxc0-Prescaler-SP 6289464
-dbpf $(PREFIX):Mxc0-Polarity-Sel "Orginal"
-
-# Generate event 14 upon trigger on Mxc0
-dbpf $(PREFIX):TrigEvt0-EvtCode-SP  14
-dbpf $(PREFIX):TrigEvt0-TrigSrc-Sel "Mxc0"
-
-# Configure sequencers
-dbpf $(PREFIX):SoftSeq0-RunMode-Sel "Normal"
-dbpf $(PREFIX):SoftSeq0-TsResolution-Sel "uSec"
-dbpf $(PREFIX):SoftSeq0-TrigSrc-0-Sel "Mxc0"
-dbpf $(PREFIX):SoftSeq0-Load-Cmd "1"
-
-dbpf $(PREFIX):SoftSeq1-RunMode-Sel "Normal"
-dbpf $(PREFIX):SoftSeq1-TsResolution-Sel "uSec"
-dbpf $(PREFIX):SoftSeq1-TrigSrc-0-Sel "Mxc0"
-dbpf $(PREFIX):SoftSeq1-Load-Cmd "1"
-
-dbpf $(PREFIX):SoftSeq2-RunMode-Sel "Single"
-dbpf $(PREFIX):SoftSeq2-TsResolution-Sel "uSec"
-dbpf $(PREFIX):SoftSeq2-TrigSrc-0-Sel "Mxc0"
-dbpf $(PREFIX):SoftSeq2-Load-Cmd "1"
-
-# Start sequencers
-dbpf $(PREFIX):SeqSelecCalc.PROC "1"
diff --git a/cmds/evr-test.cmd b/cmds/evr-test.cmd
new file mode 100644
index 0000000..24ae3e3
--- /dev/null
+++ b/cmds/evr-test.cmd
@@ -0,0 +1,25 @@
+require mrfioc2,2.2.1rc3
+
+#- Channel Access environment configuration
+epicsEnvSet("EPICS_CA_MAX_ARRAY_BYTES","10000000")
+
+#- Example MACROS
+epicsEnvSet("SYSSUB", "TD-TS2")
+epicsEnvSet("DISDEVID", "TS-EVR-001")
+epicsEnvSet("PREFIX", "$(SYSSUB):$(DISDEVID):")
+
+#- EVR PCI address
+epicsEnvSet("PCIID", "08:00.0")
+
+# Not use in this script, but it is needed for the expansion. 
+epicsEnvSet("MainEvtCODE" "14")
+
+#
+# Record names follows the template "$(P)$(R=)$(S=:)Signal-SD"
+# "P" is mandatory, "R" is optional (default empty), "S" is optional (defaul separator ":")
+# "DEV" is a unique identifier of the EVR card used by mrfioc2 device support layer
+#
+iocshLoad("$(mrfioc2_DIR)/evr-mtca-300.iocsh", "P=$(PREFIX), S=, DEV=$(DISDEVID), PCIID=$(PCIID)")
+
+iocInit()
+
diff --git a/cmds/llrflab.cmd b/cmds/llrflab.cmd
index 341302d..5d13093 100755
--- a/cmds/llrflab.cmd
+++ b/cmds/llrflab.cmd
@@ -3,31 +3,61 @@ require mrfioc2,2.2.1rc3
 require busy,1.7.2_c596e1c
 require ts2evm,develop
 
+# - Standard modules
+require iocStats,3.1.16
+require autosave,5.10.0
+require caPutLog,b544f92
+require recsync,1.3.0-9705e52
+require ess,0.0.1
+
 epicsEnvSet(PREFIX, "TD-RFLAB:TS-EVG-01")
 
-# Load standard timing modules environment
+# - Load standard timing modules environment
 iocshLoad "$(mrfioc2_DIR)/mtca.iocsh"
 iocshLoad "$(mrfioc2_DIR)/ts.iocsh"
 iocshLoad "$(mrfioc2_DIR)/evm.iocsh" "P=$(PREFIX), OBJ=EVM, PCIID=09:00.0, U=:EVRU-, D=:EVRD-"
 
+# - Load TS2 EVM application
 dbLoadRecords("ts2_evm_controls.template", "P=$(PREFIX):, EVGPREFIX=$(PREFIX):")
 
+# - Load standard ESS modules
+iocshLoad("$(iocStats_DIR)/iocStats.iocsh", "IOCNAME=$(PREFIX)")
+
+var(reccastTimeout, 5.0)
+var(reccastMaxHoldoff, 5.0)
+epicsEnvSet("RECSYNCPREFIX", "$(PREFIX)")
+iocshLoad("$(recsync_DIR)/recsync.iocsh", "IOCNAME=$(RECSYNCPREFIX)")
+
+epicsEnvSet("AS_REMOTE", "/opt/autosave")
+epicsEnvSet("AS_FOLDER", "$(PREFIX)")
+iocshLoad("$(autosave_DIR)/autosave.iocsh", "AS_TOP=$(AS_REMOTE),IOCNAME=$(AS_FOLDER)")
+
+## Logging environment variables
+epicsEnvSet("LOG_SERVER_NAME", "$(LOG_SERVER_NAME=localhost)")
+epicsEnvSet("ERRORLOG_SERVER_PORT", "$(ERRORLOG_SERVER_PORT=9001)")
+epicsEnvSet("CAPUTLOG_SERVER_PORT", "$(CAPUTLOG_SERVER_PORT=9001)")
+epicsEnvSet("FACNAME", "$(FACNAME=)")
+#iocshLoad("$(ess_DIR)/iocLog.iocsh", "LOG_INET=$(LOG_SERVER_NAME),LOG_INET_PORT=$(ERRORLOG_SERVER_PORT),FACNAME=$(FACILITY_NAME=),IOCNAME=$(PREFIX)")
+#iocshLoad("$(caPutLog_DIR)/caPutLog.iocsh", "LOG_INET=$(LOG_SERVER_NAME),LOG_INET_PORT=$(CAPUTLOG_SERVER_PORT)")
+
+# - Start IOC
 iocInit
 
-iocshLoad "$(mrfioc2_DIR)/evgr.iocsh"               "P=$(PREFIX), INTRF=, INTPPS="
+# - Load EVM standard after init snippet
+iocshLoad("$(mrfioc2_DIR)/evgr.iocsh","P=$(PREFIX), INTRF=, INTPPS=")
 
 dbpf $(PREFIX):Enable-Sel "Ena Master"
 dbpf $(PREFIX):1ppsInp-Sel "Sys Clk"
 
-# Set MXC0 to generate 14 Hz
+# - Set MXC0 to generate 14 Hz
 dbpf $(PREFIX):Mxc0-Prescaler-SP 6289464
 dbpf $(PREFIX):Mxc0-Polarity-Sel "Orginal"
 
-# Generate event 14 upon trigger on Mxc0
+# - Generate event 14 upon trigger on Mxc0
 dbpf $(PREFIX):TrigEvt0-EvtCode-SP  14
 dbpf $(PREFIX):TrigEvt0-TrigSrc-Sel "Mxc0"
 
-# Configure sequencers
+# - Configure sequencers
 dbpf $(PREFIX):SoftSeq0-RunMode-Sel "Normal"
 dbpf $(PREFIX):SoftSeq0-TsResolution-Sel "uSec"
 dbpf $(PREFIX):SoftSeq0-TrigSrc-0-Sel "Mxc0"
@@ -38,10 +68,6 @@ dbpf $(PREFIX):SoftSeq1-TsResolution-Sel "uSec"
 dbpf $(PREFIX):SoftSeq1-TrigSrc-0-Sel "Mxc0"
 dbpf $(PREFIX):SoftSeq1-Load-Cmd "1"
 
-dbpf $(PREFIX):SoftSeq2-RunMode-Sel "Single"
-dbpf $(PREFIX):SoftSeq2-TsResolution-Sel "uSec"
-dbpf $(PREFIX):SoftSeq2-TrigSrc-0-Sel "Mxc0"
-dbpf $(PREFIX):SoftSeq2-Load-Cmd "1"
-
-# Start sequencers
+# - Start sequencers
 dbpf $(PREFIX):SeqSelecCalc.PROC "1"
+
diff --git a/cmds/ts2.cmd b/cmds/ts2.cmd
index 1babd02..baf6907 100755
--- a/cmds/ts2.cmd
+++ b/cmds/ts2.cmd
@@ -1,32 +1,63 @@
 # - Required modules
-require mrfioc2,2.2.1rc1
-require ts2evm,develop
+require mrfioc2,2.2.1rc3
+require busy,1.7.2_c596e1c
+require ts2evm,1.0.0
+
+# - Standard modules
+require iocStats,3.1.16
+require autosave,5.10.0
+require caPutLog,b544f92
+require recsync,1.3.0-9705e52
+require ess,0.0.1
 
 epicsEnvSet(PREFIX, "TD-TS2:TS-EVM-01")
 
-# Load standard timing modules environment
+# - Load standard timing modules environment
 iocshLoad "$(mrfioc2_DIR)/mtca.iocsh"
 iocshLoad "$(mrfioc2_DIR)/ts.iocsh"
 iocshLoad "$(mrfioc2_DIR)/evm.iocsh" "P=$(PREFIX), OBJ=EVM, PCIID=09:00.0, U=:EVRU-, D=:EVRD-"
 
+# - Load TS2 EVM application
 dbLoadRecords("ts2_evm_controls.template", "P=$(PREFIX):, EVGPREFIX=$(PREFIX):")
 
+# - Load standard ESS modules
+iocshLoad("$(iocStats_DIR)/iocStats.iocsh", "IOCNAME=$(PREFIX)")
+
+var(reccastTimeout, 5.0)
+var(reccastMaxHoldoff, 5.0)
+epicsEnvSet("RECSYNCPREFIX", "$(PREFIX)")
+iocshLoad("$(recsync_DIR)/recsync.iocsh", "IOCNAME=$(RECSYNCPREFIX)")
+
+epicsEnvSet("AS_REMOTE", "/opt/autosave")
+epicsEnvSet("AS_FOLDER", "$(PREFIX)")
+iocshLoad("$(autosave_DIR)/autosave.iocsh", "AS_TOP=$(AS_REMOTE),IOCNAME=$(AS_FOLDER)")
+
+## Logging environment variables
+epicsEnvSet("LOG_SERVER_NAME", "$(LOG_SERVER_NAME=localhost)")
+epicsEnvSet("ERRORLOG_SERVER_PORT", "$(ERRORLOG_SERVER_PORT=9001)")
+epicsEnvSet("CAPUTLOG_SERVER_PORT", "$(CAPUTLOG_SERVER_PORT=9001)")
+epicsEnvSet("FACNAME", "$(FACNAME=)")
+#iocshLoad("$(ess_DIR)/iocLog.iocsh", "LOG_INET=$(LOG_SERVER_NAME),LOG_INET_PORT=$(ERRORLOG_SERVER_PORT),FACNAME=$(FACILITY_NAME=),IOCNAME=$(PREFIX)")
+#iocshLoad("$(caPutLog_DIR)/caPutLog.iocsh", "LOG_INET=$(LOG_SERVER_NAME),LOG_INET_PORT=$(CAPUTLOG_SERVER_PORT)")
+
+# - Start IOC
 iocInit
 
-iocshLoad "$(mrfioc2_DIR)/evgr.iocsh"               "P=$(PREFIX), INTRF=, INTPPS="
+# - Load EVM standard after init snippet
+iocshLoad("$(mrfioc2_DIR)/evgr.iocsh","P=$(PREFIX), INTRF=, INTPPS=")
 
 dbpf $(PREFIX):Enable-Sel "Ena Master"
 dbpf $(PREFIX):1ppsInp-Sel "Sys Clk"
 
-# Set MXC0 to generate 14 Hz
+# - Set MXC0 to generate 14 Hz
 dbpf $(PREFIX):Mxc0-Prescaler-SP 6289464
 dbpf $(PREFIX):Mxc0-Polarity-Sel "Orginal"
 
-# Generate event 14 upon trigger on Mxc0
+# - Generate event 14 upon trigger on Mxc0
 dbpf $(PREFIX):TrigEvt0-EvtCode-SP  14
 dbpf $(PREFIX):TrigEvt0-TrigSrc-Sel "Mxc0"
 
-# Configure sequencers
+# - Configure sequencers
 dbpf $(PREFIX):SoftSeq0-RunMode-Sel "Normal"
 dbpf $(PREFIX):SoftSeq0-TsResolution-Sel "uSec"
 dbpf $(PREFIX):SoftSeq0-TrigSrc-0-Sel "Mxc0"
@@ -37,10 +68,6 @@ dbpf $(PREFIX):SoftSeq1-TsResolution-Sel "uSec"
 dbpf $(PREFIX):SoftSeq1-TrigSrc-0-Sel "Mxc0"
 dbpf $(PREFIX):SoftSeq1-Load-Cmd "1"
 
-dbpf $(PREFIX):SoftSeq2-RunMode-Sel "Single"
-dbpf $(PREFIX):SoftSeq2-TsResolution-Sel "uSec"
-dbpf $(PREFIX):SoftSeq2-TrigSrc-0-Sel "Mxc0"
-dbpf $(PREFIX):SoftSeq2-Load-Cmd "1"
-
-# Start sequencers
+# - Start sequencers
 dbpf $(PREFIX):SeqSelecCalc.PROC "1"
+
diff --git a/configure/CONFIG_MODULE b/configure/CONFIG_MODULE
index b67b41e..bb0419c 100644
--- a/configure/CONFIG_MODULE
+++ b/configure/CONFIG_MODULE
@@ -3,7 +3,7 @@ EPICS_MODULE_NAME:=ts2evm
 
 EPICS_MODULE_TAG:=master
 #
-E3_MODULE_VERSION:=develop
+E3_MODULE_VERSION:=1.0.0
 
 # DEPENDENT MODULE VERSION
 # For Example,
diff --git a/tools/ioc@ts2evm.service b/tools/ioc@ts2evm.service
new file mode 100644
index 0000000..38e5156
--- /dev/null
+++ b/tools/ioc@ts2evm.service
@@ -0,0 +1,39 @@
+[Unit]
+Description=IOC: ts2-evm
+ConditionHost=ts2-evm-cpu.tn.esss.lu.se
+After=multi-user.target
+Requires=multi-user.target
+
+[Service]
+User=iocuser
+Type=simple
+
+# workaround for problem with require 3.2.0
+Environment="EPICS_BASE=/epics/base-7.0.4"
+Environment="EPICS_HOST_ARCH=linux-x86_64"
+Environment="EPICS_DRIVER_PATH=/epics/base-7.0.4/require/3.2.0/siteMods:/epics/base-7.0.4/require/3.2.0/siteApps"
+
+Environment="E3_REQUIRE_NAME=require"
+Environment="E3_SITELIBS_PATH=/epics/base-7.0.4/require/3.2.0/siteLibs"
+Environment="E3_REQUIRE_INC=/epics/base-7.0.4/require/3.2.0/include"
+Environment="E3_REQUIRE_VERSION=3.2.0"
+Environment="E3_REQUIRE_LOCATION=/epics/base-7.0.4/require/3.2.0"
+Environment="E3_REQUIRE_LIB=/epics/base-7.0.4/require/3.2.0/lib"
+Environment="E3_REQUIRE_BIN=/epics/base-7.0.4/require/3.2.0/bin"
+Environment="E3_SITEAPPS_PATH=/epics/base-7.0.4/require/3.2.0/siteApps"
+Environment="E3_SITEMODS_PATH=/epics/base-7.0.4/require/3.2.0/siteMods"
+Environment="E3_REQUIRE_DB=/epics/base-7.0.4/require/3.2.0/db"
+Environment="E3_REQUIRE_DBD=/epics/base-7.0.4/require/3.2.0/dbd"
+
+Environment="PATH=/epics/base-7.0.4/require/3.2.0/bin:/epics/base-7.0.4/bin/linux-x86_64:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/iocuser/.local/bin:/home/iocuser/bin:/home/iocuser/.local/bin:/home/iocuser/bin"
+Environment="LD_LIBRARY_PATH=/epics/base-7.0.4/lib/linux-x86_64:/epics/base-7.0.4/require/3.2.0/lib/linux-x86_64:/epics/base-7.0.4/require/3.2.0/siteLibs/linux-x86_64"
+
+ExecStart=/usr/bin/procServ \
+		-f \
+		-i ^C^D \
+		2000 \
+		/epics/base-7.0.4/require/3.2.0/bin/iocsh.bash \
+		/home/iocuser/devspace/e3-ts2evm/cmds/ts2.cmd
+[Install]
+WantedBy=multi-user.target
+
diff --git a/ts2evm-loc/ts2evmApp/Db/ts2_evm_controls.template b/ts2evm-loc/ts2evmApp/Db/ts2_evm_controls.template
index 559684a..8baa360 100644
--- a/ts2evm-loc/ts2evmApp/Db/ts2_evm_controls.template
+++ b/ts2evm-loc/ts2evmApp/Db/ts2_evm_controls.template
@@ -8,6 +8,7 @@ record(ao, "$(P)$(R=)CycleFreq-SP") {
     field(DRVL, "0")
     field(DRVH, "14")
     field(EGU, "Hz")
+    info(autosaveFields_pass0, "VAL")
 
     field(FLNK, "$(P)$(R=)RFFreq-Divider PP")
 }
@@ -31,6 +32,7 @@ record(ao, "$(P)$(R=)RFPulseLen-SP") {
     field(DRVL, "404")
     field(DRVH, "3600")
     field(EGU, "us")
+    info(autosaveFields_pass0, "VAL")
 
     field(FLNK, "$(P)$(R=)SeqSelecCalc PP")
 }
@@ -40,17 +42,6 @@ record(ai, "$(P)$(R=)RFPulseLen-RB") {
     field(EGU, "us")
 }
 
-# record(ao, "$(P)$(R=)RFPulseDelay-SP") {
-#     field(DESC, "RF Pulse Delay from cycle init")
-#     field(VAL,  "10000")
-#     field(DRVL, "1")
-#     field(DRVH, "10000000")
-#     field(EGU, "us")
-#     field(DISA, "1")
-
-#     field(FLNK, "$(P)$(R=)SeqSelecCalc PP")
-# }
-
 record(ai, "$(P)$(R=)RFPulseDelay-RB") {
     field(DESC, "RF Pulse Delay RB")
     field(EGU, "us")
@@ -66,6 +57,7 @@ record(ao, "$(P)$(R=)PBLen-SP") {
     field(DRVL, "1")
     field(DRVH, "2863")
     field(EGU, "us")
+    info(autosaveFields_pass0, "VAL")
 
     field(FLNK, "$(P)$(R=)SeqSelecCalc PP")
 }
@@ -81,6 +73,7 @@ record(ao, "$(P)$(R=)PBDelay-SP") {
     field(DRVL, "400")
     field(DRVH, "10000000")
     field(EGU, "us")
+    info(autosaveFields_pass0, "VAL")
 
     field(FLNK, "$(P)$(R=)SeqSelecCalc PP")
 }
@@ -99,6 +92,7 @@ record(ao, "$(P)$(R=)PulseCmDelay-SP") {
     field(DRVL, "100")
     field(DRVH, "10000000")
     field(EGU, "us")
+    info(autosaveFields_pass0, "VAL")
 
     field(FLNK, "$(P)$(R=)SeqSelecCalc PP")
 }
@@ -373,6 +367,8 @@ record(bo, "$(P)$(R=)Mode") {
     field(ZNAM, "Free Running")
     field(ONAM, "On Demand")
     field(FLNK, "$(P)$(R=)SeqDisableMode PP")
+
+    info(autosaveFields_pass0, "VAL")
 }
 
 # Trigger actions based on operation mode
-- 
GitLab