goodfet.monitor call,exec commands work well.
[goodfet] / client / GoodFET.py
index cfc2079..5236b04 100755 (executable)
@@ -40,8 +40,12 @@ class GoodFET:
             parity = serial.PARITY_NONE
             )
         
-        #Explicitly set RTS
+        #This might cause problems, but it makes failure graceful.
+        #self.serialport._timeout = 5;
+        
+        #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()
@@ -64,7 +68,7 @@ class GoodFET:
         #if data!=None:
         #    count=len(data); #Initial count ignored.
         
-        #print "TX %02x %02x" % (app,verb);
+        #print "TX %02x %02x %04x" % (app,verb,count);
         
         #little endian 16-bit length
         self.serialport.write(chr(count&0xFF));
@@ -73,11 +77,12 @@ class GoodFET:
         #print "count=%02x, len(data)=%04x" % (count,len(data));
         
         if count!=0:
-            for i in range(0,count):
+            if(isinstance(data,list)):
+                for i in range(0,count):
                 #print "Converting %02x at %i" % (data[i],i)
-                data[i]=chr(data[i]);
+                    data[i]=chr(data[i]);
+            #print type(data);
             outstr=''.join(data);
-            #outstr=data;
             self.serialport.write(outstr);
         if not self.besilent:
             self.readcmd();
@@ -145,6 +150,14 @@ class GoodFET:
     def dir(self,byte):
         """Write a byte to P5DIR."""
         self.writecmd(0,0xA0,1,[byte]);
+    def call(self,adr):
+        """Call to an address."""
+        self.writecmd(0,0x30,2,
+                      [adr&0xFF,(adr>>8)&0xFF]);
+    def execute(self,code):
+        """Execute supplied code."""
+        self.writecmd(0,0x31,2,#len(code),
+                      code);
     def peekbyte(self,address):
         """Read a byte of memory from the monitor."""
         self.data=[address&0xff,address>>8];