added fast packet sniffing option -x. doubles RX speed but could easily result in...
[goodfet] / client / goodfet.monitor
1 #!/usr/bin/env python
2
3 import sys;
4 import binascii;
5
6 from GoodFET import GoodFET;
7 from intelhex import IntelHex16bit;
8
9 if(len(sys.argv)==1):
10     print "Usage: %s verb [objects]\n" % sys.argv[0];
11     print "%s test" % sys.argv[0];
12     print "%s dump $foo.hex [0x$start 0x$stop]" % sys.argv[0];
13     print "%s ivt" % sys.argv[0];
14     print "%s peek [0x$start 0x$stop]" % sys.argv[0];
15     print "%s verify $foo.hex [0x$start 0x$stop]" % sys.argv[0];
16     print "%s ramfill" % sys.argv[0];
17     print "%s ramdepth" % sys.argv[0];
18     print "%s info" % sys.argv[0];
19     print "%s call 0x$start" % sys.argv[0];
20     print "%s exec '0x35 0x00 0x..'" % sys.argv[0];
21     print "%s listapps [full]" % sys.argv[0]
22     print "%s testleds" % sys.argv[0]
23     sys.exit();
24
25 #Initialize FET and set baud rate
26 client=GoodFET();
27 client.serInit()
28 #client.verbose=1;
29
30 if(sys.argv[1]=="on"):
31     client.dir(0xFF);
32     client.out(0xFF);
33 if(sys.argv[1]=="off"):
34     client.out(0x00);
35
36 if(sys.argv[1]=="glitchtest"):
37     client.writecmd(client.GLITCHAPP,0x20,0,None);
38
39 if(sys.argv[1]=="call"):
40     adr=int(sys.argv[2],16);
41     print "Calling %04x" % adr;
42     client.call(adr);
43 if(sys.argv[1]=="exec"):
44     code="";
45     for foo in sys.argv[2].split(" "):
46         code+=chr(int(foo,16));
47     code+="\x30\x41";
48     client.execute(code);
49     
50 if(sys.argv[1]=="info"):
51     client.monitor_info()
52 if(sys.argv[1]=="infotest"):
53     for foo in range(0,100):
54         client.monitor_info()
55
56 if(sys.argv[1]=="clocktest"):
57     print "GoodFET with %s MCU" % client.infostring();
58     clocking=client.monitorgetclock();
59     print "Clocked at 0x%04x" % clocking;
60     for foo in range(1,50):
61         client.monitorsetclock(clocking+foo);
62         print "+0x%04x: %s" % (foo,client.infostring());
63         client.monitorsetclock(clocking-foo);
64         print "-0x%04x: %s" % (foo,client.infostring());
65         
66 if(sys.argv[1]=="listapps" or sys.argv[1]=="apps"):
67     full = (len(sys.argv) > 2) and (sys.argv[2]=="full")
68     client.monitor_list_apps(full);
69     
70 if(sys.argv[1]=="ramfill"):
71     client.monitor_ram_pattern();
72 if(sys.argv[1]=="ramdepth"):
73     print "0x%04x RAM bytes free." % client.monitor_ram_depth();
74 if(sys.argv[1]=="test"):
75     client.monitortest();
76 if(sys.argv[1]=="findbaud"):
77     client.findbaud();
78 if(sys.argv[1]=="dump"):
79     f = sys.argv[2];
80     start=0x0200;
81     stop=0xFFFF;
82     if(len(sys.argv)>3):
83         start=int(sys.argv[3],16);
84     if(len(sys.argv)>4):
85         stop=int(sys.argv[4],16);
86     
87     print "Dumping from %04x to %04x as %s." % (start,stop,f);
88     h = IntelHex16bit(None);
89     i=start;
90     while i<stop:
91         h[i>>1]=client.peek16(i);
92         if(i%0x100==0):
93             print "Dumped %04x."%i;
94         i+=2;
95     h.write_hex_file(f);
96 if(sys.argv[1]=="erase"):
97     client.masserase();
98 if(sys.argv[1]=="ivt"):
99     client.dumpmem(0xFFE0,0xFFFF);
100
101 if(sys.argv[1]=="peek"):
102     start=0xFFE0;
103     stop=0xFFFF;
104     if(len(sys.argv)>2):
105         start=int(sys.argv[2],16);
106         stop=start+1
107     if(len(sys.argv)>3):
108         stop=int(sys.argv[3],16);
109     
110     client.dumpmem(start,stop);
111 if(sys.argv[1]=="verify"):
112     f=sys.argv[2];
113     start=0;
114     stop=0xFFFF;
115     if(len(sys.argv)>3):
116         start=int(sys.argv[3],16);
117     if(len(sys.argv)>4):
118         stop=int(sys.argv[4],16);
119     
120     h = IntelHex16bit(f);
121     for i in h._buf.keys():
122         if(i>=start and i<stop and i&1==0):
123             peek=client.peek(i)
124             if(h[i>>1]!=peek):
125                 print "ERROR at %04x, found %04x not %04x"%(i,peek,h[i>>1]);
126             if(i%0x100==0):
127                 print "%04x" % i;
128
129 if(sys.argv[1]=="testleds"):
130     client.testleds();