New ROM, AT24DF081
[goodfet] / client / GoodFETCC.py
index 014b6d4..344d9a5 100644 (file)
@@ -16,13 +16,20 @@ import xml.dom.minidom;
 class GoodFETCC(GoodFET):
     """A GoodFET variant for use with Chipcon 8051 Zigbee SoC."""
     APP=0x30;
+    
+    
+    
+    
     smartrfpath="/opt/smartrf7";
     def loadsymbols(self):
-        self.SRF_loadsymbols();
+        try: self.SRF_loadsymbols();
+        except:
+            if self.verbose==1: print "SmartRF load failed.";
     def SRF_chipdom(self,chip="cc1110", doc="register_definition.xml"):
         fn="%s/config/xml/%s/%s" % (self.smartrfpath,chip,doc);
-        print "Opening %s" % fn;
+        #print "Opening %s" % fn;
         return xml.dom.minidom.parse(fn)
+        
     def CMDrs(self,args=[]):
         """Chip command to grab the radio state."""
         self.SRF_radiostate();
@@ -65,6 +72,10 @@ class GoodFETCC(GoodFET):
                     print "%-10s=0x%02x; /* %-50s */" % (
                         name,self.CCpeekdatabyte(eval(address)), description);
                     if bitfields!="": print bitfields.rstrip();
+    def RF_getrssi(self):
+        """Returns the received signal strenght, from 0 to 1."""
+        rssireg=self.symbols.get("RSSI");
+        return self.CCpeekdatabyte(rssireg);
     def SRF_loadsymbols(self):
         ident=self.CCident();
         chip=self.CCversions.get(ident&0xFF00);
@@ -260,6 +271,7 @@ class GoodFETCC(GoodFET):
     def erase(self):
         """Erase all of the target's memory."""
         self.CCchiperase();
+        self.start();
     
     def CCstatus(self):
         """Check the status."""
@@ -301,6 +313,9 @@ class GoodFETCC(GoodFET):
         #print "Status: %s." % self.status();
         self.CCreleasecpu();
         self.CChaltcpu();
+        #Get SmartRF Studio regs if they exist.
+        self.loadsymbols(); 
+
         #print "Status: %s." % self.status();
         
     def stop(self):
@@ -320,6 +335,27 @@ class GoodFETCC(GoodFET):
               (adr>>24)&0xFF];
         print "Flashing buffer to 0x%06x" % adr;
         self.writecmd(self.APP,0x95,4,data);
+    
+    def setsecret(self,value):
+        """Set a secret word for later retreival.  Used by glitcher."""
+        page = 0x0000;
+        pagelen = self.CCpagesize(); #Varies by chip.
+        print "page=%04x, pagelen=%04x" % (page,pagelen);
+        
+        self.CCeraseflashbuffer();
+        print "Setting secret to %x" % value;
+        self.CCpokedatabyte(0xF000,value);
+        self.CCpokedatabyte(0xF800,value);
+        print "Setting secret to %x==%x" % (value,
+                                            self.CCpeekdatabyte(0xf000));
+        self.CCflashpage(0);
+        print "code[0]=%x" % self.CCpeekcodebyte(0);
+    def getsecret(self):
+        """Get a secret word.  Used by glitcher."""
+        secret=self.CCpeekcodebyte(0);
+        #print "Got secret %02x" % secret;
+        return secret;
+    
     def dump(self,file,start=0,stop=0xffff):
         """Dump an intel hex file from code memory."""
         print "Dumping code from %04x to %04x as %s." % (start,stop,file);