Skip to content

Commit 4c8593f

Browse files
committed
add client/server to avoid arduino reseting on connect
1 parent 3fe73c0 commit 4c8593f

File tree

4 files changed

+100
-64
lines changed

4 files changed

+100
-64
lines changed

prog.py

-64
This file was deleted.

prog_client.py

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import requests, sys
2+
3+
4+
if len(sys.argv) != 3:
5+
print 'usage: %s <port> <firmware.hex>' % sys.argv[0]
6+
sys.exit(1)
7+
8+
url = 'http://127.0.0.1:4040/'
9+
10+
payload = {'port': sys.argv[1], 'firmware': open(sys.argv[2], 'r').read()}
11+
12+
print requests.post(url, data = payload)
13+

prog_server.py

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import serial, sys, struct, time
2+
from flask import Flask, request
3+
4+
app = Flask(__name__)
5+
6+
7+
if len(sys.argv) < 2:
8+
print 'usage: %s <port> <serial-port1> [serial-port2...]' % sys.argv[0]
9+
sys.exit(1)
10+
11+
class PI():
12+
def __init__(self, com):
13+
self.ser = serial.Serial(com, 1000000, timeout = 1)
14+
15+
def prog(self, firmware):
16+
17+
print 'Connected'
18+
19+
#f = open(firmware,'r').readlines()
20+
f = firmware.splitlines()
21+
22+
# init Programming Interface (PI)
23+
self.ser.write('\x01\x00')
24+
x =struct.unpack('B', self.ser.read(1))[0]
25+
print 'x:',hex(x)
26+
assert(0x81 == x)
27+
28+
print 'PI initiated'
29+
30+
# erase device
31+
self.ser.write('\x04\x00')
32+
assert(0x84 == struct.unpack('B', self.ser.read(1))[0])
33+
34+
print 'Device erased'
35+
36+
# write hex file
37+
total = 0
38+
buf = ''
39+
buf_size = 0
40+
for i in f[1:-1]: # skip first and second lines
41+
assert(i[0] == ':')
42+
size = int(i[1:3],16)
43+
assert(size + 4 < 256)
44+
if buf_size == 0:
45+
addrh = int(i[3:5],16)
46+
addrl = int(i[5:7],16)
47+
assert(i[7:9] == '00')
48+
data = i[9:9 + size*2]
49+
assert(len(data) == size*2)
50+
51+
buf += data
52+
buf_size += size
53+
54+
if buf_size > 175:
55+
#print hex(addrh), hex(addrl), buf
56+
self.ser.write([0x3, buf_size + 4, buf_size, 0, addrh, addrl])
57+
self.ser.write(buf.decode('hex'))
58+
assert(0x83 == struct.unpack('B', self.ser.read(1))[0])
59+
total += buf_size
60+
buf_size = 0
61+
buf = ''
62+
print 'Wrote %d bytes' % total
63+
64+
# reset device
65+
self.ser.write('\x02\x00')
66+
assert(0x82 == struct.unpack('B', self.ser.read(1))[0])
67+
68+
print 'Device reset'
69+
70+
print 'Once'
71+
programmers = {}
72+
for i in sys.argv[1:]:
73+
programmers[i] = PI(i)
74+
75+
@app.route('/', methods=['POST'])
76+
def hello():
77+
port=request.form['port']
78+
firmware=request.form['firmware']
79+
80+
programmers[port].prog(firmware)
81+
82+
return 'Success'
83+
84+
app.debug = True
85+
app.run(host='127.0.0.1', port = 4040, use_reloader=False, threaded = False)

requirements.txt

+2
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
pyserial
2+
flask
3+
request

0 commit comments

Comments
 (0)