X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=support%2Fsdk%2Fpython%2Ftos.py;h=dee4de43af77364e5d3abbcfeb4d61ce6222d280;hb=b7e372c3aa2f1da307407397da3b032df4ac4d49;hp=5d1d4eefa661e1a55447c02c5012e2d1eaeaf1cf;hpb=fb688fe2944937e17c6b939640a95a2d7f8a2666;p=tinyos-2.x.git diff --git a/support/sdk/python/tos.py b/support/sdk/python/tos.py index 5d1d4eef..dee4de43 100644 --- a/support/sdk/python/tos.py +++ b/support/sdk/python/tos.py @@ -67,15 +67,16 @@ class Timeout(Exception): def getSource(comm): source = comm.split('@') params = source[1].split(':') + debug = '--debug' in sys.argv if source[0] == 'serial': try: - return Serial(params[0], int(params[1]), flush=True, debug=('--debug' in sys.argv)) + return Serial(params[0], int(params[1]), flush=True, debug=debug) except: print "ERROR: Unable to initialize a serial connection to", comm raise Exception elif source[0] == 'network': try: - return SerialMIB600(params[0], int(params[1]), debug=False) + return SerialMIB600(params[0], int(params[1]), debug=debug) except: print "ERROR: Unable to initialize a network connection to", comm print "ERROR:", traceback.format_exc() @@ -89,6 +90,11 @@ class Serial: self.ackTimeout = ackTimeout self._ts = None + if port.startswith('COM') or port.startswith('com'): + port = int(port[3:]) - 1 + elif port.isdigit(): + port = int(port) - 1 + self._s = serial.Serial(port, int(baudrate), rtscts=0, timeout=0.5) self._s.flushInput() if flush: @@ -113,6 +119,7 @@ class Serial: #print "DEBUG: putBytes:", data for b in data: self._s.write(struct.pack('B', b)) + time.sleep(0.000001) def getTimeout(self): return self._s.timeout @@ -121,7 +128,7 @@ class Serial: self._s.timeout = timeout class SerialMIB600: - def __init__(self, host, port=10002, debug=False, readTimeout=None, ackTimeout=0.05): + def __init__(self, host, port=10002, debug=False, readTimeout=None, ackTimeout=0.5): self.debug = debug self.readTimeout = readTimeout self.ackTimeout = ackTimeout @@ -369,6 +376,7 @@ class SimpleAM(object): def write(self, packet, amId, timeout=5, blocking=True, inc=1): self.seqno = (self.seqno + inc) % 256 prevTimeout = self._source.getTimeout() + ack = None end = None if timeout: end = time.time() + timeout while not end or time.time() < end: @@ -395,7 +403,7 @@ class SimpleAM(object): break self._source.setTimeout(prevTimeout) #print 'SimpleAM:write: got an ack:', ack, ack.seqno == self.seqno - return ack.seqno == self.seqno + return (ack != None and ack.seqno == self.seqno) def setOobHook(self, oobHook): self.oobHook = oobHook @@ -440,6 +448,8 @@ class AM(SimpleAM): r = super(AM, self).write(packet, amId, timeout, blocking) while not r: r = super(AM, self).write(packet, amId, timeout, blocking, inc=0) + if timeout and not r: + raise Timeout return True