hz=freq*396.728515625;
return hz;
+ lastshellcode="none";
def shellcodefile(self,filename,wait=1):
"""Run a fragment of shellcode by name."""
#FIXME: should identify chip model number, use shellcode for that chip.
- file=__file__;
- file=file.replace("GoodFETCC.pyc","GoodFETCC.py");
- path=file.replace("client/GoodFETCC.py","shellcode/chipcon/cc1110/");
- #print "File\t%s" % file;
- #print "Path\t%s" % path;
- filename=path+filename;
- #print "Loading shelcode from %s" % filename;
-
- #Load the shellcode.
- h=IntelHex(filename);
- for i in h._buf.keys():
- self.CCpokedatabyte(i,h[i]);
+
+ if self.lastshellcode!=filename:
+ self.lastshellcode=filename;
+ file=__file__;
+ file=file.replace("GoodFETCC.pyc","GoodFETCC.py");
+ path=file.replace("client/GoodFETCC.py","shellcode/chipcon/cc1110/");
+ filename=path+filename;
+
+ #Load the shellcode.
+ h=IntelHex(filename);
+ for i in h._buf.keys():
+ self.CCpokedatabyte(i,h[i]);
#Execute it.
self.CCdebuginstr([0x02, 0xf0, 0x00]); #ljmp 0xF000
#time.sleep(0.1);
#print "Waiting for shell code to return.";
return;
+ def ishalted(self):
+ return self.CCstatus()&0x20;
def shellcode(self,code,wait=1):
"""Copy a block of code into RAM and execute it."""
i=0;
self.pokebysym("FREQ2" , 0x21) # Frequency control word, high byte.
self.pokebysym("FREQ1" , 0x71) # Frequency control word, middle byte.
self.pokebysym("FREQ0" , 0x7a) # Frequency control word, low byte.
- if band=="ismus" or band=="us":
+ elif band=="ismus" or band=="us":
self.pokebysym("FREQ2" , 0x22) # Frequency control word, high byte.
self.pokebysym("FREQ1" , 0xB1) # Frequency control word, middle byte.
self.pokebysym("FREQ0" , 0x3B) # Frequency control word, low byte.
- if band=="ismlf" or band=="lf":
+ elif band=="ismlf" or band=="lf":
self.pokebysym("FREQ2" , 0x10) # Frequency control word, high byte.
self.pokebysym("FREQ1" , 0xB0) # Frequency control word, middle byte.
self.pokebysym("FREQ0" , 0x71) # Frequency control word, low byte.
-
+ elif band=="none":
+ band="none";
+ else:
+ #Got a frequency, not a band.
+ self.RF_setfreq(eval(band));
self.pokebysym("MDMCFG4" , 0x7B) # Modem configuration.
self.pokebysym("MDMCFG3" , 0x83) # Modem configuration.
self.pokebysym("MDMCFG2" , 0x13) # Modem configuration.
self.pokebysym("PKTCTRL1" , 0x04) # Packet automation control, w/ lqi
#self.pokebysym("PKTCTRL1" , 0x00) # Packet automation control. w/o lqi
self.pokebysym("PKTCTRL0" , 0x05) # Packet automation control, w/ checksum.
- self.pokebysym("PKTCTRL0" , 0x00) # Packet automation control, w/o checksum, fixed length
+ #self.pokebysym("PKTCTRL0" , 0x00) # Packet automation control, w/o checksum, fixed length
self.pokebysym("ADDR" , 0x01) # Device address.
self.pokebysym("PKTLEN" , 0xFF) # Packet length.
self.data=[adr&0xff, val&0xff];
self.writecmd(self.APP,0x02, 2, self.data);
return ord(self.data[0]);
- def pokebyte(self,adr,val,mem="data"):
- if mem!="data":
- print "FIXME: poking of non data bytes not yet supported.";
+ def pokebyte(self,adr,val,mem="xdata"):
self.CCpokedatabyte(adr,val);
def CCpokedatabyte(self,adr,val):
"""Write a byte to data memory."""