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

HskRetriever.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.9 $"
00015 __release__  = "$Name: R04-12-00 $"
00016 __credits__  = "SLAC"
00017 
00018 import LATTE.copyright_SLAC
00019 import time
00020 
00021 from LATTE.monitoring.Retriever    import Retriever
00022 from LATTE.monitoring.Trendable    import Trendable
00023 from LATTE.database.gLAT           import GLAT
00024 
00025 class HskLatRetriever(Retriever):
00026   """Fully populated LAT retriever.
00027      Should get all available LAT housekeeping quantities and trend them.
00028   """
00029   def __init__(self, glat):
00030     Retriever.__init__(self)
00031     from LATTE.monitoring.TrendMaps    import GLATTrendMap
00032     self.__trendMap = GLATTrendMap(glat)
00033     # Deal with GEBM TEM multiplexer...
00034     self.__mux = []
00035     for i in range(16):
00036       self.__mux.append('LHKETEM%XRS'%i)
00037     
00038   def retrievePacket(self):
00039     packet = []
00040     timestamp = time.time()  # time() returns seconds since epoch, UTC
00041     for key in self.__trendMap.mapKeys():
00042       atuple = self.__trendMap.mapGet(key)
00043       if atuple is not None:
00044         node, attr = atuple
00045         if node is not None and attr != '':
00046           try:
00047             if key in self.__mux:   # have a GEBM TEM multiplexer...
00048               muxes = node.downEBMC().tem_statistics
00049               mux0 = ( muxes      ) & 0xf 
00050               mux1 = ( muxes >> 4 ) & 0xf
00051               tem = self.__mux.index(key)
00052               if tem == mux0:
00053                 value = node.downEBMST().regs['receive_tem_mux0'].get(bypass=1)
00054               elif tem == mux1:
00055                 value = node.downEBMST().regs['receive_tem_mux1'].get(bypass=1)
00056               else:
00057                 value = 0
00058             else:
00059               value = node.regs[attr.lower()].get(bypass=1)
00060           except Exception, e:
00061             # print e
00062             value = None
00063           packet.append( Trendable( key, timestamp, { 'Raw Value' : value } ) )
00064     return packet
00065 
00066 class HskTestRetriever(Retriever):
00067   """ Test HskRetriever
00068   """
00069   def __init__(self, glat):
00070     self.__monitorList={}
00071     from HskRegisters import NodeRegisterList
00072     
00073     AEQ = glat.downAEM().downAEQ()
00074     self.__monitorList["AEQ"] = NodeRegisterList(AEQ)
00075     from LATTE.monitoring.HskRegisters import AEQHskRegMap
00076     self.__hskMap = AEQHskRegMap()
00077     
00078   def retrievePacket(self): 
00079     packet=[]
00080     timestamp = time.time()  # time() returns seconds since epoch, UTC
00081     
00082     for reg in self.__monitorList["AEQ"].map().values():
00083       reg.write(self.aeqBuildDummy(timestamp))
00084       parsed = self.__hskMap.decodeRegister(reg.name(), reg.read())
00085       for key in parsed:
00086         tName = reg.name() + ":" + key
00087         packet.append( Trendable(tName, timestamp, {'Raw Value' : parsed[key]}) )
00088     
00089     return packet
00090 
00091   def aeqBuildDummy(self,timestamp):
00092     import math
00093     ret = 0L
00094     for i in range(2):
00095       word = long( math.fabs(math.sin( (timestamp*math.pi)/(i*12+12) )) * 0xfff)
00096       ret |= word << (16*i)
00097     return ret
00098   

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