Temporary table for glitching range. Ought to improve performance.
[goodfet] / client / GoodFET.py
index 264a738..5c38ca9 100755 (executable)
@@ -6,15 +6,58 @@
 # This code is being rewritten and refactored.  You've been warned!
 
 import sys, time, string, cStringIO, struct, glob, serial, os;
+import sqlite3;
 
+def getClient(name="GoodFET"):
+    import GoodFET, GoodFETCC, GoodFETAVR, GoodFETSPI, GoodFETMSP430;
+    if(name=="GoodFET" or name=="monitor"): return GoodFET.GoodFET();
+    elif name=="cc" or name=="chipcon": return GoodFETCC.GoodFETCC();
+    elif name=="avr": return GoodFETAVR.GoodFETAVR();
+    elif name=="spi": return GoodFETSPI.GoodFETSPI();
+    elif name=="msp430": return GoodFETMSP430.GoodFETMSP430();
+    
+    print "Unsupported target: %s" % name;
+    sys.exit(0);
+
+class SymbolTable:
+    """GoodFET Symbol Table"""
+    db=sqlite3.connect(":memory:");
+    
+    def __init__(self, *args, **kargs):
+        self.db.execute("create table if not exists symbols(adr,name,memory,size,comment);");
+    def get(self,name):
+        self.db.commit();
+        c=self.db.cursor();
+        try:
+            c.execute("select adr,memory from symbols where name=?",(name,));
+            for row in c:
+                #print "Found it.";
+                sys.stdout.flush();
+                return row[0];
+            #print "No dice.";
+        except:# sqlite3.OperationalError:
+            #print "SQL error.";
+            return eval(name);
+        return eval(name);
+    def define(self,adr,name,comment="",memory="vn",size=16):
+        self.db.execute("insert into symbols(adr,name,memory,size,comment)"
+                        "values(?,?,?,?,?);", (
+                adr,name,memory,size,comment));
+        #print "Set %s=%s." % (name,adr);
 
 class GoodFET:
     """GoodFET Client Library"""
     
     GLITCHAPP=0x71;
+    symbols=SymbolTable();
     
     def __init__(self, *args, **kargs):
         self.data=[0];
+    def getConsole(self):
+        from GoodFETConsole import GoodFETConsole;
+        return GoodFETConsole(self);
+    def name2adr(self,name):
+        return self.symbols.get(name);
     def timeout(self):
         print "timeout\n";
     def serInit(self, port=None):
@@ -270,12 +313,27 @@ class GoodFET:
     def start(self):
         return;
     def test(self):
+        print "Unimplemented.";
         return;
     def status(self):
+        print "Unimplemented.";
         return;
+    def halt(self):
+        print "Unimplemented.";
+        return;
+    def resume(self):
+        print "Unimplemented.";
+        return;
+    def getpc(self):
+        print "Unimplemented.";
+        return 0xdead;
     def flash(self,file):
         """Flash an intel hex file to code memory."""
         print "Flash not implemented.";
+    def dump(self,file,start=0,stop=0xffff):
+        """Dump an intel hex file from code memory."""
+        print "Dump not implemented.";
+
     def peek32(self,address, memory="vn"):
         return (self.peek16(address,memory)+
                 (self.peek16(address+2,memory)<<16));
@@ -283,4 +341,6 @@ class GoodFET:
         return (self.peek8(address,memory)+
                 (self.peek8(address+1,memory)<<8));
     def peek8(self,address, memory="vn"):
-        return 0xde;
+        return self.peekbyte(address); #monitor
+    def loadsymbols(self):
+        return;