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

gCommand.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 
00011 __facility__ = "Online"
00012 __abstract__ = "Commanding"
00013 __author__   = "Amedeo Perazzo <perazzo@slac.stanford.edu> SLAC - GLAST I&T/Online"
00014 __date__     = ("$Date: 2004/09/11 00:52:01 $").split(' ')[1]
00015 __version__  = "$Revision: 2.3 $"
00016 __release__  = "$Name: R04-12-00 $"
00017 __credits__  = "SLAC"
00018 
00019 import LATTE.copyright_SLAC
00020 
00021 import struct
00022 
00023 def packstring(arg, type):
00024   strlen = len(arg)
00025   strpad = 4-(strlen&0x3)
00026   fmt = '!HH%ds%dx' %(strlen, strpad)
00027   return struct.pack(fmt, strlen+strpad, type, arg)
00028 
00029 class Command:
00030   __Function = 0
00031   __Handler  = 1
00032   __Payload  = 2
00033   __Value    = 3
00034   __Input    = 4
00035 
00036   def __init__(self, functionname, *arguments):
00037     self.__packet = None
00038     self.__payloadfmts = []
00039 
00040     cmd = packstring(functionname, Command.__Function)
00041     for arg in arguments:
00042       if isinstance(arg, str):
00043         if arg[0] == '!':
00044           cmd += packstring(arg[1:], Command.__Payload)
00045           self.__payloadfmts.append(arg[1:])
00046         elif arg[0] == '>':
00047           cmd += packstring(arg[1:], Command.__Input)
00048         else:
00049           cmd += packstring(arg, Command.__Handler)
00050       elif isinstance(arg, int) or isinstance(arg, long):
00051         cmd += struct.pack('!HHI', 4, Command.__Value, arg)
00052       else:
00053         raise Exception, "*** gCommand: cannot handle type %s" \
00054                         %(arg.__class__.__name__)
00055     self.__packet = struct.pack('!I', len(cmd)) + cmd
00056 
00057   def packet(self):
00058     return self.__packet
00059 
00060   def payloadfmts(self):
00061     return self.__payloadfmts

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