Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | Related Pages

HskRegisters.py

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 __facility__ = "Online"
00011 __abstract__ = "GLAST LAT Housekeeping server infrastructure"
00012 __author__   = "Jim Panetta <panetta@slac.stanford.edu> SLAC - GLAST I&T"
00013 __date__     = "07/28/04"
00014 __version__  = "$Revision: 1.2 $"
00015 __release__  = "$Name: R04-12-00 $"
00016 __credits__  = "SLAC"
00017 
00018 import LATTE.copyright_SLAC
00019 import logging
00020 from   LATTE.client.gException   import LATInterfaceException
00021 
00022 class RegisterInterface(object):
00023   """Represents a LAT housekeeping register for reading.
00024   """
00025   def __init__(self, node, name):
00026     """\brief RegisterReader constructor
00027 
00028     \param  node:        a gNode (like GAEQ)
00029     \param  name:        a name  (like env_free_1la)
00030     """
00031     
00032     self.__readOnly = False
00033     try:
00034       node.regs.has_key(name)
00035     except AttributeError, e:
00036       self.__node = None
00037     else:
00038       self.__node = node
00039       if node.regs[name].isReadOnly():
00040         self.__readOnly = True
00041 
00042     self.__name          = name
00043     self.__lastReadValue = None
00044     self.__log           = logging.getLogger()
00045 
00046   def name(self): return self.__name
00047     
00048   def read(self, cachedValue=False):
00049     """\brief read method
00050     
00051     \return the raw value in the register or None
00052     """
00053     if cachedValue:
00054       return self.__lastReadValue
00055     
00056     if self.__node:
00057       try:
00058         self.__lastReadValue = self.__node.regs[self.__name].get(bypass=1)
00059       except LATInterfaceException, e:
00060         self.__lastReadValue=None
00061         print e
00062         self.__log.error(e)
00063     else:
00064       self.__log.debug("There is no register %s to read.", self.__name)
00065 
00066     return self.__lastReadValue
00067 
00068   def write(self, value):
00069     """
00070     writes to the register
00071     """
00072     if self.__readOnly:
00073       self.log.error("Cannot write to a Read Only Register (%s)",
00074                      self.name)
00075     if self.__node:
00076       try:
00077         self.__node.regs[self.__name].set(value,bypass=1)
00078       except LATInterfaceException, e:
00079         #print e
00080         self.__log.error(e)
00081     else:
00082       # If we are running headless, I'll just put this
00083       # in the cached value variable
00084       self.__log.debug("There is no register %s to write 0x%x to.",
00085                      self.name, value)
00086       self.__lastReadValue=value
00087 
00088 
00089 class NodeRegisterList(object):
00090   """
00091   """
00092   def __init__(self, node):
00093     self.__node = node
00094     
00095     self.__regMap = {}
00096     for regKey in node.regs.keys():
00097       self.__regMap[regKey] = RegisterInterface( node, regKey )
00098     
00099   def map(self):
00100     return self.__regMap
00101     
00102     
00103 class AEQHskRegMap:
00104   """
00105   """
00106   regMap = { 
00107     "env_free_1la" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00108     "env_free_1rb" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00109     "env_free_2la" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00110     "env_free_2lb" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00111     "env_free_2ra" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00112     "env_free_2rb" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00113     "env_free_3la" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00114     "env_free_3rb" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00115     "env_free_4la" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00116     "env_free_4lb" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00117     "env_free_4ra" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00118     "env_free_4rb" : [ "Vdd", "Temperature", "HV1", "HV2" ],
00119     "env_daq" :      [ "FreeI", "Temperature", "HVI", "DAQV" ]
00120   }
00121   def __init__(self):
00122     pass
00123   
00124   def decodeRegister(self, key, regValue):
00125     """
00126     decode an AEM register.  Each 16 bit section looks like:
00127     MBZ[3] Timeout[1] Val[12]
00128     
00129     \return a map of parsed values
00130     """
00131     keyList = self.regMap[key]
00132     retMap  = {}
00133     if ( regValue >> 63 ) & 0x1: # not ready
00134       for i in range(4): 
00135         retMap[keyList[i]] = None
00136     else:
00137       for i in range(4):
00138         word    = ( regValue >> (16*i) ) & 0xffff
00139         timeout = word >> 15 & 0x1
00140         if timeout:
00141           value = None
00142         else:
00143           value = word & 0x7fff
00144         retMap[keyList[i]] = value
00145     return retMap
00146    
00147 
00148     
00149     

Generated on Fri Jul 21 13:26:30 2006 for LATTE R04-12-00 by doxygen 1.4.3