Better sniffing of 802.15.4 in CCSPI, but the length is still wrong.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Mon, 21 Feb 2011 04:22:57 +0000 (04:22 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Mon, 21 Feb 2011 04:22:57 +0000 (04:22 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@930 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

client/GoodFETCC.py
client/GoodFETCCSPI.py
client/goodfet.ccspi
firmware/apps/radios/ccspi.c
firmware/platforms/telosb.h

index fcb5311..abbe115 100644 (file)
@@ -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:
index 2e69d46..0ca276b 100644 (file)
@@ -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:
index b487a6c..d374625 100755 (executable)
@@ -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);
index cc44d4b..d7fba81 100644 (file)
@@ -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<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);
@@ -168,15 +172,21 @@ void ccspi_handle_fn( uint8_t const app,
     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);
index e69faa7..320ad11 100644 (file)
@@ -67,7 +67,8 @@
 
 //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) | \