SHOW:
|
|
- or go back to the newest paste.
1 | #!/usr/bin/python | |
2 | # -*- coding: UTF-8 -*- | |
3 | # Contec CMS 50F firmware 3.7 dumper | |
4 | # (C) 2014, François Revol <[email protected]> | |
5 | ||
6 | #cf. http://elinux.org/Serial_port_programming | |
7 | ||
8 | - | #port = serial.Serial("/dev/ttyUSB1") |
8 | + | |
9 | import sys | |
10 | import time | |
11 | ||
12 | ||
13 | def send_cmd(p, c): | |
14 | print "> %s" % c | |
15 | c = c.replace(' ', '') | |
16 | c = c.decode("hex") | |
17 | #print c.encode("hex") | |
18 | p.write(c) | |
19 | - | def recv_data(p, l): |
19 | + | #p.flush() |
20 | ||
21 | - | for i in range(l): |
21 | + | def recv_data(p, l=None): |
22 | - | print "waiting for byte" |
22 | + | |
23 | while l is None or len(data) < l: | |
24 | - | d = p.read(1) |
24 | + | time.sleep(0.5) |
25 | - | print "< %s" % d.encode("hex") |
25 | + | if p.inWaiting() < 1: |
26 | - | data.append(d) |
26 | + | print "No more data..." |
27 | - | return d |
27 | + | # XXX: do something? |
28 | if l is None: | |
29 | break | |
30 | want = max(p.inWaiting(), 1) | |
31 | if l is not None: | |
32 | want = min(want, l - len(data)) | |
33 | - | with serial.Serial(sys.argv[1], 19200) as p: |
33 | + | # just for nicer hex dump, wrap at 8 bytes |
34 | - | print p.isOpen() |
34 | + | want = min(want, 8) |
35 | #print len | |
36 | d = p.read(want) | |
37 | hx = d.encode("hex") | |
38 | print "< %s" % " ".join(hx[i:i+2] for i in range(0, len(hx), 2)) | |
39 | data += d | |
40 | - | recv_data(p, 4) |
40 | + | |
41 | return data | |
42 | ||
43 | if len(sys.argv) < 2: | |
44 | print "Usage: %s serialdev" % sys.argv[0] | |
45 | exit(1) | |
46 | ||
47 | #, parity=serial.PARITY_ODD | |
48 | with serial.Serial(port=sys.argv[1], baudrate=115200) as p: | |
49 | send_cmd(p, '7d 81 a7 80 80 80 80 80 80') | |
50 | recv_data(p, 2) | |
51 | send_cmd(p, '7d 81 a2 80 80 80 80 80 80') | |
52 | recv_data(p, 2) | |
53 | send_cmd(p, '7d 81 a0 80 80 80 80 80 80') | |
54 | recv_data(p, 4) | |
55 | ||
56 | send_cmd(p, '7d 81 b0 80 80 80 80 80 80') | |
57 | recv_data(p) | |
58 | ||
59 | send_cmd(p, '7d 81 ac 80 80 80 80 80 80') | |
60 | recv_data(p) | |
61 | ||
62 | send_cmd(p, '7d 81 b3 80 80 80 80 80 80') | |
63 | recv_data(p) | |
64 | ||
65 | send_cmd(p, '7d 81 ad 80 80 80 80 80 80') | |
66 | recv_data(p) | |
67 | ||
68 | send_cmd(p, '7d 81 a3 80 80 80 80 80 80') | |
69 | recv_data(p) | |
70 | ||
71 | send_cmd(p, '7d 81 ab 80 80 80 80 80 80') | |
72 | recv_data(p) | |
73 | ||
74 | send_cmd(p, '7d 81 a4 80 80 80 80 80 80') | |
75 | recv_data(p) | |
76 | ||
77 | send_cmd(p, '7d 81 a5 80 80 80 80 80 80') | |
78 | recv_data(p) | |
79 | ||
80 | send_cmd(p, '7d 81 af 80 80 80 80 80 80') | |
81 | recv_data(p) | |
82 | ||
83 | send_cmd(p, '7d 81 a7 80 80 80 80 80 80') | |
84 | recv_data(p) | |
85 | ||
86 | send_cmd(p, '7d 81 a2 80 80 80 80 80 80') | |
87 | recv_data(p) | |
88 | ||
89 | ||
90 | send_cmd(p, '7d 81 a6 80 80 80 80 80 80') | |
91 | recv_data(p) |