+#!/usr/bin/env python
+#GoodFET zigduino client
+#forked from code by neighbor Travis Goodspeed by bx
+
+import sys, binascii, os, array, time, glob
+
+from GoodFETatmel128 import GoodFETatmel128rfa1
+from intelhex import IntelHex;
+
+
+def printpacket(packet):
+ s="";
+ i=0;
+ for foo in packet:
+ i=i+1;
+ if i>client.packetlen: break;
+ s="%s %02x" % (s,ord(foo));
+ print "%s" % s;
+
+
+mskbstring="";
+oldseq=-1;
+
+#def printconfig():
+# print "Encoding %s" % client.RF_getenc();
+# print "Freq %10i MHz" % (client.RF_getfreq()/10**6);
+# print "Rate %10i kbps" % (client.RF_getrate()/1000);
+# print "PacketLen %02i bytes" % client.RF_getpacketlen();
+# #print "MacLen %2i bytes" % client.RF_getmaclen();
+# print "SMAC 0x%010x" % client.RF_getsmac();
+# print "TMAC 0x%010x" % client.RF_gettmac();
+
+
+if(len(sys.argv)==1):
+ print "Usage: %s verb [objects]\n" % sys.argv[0];
+ #print "%s info" % sys.argv[0];
+ print "%s sniff [channel]\n\tSniffs packets." % sys.argv[0];
+ print "%s beaconreq [channel]\n\tSends out beacons requests" % sys.argv[0];
+ sys.exit();
+
+#Initialize FET and set baud rate
+client=GoodFETatmel128rfa1()
+#client.verbose = True
+client.serInit()
+
+#if(sys.argv[1ce]=="info"):
+# printconfig();
+
+if(sys.argv[1]=="sniff"):
+ client.RF_setup()
+ if len(sys.argv)>2:
+ print "Set channel to %s" % sys.argv[2];
+ client.RF_setchannel(int(sys.argv[2]));
+ #Now we're ready to get packets.
+
+ while 1:
+ packet=None;
+ while packet==None:
+ packet=client.RF_rxpacket();
+ time.sleep(0.4)
+ printpacket(packet);
+ sys.stdout.flush();
+
+if (sys.argv[1]=="beaconreq"):
+ client.RF_setup()
+ if len(sys.argv)>2:
+ print "Set channel to %s" % sys.argv[2];
+ client.RF_setchannel(int(sys.argv[2]));
+ packet="\x03\x08\x46\xff\xff\xff\xff\x07\x13\x33"
+ while 1:
+ client.RX_txpacket(packet)
+ time.sleep(1)