930d8d91419e2418d2e2ee08881cc2fc1f510570
[goodfet] / client / goodfet.cc
1 #!/usr/bin/env python
2
3 import sys;
4 import binascii;
5
6 from GoodFET import GoodFETCC;
7 from intelhex import IntelHex;
8
9
10 if(len(sys.argv)==1):
11     print "Usage: %s verb [objects]\n" % sys.argv[0];
12     print "%s test" % sys.argv[0];
13     print "%s info" % sys.argv[0];
14     print "%s dumpcode $foo.hex [0x$start 0x$stop]" % sys.argv[0];
15     print "%s dumpdata $foo.hex [0x$start 0x$stop]" % sys.argv[0];
16     print "%s erase" % sys.argv[0];
17     print "%s writedata $foo.hex [0x$start 0x$stop]" % sys.argv[0];
18     print "%s verify $foo.hex [0x$start 0x$stop]" % sys.argv[0];
19     print "%s peekdata 0x$start [0x$stop]" % sys.argv[0];
20     print "%s pokedata 0x$adr 0x$val" % sys.argv[0];
21     #print "%s peekcode 0x$start [0x$stop]" % sys.argv[0];
22     sys.exit();
23
24 #Initailize FET and set baud rate
25 client=GoodFETCC();
26 client.serInit()
27
28 #Connect to target
29 client.CCsetup();
30 client.CCstart();
31
32 if(sys.argv[1]=="test"):
33     client.CCtest();
34 if(sys.argv[1]=="dumpcode"):
35     f = sys.argv[2];
36     start=0x0000;
37     stop=0xFFFF;
38     if(len(sys.argv)>3):
39         start=int(sys.argv[3],16);
40     if(len(sys.argv)>4):
41         stop=int(sys.argv[4],16);
42     
43     print "Dumping code from %04x to %04x as %s." % (start,stop,f);
44     h = IntelHex(None);
45     i=start;
46     while i<=stop:
47         h[i>>1]=client.CCpeekcodebyte(i);
48         if(i%0x100==0):
49             print "Dumped %04x."%i;
50         i+=1;
51     h.write_hex_file(f);
52 if(sys.argv[1]=="dumpdata"):
53     f = sys.argv[2];
54     start=0xE000;
55     stop=0xFFFF;
56     if(len(sys.argv)>3):
57         start=int(sys.argv[3],16);
58     if(len(sys.argv)>4):
59         stop=int(sys.argv[4],16);
60     
61     print "Dumping data from %04x to %04x as %s." % (start,stop,f);
62     h = IntelHex(None);
63     i=start;
64     while i<=stop:
65         h[i]=client.CCpeekdatabyte(i);
66         if(i%0x100==0):
67             print "Dumped %04x."%i;
68         i+=1;
69     h.write_hex_file(f);
70 if(sys.argv[1]=="status"):
71     print "Status: %s" %client.CCstatusstr();
72 if(sys.argv[1]=="erase"):
73     print "Status: %s" % client.CCstatusstr();
74     client.CCchiperase();
75     print "Status: %s" %client.CCstatusstr();
76
77 # if(sys.argv[1]=="flash"):
78 #     f=sys.argv[2];
79 #     start=0;
80 #     stop=0xFFFF;
81 #     if(len(sys.argv)>3):
82 #         start=int(sys.argv[3],16);
83 #     if(len(sys.argv)>4):
84 #         stop=int(sys.argv[4],16);
85     
86 #     h = IntelHex(f);
87     
88 #     client.CCchiperase();
89 #     for i in h._buf.keys():
90 #         #print "%04x: %04x"%(i,h[i>>1]);
91 #         if(i>=start and i<=stop  and i&1==0):
92 #             client.CCwriteflash(i,h[i>>1]);
93 #             if(i%0x100==0):
94 #                 print "%04x" % i;
95 if(sys.argv[1]=="writedata"):
96     f=sys.argv[2];
97     start=0;
98     stop=0xFFFF;
99     if(len(sys.argv)>3):
100         start=int(sys.argv[3],16);
101     if(len(sys.argv)>4):
102         stop=int(sys.argv[4],16);
103     
104     h = IntelHex(f);
105     
106     for i in h._buf.keys():
107         if(i>=start and i<=stop):
108             client.CCpokedatabyte(i,h[i]);
109             if(i%0x100==0):
110                 print "%04x" % i;
111 #if(sys.argv[1]=="flashtest"):
112 #    client.CCflashtest();
113 if(sys.argv[1]=="peekdata"):
114     start=0x0000;
115     if(len(sys.argv)>2):
116         start=int(sys.argv[2],16);
117     stop=start;
118     if(len(sys.argv)>3):
119         stop=int(sys.argv[3],16);
120     print "Peeking from %04x to %04x." % (start,stop);
121     while start<=stop:
122         print "%04x: %02x" % (start,client.CCpeekdatabyte(start));
123         start=start+1;
124 if(sys.argv[1]=="peekcode"):
125     start=0x0000;
126     if(len(sys.argv)>2):
127         start=int(sys.argv[2],16);
128     stop=start;
129     if(len(sys.argv)>3):
130         stop=int(sys.argv[3],16);
131     print "Peeking from %04x to %04x." % (start,stop);
132     while start<=stop:
133         print "%04x: %02x" % (start,client.CCpeekcodebyte(start));
134         start=start+1;
135 if(sys.argv[1]=="pokedata"):
136     start=0x0000;
137     val=0x00;
138     if(len(sys.argv)>2):
139         start=int(sys.argv[2],16);
140     if(len(sys.argv)>3):
141         val=int(sys.argv[3],16);
142     print "Poking %04x to become %02x." % (start,val);
143     client.CCpokedatabyte(start,val);
144
145 client.CCstop();