From ef478608abc99029a46aaf682c0e2022a70877ed Mon Sep 17 00:00:00 2001 From: travisutk Date: Mon, 21 Feb 2011 04:40:22 +0000 Subject: [PATCH] Reliable 802.15.4 sniffing on a Telos B. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@931 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- client/GoodFETCCSPI.py | 14 ++++++++++---- client/goodfet.ccspi | 4 +++- firmware/apps/radios/ccspi.c | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/client/GoodFETCCSPI.py b/client/GoodFETCCSPI.py index 0ca276b..1d27c24 100644 --- a/client/GoodFETCCSPI.py +++ b/client/GoodFETCCSPI.py @@ -140,9 +140,7 @@ class GoodFETCCSPI(GoodFET): contents. """ - #Switch to RX Mode. - #Should happen earlier? - self.strobe(0x03); #SRXON + # TODO -- Flush only if there's an overflow. self.strobe(0x08); #SFLUSHRX data="\0"; @@ -151,7 +149,7 @@ class GoodFETCCSPI(GoodFET): buffer=self.data; self.lastpacket=buffer; - if(buffer==[]): + if(len(buffer)==0): return None; return buffer; def RF_rxpacket_old(self): @@ -180,6 +178,14 @@ class GoodFETCCSPI(GoodFET): 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.""" diff --git a/client/goodfet.ccspi b/client/goodfet.ccspi index d374625..b2a33ee 100755 --- a/client/goodfet.ccspi +++ b/client/goodfet.ccspi @@ -74,6 +74,9 @@ if(sys.argv[1]=="rssi"): string=("%s."%string); print "%02x %04i %s" % (rssi,rssi, string); if(sys.argv[1]=="sniff"): + #Promiscuous mode. + client.RF_promiscuity(1); + if len(sys.argv)>2: freq=eval(sys.argv[2]); if freq>100: @@ -88,7 +91,6 @@ if(sys.argv[1]=="sniff"): while 1: packet=None; while packet==None: - #time.sleep(0.1); packet=client.RF_rxpacket(); printpacket(packet); sys.stdout.flush(); diff --git a/firmware/apps/radios/ccspi.c b/firmware/apps/radios/ccspi.c index d7fba81..ec0e207 100644 --- a/firmware/apps/radios/ccspi.c +++ b/firmware/apps/radios/ccspi.c @@ -147,7 +147,7 @@ void ccspi_handle_fn( uint8_t const app, //Is there a packet? - if((!SFD)){ + if((!SFD) && FIFOP){ // &&FIFOP to do address verification. //Get the packet. CLRSS; //ccspitrans8(CCSPI_RXFIFO); -- 2.20.1