33export EPICS_CA_MAX_ARRAY_BYTES=8388608
44ulimit -c unlimited
55
6- hx2Ipm= ' hx2_ipm '
7- um6Ipm=' um6_ipm um6_dio'
6+ em3l0= ' em3l0 '
7+ um6Ipm=' hxxdg1_ipm um6_dio'
88dg2Ipm=' hfxdg2_ipm'
99xcsIpm=' decmono ipmmono diomono pim3 pim3m ipm3 pim4 ipm4 snddio ipm5 pim5 ipmgonLD ipmlamLD usrdio'
1010xppIpm=' diomono decmono ipm2 ipm3 pim3 diodeU'
1111cxiIpm=' pim3m dg2ipm dg3ipm usrdio'
1212mfxIpm=' dg1ipm dg2ipm usrdio'
1313mecIpm=' ipm1 ipm2 ipm3 hxm_pim pim2 pim3 tc1_imb1 usr_imb1 usr_imb2 las_imb1 las_imb2'
14- lfeIpm=' um6_ipm hfxdg2_ipm pim3m'
14+ lfeIpm=' hxxdg1_ipm hfxdg2_ipm pim3m'
1515
1616ipmList ()
1717{
1818printf ' Possible boxes:\n'
1919if [[ $hutch == ' xcs' ]]; then
20- for box in $hx2Ipm $um6Ipm $dg2Ipm $xcsIpm ; do echo " $box " ; done
20+ for box in $em3l0 $um6Ipm $dg2Ipm $xcsIpm ; do echo " $box " ; done
2121elif [[ $hutch == ' xpp' ]]; then
22- for box in $hx2Ipm $xppIpm ; do echo " $box " ; done
22+ for box in $em3l0 $xppIpm ; do echo " $box " ; done
2323elif [[ $hutch == ' cxi' ]]; then
24- for box in $hx2Ipm $um6Ipm $dg2Ipm $cxiIpm ; do echo " $box " ; done
24+ for box in $em3l0 $um6Ipm $dg2Ipm $cxiIpm ; do echo " $box " ; done
2525elif [[ $hutch == ' mfx' ]]; then
26- for box in $hx2Ipm $um6Ipm $mfxIpm ; do echo " $box " ; done
26+ for box in $em3l0 $um6Ipm $mfxIpm ; do echo " $box " ; done
2727elif [[ $hutch == ' mec' ]]; then
28- for box in $hx2Ipm $um6Ipm $mecIpm ; do echo " $box " ; done
28+ for box in $em3l0 $um6Ipm $mecIpm ; do echo " $box " ; done
2929elif [[ $hutch == ' lfe' ]]; then
3030 for box in $lfeIpm ; do echo " $box " ; done
3131else
@@ -42,15 +42,14 @@ if [ $# -lt 1 ]; then
4242fi
4343
4444# Shared IPMs
45- if [[ $1 == ' hx2_ipm' ]]; then
46- IOC=" IOC:HX2:SB1:BMMON"
47- BASE=' HX2:SB1:BMMON'
48- EVR=' HX2:SB1:BMMON:EVR'
49- WAVE8=' hx2_ipm'
50- elif [[ $1 == ' um6_ipm' ]]; then # aka xcs ipm1
51- BASE=" XCS:DG1:IMB:01"
52- IOC=" XCS:R04:IOC:34"
53- EVR=" XCS:R04:EVR:34"
45+ if [[ $1 == ' em3l0' ]]; then
46+ BASE=' EM3L0:IPM:W8:01'
47+ WAVE8V3=' em3l0'
48+ elif [[ $1 == ' hxxdg1_ipm' ]]; then # aka xcs ipm1
49+ IOC=" IOC:HXX:DG1:BMMON"
50+ BASE=' HXX:DG1:BMMON'
51+ EVR=' HXX:DG1:BMMON:EVR'
52+ WAVE8=' hxxipm'
5453elif [[ $1 == ' um6_dio' ]]; then # aka xcs ipm1
5554 BASE=" XCS:DG1:IMB:02"
5655 IOC=" XCS:R04:IOC:34"
251250# Attempt to read the :SUM PV and open a GUI if successful and exits if not. Uses wave8 or ipimb accordingly
252251ipmGUI (){
253252 if caget " ${BASE} " :SUM > /dev/null 2>&1 ; then
254- if [ ${# WAVE8} -gt 0 ]; then
253+ if [ ${# WAVE8V3} -gt 0 ]; then
254+ cmdName=$( caget -St " ${BASE} " :LAUNCH_EDM)
255+ # Validate cmdName: allow only safe characters (alphanum, underscore, dash, slash, period)
256+ if [[ " $cmdName " =~ ^[a-zA-Z0-9_./-]+$ ]]; then
257+ echo calling edm main screen from: " $cmdName "
258+ $cmdName
259+ else
260+ echo " Error: Unsafe command detected in LAUNCH_EDM PV: '$cmdName '. Aborting."
261+ exit 1
262+ fi
263+ elif [ ${# WAVE8} -gt 0 ]; then
255264 /reg/g/pcds/pyps/apps/wave8/latest/wave8 --base " $BASE " --evr " $EVR " --ioc " $IOC "
256265 else
257266 /reg/g/pcds/controls/pycaqt/ipimb/ipimb --base " $BASE " --ioc " $IOC " --evr " $EVR "
0 commit comments