From: travisutk Date: Mon, 21 Feb 2011 04:22:57 +0000 (+0000) Subject: Better sniffing of 802.15.4 in CCSPI, but the length is still wrong. X-Git-Url: http://git.rot13.org/?p=goodfet;a=commitdiff_plain;h=9a334c8d47da8f96662e1fa2c424d383004ab873 Better sniffing of 802.15.4 in CCSPI, but the length is still wrong. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@930 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- diff --git a/client/GoodFETCC.py b/client/GoodFETCC.py index fcb5311..abbe115 100644 --- a/client/GoodFETCC.py +++ b/client/GoodFETCC.py @@ -125,7 +125,7 @@ class GoodFETCC(GoodFET): return hz; def RF_getchannel(self): - """Get the frequency in Hz.""" + """Get the hex channel.""" #FIXME CC1110 specific freq=0; try: diff --git a/client/GoodFETCCSPI.py b/client/GoodFETCCSPI.py index 2e69d46..0ca276b 100644 --- a/client/GoodFETCCSPI.py +++ b/client/GoodFETCCSPI.py @@ -130,7 +130,7 @@ class GoodFETCCSPI(GoodFET): 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): @@ -139,6 +139,27 @@ class GoodFETCCSPI(GoodFET): 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 @@ -147,7 +168,7 @@ class GoodFETCCSPI(GoodFET): 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: diff --git a/client/goodfet.ccspi b/client/goodfet.ccspi index b487a6c..d374625 100755 --- a/client/goodfet.ccspi +++ b/client/goodfet.ccspi @@ -16,19 +16,21 @@ def printpacket(packet): 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 @@ -72,11 +74,12 @@ if(sys.argv[1]=="rssi"): 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); diff --git a/firmware/apps/radios/ccspi.c b/firmware/apps/radios/ccspi.c index cc44d4b..d7fba81 100644 --- a/firmware/apps/radios/ccspi.c +++ b/firmware/apps/radios/ccspi.c @@ -141,18 +141,22 @@ void ccspi_handle_fn( uint8_t const app, 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> 8) | \