X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2Fgoodfet;h=c8e21873c389cf2d765fd54d7a27637b3adf75b9;hp=78171b7ec34b4342d7ecb574f0823a2338d47e9a;hb=46911acb1c879cf7f43f2ac0ae56478a1b4fee24;hpb=589872bb228d7c641d49cb60e3e3aab72e45fc82 diff --git a/client/goodfet b/client/goodfet index 78171b7..c8e2187 100755 --- a/client/goodfet +++ b/client/goodfet @@ -1,109 +1,57 @@ #!/usr/bin/env python -# GoodFET Client Application +# GoodFET Debugger # # (C) 2009 Travis Goodspeed # -# 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, code, binascii; +#import rlcompleter, readline; +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|verb]\n" % sys.argv[0]; + print "driver:= monitor | cc | avr | spi | msp430 | nrf"; + print "verb:= scan"; + print ""; + print "This is an unfinished client. You probably want goodfet.$chip instead."; + sys.exit(1); + +verb=sys.argv[1]; +if verb=="scan": + from scanwin32 import *; + # INIT COMPORT SCAN + scan=winScan(); + #scan.comports(); + + for order, port, desc, hwid in sorted(scan.comports()): + # Look for FTDIBUS + try: + #hwid.index('FTDI') + #print "*************" + #print "GOODFET FOUND" + #print "*************" + if hwid.index('FTDI')!=0: continue; + print "%s: (%s)" % (port, hwid), + try: + serial.Serial(port) + except serial.serialutil.SerialException: + print "Busy" + else: + print "Ready" + except: + pass + sys.exit(0); -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);