GoodFETCCSPI txtoscount (TinyOS CountToRadio): user specify on a channel, and then...
[goodfet] / client / goodfet.ccspi
index c3b7ce2..5bc7968 100755 (executable)
@@ -23,6 +23,7 @@ if(len(sys.argv)==1):
     
     print "\n%s rssi" % sys.argv[0];
     print "%s sniff [chan]" % sys.argv[0];
     
     print "\n%s rssi" % sys.argv[0];
     print "%s sniff [chan]" % sys.argv[0];
+    print "%s bsniff [chan]" % sys.argv[0];
     print "%s sniffdissect" % sys.argv[0];
     
     sys.exit();
     print "%s sniffdissect" % sys.argv[0];
     
     sys.exit();
@@ -91,6 +92,7 @@ if(sys.argv[1]=="rssi"):
 if(sys.argv[1]=="sniff" or sys.argv[1]=="sniffdissect"):
     #Promiscuous mode.
     client.RF_promiscuity(1);
 if(sys.argv[1]=="sniff" or sys.argv[1]=="sniffdissect"):
     #Promiscuous mode.
     client.RF_promiscuity(1);
+    client.RF_autocrc(0);
     
     if len(sys.argv)>2:
         freq=eval(sys.argv[2]);
     
     if len(sys.argv)>2:
         freq=eval(sys.argv[2]);
@@ -111,6 +113,29 @@ if(sys.argv[1]=="sniff" or sys.argv[1]=="sniffdissect"):
         else:
             client.printpacket(packet);
         sys.stdout.flush();
         else:
             client.printpacket(packet);
         sys.stdout.flush();
+if(sys.argv[1]=="bsniff"):
+    #Just broadcast.
+    client.RF_promiscuity(0);
+    client.RF_setsmac(0xFFFFFFFF);
+    client.RF_autocrc(1);
+    
+    if len(sys.argv)>2:
+        freq=eval(sys.argv[2]);
+        if freq>100:
+            client.RF_setfreq(freq);
+        else:
+            client.RF_setchan(freq);
+    client.CC_RFST_RX();
+    print "Listening as %010x on %i MHz" % (client.RF_getsmac(),
+                                            client.RF_getfreq()/10**6);
+    #Now we're ready to get packets.
+    while 1:
+        packet=None;
+        while packet==None:
+            packet=client.RF_rxpacket();
+        client.printpacket(packet);
+        sys.stdout.flush();
+
 if(sys.argv[1]=="txtest"):
     if len(sys.argv)>2:
         freq=eval(sys.argv[2]);
 if(sys.argv[1]=="txtest"):
     if len(sys.argv)>2:
         freq=eval(sys.argv[2]);
@@ -127,6 +152,98 @@ if(sys.argv[1]=="txtest"):
                             0xff, 0xff, 0xff, 0xff,
                             0xde, 0xad, 0xbe, 0xef,
                             0xba, 0xbe, 0xc0]);
                             0xff, 0xff, 0xff, 0xff,
                             0xde, 0xad, 0xbe, 0xef,
                             0xba, 0xbe, 0xc0]);
+if(sys.argv[1]=="txtoscount"):
+    '''
+    Clone of what TinyOS's BlinkToLED demo code does.
+    Specify a channel a TinyOS mote programmed with BlinkToLED is on, and this will act as the second device.
+    '''
+    if (len(sys.argv)<=3):
+        print "Provide -r to work via replays or -i to work via incrementing itself.";
+        sys.exit(1);
+    if (sys.argv[3]=="-r"):
+        client.RF_promiscuity(1);
+    client.RF_autocrc(1);
+    if len(sys.argv)>2:
+        freq=eval(sys.argv[2]);
+        if freq>100:
+            client.RF_setfreq(freq);
+        else:
+            client.RF_setchan(freq);
+    if (sys.argv[3]=="-r"):
+        client.CC_RFST_RX();
+        print "Listening as %010x on %i MHz" % (client.RF_getsmac(), client.RF_getfreq()/10**6);
+    print "Transmitting like the TinyOS CountToRadio program on %i MHz" % (client.RF_getfreq()/10**6);
+    if (sys.argv[3]=="-i"):
+        i = 0;
+        countpkt = [0x0f, 0x41, 0x88, 0xFF, 0x22, 0x00, 0xff, 0xff, 0x01, 0x00, 0x3f, 0x06, 0x00, 0xFF];
+    while 1:
+        if (sys.argv[3]=="-r"): #give -r to do via replays from the other device
+            packet=None;
+            while packet==None:
+                packet=client.RF_rxpacket();
+            #print "Recd:",
+            #client.printpacket(packet);
+            pkt = packet[:14];
+            #print "Sent:",
+            #client.printpacket(pkt)
+            client.RF_txpacket(pkt);
+        elif (sys.argv[3]=="-i"): #give -i to have it increment and send
+            #Use this code for it to actually do increments itself:
+            pkt = countpkt[:];
+            pkt[3] = i;
+            pkt[13] = i+1;
+            #for j in pkt:
+            #    print hex(j)[2:],;
+            #print;
+            client.RF_txpacket(pkt);
+            if i >= 31: i = 0;
+            else:       i += 1;
+            time.sleep(0.5);
+
+if(sys.argv[1]=="txpiptest"):# or sys.argv[1]=="txpipscapy"):
+    if len(sys.argv)>2:
+        freq=eval(sys.argv[2]);
+        if freq>100:
+            client.RF_setfreq(freq);
+        else:
+            client.RF_setchan(freq);
+    print "Transmitting on as %010x on %i MHz" % (
+        client.RF_getsmac(),
+        client.RF_getfreq()/10**6);
+    
+    client.RF_setsync(0xFFFF);
+    
+    while 1:
+        client.RF_txpacket([
+                0x7f, 
+                #Real header, must begin with SFD.
+                0x00, 0x00, 0x00,
+                0x00, 0xA7,
+                
+                #Length
+                0x1f, 0x01, 0x08, 0x82,
+                0xDF, 0xff, 0xff, 0xff,
+                0xde, 0xad, 0xbe, 0xef,
+                0xba, 0xbe, 0xc0,
+                
+                #Preamble
+                0x00, 0x00, 0x00,
+                #SFD
+                0x00, 0xA7,  #CC2420 SFD
+                #Packet In Packet
+                0x0f, 0x01, 0x08, 0x82,
+                0xff, 0xff, 0xff, 0xff,
+                0xde, 0xad, 0xbe, 0xef,
+                0xba, 0xbe, 0xc0,
+                
+                0xff, 0xff, 0xff, 0xff,
+                0xff, 0xff, 0xff, 0xff,
+                0xff, 0xff, 0xff, 0xff,
+                0xff, 0xff, 0xff, 0xff,
+                0xff, 0xff, 0xff, 0xff,
+                0xff, 0xff, 0xff, 0xff,
+                0xff, 0xff, 0xff, 0xff,
+                ]);
 
 if(sys.argv[1]=="peek"):
     start=0x0000;
 
 if(sys.argv[1]=="peek"):
     start=0x0000;