3 #GoodFET Chipcon SPI Client
4 # (C) 2011 Travis Goodspeed
7 #Might be CC2420 Specific
13 from GoodFETCCSPI import GoodFETCCSPI;
16 print "Usage: %s verb [objects]\n" % sys.argv[0];
17 print "%s info" % sys.argv[0];
18 print "%s regs" % sys.argv[0];
19 print "%s test" % sys.argv[0];
20 print "%s peek 0x$start [0x$stop]" % sys.argv[0];
21 print "%s poke 0x$adr 0x$val" % sys.argv[0];
22 print "%s txtest" % sys.argv[0];
24 print "\n%s rssi" % sys.argv[0];
25 print "%s sniff [chan]" % sys.argv[0];
26 print "%s bsniff [chan]" % sys.argv[0];
27 print "%s sniffdissect" % sys.argv[0];
31 #Initialize FET and set baud rate
32 client=GoodFETCCSPI();
39 #Might read as all ones if chip has a startup delay.
41 if(sys.argv[1]=="carrier"):
43 client.RF_setfreq(eval(sys.argv[2]));
49 if(sys.argv[1]=="modulated_spectrum"):
51 client.RF_setfreq(eval(sys.argv[2]));
53 client.RF_modulated_spectrum();
57 if(sys.argv[1]=="info"):
58 print "Found %s" % client.identstr();
59 print "Freq: %05f MHz" % (client.RF_getfreq()/(10**6));
60 print "Status: %s" % client.status();
61 if(sys.argv[1]=="regs"):
62 for adr in range(0x10,0x40): #*1024):
64 print "%04x:=0x%04x" % (adr,val);
65 if(sys.argv[1]=="test"):
66 data=client.trans([0x20, 0xde, 0xad]);
67 print "%02x %02x" % (ord(data[1]), ord(data[2]));
68 data=client.trans([0x40|0x20, 0xde, 0xad]);
69 print "%02x %02x" % (ord(data[1]), ord(data[2]));
70 if(sys.argv[1]=="rssi"):
72 freq=eval(sys.argv[2]);
74 client.RF_setfreq(freq);
76 client.RF_setchan(freq);
77 print "Listening on %f MHz." % (client.RF_getfreq()/10.0**6);
79 client.strobe(0x02); #Calibrate
84 #client.strobe(0x03); #SRXON
85 rssi=client.RF_getrssi();
86 #client.CC_RFST_IDLE(); #idle
89 for foo in range(0,rssi>>2):
90 string=("%s."%string);
91 print "%02x %04i %s" % (rssi,rssi, string);
92 if(sys.argv[1]=="sniff" or sys.argv[1]=="sniffdissect"):
94 client.RF_promiscuity(1);
97 freq=eval(sys.argv[2]);
99 client.RF_setfreq(freq);
101 client.RF_setchan(freq);
103 print "Listening as %010x on %i MHz" % (client.RF_getsmac(),
104 client.RF_getfreq()/10**6);
105 #Now we're ready to get packets.
109 packet=client.RF_rxpacket();
110 if sys.argv[1]=="sniffdissect":
111 client.printdissect(packet);
113 client.printpacket(packet);
115 if(sys.argv[1]=="bsniff"):
117 client.RF_promiscuity(0);
118 client.RF_setsmac(0xFFFFFFFF);
121 freq=eval(sys.argv[2]);
123 client.RF_setfreq(freq);
125 client.RF_setchan(freq);
127 print "Listening as %010x on %i MHz" % (client.RF_getsmac(),
128 client.RF_getfreq()/10**6);
129 #Now we're ready to get packets.
133 packet=client.RF_rxpacket();
134 client.printpacket(packet);
137 if(sys.argv[1]=="txtest"):
139 freq=eval(sys.argv[2]);
141 client.RF_setfreq(freq);
143 client.RF_setchan(freq);
144 print "Transmitting DEADBEEF as %010x on %i MHz" % (
146 client.RF_getfreq()/10**6);
149 client.RF_txpacket([0x0f, 0x01, 0x08, 0x82,
150 0xff, 0xff, 0xff, 0xff,
151 0xde, 0xad, 0xbe, 0xef,
154 if(sys.argv[1]=="txpiptest"):
156 freq=eval(sys.argv[2]);
158 client.RF_setfreq(freq);
160 print "Channels not yet supported."
161 print "Transmitting on as %010x on %i MHz" % (
163 client.RF_getfreq()/10**6);
166 client.RF_txpacket([0x2f, 0x01, 0x08, 0x82,
167 0xff, 0xff, 0xff, 0xff,
168 0xde, 0xad, 0xbe, 0xef,
171 0x00, 0x00, 0x00, 0x00,
173 0x0f, 0x01, 0x08, 0x82,
174 0xff, 0xff, 0xff, 0xff,
175 0xde, 0xad, 0xbe, 0xef,
178 0xff, 0xff, 0xff, 0xff,
179 0xff, 0xff, 0xff, 0xff,
180 0xff, 0xff, 0xff, 0xff,
181 0xff, 0xff, 0xff, 0xff,
182 0xff, 0xff, 0xff, 0xff,
183 0xff, 0xff, 0xff, 0xff,
184 0xff, 0xff, 0xff, 0xff,
187 if(sys.argv[1]=="peek"):
190 start=int(sys.argv[2],16);
193 stop=int(sys.argv[3],16);
194 print "Peeking from %04x to %04x." % (start,stop);
196 print "%04x: 0x%04x" % (start,client.peek(start));
198 if(sys.argv[1]=="poke"):
202 start=int(sys.argv[2],16);
204 val=int(sys.argv[3],16);
205 print "Poking r%02x to become 0x%04x." % (start,val);
207 client.poke(start,val);