if(self.verb!=0x7F):
print "Verb %02x is wrong. Incorrect firmware?" % self.verb;
#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]);
def writecmd(self, app, verb, count=0, data=[], blocks=1):
"""Write a command and some data to the GoodFET."""
self.serialport.write(chr(app));
for d in data:
self.serialport.write(chr(d));
- self.readcmd(blocks); #Uncomment this later, to ensure a response.
+ #self.serialport.flushOutput();
+ #self.serialport.flushInput();
+
+
+ if not self.besilent:
+ self.readcmd(blocks);
+
+ besilent=0;
+ app=0;
+ verb=0;
+ count=0;
+ data="";
+
def readcmd(self,blocks=1):
"""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));
+ #print "Waiting for %i bytes." % self.count;
+
+ #print "READ %02x %02x %02x " % (self.app, self.verb, self.count);
+
+ #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*blocks);
+ 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]);