Mon, 10 Dec 2007 20:05:39 +0100
initial import
0 | 1 | import sys |
2 | import time | |
3 | import serial | |
4 | ||
5 | MODE = {'binary': 'DDBN', | |
6 | 'ascii': 'DDAS', | |
7 | 'ansi': 'DDAN', | |
8 | } | |
9 | class ConnectionError(Exception): | |
10 | pass | |
11 | ||
12 | def read_trace(cnx, mode="binary"): | |
13 | mode = mode.lower() | |
14 | assert mode in MODE | |
15 | mode = MODE[mode] | |
16 | res = "" | |
17 | cnx.write('%s\r'%mode) | |
18 | i = 0 | |
19 | while i<5: | |
20 | l = cnx.readline() | |
21 | if l.strip() == "": | |
22 | i += 1 | |
23 | time.sleep(0.1) | |
24 | continue | |
25 | #print "got a new line (%s chars) [i=%s]"%(len(l), i) | |
26 | res += l | |
27 | i = 0 | |
28 | return res | |
29 | ||
30 | def open_connection(device="/dev/ttyUSB0", baudrate=115200, timeout=0.1, | |
31 | address=0, mode=1): | |
32 | p = serial.Serial(port=device, baudrate=baudrate, timeout=timeout) | |
33 | ||
34 | p.write('++addr %d\r'%address) # set address to 0 | |
35 | p.write('++mode %d\r'%mode) # read listen only mode | |
36 | p.write('++mode\r') | |
37 | i = 0 | |
38 | for i in range(10): | |
39 | rmode = p.readline().strip() | |
40 | if rmode != "": | |
41 | break | |
42 | time.sleep(timeout) | |
43 | ||
44 | if rmode == '' or int(rmode) != mode: | |
45 | raise ConnectionError("Can't set GPIB mode to %s"%mode) | |
46 | return p | |
47 | ||
48 | ||
49 | import optparse | |
50 | opt = optparse.OptionParser() | |
51 | opt.add_option('-f', '--filename', default=None, | |
52 | dest='filename', | |
53 | help='Output filename. If not set, write to stdout') | |
54 | opt.add_option('-d', '--device', default='/dev/ttyUSB0', | |
55 | dest='device', | |
56 | help='Device of the RS232 connection (default: /dev/ttyUSB0)', | |
57 | ) | |
58 | opt.add_option('-m', '--mode', default='binary', | |
59 | dest='mode', | |
60 | help='Dumping mode (may be "binary" [default], "ascii" or "ansi")', | |
61 | ) | |
62 | opt.add_option('-a', '--address', default=0, | |
63 | dest='address', | |
64 | help='GPIB address of the device', | |
65 | ) | |
66 | options, argv = opt.parse_args(sys.argv) | |
67 | ||
68 | cnx = open_connection(device=options.device, | |
69 | address=int(options.address), mode=1) | |
70 | res = read_trace(cnx, mode=options.mode) | |
71 | ||
72 | if options.filename: | |
73 | open(options.filename, 'w').write(res) | |
74 | else: | |
75 | print res | |
76 |