View difference between Paste ID: 66dKFtJ1 and BTzRsnjF
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+
	print
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)