################################################################################################### # OPERATION FUNCTIONS ################################################################################################### # # Contains functions to operate the FOFB application. # ################################################################################################### import tango import logging import numpy as np import time import FofbTool.Utils # Get the module logger logger = logging.getLogger("FofbTool") ################################################################################################### # OPERATIONS ON CCN ################################################################################################### def stop_ccn(nodename): """ Stop the communication with cellnode on the specified fofbnode. PARAMETERS ---------- nodename: str The target fofbnode, ie 'cellnode-c09' or 'centralnode' """ prx=FofbTool.Utils.get_prx_from_nodename(nodename) if prx is None: logger.error("Failed to stop CCN on {}".format(nodename)) return logger.info("Stopping CCN on {}".format(nodename)) nint=1 if 'central' in nodename: nint = 4 for n in range(nint): prx["ccnpack{}_control".format(n)] = False prx["ccnunpack{}_control".format(n)] = False def reset_ccn(nodename): """ Reset the communication with cellnode on the specified fofbnode. PARAMETERS ---------- nodename: str The target fofbnode, ie 'cellnode-c09' or 'centralnode' """ prx=FofbTool.Utils.get_prx_from_nodename(nodename) if prx is None: logger.error("Failed to reset CCN on {}".format(nodename)) return logger.info("Reset CCN on {}".format(nodename)) nint=1 if 'central' in nodename: nint = 4 for n in range(nint): prx["ccneth{}_reset".format(n)] = 0x60000001 # impossible to write 0xE0000001 prx["ccneth{}_gt_reset".format(n)] = 1 time.sleep(2) for n in range(nint): prx["ccneth{}_gt_reset".format(n)] = 0 prx["ccneth{}_reset".format(n)] = 0 ack_ccn(nodename) def start_ccn(nodename): """ Start the communication with cellnode on the specified fofbnode. PARAMETERS ---------- nodename: str The target fofbnode, ie 'cellnode-c09' or 'centralnode' """ prx=FofbTool.Utils.get_prx_from_nodename(nodename) if prx is None: logger.error("Failed to start CCN on {}".format(nodename)) return logger.info("Starting CCN on {}".format(nodename)) nint=1 if 'central' in nodename: nint = 4 for n in range(nint): prx["ccnpack{}_control".format(n)] = True prx["ccnunpack{}_control".format(n)] = True def ack_ccn(nodename): """ Start the communication with cellnode on the specified fofbnode. PARAMETERS ---------- nodename: str The target fofbnode, ie 'cellnode-c09' or 'centralnode' """ prx=FofbTool.Utils.get_prx_from_nodename(nodename) if prx is None: logger.error("Failed to ack CCN on {}".format(nodename)) return logger.info("Ack CCN error on {}".format(nodename)) nint=1 if 'central' in nodename: nint = 4 for n in range(nint): prx["ccnpack{}_reset_error".format(n)] = True prx["ccnunpack{}_reset_error".format(n)] = True time.sleep(1) for n in range(nint): prx["ccnpack{}_reset_error".format(n)] = False prx["ccnunpack{}_reset_error".format(n)] = False ################################################################################################### # OPERATIONS ON CCN ################################################################################################### def stop_combpm(cellnodename): """ Stop the communication with bpm on the specified cellnode. PARAMETERS ---------- cellnodename: str The target fofbnode, ie 'cellnode-c09' """ prx=FofbTool.Utils.get_prx_from_cellnodename(cellnodename) if prx is None: logger.error("Failed to stop ComBPM on {}".format(p)) return logger.info("Stopping ComBPM on {}".format(cellnodename)) prx["combpm_reset"] = 1 prx["combpm_gt_control"] = 0x5 def start_combpm(cellnodename): """ Start the communication with bpm on the specified cellnode. PARAMETERS ---------- cellnodename: str The target fofbnode, ie 'cellnode-c09' """ prx=FofbTool.Utils.get_prx_from_cellnodename(cellnodename) if prx is None: logger.error("Failed to start ComBPM on {}".format(cellnodename)) return logger.info("Starting ComBpm on {}".format(cellnodename)) prx["combpm_reset"] = 0 prx["combpm_gt_control"] = 0x1 time.sleep(1) ack_combpm(cellnodename) def ack_combpm(cellnodename): """ Ack errors on the communication with bpm on the specified cellnode. PARAMETERS ---------- cellnodename: str The target fofbnode, ie 'cellnode-c09' """ prx=FofbTool.Utils.get_prx_from_cellnodename(cellnodename) if prx is None: logger.error("Failed to start ComBPM on {}".format(cellnodename)) return logger.info("Ack ComBpm on {}".format(cellnodename)) prx["combpm_reset_error"] = True time.sleep(1) prx["combpm_reset_error"] = False