Improving CC2420 packet reception.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Mon, 21 Feb 2011 03:51:48 +0000 (03:51 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Mon, 21 Feb 2011 03:51:48 +0000 (03:51 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@929 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

firmware/apps/radios/ccspi.c
firmware/include/ccspi.h
firmware/platforms/telosb.h

index dd86e8c..cc44d4b 100644 (file)
@@ -139,14 +139,28 @@ void ccspi_handle_fn( uint8_t const app,
     txdata(app,verb,0);
     break;
   case CCSPI_RX:
-    //Get the packet.
-    CLRSS;
-    ccspitrans8(CCSPI_RXFIFO);
-    for(i=0;i<32;i++)
-      cmddata[i]=ccspitrans8(0xde);
-    SETSS;
-    //no break
-    txdata(app,verb,32);
+    #ifdef FIFOP
+    //Wait for any incoming packet to finish.
+    while(SFD);
+    
+    //Is there a packet?
+    if((!SFD)&FIFOP){
+      //Get the packet.
+      CLRSS;
+      ccspitrans8(CCSPI_RXFIFO);
+      for(i=0;i<32;i++)
+       cmddata[i]=ccspitrans8(0xde);
+      SETSS;
+      //no break
+      txdata(app,verb,32);
+    }else{
+      //No packet.
+      txdata(app,verb,0);
+    }
+    #else
+    debugstr("Can't RX a packet with SFD and FIFOP definitions.");
+    txdata(app,NOK,0);
+    #endif
     break;
   case CCSPI_RX_FLUSH:
     //Flush the buffer.
@@ -157,6 +171,10 @@ void ccspi_handle_fn( uint8_t const app,
     //Return the packet.
     txdata(app,verb,32);
     break;
+  case CCSPI_REFLEX:
+    debugstr("Coming soon.");
+    txdata(app,verb,0);
+    break;
   case CCSPI_TX:
   case CCSPI_TX_FLUSH:
   default:
index a0e787e..a8f948f 100644 (file)
@@ -20,6 +20,8 @@
 #define CCSPI_RX_FLUSH 0x82
 //Flush TX
 #define CCSPI_TX_FLUSH 0x83
+//Reflexive jam.
+#define CCSPI_REFLEX 0xA0
 
 
 //Bit fields for command word.
index 98b94bc..e69faa7 100644 (file)
@@ -65,6 +65,9 @@
 #define CLRCE P4OUT&=~BIT6
 #define DIRCE P4DIR|=BIT6
 
+//CC2420 signals
+#define SFD   (P4IN&BIT1)
+#define FIFOP (P4IN&BIT0) 
 
 // network byte order converters
 #define htons(x) ((((uint16_t)(x) & 0xFF00) >> 8) | \