AVR support getting better.
[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]=="deadtest"):
35     for i in range(1,10):
36         print "IDENT as %s" % client.CCidentstr();
37 if(sys.argv[1]=="dumpcode"):
38     f = sys.argv[2];
39     start=0x0000;
40     stop=0xFFFF;
41     if(len(sys.argv)>3):
42         start=int(sys.argv[3],16);
43     if(len(sys.argv)>4):
44         stop=int(sys.argv[4],16);
45     
46     print "Dumping code from %04x to %04x as %s." % (start,stop,f);
47     h = IntelHex(None);
48     i=start;
49     while i<=stop:
50         h[i>>1]=client.CCpeekcodebyte(i);
51         if(i%0x100==0):
52             print "Dumped %04x."%i;
53         i+=1;
54     h.write_hex_file(f);
55 if(sys.argv[1]=="dumpdata"):
56     f = sys.argv[2];
57     start=0xE000;
58     stop=0xFFFF;
59     if(len(sys.argv)>3):
60         start=int(sys.argv[3],16);
61     if(len(sys.argv)>4):
62         stop=int(sys.argv[4],16);
63     
64     print "Dumping data from %04x to %04x as %s." % (start,stop,f);
65     h = IntelHex(None);
66     i=start;
67     while i<=stop:
68         h[i]=client.CCpeekdatabyte(i);
69         if(i%0x100==0):
70             print "Dumped %04x."%i;
71         i+=1;
72     h.write_hex_file(f);
73 if(sys.argv[1]=="status"):
74     print "Status: %s" %client.CCstatusstr();
75 if(sys.argv[1]=="erase"):
76     print "Status: %s" % client.CCstatusstr();
77     client.CCchiperase();
78     print "Status: %s" %client.CCstatusstr();
79
80 # if(sys.argv[1]=="flash"):
81 #     f=sys.argv[2];
82 #     start=0;
83 #     stop=0xFFFF;
84 #     if(len(sys.argv)>3):
85 #         start=int(sys.argv[3],16);
86 #     if(len(sys.argv)>4):
87 #         stop=int(sys.argv[4],16);
88     
89 #     h = IntelHex(f);
90     
91 #     client.CCchiperase();
92 #     for i in h._buf.keys():
93 #         #print "%04x: %04x"%(i,h[i>>1]);
94 #         if(i>=start and i<=stop  and i&1==0):
95 #             client.CCwriteflash(i,h[i>>1]);
96 #             if(i%0x100==0):
97 #                 print "%04x" % i;
98 if(sys.argv[1]=="writedata"):
99     f=sys.argv[2];
100     start=0;
101     stop=0xFFFF;
102     if(len(sys.argv)>3):
103         start=int(sys.argv[3],16);
104     if(len(sys.argv)>4):
105         stop=int(sys.argv[4],16);
106     
107     h = IntelHex(f);
108     
109     for i in h._buf.keys():
110         if(i>=start and i<=stop):
111             client.CCpokedatabyte(i,h[i]);
112             if(i%0x100==0):
113                 print "%04x" % i;
114 #if(sys.argv[1]=="flashtest"):
115 #    client.CCflashtest();
116 if(sys.argv[1]=="peekdata"):
117     start=0x0000;
118     if(len(sys.argv)>2):
119         start=int(sys.argv[2],16);
120     stop=start;
121     if(len(sys.argv)>3):
122         stop=int(sys.argv[3],16);
123     print "Peeking from %04x to %04x." % (start,stop);
124     while start<=stop:
125         print "%04x: %02x" % (start,client.CCpeekdatabyte(start));
126         start=start+1;
127 if(sys.argv[1]=="peekcode"):
128     start=0x0000;
129     if(len(sys.argv)>2):
130         start=int(sys.argv[2],16);
131     stop=start;
132     if(len(sys.argv)>3):
133         stop=int(sys.argv[3],16);
134     print "Peeking from %04x to %04x." % (start,stop);
135     while start<=stop:
136         print "%04x: %02x" % (start,client.CCpeekcodebyte(start));
137         start=start+1;
138 if(sys.argv[1]=="pokedata"):
139     start=0x0000;
140     val=0x00;
141     if(len(sys.argv)>2):
142         start=int(sys.argv[2],16);
143     if(len(sys.argv)>3):
144         val=int(sys.argv[3],16);
145     print "Poking %04x to become %02x." % (start,val);
146     client.CCpokedatabyte(start,val);
147
148 client.CCstop();