[Tinyos-commits] CVS: tinyos-1.x/tools/python/apps Listen.py, 1.1, 1.2

Kamin Whitehouse kaminw at users.sourceforge.net
Wed Sep 28 03:04:54 PDT 2005


Update of /cvsroot/tinyos/tinyos-1.x/tools/python/apps
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25430/apps

Modified Files:
	Listen.py 
Log Message:
added multiple layers of verbosity, a help menu, and pause functionality.  for some reason, i cant exit cleanly and the user needs to type "reset" after quitting

Index: Listen.py
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/tools/python/apps/Listen.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** Listen.py	28 Sep 2005 07:01:20 -0000	1.1
--- Listen.py	28 Sep 2005 10:04:52 -0000	1.2
***************
*** 24,33 ****
  #
  
! import sys, threading
  import pytos.util.NescApp as NescApp
  import pytos.util.ParseArgs as ParseArgs
  import pytos.util.MessageSnooper as MessageSnooper
  import pytos.Comm as Comm
  
  
  class Listen( object ) :
--- 24,78 ----
  #
  
! import sys, threading, time
  import pytos.util.NescApp as NescApp
  import pytos.util.ParseArgs as ParseArgs
  import pytos.util.MessageSnooper as MessageSnooper
+ import pytos.util.KeyPress as KeyPress
  import pytos.Comm as Comm
  
+ def noReturn(msg) :
+   sys.stdout.write("%25s" % "(am=%3d) %s " % (msg.amType, msg.nescType))
+   sys.stdout.flush()
+   
+ def nameAndType(msg) :
+   print "(am=%3d) %s" % (msg.amType, msg.nescType)
+ 
+ def printNamesOnly(msg, maxLevel=3, myLevel=0) :
+   if myLevel==0 :
+     print "%s%s" % (printNamesOnly(msg.parentMsg, maxLevel, 1),
+                     "%25s" % "(am=%3d) %s" % (msg.amType, msg.nescType))
+   else :
+     if type(maxLevel) == int and maxLevel < myLevel:
+       return ""
+     elif msg == None:
+       return "%s%28s" % (printNamesOnly(msg, maxLevel, myLevel+1), "")
+     else :
+       return "%s%s  =>  " % (printNamesOnly(msg.parentMsg, maxLevel, myLevel+1),
+                             "(am=%3d) %13s" % (msg.amType, msg.nescType))
+ 
+ def printNormal(msg) :
+   print msg
+   
+ def printParentNames(msg, maxLevel=3, myLevel=0) :
+   if myLevel==0 :
+     print "%s%s" % (printParentNames(msg.parentMsg, maxLevel, 1), str(msg))
+   else :
+     if type(maxLevel) == int and maxLevel < myLevel:
+       return ""
+     elif msg == None:
+       return "%s%30s" % (printParentNames(msg, maxLevel, myLevel+1), "")
+     else :
+       return "%s%s  =>  " % (printParentNames(msg.parentMsg, maxLevel, myLevel+1),
+                             "(am=%3d) %15s" % (msg.amType, msg.nescType))
+ 
+ def printParents(msg, maxLevel='all', myLevel=0) :
+   if myLevel==0 :
+     print "%s%s" % (printParents(msg.parentMsg, maxLevel, 1), str(msg))
+   else :
+     if msg == None or (type(maxLevel) == int and maxLevel < myLevel) :
+       return ""
+     else:
+       return "%s%s" % (printParents(msg.parentMsg, maxLevel, myLevel+1), str(msg))
+ 
  
  class Listen( object ) :
***************
*** 47,68 ****
    def __init__( self , snooper ) :
  
!     msgQueue = Comm.MessageQueue(1)
      self.snooper = snooper
      self.snooper.register( msgQueue )
      self.running = True
! #     #start a thread to process the messages (make daemon so it dies when tk is killed)
! #     msgThread = threading.Thread(target=self.processMessages,
! #                                  args=(msgQueue,))
! #     #msgThread.setDaemon(True)
! #     msgThread.start()
!         
! #   def processMessages(self, msgQueue) :
      while True :
        (addr,msg) = msgQueue.get()
        if self.running == True:
