Skip to content
Snippets Groups Projects
Commit c6955e27 authored by Gabriel Fedel's avatar Gabriel Fedel :speech_balloon:
Browse files

Remove deployment files

Now these files are located on a specific repository at:
https://gitlab.esss.lu.se/icshwi/llrf-deployment-tools
parent f6ff3c29
No related branches found
No related tags found
1 merge request!18Remove deployment files
alias($(O), $(A))
#channel num, PV name, description
0,CvtFld,Cavity Field
1,Refer,Reference
2,PreAmpFwd,PreAmp Fwd
3,PwrAmpFwd,PowerAmp Fwd
4,PwrAmpRefl,PowerAmp Refl
5,CvtFwd,Cavity Forward
6,CvtRfl,Cavity Refl
7,VM,Vector Modulator
8,VMOut,Vector Modulator Out
9,AI9,Analog Channel 9
#!/bin/bash
if [ $# -ne 2 ]; then
echo "usage: configChannels.sh <digitiser instance> <config input file>"
echo "There is an example for config input file: configChannels.input"
exit
fi
installPath=/iocs/sis8300llrf
if [ ! -d $installPath ]; then
echo "Folder $installPath not found!"
exit
fi
if [ ! -w $installPath ]; then
echo "You cannot write on $installPath !"
exit
fi
iNum=$1
confFile=$2
fPath=$installPath/config-aliasing$iNum.iocsh
fPathDesc=$installPath/config-desc$iNum.iocsh
# Populate IOC snippet for alias values
if [ -f $fPath ]; then
rm $fPath
fi
if [ -f $fPathDesc ]; then
rm $fPathDesc
fi
# Populate iocsh snippet containing alias definitions.
echo "# Alias definitions for digitiser card number $iNum" > $fPath
template0="dbLoadRecords(\$(E3_CMD_TOP)/alias.template, \"O=$LLRF_IOC_NAME$iNum:AI"
template1="dbLoadRecords(\$(E3_CMD_TOP)/desc.template, "
{
read
while IFS=, read -r ch pv_name desc
do
ch=$(echo $ch | sed -e 's/^[ \t]*//')
pv_name=$(echo $pv_name | sed -e 's/^[ \t]*//')
desc=$(echo $desc | sed -e 's/^[ \t]*//')
if [ ${#desc} -gt 41 ]; then
echo "Warning: Description truncated to char[41] - ${desc:0:40}"
desc=${desc:0:40}
fi
# If alias is the same as channel, doesn't set alias
if [ $pv_name != "AI$ch" ]; then
echo "# Board $iNum, Channel $ch = $pv_name" >> $fPath
oPrefix="$template0$ch"
aPrefix="$LLRF_IOC_NAME:$pv_name"
# set aliases
echo "$oPrefix, A=$aPrefix\")" >> $fPath
echo "$oPrefix-ATT, A=$aPrefix-ATT\")" >> $fPath
echo "$oPrefix-ATT-RBV, A=$aPrefix-ATT-RBV\")" >> $fPath
echo "$oPrefix-DECF, A=$aPrefix-DECF\")" >> $fPath
echo "$oPrefix-DECF-RBV, A=$aPrefix-DECF-RBV\")" >> $fPath
echo "$oPrefix-DECO, A=$aPrefix-DECO\")" >> $fPath
echo "$oPrefix-DECO-RBV, A=$aPrefix-DECO-RBV\")" >> $fPath
echo "$oPrefix-FileName, A=$aPrefix-FileName\")" >> $fPath
echo "$oPrefix-Slope, A=$aPrefix-Slope\")" >> $fPath
echo "$oPrefix-Offset, A=$aPrefix-Offset\")" >> $fPath
echo "$oPrefix-InputValues, A=$aPrefix-InputValues\")" >> $fPath
echo "$oPrefix-DigitisedValues, A=$aPrefix-DigitisedValues\")" >> $fPath
echo "$oPrefix-FittedLine, A=$aPrefix-FittedLine\")" >> $fPath
fi
# set descriptions
echo "$template1\"A=$LLRF_IOC_NAME$iNum:AI$ch, D=$desc\")" >> $fPathDesc
done
} < $confFile
#!/bin/sh
if [ "$EUID" -ne 0 ] ; then
echo "Deployment script must be run with root priviledges, exiting..."
exit
fi
if [[ $# -gt 0 ]] ; then
EPICS_SRC=$1
EPICS_BASE=$2
E3_REQUIRE_VERSION=$3
LLRF_IOC_NAME=$4
else
echo "Usage: sudo deployServiceIOC.sh <e3 source directory> <epics base directory> <epics require version> <LLRF_IOC_NAME>"
echo "sudo deployServiceIOC.sh $EPICS_SRC $EPICS_BASE $E3_REQUIRE_VERSION $LLRF_IOC_NAME"
exit
fi
hostName=$(hostname)
serviceName=/etc/systemd/system/ioc@llrf.service
serviceNameGit=$EPICS_SRC/e3-sis8300llrf/startup/ioc@llrf.service
#Prepare service and enable
#Get EPICS base version and require version
ver_base=$(echo $EPICS_BASE | cut -c13-18)
eval "sed -e 's/icslab-llrf/$hostName/'\
-e 's/<epics_base>/$ver_base/'\
-e 's/<req_version>/$E3_REQUIRE_VERSION/'\
< $serviceNameGit" > $serviceName
systemctl enable ioc@llrf.service
#Prepare siteApp configuration for IOC instance specific configuration
siteApp=/iocs/sis8300llrf
if [ ! -d $siteApp/log ]; then
mkdir -p "$siteApp/log/"
fi
if [ ! -d $siteApp/run ]; then
mkdir -p "$siteApp/run/"
fi
chown -R iocuser $siteApp
if [ ! -L /etc/systemd/system/multi-user.target.wants/ioc@llrf.service ] ; then
echo "ioc@llrf.service is not enabled."
fi
systemctl daemon-reload
#!/bin/sh
#Prepare siteApp configuration for IOC instance specific configuration
siteApp=/iocs/sis8300llrf
if [ ! -d $siteApp ]; then
sudo mkdir -p "$siteApp"
fi
sudo chown -R iocuser "$siteApp"
cp $EPICS_SRC/e3-sis8300llrf/startup/llrf_template.iocsh $siteApp/llrf.iocsh
slots_fpga=$(ls /dev/sis8300-* | cut -f2 -d "-")
if [ ${#slots_fpga} -lt 1 ] ; then
echo "Could not find SIS8300 digitiser board."
echo "Board slot must be manually configured in $siteApp/llrf.cmd"
snippet="epicsEnvSet(\"LLRF_PREFIX\" \"$LLRF_IOC_NAME\" ) \\\n \
epicsEnvSet(\"LLRF_SLOT\" \"<slot>\" ) \\\n \
iocshLoad $\(E3_CMD_TOP\)\/llrf.iocsh \\\n \
iocshLoad $\(E3_CMD_TOP\)\/config-aliasing1.iocsh \\\n \
iocshLoad $\(E3_CMD_TOP\)\/config-desc1.iocsh \\\n"
echo "snippet = $snippet"
eval "sed -e $'s/<snippet>/$snippet/g' < $EPICS_SRC/e3-sis8300llrf/startup/llrf_template.cmd > $siteApp/llrf.cmd"
else
# Start board enumeration from 1.
i=1
snippet=""
for slot_fpga in $(ls /dev/sis8300-* | cut -f2 -d "-" | sort -n)
do
snippet="$snippet \\\n\
epicsEnvSet(\"LLRF_PREFIX\" \"$LLRF_IOC_NAME$i\" ) \\\n \
epicsEnvSet(\"LLRF_SLOT\" \"$slot_fpga\" ) \\\n \
iocshLoad $\(E3_CMD_TOP\)\/llrf.iocsh \\\n \
iocshLoad $\(E3_CMD_TOP\)\/config-aliasing$i.iocsh \\\n \
iocshLoad $\(E3_CMD_TOP\)\/config-desc$i.iocsh \\\n"
i=$(($i+1))
done
#Populate digitiser slot and IOC Name in startup script.
eval "sed -e $'s/<snippet>/$snippet/g'\
< $EPICS_SRC/e3-sis8300llrf/startup/llrf_template.cmd > $siteApp/llrf.cmd"
fi
#Timing configuration
# We check the EVR is available on PCIe to use in timing.iocsh snippet used to configure the EVR.
pcie_enumeration=$(lspci | grep Xilinx | cut -c1-7)
if [ ${#pcie_enumeration} != 7 ] ; then
echo "Could not find Timing Event Receiver on PCIexpress bus."
echo "Therefore no timing configuration created."
echo "# no timing configuration as no EVR detected on PCIe bus." > $siteApp/timing.iocsh
else
eval "sed -e 's/<B:D.F>/$pcie_enumeration/' -e 's/<LLRF_IOC_NAME>/$LLRF_IOC_NAME/' < $EPICS_SRC/e3-sis8300llrf/startup/timing_template.iocsh" > "/iocs/sis8300llrf/timing.iocsh"
cp $EPICS_SRC/e3-sis8300llrf/startup/tr-sequencer.sh $siteApp/tr-sequencer.sh
fi
# Alias template
cp $EPICS_SRC/e3-sis8300llrf/startup/alias.template $siteApp/alias.template
# Description template
cp $EPICS_SRC/e3-sis8300llrf/startup/desc.template $siteApp/desc.template
record("*", "$(A)"){
field(DESC, "$(D)")
}
[Unit]
Description=IOC: %i
ConditionHost=icslab-llrf
After=multi-user.target
Requires=multi-user.target
[Service]
User=root
Type=simple
Environment=SITEAPP=/iocs/sis8300llrf
#run ProcServ
WorkingDirectory=${SITEAPP}
ExecStart=/usr/bin/procServ \
-f \
-L ${SITEAPP}/log-ioc-%i \
-i ^C^D \
-c ${SITEAPP}/run/ \
-n %i \
2000 \
/epics/base-<epics_base>/require/<req_version>/bin/iocsh.bash \
${SITEAPP}/llrf.cmd
[Install]
WantedBy=multi-user.target
# Timing Configuration
iocshLoad $(E3_CMD_TOP)/timing.iocsh
epicsEnvSet("EPICS_CA_MAX_ARRAY_BYTES" "16777300")
require sis8300llrf, 3.10.9
ndsSetTraceLevel 3
<snippet>
afterInit("dbgrep REQMOD* > '$(E3_CMD_TOP)/REQMODs.list'")
#######################
### LLRF CONTROLLER 1 #
#######################
epicsEnvSet("LLRF_NOPULSETYPES" "$(SIS8300LLRF_NOPULSETYPES=1)")
epicsEnvSet("LLRF_PULSETYPE" "$(SIS8300LLRF_PULSETYPE=0)")
epicsEnvSet("LLRF_PORT", "$(LLRF_PREFIX)")
epicsEnvSet("SP_SMNM_MAX" "0x1000")
epicsEnvSet("FF_SMNM_MAX" "0x10000")
epicsEnvSet("PIERR_SMNM_MAX" "0x10000")
epicsEnvSet("AI_SMNM_MAX" "0x200000")
epicsEnvSet("AI_SMNM_DEFOPT" "220000")
ndsCreateDevice "sis8300llrf", "$(LLRF_PORT)", "FILE=/dev/sis8300-$(LLRF_SLOT), NUM_PULSE_TYPES=$(LLRF_NOPULSETYPES)"
dbLoadRecords("sis8300llrf.db", "PREFIX=$(LLRF_PREFIX),ASYN_PORT=$(LLRF_PORT),NUM_PULSE_TYPES=$(LLRF_NOPULSETYPES),SP_SMNM_MAX=$(SP_SMNM_MAX), FF_SMNM_MAX=$(FF_SMNM_MAX), AI_NELM=$(AI_SMNM_MAX),PIERR_SMNM_MAX=$(PIERR_SMNM_MAX),SMNM_VAL=$(AI_SMNM_DEFOPT)")
dbLoadRecords("sis8300llrf-Main-ControlTable-CH.template", "PREFIX=$(LLRF_PREFIX), ASYN_PORT=$(LLRF_PORT), PULSE_TYPE=$(LLRF_PULSETYPE), CTRL_TABLE_TYPE=SP, CTRL_TABLE_CG_NAME=sp, TABLE_SMNM_MAX=$(SP_SMNM_MAX)")
dbLoadRecords("sis8300llrf-Main-ControlTable-CH.template", "PREFIX=$(LLRF_PREFIX), ASYN_PORT=$(LLRF_PORT), PULSE_TYPE=$(LLRF_PULSETYPE), CTRL_TABLE_TYPE=FF, CTRL_TABLE_CG_NAME=ff, TABLE_SMNM_MAX=$(FF_SMNM_MAX)")
dbLoadRecords("sis8300llrf-SpecOp.db", "PREFIX=$(LLRF_PREFIX), ASYN_PORT=$(LLRF_PORT), PULSE_TYPE=$(LLRF_PULSETYPE), FF_SMNM_MAX = 0x1000, SP_SMNM_MAX = 0x100000")
dbLoadRecords("sis8300llrf-Setup.db", "PREFIX=$(LLRF_PREFIX), ASYN_PORT=$(LLRF_PORT)")
dbLoadRecords("sis8300Register.db", "PREFIX=$(LLRF_PREFIX), ASYN_PORT=$(LLRF_PORT), REG_SCAN=2")
dbLoadRecords("sis8300noAO.db", "PREFIX=$(LLRF_PREFIX), ASYN_PORT=$(LLRF_PORT), AI_NELM=$(AI_SMNM_MAX)")
dbLoadRecords("sis8300llrf-Register.db", "PREFIX=$(LLRF_PREFIX), ASYN_PORT=$(LLRF_PORT), REG_SCAN=2")
# configuration for scaling module
scalingConfigure("scalingLLRF", 10)
dbLoadTemplate("scaling_llrf.substitutions","PREFIX=$(LLRF_PREFIX),PORT=scalingLLRF,TIMEOUT=1,MAX_ELEM=$(AI_SMNM_MAX)")
epicsThreadSleep(1)
# Configure the RTM for LLRF
afterInit("dbpf $(LLRF_PREFIX):RTM 2 > /dev/null")
epicsThreadSleep(1)
# Configure vector modulator output, write 0x12 to 0x60600000
afterInit("dbpf $(LLRF_PREFIX):REG-SET-0x12 1616904192 > /dev/null")
#!/bin/bash
caput -s ${LLRF_IOC_NAME}:AI0-MAG.DESC "PreAmp Fwd"
caput -s ${LLRF_IOC_NAME}:AI1-MAG.DESC "PwrAmp Fwd"
caput -s ${LLRF_IOC_NAME}:AI2-SMON-MAGCURR.DESC "PwrAmp Rflct"
caput -s ${LLRF_IOC_NAME}:AI3-SMON-MAGCURR.DESC "Circ Fwd"
caput -s ${LLRF_IOC_NAME}:AI4-SMON-MAGCURR.DESC "Cav1 Fwd"
caput -s ${LLRF_IOC_NAME}:AI5-SMON-MAGCURR.DESC "Cav1 Reflct"
caput -s ${LLRF_IOC_NAME}:AI6-SMON-MAGCURR.DESC "Cav2 Fwd"
caput -s ${LLRF_IOC_NAME}:AI7-SMON-MAGCURR.DESC "Cav2 Reflct"
require mrfioc2,2.2.0-rc5
epicsEnvSet("IOC" "TR")
epicsEnvSet("DEV1" "<LLRF_IOC_NAME>")
epicsEnvSet("MainEvtCODE" "14")
epicsEnvSet("HeartbeatEvtCODE" "122")
epicsEnvSet("ESSEvtClockRate" "88.0525")
epicsEnvSet("RepRate", "14")
epicsEnvSet("Pulse_coming_event" "15")
epicsEnvSet("Pulse_start_event" "16")
epicsEnvSet("Pulse_end_event" "17")
mrmEvrSetupPCI("$(DEV1)", "<B:D.F>")
dbLoadRecords("evr-mtca-300u-ess.db","SYS=$(IOC), EVR=$(DEV1), D=$(DEV1), FEVT=$(ESSEvtClockRate)")
dbLoadRecords("evrevent.db","EN=$(IOC)-$(DEV1)-$(RepRate), OBJ=$(DEV1), CODE=$(RepRate), EVNT=$(RepRate)")
dbLoadRecords("evrevent.db","EN=$(IOC)-$(DEV1)-$(Pulse_coming_event), OBJ=$(DEV1), CODE=$(Pulse_coming_event), EVNT=$(Pulse_coming_event)")
dbLoadRecords("evrevent.db","EN=$(IOC)-$(DEV1)-$(Pulse_start_event), OBJ=$(DEV1), CODE=$(Pulse_start_event), EVNT=$(Pulse_start_event)")
dbLoadRecords("evrevent.db","EN=$(IOC)-$(DEV1)-$(Pulse_end_event), OBJ=$(DEV1), CODE=$(Pulse_end_event), EVNT=$(Pulse_end_event)")
# needed with software timestamp source without Real-Time thread scheduling
var evrMrmTimeNSOverflowThreshold 100000
# Get current time from system clock
afterInit("dbpf $(IOC)-$(DEV1):TimeSrc-Sel 2")
# Set delay compensation to 70 ns, needed to avoid timestamp issue
afterInit("dbpf $(IOC)-$(DEV1):DC-Tgt-SP 70")
# Backplane trigger line configuration
afterInit("dbpf $(IOC)-$(DEV1):DlyGen0-Evt-Trig0-SP $(Pulse_coming_event)")
afterInit("dbpf $(IOC)-$(DEV1):DlyGen0-Width-SP 1000") # time in micro-seconds
afterInit("dbpf $(IOC)-$(DEV1):OutBack0-Src-SP 0") # trigger from delay generator 0 to RX17
afterInit("dbpf $(IOC)-$(DEV1):OutFP0-Src-SP 0")
afterInit("dbpf $(IOC)-$(DEV1):DlyGen1-Evt-Trig0-SP $(Pulse_start_event)")
afterInit("dbpf $(IOC)-$(DEV1):DlyGen1-Width-SP 1000") # time in micro-seconds
afterInit("dbpf $(IOC)-$(DEV1):OutBack1-Src-SP 1") # trigger from delay generator 0 to TX17
afterInit("dbpf $(IOC)-$(DEV1):OutFP1-Src-SP 1")
afterInit("dbpf $(IOC)-$(DEV1):DlyGen2-Evt-Trig0-SP $(Pulse_end_event)")
afterInit("dbpf $(IOC)-$(DEV1):DlyGen2-Width-SP 1000") # time in micro-seconds
afterInit("dbpf $(IOC)-$(DEV1):OutBack2-Src-SP 2") # trigger from delay generator 0 to RX18
afterInit("dbpf $(IOC)-$(DEV1):OutFP2-Src-SP 2")
# $1 is $(IOC) macro
# $2 is $(DEV1) macro
caput $1-$2:PS0-Div-SP 6289424 # in standalone mode because real frequency from synthesiser is 88.06194802 MHz, otherwise 6289464
# Configure the sequencer
caput $1-$2:SoftSeq0-RunMode-Sel 0 # normal mode
caput $1-$2:SoftSeq0-TrigSrc-2-Sel 2 # prescaler 0
caput $1-$2:SoftSeq0-TsResolution-Sel 2
caput $1-$2:SoftSeq0-Load-Cmd 1
caput $1-$2:SoftSeq0-Enable-Cmd 1
caput -a $1-$2:SoftSeq0-EvtCode-SP 5 14 15 16 17 127 >/dev/null
caput -a $1-$2:SoftSeq0-Timestamp-SP 5 0 10 310 3170 3180 >/dev/null
caput $1-$2:SoftSeq0-Commit-Cmd 1 >/dev/null
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment