def printpacket(packet):
s="";
i=0;
+ #print "Printing packet."
for foo in packet:
i=i+1;
- #if i>client.packetlen: break;
- s="%s %02x" % (s,ord(foo));
+ #if i>packet[0]+1: break;
+ s="%s %02x" % (s,foo);
print "%s" %s;
+def handlesimplicitipacket(packet):
+ s="";
+ i=0;
+
+ for foo in packet:
+ i=i+1;
+ #if i>packet[0]+1: break;
+ s="%s %02x" % (s,foo);
+ print "\n%s" %s;
+
+
+ len=packet[0];
+ if len<12: return;
+
+ dst=[packet[1],
+ packet[2],
+ packet[3],
+ packet[4]];
+ src=[packet[5],
+ packet[6],
+ packet[7],
+ packet[8]];
+ port=packet[9];
+ info=packet[10];
+ seq=packet[11];
+ #payload begins at byte 12.
+
+
+
+ if port==0x03:
+ #print "Join request.";
+ if packet[12]!=1:
+ print "Not a join request. WTF?";
+ return;
+ tid=packet[13];
+ reply=[0x12, #reply is one byte shorter
+ src[0], src[1], src[2], src[3],
+ 1,1,1,1, #my address
+ port, 0x21, seq,
+ 0x81, tid, #reply, tid
+
+ 1,1,1,1,
+ #4,3,2,1, #default join token
+ #8,7,6,5, #default link token
+ #0xFF,0xFF,0xFF,0xFF,
+ 0x00]; #no security
+ printpacket(reply);
+ client.RF_txpacket(reply);
+
+ elif port==0x04:
+ print "Security request.";
+ elif port==0x05:
+ print "Frequency request.";
+ elif port==0x06:
+ print "Management request.";
+ else:
+ print "Unknown Port %02x" %port;
+
if(len(sys.argv)==1):
print "Usage: %s verb [objects]\n" % sys.argv[0];
print "%s erase" % sys.argv[0];
if len(sys.argv)>2:
client.RF_setfreq(eval(sys.argv[2]));
client.RF_carrier();
- #printconfig();
- #print "\nHolding a carrier wave.";
while(1):
time.sleep(1);
threshold=200;
if len(sys.argv)>2:
client.RF_setfreq(eval(sys.argv[2]));
- print "Listening on %f MHz." % (client.RF_getfreq()/10**6);
+ print "Listening on %3.6f MHz." % (client.RF_getfreq()/10.0**6);
#FIXME, ugly
RFST=0xDFE1
if(sys.argv[1]=="sniffsimpliciti"):
#TODO remove all poke() calls.
+ region="us";
+ if len(sys.argv)>2:
+ region=sys.argv[2];
client.CC1110_crystal();
client.RF_idle();
+ client.config_simpliciti(region);
- client.config_simpliciti("lf");
- #client.RF_setfreq(2481 * 10**6);
-
- #OpenBeacon defines these in little endian as follows.
- #client.RF_setmaclen(5); # SETUP_AW for 5-byte addresses.
- #0x01, 0x02, 0x03, 0x02, 0x01
- #client.RF_setsmac(0x0102030201);
- #'O', 'C', 'A', 'E', 'B'
- #client.RF_settmac(0x424541434F);
+ print "Listening as %x on %f MHz" % (client.RF_getsmac(),
+ client.RF_getfreq()/10.0**6);
+ #Now we're ready to get packets.
+ while 1:
+ packet=None;
+ while packet==None:
+ packet=client.RF_rxpacket();
+ printpacket(packet);
+ sys.stdout.flush();
+
+if(sys.argv[1]=="simpliciti"):
+ #TODO remove all poke() calls.
+ region="us";
+ if len(sys.argv)>2:
+ region=sys.argv[2];
- #Set packet length of 16.
- #client.RF_setpacketlen(16);
+ client.CC1110_crystal();
+ client.RF_idle();
+ client.config_simpliciti(region);
- print "Listening as %010x on %i MHz" % (client.RF_getsmac(),
- client.RF_getfreq()/10**6);
+ print "Listening as %x on %f MHz" % (client.RF_getsmac(),
+ client.RF_getfreq()/10.0**6);
#Now we're ready to get packets.
while 1:
packet=None;
while packet==None:
- #time.sleep(0.1);
packet=client.RF_rxpacket();
- printpacket(packet);
+ handlesimplicitipacket(packet);
sys.stdout.flush();
-if(sys.argv[1]=="explore"):
- print "Exploring undefined commands."
- print "Status: %s" %client.status();
-
- cmd=0x04; #read status
- for foo in range(0,0x5):
- client.CCcmd([(0x0F<<3)|(0x00)|0x03,0x09<<3]);
- print "Status %02x: %s" % (foo,client.status());
- for foo in range(0,3):
- print "PC: %04x" % client.CCgetPC();
if(sys.argv[1]=="term"):
GoodFETConsole(client).run();
if(sys.argv[1]=="test"):