-class Client:
- def __init__(self, *args, **kargs):
- print "inited\n";
- def timeout(self):
- print "timout\n";
- def serInit(self, port):
- """Open the serial port"""
- self.serialport = serial.Serial(
- port,
- 9600,
- parity = serial.PARITY_NONE
- )
- #Drop DTR, which is !RST, low to begin the app.
- self.serialport.setDTR(0);
- self.serialport.flushInput()
- self.serialport.flushOutput()
-
- #Read and handle the initial command.
- time.sleep(1);
- client.readcmd(); #Read the first command.
- if(self.verb!=0x7F):
- print "Verb is wrong. Incorrect firmware?";
-
-
- def writecmd(self, app, verb, count, 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 "count=%02x, len(data)=%04x" % (count,len(data));
- if count!=0:
- for d in data:
- self.serialport.write(chr(d));
- self.readcmd(); #Uncomment this later, to ensure a response.
- 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));
- if self.count>0:
- self.data=self.serialport.read(self.count);
- #print "%02x %02x %02x" % (self.app, self.verb, self.count);
-
- #Monitor stuff
- def peekbyte(self,address):
- """Read a byte of memory from the monitor."""
- self.data=[address&0xff,address>>8];
- self.writecmd(0,0x02,2,self.data);
- #self.readcmd();
- return ord(self.data[0]);
- def peekword(self,address):
- """Read a word of memory from the monitor."""
- return self.peekbyte(address)+(self.peekbyte(address+1)<<8);
- def pokebyte(self,address,value):
- """Set a byte of memory by the monitor."""
- self.data=[address&0xff,address>>8,value];
- self.writecmd(0,0x03,3,self.data);
- return ord(self.data[0]);
-
- def monitortest(self):
- """Self-test several functions through the monitor."""
- print "Performing self-test.";
-
- if self.peekword(0x0c00)!=0x0c04:
- 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.";
-
- def spisetup(self):
- """Moved the FET into the SPI application."""
- print "Initializing SPI.";
- self.writecmd(1,0x10,0,self.data); #SPI/SETUP
- #self.readcmd();
- def spitrans8(self,byte):
- """Read and write 8 bits by SPI."""
- self.data=[byte];
- self.writecmd(1,0,1,self.data); #SPI exchange
- #self.readcmd();
-
- if self.app!=1 or self.verb!=0:
- print "Error in SPI transaction; app=%02x, verb=%02x" % (self.app, self.verb);
- return ord(self.data[0]);