Moving CCSPI reflexive jamming to its own channel.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Sun, 12 Feb 2012 17:22:05 +0000 (17:22 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Sun, 12 Feb 2012 17:22:05 +0000 (17:22 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@1088 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

firmware/apps/radios/ccspi.c

index 4ab98fd..6644a76 100644 (file)
@@ -87,6 +87,64 @@ u8 ccspitrans8(u8 byte){
 }
 
 
 }
 
 
+//! Reflexively jam on the present channel.
+void ccspireflexjam(){
+  unsigned long i;
+  #if defined(FIFOP) && defined(SFD) && defined(FIFO) && defined(PLED2DIR) && defined(PLED2PIN) && defined(PLED2OUT)
+    debugstr("Reflex jamming until reset.");
+    txdata(CCSPI,CCSPI_REFLEX,1);  //Let the client continue its business.
+    while(1) {
+      //Wait until a packet is received
+      while(!SFD){
+       //Has there been an overflow in the RX buffer?
+        if((!FIFO)&&FIFOP){
+          debugstr("Clearing RX overflow");
+          CLRSS;
+          ccspitrans8(0x08); //SFLUSHRX
+          SETSS;
+        }
+      }
+      //Turn on LED 2 (green) as signal
+      PLED2DIR |= PLED2PIN;
+      PLED2OUT &= ~PLED2PIN;
+
+      //Put radio in TX mode
+      CLRSS;
+      ccspitrans8(0x04);
+      SETSS;
+
+      //Load the jamming packet.
+      //Note: attempts to preload this actually slowed the jam time down from 7 to 9 bytes.
+      CLRSS;
+      ccspitrans8(CCSPI_TXFIFO);
+      char pkt[15] = {0x0f, 0x01, 0x08, 0x82, 0xff, 0xff, 0xff, 0xff, 0xde, 0xad, 0xbe, 0xef, 0xba, 0xbe, 0xc0};
+      //char pkt[12] = {0x0c, 0x01, 0x08, 0x82, 0xff, 0xff, 0xff, 0xff, 0xde, 0xad, 0xbe, 0xef};
+      for(i=0;i<pkt[0];i++)
+       ccspitrans8(pkt[i]);
+      SETSS;
+
+      //Transmit the packet.
+      CLRSS;
+      ccspitrans8(0x04); //STXON
+      SETSS;
+      msdelay(100);      //Instead of waiting for pulse on SFD
+      //Flush TX buffer.
+      CLRSS;
+      ccspitrans8(0x09); //SFLUSHTX
+      SETSS;
+
+      //Turn off LED 2 (green) as signal
+      PLED2DIR |= PLED2PIN;
+      PLED2OUT |= PLED2PIN;
+    }
+#else
+    debugstr("Can't reflexively jam without SFD, FIFO, FIFOP, and P2LEDx definitions - try using telosb platform.");
+    txdata(app,NOK,0);
+#endif
+}
+
+
+
 //! Writes a register
 u8 ccspi_regwrite(u8 reg, const u8 *buf, int len){
   CLRSS;
 //! Writes a register
 u8 ccspi_regwrite(u8 reg, const u8 *buf, int len){
   CLRSS;
@@ -190,58 +248,8 @@ void ccspi_handle_fn( uint8_t const app,
     break;
 
   case CCSPI_REFLEX:
     break;
 
   case CCSPI_REFLEX:
-#if defined(FIFOP) && defined(SFD) && defined(FIFO) && defined(PLED2DIR) && defined(PLED2PIN) && defined(PLED2OUT)
-    //txdata(app,verb,1);  //Let the client continue its business.
-    while(1) {
-      //Wait until a packet is received
-      while(!SFD){
-       //Has there been an overflow in the RX buffer?
-        if((!FIFO)&&FIFOP){
-          debugstr("Clearing RX overflow");
-          CLRSS;
-          ccspitrans8(0x08); //SFLUSHRX
-          SETSS;
-        }
-      }
-      //Turn on LED 2 (green) as signal
-      PLED2DIR |= PLED2PIN;
-      PLED2OUT &= ~PLED2PIN;
-
-      //Put radio in TX mode
-      CLRSS;
-      ccspitrans8(0x04);
-      SETSS;
-
-      //Load the jamming packet.
-      //Note: attempts to preload this actually slowed the jam time down from 7 to 9 bytes.
-      CLRSS;
-      ccspitrans8(CCSPI_TXFIFO);
-      char pkt[15] = {0x0f, 0x01, 0x08, 0x82, 0xff, 0xff, 0xff, 0xff, 0xde, 0xad, 0xbe, 0xef, 0xba, 0xbe, 0xc0};
-      //char pkt[12] = {0x0c, 0x01, 0x08, 0x82, 0xff, 0xff, 0xff, 0xff, 0xde, 0xad, 0xbe, 0xef};
-      for(i=0;i<pkt[0];i++)
-       ccspitrans8(pkt[i]);
-      SETSS;
-
-      //Transmit the packet.
-      CLRSS;
-      ccspitrans8(0x04); //STXON
-      SETSS;
-      msdelay(100);      //Instead of waiting for pulse on SFD
-      //Flush TX buffer.
-      CLRSS;
-      ccspitrans8(0x09); //SFLUSHTX
-      SETSS;
-
-      //Turn off LED 2 (green) as signal
-      PLED2DIR |= PLED2PIN;
-      PLED2OUT |= PLED2PIN;
-    }
-    //TODO the firmware stops staying in this mode after a while, and stops jamming... need to find a fix.
+    ccspireflexjam();
     break;
     break;
-#else
-    debugstr("Can't reflexively jam without SFD, FIFO, FIFOP, and P2LEDx definitions - try using telosb platform.");
-    txdata(app,NOK,0);
-#endif
 
   case CCSPI_REFLEX_AUTOACK:
 #if defined(FIFOP) && defined(SFD) && defined(FIFO) && defined(PLED2DIR) && defined(PLED2PIN) && defined(PLED2OUT)
 
   case CCSPI_REFLEX_AUTOACK:
 #if defined(FIFOP) && defined(SFD) && defined(FIFO) && defined(PLED2DIR) && defined(PLED2PIN) && defined(PLED2OUT)