dump_as_ascii.py

Mon, 10 Dec 2007 20:05:39 +0100

author
David Douard <david.douard@logilab.fr>
date
Mon, 10 Dec 2007 20:05:39 +0100
changeset 0
9af1509775b6
permissions
-rw-r--r--

initial import

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

mercurial