!         print msg
  
    def stop(self) :
        self.running = False
  
    def start(self) :
--- 92,209 ----
    def __init__( self , snooper ) :
  
!     self.usage = """
!     h   : help
!     p   : pause
!     q   : quit
!     1-9 : verbosity
!     c   : toggle colors"""
! 
!     print "\nType \"h\" for help\n"
!     msgQueue = Comm.MessageQueue(10)
!     self.keyPress = KeyPress.KeyPress()
      self.snooper = snooper
      self.snooper.register( msgQueue )
      self.running = True
!     self.pausing = False
!     self.verbosity = '4'
!     self.numLostPackets = 0
!     self.numPrintedChars = 0
! 
!     #start a thread to process the messages 
!     self.msgThread = threading.Thread(target=self.processMessages,
!                                  args=(msgQueue,))
!     #start a thread to process the key presses (make daemon so it dies when tk is killed)
!     keyThread = threading.Thread(target=self.readKeys)
!     keyThread.setDaemon(True)
!     keyThread.start()
!     self.msgThread.start()
! 
!   def processMessages(self, msgQueue) :
      while True :
        (addr,msg) = msgQueue.get()
        if self.running == True:
!         self.printMsg(msg)
!       else :
!         self.numLostPackets += 1
!     
!         
!   def readKeys(self) :
!     while True :
!       try :
!         key = self.keyPress.getChar(blocking=True)
!         { 'q': self.msgThread._Thread__stop, #sys.exit,
!           'h': self.help,
!           '1': lambda : self.setVerbosity(key),
!           '2': lambda : self.setVerbosity(key),
!           '3': lambda : self.setVerbosity(key),
!           '4': lambda : self.setVerbosity(key),
!           '5': lambda : self.setVerbosity(key),
!           '6': lambda : self.setVerbosity(key),
!           '7': lambda : self.setVerbosity(key),
!           '8': lambda : self.setVerbosity(key),
!           '9': lambda : self.setVerbosity(key),
!           'c': self.colors,
!           'p': self.pause
!           }[key]()
!       except Exception, e:
!         print e.args[0]
!         print "key %s not understood.  Press \"h\" for help" % key
! 
!   def setVerbosity(self, verbosity) :
!     self.verbosity = verbosity
!     
!   def printMsg(self, msg) :
!     { '1' : noReturn,
!       '2' : nameAndType,
!       '3' : lambda msg: printNamesOnly(msg),
!       '4' : printNormal,
!       '5' : lambda msg: printParentNames(msg),
!       '6' : lambda msg: printParents(msg,1),
!       '7' : lambda msg: printParents(msg,2),
!       '8' : lambda msg: printParents(msg,3),
!       '9' : lambda msg: printParents(msg,'all')
!       }[self.verbosity](msg)
! 
!   def printLostPackets(self):
  
+     
+     banner = "\nHit any key to resume.  Messages lost: "
+     sys.stdout.write(banner)
+     while True:
+       time.sleep(1)
+       c= self.keyPress.getChar(blocking=False)
+       if c == "":
+         strg = ""
+         for i in range(self.numPrintedChars) :
+           strg += "\b"
+         strg = "%s%d" % (strg,self.numLostPackets)
+         self.numPrintedChars = len(strg)-self.numPrintedChars
+         sys.stdout.write(strg)
+         sys.stdout.flush()
+       else:
+         print
+         break
+     
+   def help(self) :
+     self.stop()
+     print "  Current verbosity:  %s" % self.verbosity
+     print self.usage
+     self.printLostPackets()
+     self.start()
+   
+   def pause(self) :
+     self.stop()
+     self.printLostPackets()
+     self.start()
+       
+       
+   
+   def colors(self) :
+     print "Sorry, no colors yet\n"
+   
    def stop(self) :
        self.running = False
+       self.numLostPackets = 0
+       self.numPrintedChars = 0
  
    def start(self) :



More information about the Tinyos-commits mailing list