Reliable 802.15.4 sniffing on a Telos B.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Mon, 21 Feb 2011 04:40:22 +0000 (04:40 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Mon, 21 Feb 2011 04:40:22 +0000 (04:40 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@931 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

client/GoodFETCCSPI.py
client/goodfet.ccspi
firmware/apps/radios/ccspi.c

index 0ca276b..1d27c24 100644 (file)
@@ -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."""
index d374625..b2a33ee 100755 (executable)
@@ -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();
index d7fba81..ec0e207 100644 (file)
@@ -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);