Skip to content
Snippets Groups Projects
Operation.py 5.29 KiB
Newer Older
BRONES Romain's avatar
BRONES Romain committed
###################################################################################################
#    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_nodename(cellnodename)
BRONES Romain's avatar
BRONES Romain committed
    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_nodename(cellnodename)
BRONES Romain's avatar
BRONES Romain committed
    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_nodename(cellnodename)
BRONES Romain's avatar
BRONES Romain committed
    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