X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFET.py;h=8d588ed29d5915bae857275ee7f522cbc352e2d7;hp=9c111617cc7463eb96dd34f034212c99e31cd424;hb=8f05454eedc506a9b46c2b8bce9af2480089827f;hpb=9e13b1450d770a5645468221d0eacc1533d654a9 diff --git a/client/GoodFET.py b/client/GoodFET.py index 9c11161..8d588ed 100755 --- a/client/GoodFET.py +++ b/client/GoodFET.py @@ -6,9 +6,7 @@ # This code is ugly as sin, for bootstrapping the firmware only. # Rewrite cleanly as soon as is convenient. -import sys, time, string, cStringIO, struct -#sys.path.append("/usr/lib/tinyos") -import serial +import sys, time, string, cStringIO, struct, glob, serial class GoodFET: @@ -16,8 +14,18 @@ class GoodFET: self.data=[0]; def timeout(self): print "timout\n"; - def serInit(self, port): + def serInit(self, port=None): """Open the serial port""" + + if port is None: + glob_list = glob.glob("/dev/tty.usbserial*"); + if len(glob_list) > 0: + port = glob_list[0]; + if port is None: + glob_list = glob.glob("/dev/ttyUSB*"); + if len(glob_list) > 0: + port = glob_list[0]; + self.serialport = serial.Serial( port, #9600, @@ -69,6 +77,19 @@ class GoodFET: self.data=[address&0xff,address>>8,value]; self.writecmd(0,0x03,3,self.data); return ord(self.data[0]); + def dumpmem(self,begin,end): + i=begin; + while i>16, + (adr&0xFF00)>>8, + adr&0xFF]; + + self.writecmd(0x01,0x02,3,data); + return self.data; + def SPIpokebyte(self,adr,val): + self.SPIpokebytes(adr,[val]); + def SPIpokebytes(self,adr,data): + #self.SPIwriteenable(); + adranddata=[(adr&0xFF0000)>>16, + (adr&0xFF00)>>8, + adr&0xFF + ]+data; + self.writecmd(0x01,0x03, + len(adranddata),adranddata); + + def SPIchiperase(self): + """Mass erase an SPI Flash ROM.""" + self.writecmd(0x01,0x81,0,[]); + def SPIwriteenable(self): + """SPI Flash Write Enable""" + data=[0x06]; + self.SPItrans(data); + def SPIjedecmanstr(self): """Grab the JEDEC manufacturer string. Call after SPIjedec().""" - man=self.JEDECmanufacturers[self.JEDECmanufacturer]; + man=self.JEDECmanufacturers.get(self.JEDECmanufacturer) if man==0: man="UNKNOWN"; return man; def SPIjedecstr(self): """Grab the JEDEC manufacturer string. Call after SPIjedec().""" - man=self.JEDECmanufacturers[self.JEDECmanufacturer]; + man=self.JEDECmanufacturers.get(self.JEDECmanufacturer); if man==0: man="UNKNOWN"; - device=self.JEDECdevices[self.JEDECdevice]; + device=self.JEDECdevices.get(self.JEDECdevice); if device==0: device="???" return "%s %s" % (man,device); @@ -183,7 +240,7 @@ class GoodFET: 0xFF00:"CCmissing"}; def CCidentstr(self): ident=self.CCident(); - chip=self.CCversions[ident&0xFF00]; + chip=self.CCversions.get(ident&0xFF00); return "%s/r%02x" % (chip, ident&0xFF); def CCident(self): """Get a chipcon's ID.""" @@ -261,10 +318,11 @@ class GoodFET: self.writecmd(0x30,0x20,0,self.data); ident=self.CCidentstr(); print "Target identifies as %s." % ident; - print "Status: %s." % self.CCstatusstr(); + #print "Status: %s." % self.CCstatusstr(); self.CCreleasecpu(); self.CChaltcpu(); print "Status: %s." % self.CCstatusstr(); + def CCstop(self): """Stop debugging.""" self.writecmd(0x30,0x21,0,self.data);