return ord(self.data[0]);
def CC_RFST_IDLE(self):
"""Switch the radio to idle mode, clearing overflows and errors."""
- self.strobe(0x00); #SNOP?
+ self.strobe(0x06); #SRXOFF
def CC_RFST_TX(self):
"""Switch the radio to TX mode."""
self.strobe(0x04); #0x05 for CCA
return 0xdeadbeef;
def RF_getrssi(self):
"""Returns the received signal strenght, with a weird offset."""
- rssival=self.peek(0x13)&0xFF; #raw RSSI register, should normalize this
+ rssival=self.peek(0x13)&0xFF; #raw RSSI register
return rssival^0x80;
+ lastpacket=range(0,0xff);
def RF_rxpacket(self):
- """Get a packet from the radio. Returns None if none is waiting."""
- print "Don't know how to get a packet.";
- return None;
+ """Get a packet from the radio. Returns None if none is waiting. In
+ order to not require the SFD, FIFO, or FIFOP lines, this
+ implementation works by comparing the buffer to the older
+ contents.
+ """
+
+ # TODO -- Flush only if there's an overflow.
+ self.strobe(0x08); #SFLUSHRX
+
+ data="\0";
+ self.data=data;
+ self.writecmd(self.CCSPIAPP,0x80,len(data),data);
+ buffer=self.data;
+
+ self.lastpacket=buffer;
+ if(len(buffer)==0):
+ return None;
+ return buffer;
+ def RF_rxpacket_old(self):
+ """Get a packet from the radio. Returns None if none is waiting. In
+ order to not require the SFD, FIFO, or FIFOP lines, this
+ implementation works by comparing the buffer to the older
+ contents.
+ """
+ self.strobe(0x03); #SRXON
+ self.strobe(0x08); #SFLUSHRX
+
+ buffer=range(0,0xff);
+ buffer[0]=0x3F | 0x40; #RXFIFO
+ buffer=self.trans(buffer);
+
+ new=False;
+ for foo in range(0,ord(buffer[0])):
+ if buffer[foo]!=self.lastpacket[foo]:
+ new=True;
+ if not new:
+ return None;
+
+
+ self.lastpacket=buffer;
+ return buffer;
def RF_carrier(self):
"""Hold a carrier wave on the present frequency."""
print "Don't know how to hold a carrier.";
+ def RF_promiscuity(self,promiscuous=1):
+ mdmctrl0=self.peek(0x11);
+ print "mdmctrl0 was %04x" % mdmctrl0;
+ mdmctrl0=mdmctrl0&(~0x800);
+ print "mdmctrl0 is now %04x" % mdmctrl0;
+ self.poke(0x11,mdmctrl0);
+ return;
+
packetlen=16;
def RF_setpacketlen(self,len=16):
"""Set the number of bytes in the expected payload."""