tools: wasptool: Add push/pull commands
--push is very similar to --binary --upload but handles directories differently. --pull allows us to copy binary files from the target. Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>pull/168/head
parent
19db3d6398
commit
80c340b005
|
@ -12,16 +12,21 @@ import time
|
||||||
import string
|
import string
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
def draw_pbar(percent, quiet=False, end='\r'):
|
||||||
|
if not quiet:
|
||||||
|
if percent > 100:
|
||||||
|
percent = 100
|
||||||
|
bar = int(percent) // 2
|
||||||
|
print(f'[{"#"*bar}{"."*(50-bar)}] {percent}% ', end=end, flush=True)
|
||||||
|
|
||||||
def pbar(iterable, quiet=False):
|
def pbar(iterable, quiet=False):
|
||||||
step = 100 / len(iterable)
|
step = 100 / len(iterable)
|
||||||
|
|
||||||
for i, v in enumerate(iterable):
|
for i, v in enumerate(iterable):
|
||||||
if not quiet:
|
draw_pbar(round(step * i, 1), quiet)
|
||||||
percent = round(step * i, 1)
|
|
||||||
bar = int(percent) // 2
|
|
||||||
print(f'[{"#"*bar}{"."*(50-bar)}] {percent}%', end='\r', flush=True)
|
|
||||||
yield v
|
yield v
|
||||||
if not quiet:
|
if not quiet:
|
||||||
print(f'[{"#"*50}] 100% ')
|
draw_pbar(100, quiet, None)
|
||||||
|
|
||||||
def sync(c):
|
def sync(c):
|
||||||
"""Stop the watch and synchronize with the command prompt.
|
"""Stop the watch and synchronize with the command prompt.
|
||||||
|
@ -207,6 +212,46 @@ def check_rtc(c):
|
||||||
|
|
||||||
c.expect('>>> ')
|
c.expect('>>> ')
|
||||||
|
|
||||||
|
def handle_binary_download(c, tname, fname):
|
||||||
|
verbose = bool(c.logfile)
|
||||||
|
|
||||||
|
c.sendline('import os')
|
||||||
|
c.expect('>>>')
|
||||||
|
c.sendline(f'os.stat("{tname}")[6]')
|
||||||
|
err = c.expect(['>>> ', 'Error'])
|
||||||
|
if err:
|
||||||
|
print('Target error, cannot open file')
|
||||||
|
c.expect('>>>')
|
||||||
|
return
|
||||||
|
|
||||||
|
lines = c.before.split('\n')
|
||||||
|
sz = eval(lines[1].rstrip())
|
||||||
|
bytes_read = 0
|
||||||
|
|
||||||
|
c.sendline(f'f = open("{tname}", "rb")')
|
||||||
|
c.expect('>>>')
|
||||||
|
|
||||||
|
print(f'Downloading {fname}:')
|
||||||
|
|
||||||
|
with open(fname, 'wb') as f:
|
||||||
|
while True:
|
||||||
|
draw_pbar(100 * bytes_read / sz, verbose)
|
||||||
|
c.sendline('repr(f.read(24))')
|
||||||
|
c.expect('>>>')
|
||||||
|
lines = c.before.split('\n')
|
||||||
|
r = lines[1].rstrip().strip('"').replace('\\\\', '\\')
|
||||||
|
eval(f'f.write({r})')
|
||||||
|
bytes_read += 24
|
||||||
|
if len(r) <= 3:
|
||||||
|
break
|
||||||
|
|
||||||
|
draw_pbar(100, verbose, end=None)
|
||||||
|
|
||||||
|
c.sendline('f.close()')
|
||||||
|
c.expect('>>> ')
|
||||||
|
c.sendline('f = None')
|
||||||
|
c.expect('>>> ')
|
||||||
|
|
||||||
def handle_binary_upload(c, fname, tname):
|
def handle_binary_upload(c, fname, tname):
|
||||||
verbose = bool(c.logfile)
|
verbose = bool(c.logfile)
|
||||||
|
|
||||||
|
@ -276,6 +321,10 @@ if __name__ == '__main__':
|
||||||
help='Execute the contents of a file')
|
help='Execute the contents of a file')
|
||||||
parser.add_argument('--eval',
|
parser.add_argument('--eval',
|
||||||
help='Execute the provided python string')
|
help='Execute the provided python string')
|
||||||
|
parser.add_argument('--pull',
|
||||||
|
help='Fetch a file from the target')
|
||||||
|
parser.add_argument('--push',
|
||||||
|
help='Push a file to the target')
|
||||||
parser.add_argument('--reset', action='store_true',
|
parser.add_argument('--reset', action='store_true',
|
||||||
help="Reboot the device (and don't stay in bootloader mode)")
|
help="Reboot the device (and don't stay in bootloader mode)")
|
||||||
parser.add_argument('--ota',
|
parser.add_argument('--ota',
|
||||||
|
@ -332,6 +381,12 @@ if __name__ == '__main__':
|
||||||
if args.eval:
|
if args.eval:
|
||||||
handle_eval(console, args.eval)
|
handle_eval(console, args.eval)
|
||||||
|
|
||||||
|
if args.pull:
|
||||||
|
handle_binary_download(console, args.pull, args.pull)
|
||||||
|
|
||||||
|
if args.push:
|
||||||
|
handle_binary_upload(console, args.push, args.push)
|
||||||
|
|
||||||
if args.upload:
|
if args.upload:
|
||||||
if args.binary:
|
if args.binary:
|
||||||
handle_binary_upload(console, args.upload, args.upload_as)
|
handle_binary_upload(console, args.upload, args.upload_as)
|
||||||
|
|
Loading…
Reference in New Issue