X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFET.py;h=ec65900b599aaab1e4a8add2b2245f51b867a912;hp=cf01c85cd341d9a13bb677208f4cba5a157c89c8;hb=15750ecb20e3f348c419f0666452534c8b6a0b8e;hpb=2b654b579b948558edecc63dd7ab3aa4543f050d diff --git a/client/GoodFET.py b/client/GoodFET.py index cf01c85..ec65900 100755 --- a/client/GoodFET.py +++ b/client/GoodFET.py @@ -47,27 +47,65 @@ class GoodFET: if(self.verb!=0x7F): print "Verb %02x is wrong. Incorrect firmware?" % self.verb; #print "Connected." - def writecmd(self, app, verb, count=0, data=[], blocks=1): + 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]); + def writecmd(self, app, verb, count=0, data=[]): """Write a command and some data to the GoodFET.""" self.serialport.write(chr(app)); self.serialport.write(chr(verb)); - self.serialport.write(chr(count)); + + + #print "TX %02x %02x" % (app,verb); + + #little endian 16-bit length + self.serialport.write(chr(count&0xFF)); + self.serialport.write(chr(count>>8)); + #print "count=%02x, len(data)=%04x" % (count,len(data)); + if count!=0: - for d in data: - self.serialport.write(chr(d)); + for i in range(0,count): + #print "Converting %02x at %i" % (data[i],i) + data[i]=chr(data[i]); + outstr=''.join(data); + self.serialport.write(outstr); + if not self.besilent: + self.readcmd(); - self.readcmd(blocks); #Uncomment this later, to ensure a response. - def readcmd(self,blocks=1): + besilent=0; + app=0; + verb=0; + count=0; + data=""; + + def readcmd(self): """Read a reply from the GoodFET.""" - self.app=ord(self.serialport.read(1)); - self.verb=ord(self.serialport.read(1)); - self.count=ord(self.serialport.read(1)); - self.data=self.serialport.read(self.count*blocks); - #print "READ %02x %02x %02x " % (self.app, self.verb, self.count); - return self.data; - + while 1: + #print "Reading..."; + self.app=ord(self.serialport.read(1)); + #print "APP=%2x" % self.app; + 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) + ); + + #Debugging string; print, but wait. + if self.app==0xFF and self.verb==0xFF: + print "DEBUG %s" % self.serialport.read(self.count); + else: + self.data=self.serialport.read(self.count); + return self.data; + #Monitor stuff + def silent(self,s=0): + """Transmissions halted when 1.""" + self.besilent=s; + print "besilent is %i" % self.besilent; + self.writecmd(0,0xB0,1,[s]); + def out(self,byte): """Write a byte to P5OUT.""" self.writecmd(0,0xA1,1,[byte]);