goodfet.cc radioinfo
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Fri, 26 Feb 2010 19:43:47 +0000 (19:43 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Fri, 26 Feb 2010 19:43:47 +0000 (19:43 +0000)
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

client/GoodFETCC.py
client/GoodFETConsole.py
client/goodfet.cc

index 94fcafd..08cdea0 100644 (file)
@@ -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;
-                        
+
index cd0045f..cf74cf9 100644 (file)
@@ -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('~'));
index ed093a1..e00c727 100755 (executable)
@@ -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();