fmt = ("B", "<H", None, "<L")
def getClient(name="GoodFET"):
- import GoodFET, GoodFETCC, GoodFETAVR, GoodFETSPI, GoodFETMSP430, GoodFETNRF;
+ import GoodFET, GoodFETCC, GoodFETAVR, GoodFETSPI, GoodFETMSP430, GoodFETNRF, GoodFETCCSPI;
if(name=="GoodFET" or name=="monitor"): return GoodFET.GoodFET();
elif name=="cc" or name=="cc51": return GoodFETCC.GoodFETCC();
- elif name=="cc2420" or name=="ccspi": return GoodFETCC.GoodFETCC();
+ elif name=="cc2420" or name=="ccspi": return GoodFETCCSPI.GoodFETCCSPI();
elif name=="avr": return GoodFETAVR.GoodFETAVR();
elif name=="spi": return GoodFETSPI.GoodFETSPI();
elif name=="msp430": return GoodFETMSP430.GoodFETMSP430();
"""Open the serial port"""
# Make timeout None to wait forever, 0 for non-blocking mode.
+ if os.name=='nt' and sys.version.find('64 bit')!=-1:
+ print "WARNING: PySerial requires a 32-bit Python build in Windows.";
+
if port is None and os.environ.get("GOODFET")!=None:
glob_list = glob.glob(os.environ.get("GOODFET"));
if len(glob_list) > 0:
glob_list = glob.glob("/dev/ttyU0");
if len(glob_list) > 0:
port = glob_list[0];
- if os.name=='nt':
+ if port is None and os.name=='nt':
from scanwin32 import winScan;
scan=winScan();
for order,comport,desc,hwid in sorted(scan.comports()):
attempts=0;
connected=0;
while connected==0:
- #print "Got %s" % self.data;
while self.verb!=0x7F or self.data!="http://goodfet.sf.net/":
+ #while self.data!="http://goodfet.sf.net/":
+ #print "'%s'!=\n'%s'" % (self.data,"http://goodfet.sf.net/");
if attemptlimit is not None and attempts >= attemptlimit:
return
elif attempts>2:
print "Resyncing.";
self.serialport.flushInput()
self.serialport.flushOutput()
- #Explicitly set RTS and DTR to halt board.
- self.serialport.setRTS(1);
- self.serialport.setDTR(1);
- #Drop DTR, which is !RST, low to begin the app.
- self.serialport.setDTR(0);
#TelosB reset, prefer software to I2C SPST Switch.
if(os.environ.get("platform")=='telosb'):
#print "TelosB Reset";
self.telosBReset();
+ else:
+ #Explicitly set RTS and DTR to halt board.
+ self.serialport.setRTS(1);
+ self.serialport.setDTR(1);
+ #Drop DTR, which is !RST, low to begin the app.
+ self.serialport.setDTR(0);
-
#self.serialport.write(chr(0x80));
#self.serialport.write(chr(0x80));
#self.serialport.write(chr(0x80));
#self.serialport.write(chr(0x80));
- self.serialport.flushInput()
- self.serialport.flushOutput()
+ #self.serialport.flushInput()
+ #self.serialport.flushOutput()
#time.sleep(60);
attempts=attempts+1;
self.readcmd(); #Read the first command.
+ #print "Got %02x,%02x:'%s'" % (self.app,self.verb,self.data);
#Here we have a connection, but maybe not a good one.
#print "We have a connection."
connected=1;
try:
#print "Reading...";
self.app=ord(self.serialport.read(1));
- #print "APP=%2x" % self.app;
+ #print "APP=%02x" % self.app;
self.verb=ord(self.serialport.read(1));
+
+ #Fixes an obscure bug in the TelosB.
+ if self.app==0x00:
+ while self.verb==0x00:
+ self.verb=ord(self.serialport.read(1));
+
#print "VERB=%02x" % self.verb;
self.count=(
ord(self.serialport.read(1))
+(ord(self.serialport.read(1))<<8)
);
- if self.verbose:
- print "Rx: ( 0x%02x, 0x%02x, 0x%04x )" % ( self.app, self.verb, self.count )
+ #if self.verbose:
+ #print "Rx: ( 0x%02x, 0x%02x, 0x%04x )" % ( self.app, self.verb, self.count )
#Debugging string; print, but wait.
if self.app==0xFF: