-
Notifications
You must be signed in to change notification settings - Fork 12
/
test_and_program.py
76 lines (66 loc) · 1.92 KB
/
test_and_program.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env python
import itertools
import os
import platform
import serial
import subprocess
import sys
import time
AVRDUDE_CMD = [
"avrdude",
"-v",
"-patmega32u4",
"-cavrispmkii",
"-Ulock:w:0x3F:m",
"-Uefuse:w:0xcb:m",
"-Uhfuse:w:0xd8:m",
"-Ulfuse:w:0xff:m",
"-Uflash:w:production.hex:i",
]
def find_port():
if platform.system() == "Windows":
import _winreg as winreg
while True:
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM")
portname = None
for i in itertools.count():
try:
portname = winreg.EnumValue(key, i)[1]
except WindowsError:
if portname:
return portname
else:
break
time.sleep(0.1)
else:
while True:
ttys = [filename for filename in os.listdir("/dev")
if filename.startswith("cu.")
and not "luetooth" in filename]
ttys.sort(key=lambda k:(k.startswith("cu."), k))
if ttys:
return "/dev/" + ttys[0]
time.sleep(0.1)
def main():
print "Calling avrdude..."
result = subprocess.check_call(AVRDUDE_CMD)
if result != 0:
print "avrdude failed with return code %d; quitting." % (result,)
sys.exit(result)
print "Waiting for serial port..."
time.sleep(9.0)
portname = find_port()
print "Guessing port is %r" % (portname,)
print "Fetching test results..."
out = open("testresults.txt", "a")
port = serial.Serial(portname, 115200)
while True:
line = port.readline()
print line,
out.write(line)
if line.startswith("All tests passed"):
sys.exit(0)
elif line.startswith("Selftest FAIL"):
sys.exit(1)
if __name__ == '__main__':
main()