00001 #!/usr/local/bin/python 00002 # 00003 # Copyright 2004 00004 # by 00005 # The Board of Trustees of the 00006 # Leland Stanford Junior University. 00007 # All rights reserved. 00008 # 00009 00010 00011 __facility__ = "Online" 00012 __abstract__ = "Class used to initialize command/response and event fabrics" 00013 __author__ = "A. Perazzo <perazzo@slac.stanford.edu> SLAC - GLAST LAT I&T/Online" 00014 __date__ = ("$Date: 2004/12/14 19:22:03 $").split(' ')[1] 00015 __version__ = "$Revision: 2.5 $" 00016 __release__ = "$Name: R04-12-00 $" 00017 __credits__ = "SLAC" 00018 00019 import LATTE.copyright_SLAC 00020 00021 from LATTE.client.gException import LATInterfaceException 00022 from LATTE.client.gBits import population 00023 00024 00025 class Fabrics(object): 00026 def __init__(self, lcb): 00027 self.__lcb = lcb 00028 00029 def init_cmdrsp(self, cmdmask, cmdmset, pdumask, secmask): 00030 initdelay = 1 00031 tmo = self.__adjusttmo(initdelay, cmdmask) 00032 rsp = self.__lcb.cmdrsp('init_cmdrsp_fabric', 00033 cmdmask, cmdmset, pdumask, secmask) 00034 self.__checkrsp(rsp, tmo) 00035 00036 def insert_cmdrsp(self, cmdmask, pdumask, secmask, arcmask, ctrmask): 00037 insertdelay = 1.5 00038 tmo = self.__adjusttmo(insertdelay, cmdmask, arcmask, ctrmask) 00039 rsp = self.__lcb.cmdrsp('insert_cmdrsp_fabric', 00040 cmdmask, pdumask, secmask, arcmask, ctrmask) 00041 self.__checkrsp(rsp, tmo) 00042 00043 def extract_cmdrsp(self, cmdmask, pdumask, secmask, arcmask, ctrmask): 00044 extractdelay = 0.5 00045 tmo = self.__adjusttmo(extractdelay, cmdmask, arcmask, ctrmask) 00046 rsp = self.__lcb.cmdrsp('extract_cmdrsp_fabric', 00047 cmdmask, pdumask, secmask, arcmask, ctrmask) 00048 self.__checkrsp(rsp, tmo) 00049 00050 def init_event(self, evtmask, evtmset): 00051 rsp = self.__lcb.cmdrsp('init_event_fabric', evtmask, evtmset) 00052 self.__checkrsp(rsp) 00053 00054 def insert_event(self, evtmask): 00055 rsp = self.__lcb.cmdrsp('insert_event_fabric', evtmask) 00056 self.__checkrsp(rsp) 00057 00058 def extract_event(self, evtmask): 00059 rsp = self.__lcb.cmdrsp('extract_event_fabric', evtmask) 00060 self.__checkrsp(rsp) 00061 00062 def __adjusttmo(self, delay, cmdmask, arcmask=0, ctrmask=0): 00063 tmo = self.__lcb.client().gettimeout() 00064 components = population(0x3800ffffL & cmdmask) # EPUs+TEMs 00065 components += population(0x00000fffL & arcmask) # Free boards 00066 components += population(0xffffffffL & ctrmask) # CALs and TRKs 00067 if components: 00068 timeout = tmo + delay*components 00069 self.__lcb.client().settimeout(timeout) 00070 return tmo 00071 00072 def __checkrsp(self, rsp, tmo=None): 00073 if tmo is not None: 00074 if tmo != self.__lcb.client().gettimeout(): 00075 self.__lcb.client().settimeout(tmo) 00076 if rsp.status() & 0x3: 00077 raise LATInterfaceException(rsp.status())