goodfet.monitor call,exec commands work well.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Thu, 7 Jan 2010 16:09:28 +0000 (16:09 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Thu, 7 Jan 2010 16:09:28 +0000 (16:09 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@263 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

client/GoodFET.py
client/goodfet.monitor

index 562c654..5236b04 100755 (executable)
@@ -68,7 +68,7 @@ class GoodFET:
         #if data!=None:
         #    count=len(data); #Initial count ignored.
         
         #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));
         
         #little endian 16-bit length
         self.serialport.write(chr(count&0xFF));
@@ -77,11 +77,12 @@ class GoodFET:
         #print "count=%02x, len(data)=%04x" % (count,len(data));
         
         if count!=0:
         #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)
                 #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=''.join(data);
-            #outstr=data;
             self.serialport.write(outstr);
         if not self.besilent:
             self.readcmd();
             self.serialport.write(outstr);
         if not self.besilent:
             self.readcmd();
@@ -153,6 +154,10 @@ class GoodFET:
         """Call to an address."""
         self.writecmd(0,0x30,2,
                       [adr&0xFF,(adr>>8)&0xFF]);
         """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];
     def peekbyte(self,address):
         """Read a byte of memory from the monitor."""
         self.data=[address&0xff,address>>8];
index f5eb1ca..396e632 100755 (executable)
@@ -35,7 +35,13 @@ if(sys.argv[1]=="call"):
     adr=int(sys.argv[2],16);
     print "Calling %04x" % adr;
     client.call(adr);
     adr=int(sys.argv[2],16);
     print "Calling %04x" % adr;
     client.call(adr);
-    client.monitortest();
+if(sys.argv[1]=="exec"):
+    code="";
+    for foo in sys.argv[2].split(" "):
+        code+=chr(int(foo,16));
+    code+="\x30\x41";
+    client.execute(code);
+    
 if(sys.argv[1]=="info"):
     a=client.peekbyte(0xff0);
     b=client.peekbyte(0xff1);
 if(sys.argv[1]=="info"):
     a=client.peekbyte(0xff0);
     b=client.peekbyte(0xff1);