ccspi application reflexive jamming and reflexive jamming returning the jammed frame...
authorrmspeers <rmspeers@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Thu, 21 Apr 2011 00:20:21 +0000 (00:20 +0000)
committerrmspeers <rmspeers@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Thu, 21 Apr 2011 00:20:21 +0000 (00:20 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@1004 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

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

index 0283d87..78273ac 100644 (file)
@@ -188,10 +188,23 @@ class GoodFETCCSPI(GoodFET):
     
     def RF_reflexjam(self):
         """Place the device into reflexive jamming mode."""
-        data = ""
+        data = "";
         self.writecmd(self.CCSPIAPP,0xA0,len(data),data);
         return;
 
+    def RF_reflexjam_seq(self):
+        """Place the device into reflexive jamming mode
+           and return the sequence number of the jammed packet."""
+        #TODO make so that this function someone keeps receiving
+        #     the sequence numbers from each jammed frame, or probably
+        #     just make the firmware auto-ack if the frame requests
+        #     an ACK instead of sending data back to client.
+        data = "\0";
+        self.data = data;
+        self.writecmd(self.CCSPIAPP,0xA1,len(data),data);
+        buffer = self.data;
+        return ord(buffer[3]);
+
     def RF_modulated_spectrum(self):
         """Hold a carrier wave on the present frequency."""
         # print "Don't know how to hold a carrier.";
index 74ec740..f681cad 100755 (executable)
@@ -57,6 +57,7 @@ if(sys.argv[1]=="modulated_spectrum"):
         time.sleep(1);
 
 if(sys.argv[1]=="reflexjam"):
+    #Setup the radio to listen promiscously on a frequency
     client.RF_promiscuity(1);
     client.RF_autocrc(0);
     if len(sys.argv)>2:
@@ -66,8 +67,8 @@ if(sys.argv[1]=="reflexjam"):
         else:
             client.RF_setchan(freq);
     client.CC_RFST_RX();
-    print "Listening as %010x on %i MHz" % (client.RF_getsmac(),
-                                            client.RF_getfreq()/10**6);
+    print "Reflexively jamming on %i MHz" % (client.RF_getfreq()/10**6);
+    #Now we let the firmware take over, watching for packets and jamming them.
     client.RF_reflexjam();
 
 if(sys.argv[1]=="info"):
index 83dfa37..c2eb70f 100644 (file)
@@ -12,7 +12,7 @@
 
 #include "platform.h"
 #include "command.h"
-
+#include <stdlib.h> //added for itoa
 #include <signal.h>
 #include <io.h>
 #include <iomacros.h>
@@ -188,10 +188,7 @@ void ccspi_handle_fn( uint8_t const app,
     break;
 
   case CCSPI_REFLEX:
-    debugstr("Beta implementation.");
-    cmddata[0] = 1;
-    txdata(app,verb,cmddata[0]+1);
-
+    txdata(app,verb,1);  //Just sending some response back to client
     while(1) {
         //Wait until a packet is received
         while(!SFD);
@@ -199,40 +196,99 @@ void ccspi_handle_fn( uint8_t const app,
            PLED2DIR |= PLED2PIN;
            PLED2OUT &= ~PLED2PIN;
 
-        //Switch the radio to TX mode
-        CLRSS;  //Drop !SS to begin transaction.
+        //Put radio in TX mode
+        CLRSS;
         ccspitrans8(0x04);
-        SETSS;  //Raise !SS to end transaction.
-        //txdata(app,verb,len);
+        SETSS;
 
-        //Load the packet.
+        //Load the jamming packet.
+        //TODO try to preload this to get faster effects
         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;
-        debugstr("Packet loaded for tx.");
+
         //Transmit the packet.
         CLRSS;
         ccspitrans8(0x04); //STXON
         SETSS;
-        //Wait for the pulse on SFD, after which the packet has been sent.
-        //while(!SFD);
-        //while(SFD);
-        msdelay(300);
+        msdelay(100);      //Instead of waiting for pulse on SFD
         //Flush TX buffer.
         CLRSS;
         ccspitrans8(0x09); //SFLUSHTX
         SETSS;
 
-        //while(SFD);
-        //msdelay(200);
         //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!
+    //TODO the firmware stops staying in this mode after a while, and stops jamming... need to find a fix.
+    break;
+
+  case CCSPI_REFLEX_SEQNUM:
+    //char byte[4];
+    while(1) {
+        //Has there been an overflow in the RX buffer?
+        //TODO do we really need to check this??
+        if((!FIFO)&&FIFOP){
+          //debugstr("Clearing overflow");
+          CLRSS;
+          ccspitrans8(0x08); //SFLUSHRX
+          SETSS;
+        }
+
+        //Wait until a packet is received
+        while(!SFD);
+        //Turn on LED 2 (green) as signal
+           PLED2DIR |= PLED2PIN;
+           PLED2OUT &= ~PLED2PIN;
+
+        //Get the orignally received packet, up to the seqnum field.
+        CLRSS;
+        ccspitrans8(CCSPI_RXFIFO | 0x40);
+        for(i=0;i<4;i++)
+            cmddata[i]=ccspitrans8(0xde);
+        SETSS;
+        //Flush RX buffer.
+        CLRSS;
+        ccspitrans8(0x08); //SFLUSHRX
+        SETSS;
+        //Send the sequence number of the jammed packet back to the client
+        //itoa(cmddata[3], byte, 16);
+        //debugstr(byte);
+        txdata(app,verb,cmddata[3]);
+
+        //Put radio in TX mode
+        CLRSS;
+        ccspitrans8(0x04);
+        SETSS;
+
+        //Load the packet.
+        CLRSS;
+        ccspitrans8(CCSPI_TXFIFO);
+        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(200);       //Instead of examining SFD line status
+        //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.
     break;
 
   case CCSPI_TX_FLUSH:
@@ -281,6 +337,5 @@ void ccspi_handle_fn( uint8_t const app,
     txdata(app,verb,0);
     break;
   }
-  
 
 }
index a8f948f..cec339c 100644 (file)
@@ -22,6 +22,8 @@
 #define CCSPI_TX_FLUSH 0x83
 //Reflexive jam.
 #define CCSPI_REFLEX 0xA0
+//Reflexive jam that returns jammed frame's seqnum.
+#define CCSPI_REFLEX_SEQNUM 0xA1
 
 
 //Bit fields for command word.