return hz;
def RF_getchannel(self):
- """Get the frequency in Hz."""
+ """Get the hex channel."""
#FIXME CC1110 specific
freq=0;
try:
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):
implementation works by comparing the buffer to the older
contents.
"""
+
+ #Switch to RX Mode.
+ #Should happen earlier?
+ self.strobe(0x03); #SRXON
+ self.strobe(0x08); #SFLUSHRX
+
+ data="\0";
+ self.data=data;
+ self.writecmd(self.CCSPIAPP,0x80,len(data),data);
+ buffer=self.data;
+
+ self.lastpacket=buffer;
+ if(buffer==[]):
+ 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=self.trans(buffer);
new=False;
- for foo in range(2,20):
+ for foo in range(0,ord(buffer[0])):
if buffer[foo]!=self.lastpacket[foo]:
new=True;
if not new:
s="";
i=0;
for foo in packet:
- i=i+1;
- if i>ord(packet[1])+2: break;
- if i<2: continue;
s="%s %02x" % (s,ord(foo));
- print "%s" % s;
+ print "#%s" % s;
if(len(sys.argv)==1):
print "Usage: %s verb [objects]\n" % sys.argv[0];
+ print "%s info" % sys.argv[0];
print "%s regs" % sys.argv[0];
print "%s test" % sys.argv[0];
print "%s peek 0x$start [0x$stop]" % sys.argv[0];
print "%s poke 0x$adr 0x$val" % sys.argv[0];
+
+ print "\n%s rssi" % sys.argv[0];
+ print "%s sniff" % sys.argv[0];
+
sys.exit();
#Initialize FET and set baud rate
string=("%s."%string);
print "%02x %04i %s" % (rssi,rssi, string);
if(sys.argv[1]=="sniff"):
- #if len(sys.argv)>2:
- #print "Set MAC to %s" % sys.argv[2];
- #client.tune(sys.argv[2]);
- #client.RF_setmaclen(5);
-
+ if len(sys.argv)>2:
+ freq=eval(sys.argv[2]);
+ if freq>100:
+ client.RF_setfreq(freq);
+ else:
+ print "Channels not yet supported."
client.CC_RFST_RX();
print "Listening as %010x on %i MHz" % (client.RF_getsmac(),
client.RF_getfreq()/10**6);
case CCSPI_RX:
#ifdef FIFOP
//Wait for any incoming packet to finish.
+ //while(!SFD);
while(SFD);
+ delay(1000);
+
//Is there a packet?
- if((!SFD)&FIFOP){
+ if((!SFD)){
//Get the packet.
CLRSS;
- ccspitrans8(CCSPI_RXFIFO);
- for(i=0;i<32;i++)
+ //ccspitrans8(CCSPI_RXFIFO);
+ ccspitrans8(0x3F|0x40);
+ cmddata[1]=0xff; //to be replaced with length
+ for(i=0;i<cmddata[1];i++)
cmddata[i]=ccspitrans8(0xde);
SETSS;
- //no break
- txdata(app,verb,32);
+ txdata(app,verb,cmddata[0]);
}else{
//No packet.
txdata(app,verb,0);
ccspitrans8(CCSPI_SFLUSHRX);
SETSS;
- //Return the packet.
- txdata(app,verb,32);
+ txdata(app,verb,0);
break;
case CCSPI_REFLEX:
debugstr("Coming soon.");
txdata(app,verb,0);
break;
- case CCSPI_TX:
case CCSPI_TX_FLUSH:
+ //Flush the buffer.
+ CLRSS;
+ ccspitrans8(CCSPI_SFLUSHTX);
+ SETSS;
+
+ txdata(app,verb,0);
+ break;
+ case CCSPI_TX:
default:
debugstr("Not yet supported.");
txdata(app,verb,0);
//CC2420 signals
#define SFD (P4IN&BIT1)
-#define FIFOP (P4IN&BIT0)
+#define FIFOP (P1IN&BIT0)
+#define FIFO (P1IN&BIT3)
// network byte order converters
#define htons(x) ((((uint16_t)(x) & 0xFF00) >> 8) | \