X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFETNRF.py;h=8de2993ec6dd15380c5659d1a7385ae954f730a7;hp=e9c44c19a37ad6d776e61ee1bfc131dc16f3a511;hb=733f21c20c5bd8db5a79c54f816072fd18f43aa2;hpb=7b27ef330adcef64081c14e9fbc670b753d52a15 diff --git a/client/GoodFETNRF.py b/client/GoodFETNRF.py index e9c44c1..8de2993 100644 --- a/client/GoodFETNRF.py +++ b/client/GoodFETNRF.py @@ -26,9 +26,15 @@ class GoodFETNRF(GoodFET): self.writecmd(self.NRFAPP,0x00,len(data),data); return self.data; - def peek(self,reg,bytes=1): + def peek(self,reg,bytes=-1): """Read an NRF Register. For long regs, result is flipped.""" data=[reg,0,0,0,0,0]; + + #Automatically calibrate the len. + if bytes==-1: + bytes=1; + if reg==0x0a or reg==0x0b or reg==0x10: bytes=5; + self.writecmd(self.NRFAPP,0x02,len(data),data); toret=0; for i in range(0,bytes): @@ -82,7 +88,7 @@ class GoodFETNRF(GoodFET): """Return the target MAC address.""" #Register 0x10 is TX_ADDR, five bytes. - mac=self.peek(0x0A, 5); + mac=self.peek(0x10, 5); return mac; def RF_settmac(self,mac): """Set the target MAC address.""" @@ -90,6 +96,7 @@ class GoodFETNRF(GoodFET): #Register 0x10 is TX_ADDR, five bytes. self.poke(0x10, mac, 5); return mac; + def RF_rxpacket(self): """Get a packet from the radio. Returns None if none is waiting.""" if self.peek(0x07) & 0x40: @@ -102,9 +109,32 @@ class GoodFETNRF(GoodFET): self.writecmd(self.NRFAPP,0x82,0,None); #Flush self.poke(0x07,0x40);#clear bit. return None; + def RF_carrier(self): + """Hold a carrier wave on the present frequency.""" + # Set CONT_WAVE, PLL_LOCK, and 0dBm in RF_SETUP + self.poke(0x06,8+10+4+2); + packetlen=16; def RF_setpacketlen(self,len=16): """Set the number of bytes in the expected payload.""" self.poke(0x11,len); self.packetlen=len; - + def RF_getpacketlen(self): + """Set the number of bytes in the expected payload.""" + len=self.peek(0x11); + self.packetlen=len; + return len; + maclen=5; + def RF_getmaclen(self): + """Get the number of bytes in the MAC address.""" + choices=["illegal", 3, 4, 5]; + choice=self.peek(0x03)&3; + self.maclen=choices[choice]; + return self.maclen; + def RF_setmaclen(self,len): + """Set the number of bytes in the MAC address.""" + choices=["illegal", "illegal", "illegal", + 1, 2, 3]; + choice=choices[len]; + self.poke(0x03,choice); + self.maclen=len;