74 lines
1.6 KiB
Python
Executable File
74 lines
1.6 KiB
Python
Executable File
#!/usr/bin/python
|
|
import time
|
|
import os
|
|
import sys
|
|
|
|
def getMounts():
|
|
d = {}
|
|
f = open('/proc/mounts')
|
|
for l in f:
|
|
if l[0] == '/':
|
|
l = l.split()
|
|
d[l[0]] = l[1].replace("\\040"," ")
|
|
return d
|
|
|
|
def check(path):
|
|
filename = path + '/firmware.bin'
|
|
try:
|
|
f = open(filename,'r')
|
|
size = os.path.getsize(filename)
|
|
if f and size == 32*1024:
|
|
f.close()
|
|
return filename
|
|
except:
|
|
pass
|
|
return None
|
|
|
|
flashed = []
|
|
|
|
if len(sys.argv) < 2:
|
|
print "Please specify a file to flash."
|
|
exit(1)
|
|
|
|
if len(sys.argv) < 3:
|
|
loop = False
|
|
else:
|
|
loop = True
|
|
|
|
firmwarefile = sys.argv[1]
|
|
|
|
print "Firmware to flash:", firmwarefile
|
|
print "Searching for a mounted r0ket flash file system."
|
|
print "Please connect a r0ket in ISP mode and mount it or have it mounted by your system."
|
|
while True:
|
|
mounts = getMounts()
|
|
|
|
unflashed = []
|
|
for device in mounts:
|
|
if not device in flashed:
|
|
unflashed.append(device)
|
|
|
|
tmp = list(flashed)
|
|
flashed = []
|
|
for device in tmp:
|
|
if device in mounts:
|
|
flashed.append(device)
|
|
|
|
for device in unflashed:
|
|
filename = check(mounts[device])
|
|
if filename:
|
|
print "writing firmware to", filename
|
|
ff = open(filename, "r+")
|
|
firmware = open(firmwarefile)
|
|
ff.write(firmware.read())
|
|
ff.flush()
|
|
os.fsync(ff.fileno())
|
|
ff.close()
|
|
firmware.close()
|
|
print 'done'
|
|
flashed.append(device)
|
|
if not loop:
|
|
exit(0)
|
|
#print mounts
|
|
time.sleep(1)
|