From: travisutk Date: Fri, 26 Feb 2010 19:43:47 +0000 (+0000) Subject: goodfet.cc radioinfo X-Git-Url: http://git.rot13.org/?p=goodfet;a=commitdiff_plain;h=06c35c53c6ccc3eb8d3860f0a22ef3e559c293e0;hp=ad4619be9d5a713318196ead4aeb6000e7d3f0e3 goodfet.cc radioinfo Beginnings of TI/Chipcon SmartRF integration. Chipcon model numbers are now lowercase. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@352 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- diff --git a/client/GoodFETCC.py b/client/GoodFETCC.py index 94fcafd..08cdea0 100644 --- a/client/GoodFETCC.py +++ b/client/GoodFETCC.py @@ -11,10 +11,41 @@ import binascii; from GoodFET import GoodFET; from intelhex import IntelHex; +import xml.dom.minidom; + class GoodFETCC(GoodFET): """A GoodFET variant for use with Chipcon 8051 Zigbee SoC.""" APP=0x30; - + smartrfpath="/opt/smartrf7"; + def SRF_chipdom(self,chip="cc1110", doc="register_definition.xml"): + fn="%s/config/xml/%s/%s" % (self.smartrfpath,chip,doc); + print "Opening %s" % fn; + return xml.dom.minidom.parse(fn) + def CMDrs(self,args=[]): + """Chip command to grab the radio state.""" + self.SRF_radiostate(); + def SRF_radiostate(self): + ident=self.CCident(); + chip=self.CCversions.get(ident&0xFF00); + dom=self.SRF_chipdom(chip,"register_definition.xml"); + for e in dom.getElementsByTagName("registerdefinition"): + for f in e.childNodes: + if f.localName=="DeviceName": + print "// %s RadioState" % (f.childNodes[0].nodeValue); + elif f.localName=="Register": + name="unknownreg"; + address="0xdead"; + description=""; + for g in f.childNodes: + if g.localName=="Name": + name=g.childNodes[0].nodeValue; + elif g.localName=="Address": + address=g.childNodes[0].nodeValue; + elif g.localName=="Description": + description=g.childNodes[0].nodeValue; + #print "SFRX(%10s, %s); /* %50s */" % (name,address, description); + print "%10s=0x%02x; /* %50s */" % ( + name,self.CCpeekdatabyte(eval(address)), description); def CChaltcpu(self): """Halt the CPU.""" self.writecmd(0x30,0x86,0,self.data); @@ -79,13 +110,13 @@ class GoodFETCC(GoodFET): self.CClockchip(); - CCversions={0x0100:"CC1110", - 0x8500:"CC2430", - 0x8900:"CC2431", - 0x8100:"CC2510", - 0x9100:"CC2511", - 0xA500:"CC2530", #page 52 of SWRU191 - 0xB500:"CC2531", + CCversions={0x0100:"cc1110", + 0x8500:"cc2430", + 0x8900:"cc2431", + 0x8100:"cc2510", + 0x9100:"cc2511", + 0xA500:"cc2530", #page 52 of SWRU191 + 0xB500:"cc2531", 0xFF00:"CCmissing"}; CCpagesizes={0x01: 1024, #"CC1110", 0x85: 2048, #"CC2430", @@ -272,4 +303,4 @@ class GoodFETCC(GoodFET): #last page self.CCflashpage(page); print "Flashed final page at %06x" % page; - + diff --git a/client/GoodFETConsole.py b/client/GoodFETConsole.py index cd0045f..cf74cf9 100644 --- a/client/GoodFETConsole.py +++ b/client/GoodFETConsole.py @@ -19,13 +19,18 @@ class GoodFETConsole(): client.serInit(); client.setup(); client.start(); + def prompt(self): + sys.stdout.write("gf% "); + sys.stdout.flush(); def run(self): + self.prompt(); + #for cmd in sys.stdin: while 1: - sys.stdout.write("gf% "); - sys.stdout.flush(); cmd=sys.stdin.readline(); - self.handle(cmd); - + if not cmd: break; + if(cmd.strip()!=""): + self.handle(cmd); + self.prompt(); def handle(self, str): """Handle a command string. First word is command.""" #Lines beginning with # are comments. @@ -73,6 +78,14 @@ class GoodFETConsole(): def CMDflash(self,args): file=args[1]; self.client.flash(self.expandfilename(file)); + def CMDchip(self,args): + cmd="self.client.CMD%s()" % args[1]; + print cmd; + try: + eval(cmd); + except: + print sys.exc_info()[0]; + print "Chip-specific command failed."; def expandfilename(self,filename): if(filename[0]=='~'): return "%s%s" % (os.environ.get("HOME"),filename.lstrip('~')); diff --git a/client/goodfet.cc b/client/goodfet.cc index ed093a1..e00c727 100755 --- a/client/goodfet.cc +++ b/client/goodfet.cc @@ -18,6 +18,7 @@ if(len(sys.argv)==1): print "%s test" % sys.argv[0]; print "%s term" % sys.argv[0]; print "%s info" % sys.argv[0]; + print "%s radioinfo" % sys.argv[0]; print "%s dumpcode $foo.hex [0x$start 0x$stop]" % sys.argv[0]; print "%s dumpdata $foo.hex [0x$start 0x$stop]" % sys.argv[0]; print "%s erase" % sys.argv[0]; @@ -96,6 +97,8 @@ if(sys.argv[1]=="status"): print "Status: %s" %client.status(); if(sys.argv[1]=="info"): print "%s" % client.CCidentstr(); +if(sys.argv[1]=="radioinfo"): + client.CMDrs(); if(sys.argv[1]=="erase"): print "Status: %s" % client.status(); client.CCchiperase();