X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFET.py;h=5a0f78ba70f690fcbdcb67b2fb77813efb18b2dc;hp=518cf47cc89385eb549ee64e15142a8afebdb433;hb=607ae113ed3de9efa31dba73a488b8eb4f22dca5;hpb=64ef261d7416ef8cb3ec6cdf7130fc4d8afad8cd diff --git a/client/GoodFET.py b/client/GoodFET.py index 518cf47..5a0f78b 100755 --- a/client/GoodFET.py +++ b/client/GoodFET.py @@ -69,13 +69,16 @@ class GoodFET: return self.symbols.get(name); def timeout(self): print "timeout\n"; - def serInit(self, port=None, timeout=None): + def serInit(self, port=None, timeout=2): """Open the serial port""" + # Make timeout None to wait forever, 0 for non-blocking mode. if port is None and os.environ.get("GOODFET")!=None: glob_list = glob.glob(os.environ.get("GOODFET")); if len(glob_list) > 0: port = glob_list[0]; + else: + port = os.environ.get("GOODFET"); if port is None: glob_list = glob.glob("/dev/tty.usbserial*"); if len(glob_list) > 0: @@ -85,6 +88,7 @@ class GoodFET: if len(glob_list) > 0: port = glob_list[0]; + self.serialport = serial.Serial( port, #9600, @@ -93,21 +97,25 @@ class GoodFET: timeout=timeout ) - #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.flushInput() - self.serialport.flushOutput() + self.verb=0; + attempts=0; + while self.verb!=0x7F: + 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); + self.serialport.flushInput() + self.serialport.flushOutput() + #time.sleep(.1); + attempts=attempts+1; + self.readcmd(); #Read the first command. + + #print "Connected after %02i attempts." % attempts; + self.mon_connected(); - #Read and handle the initial command. - #time.sleep(1); - self.readcmd(); #Read the first command. - if(self.verb!=0x7F): - print "Verb %02x is wrong. Incorrect firmware or bad Info guess?" % self.verb; - print "http://goodfet.sf.net/faq/"; - #print "Connected." def getbuffer(self,size=0x1c00): writecmd(0,0xC2,[size&0xFF,(size>>16)&0xFF]); print "Got %02x%02x buffer size." % (self.data[1],self.data[0]); @@ -218,7 +226,9 @@ class GoodFET: self.besilent=s; print "besilent is %i" % self.besilent; self.writecmd(0,0xB0,1,[s]); - + def mon_connected(self): + """Announce to the monitor that the connection is good.""" + self.writecmd(0,0xB1,0,[]); def out(self,byte): """Write a byte to P5OUT.""" self.writecmd(0,0xA1,1,[byte]); @@ -305,12 +315,13 @@ class GoodFET: """Self-test several functions through the monitor.""" print "Performing monitor self-test."; - if self.peekword(0x0c00)!=0x0c04 and self.peekword(0x0c00)!=0x0c06: - print "ERROR Fetched wrong value from 0x0c04."; - self.pokebyte(0x0021,0); #Drop LED - if self.peekbyte(0x0021)!=0: - print "ERROR, P1OUT not cleared."; - self.pokebyte(0x0021,1); #Light LED + for f in range(0,30): + if self.peekword(0x0c00)!=0x0c04 and self.peekword(0x0c00)!=0x0c06: + print "ERROR Fetched wrong value from 0x0c04."; + self.pokebyte(0x0021,0); #Drop LED + if self.peekbyte(0x0021)!=0: + print "ERROR, P1OUT not cleared."; + self.pokebyte(0x0021,1); #Light LED print "Self-test complete.";