Tue, 18 Dec 2007 00:23:10 +0100
several improvements; add an internal state reader
0 | 1 | import sys |
2 | import time | |
4 | 3 | import gpib |
14
07e2cbf140df
several improvements; add an internal state reader
David Douard <david.douard@logilab.fr>
parents:
11
diff
changeset
|
4 | import prologix |
0 | 5 | |
14
07e2cbf140df
several improvements; add an internal state reader
David Douard <david.douard@logilab.fr>
parents:
11
diff
changeset
|
6 | |
07e2cbf140df
several improvements; add an internal state reader
David Douard <david.douard@logilab.fr>
parents:
11
diff
changeset
|
7 | class HP3562dumper(prologix.GPIB): |
5
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
8 | |
10
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
9 | MODES = {'trace': 'DD', |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
10 | 'state': 'DS', |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
11 | 'coord': 'DC', |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
12 | } |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
13 | |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
14 | FORMATS = {'binary': 'BN', |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
15 | 'ascii': 'AS', |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
16 | 'ansi': 'AN'} |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
17 | |
5
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
18 | def __init__(self, device="/dev/ttyUSB0", baudrate=115200, timeout=0.1, |
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
19 | address=0): |
10
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
20 | super(HP3562dumper, self).__init__(device, baudrate, timeout, address, mode=1) |
0 | 21 | |
10
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
22 | def dump(self, mode='trace', format="binary"): |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
23 | format = format.lower() |
5
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
24 | mode = mode.lower() |
10
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
25 | assert mode in self.MODES |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
26 | assert format in self.FORMATS |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
27 | cmd = self.MODES[mode] + self.FORMATS[format] |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
28 | |
5
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
29 | res = "" |
10
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
30 | print "command = ", cmd |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
31 | self._cnx.write('%s\r'%cmd) |
0 | 32 | i = 0 |
5
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
33 | while i<self._retries: |
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
34 | l = self._cnx.readline() |
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
35 | if l.strip() == "": |
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
36 | i += 1 |
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
37 | time.sleep(self._timeout) |
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
38 | continue |
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
39 | res += l |
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
40 | i = 0 |
4d86b11abb82
ported 'dump_trace' to gpib API
David Douard <david.douard@logilab.fr>
parents:
4
diff
changeset
|
41 | return res |
0 | 42 | |
10
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
43 | |
0 | 44 | |
14
07e2cbf140df
several improvements; add an internal state reader
David Douard <david.douard@logilab.fr>
parents:
11
diff
changeset
|
45 | def main(): |
4 | 46 | import optparse |
47 | opt = optparse.OptionParser("A simple tool for dumping the current trace") | |
48 | opt.add_option('-f', '--filename', default=None, | |
49 | dest='filename', | |
50 | help='Output filename. If not set, write to stdout') | |
51 | opt.add_option('-d', '--device', default='/dev/ttyUSB0', | |
52 | dest='device', | |
53 | help='Device of the RS232 connection (default: /dev/ttyUSB0)', | |
54 | ) | |
10
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
55 | opt.add_option('-a', '--address', default=0, |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
56 | dest='address', |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
57 | help='GPIB address of the device', |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
58 | ) |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
59 | opt.add_option('-b', '--block', default='trace', |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
60 | dest='block', |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
61 | help='Data block to dump (may be "trace" [default], "state" or "coord")', |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
62 | ) |
4 | 63 | opt.add_option('-m', '--mode', default='binary', |
64 | dest='mode', | |
65 | help='Dumping mode (may be "binary" [default], "ascii" or "ansi")', | |
66 | ) | |
67 | options, argv = opt.parse_args(sys.argv) | |
0 | 68 | |
10
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
69 | cnx = HP3562dumper(device=options.device, address=int(options.address)) |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
70 | res = cnx.dump(mode=options.block, format=options.mode) |
2999318b49a2
many improvements in the read/dump trace tools.
David Douard <david.douard@logilab.fr>
parents:
5
diff
changeset
|
71 | sys.stderr.write("read %s bytes\n"%(len(res))) |
4 | 72 | if options.filename: |
73 | open(options.filename, 'w').write(res) | |
74 | else: | |
75 | print res | |
0 | 76 | |
14
07e2cbf140df
several improvements; add an internal state reader
David Douard <david.douard@logilab.fr>
parents:
11
diff
changeset
|
77 | if __name__=='__main__': |
07e2cbf140df
several improvements; add an internal state reader
David Douard <david.douard@logilab.fr>
parents:
11
diff
changeset
|
78 | main() |