Monitor peeks work on the console.
[goodfet] / client / goodfet
index 78171b7..c4941aa 100755 (executable)
 #!/usr/bin/env python
-# GoodFET Client Application
+# GoodFET Debugger
 # 
 # (C) 2009 Travis Goodspeed <travis at radiantmachines.com>
 #
-# This code is ugly as sin, for bootstrapping the firmware only.
-# Rewrite cleanly as soon as is convenient.
+# This code is being rewritten and refactored.  You've been warned!
 
-import sys, time, string, cStringIO, struct
-sys.path.append("/usr/lib/tinyos")
-import serial
+import sys, os, readline, code, binascii;
+import rlcompleter;
 
+from GoodFET import GoodFET, getClient;
+from GoodFETConsole import GoodFETConsole;
 
-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]);
+from intelhex import IntelHex;
 
-client=Client();
-client.serInit("/dev/ttyUSB0")
+if(len(sys.argv)==1):
+    print "Usage: %s driver\n" % sys.argv[0];
+    print "driver:= monitor | cc | avr | spi | msp430";
+    print;
+    print "This is an unfinished client.  You probably want goodfet.$chip instead.";
+    sys.exit(1);
 
-client.monitortest();
+driver=sys.argv[1];
+print "Using driver %s" % driver;
+#client=eval("%s()" % driver);
+client=getClient(driver);
+console=client.getConsole();
+console.run();
 
-client.spisetup();
-while 1:
-    print "%02x" % client.spitrans8(5);
-    time.sleep(0.1);
+sys.exit(0);