From 9b73356f2831800d2328827998e1e5b2a1994b68 Mon Sep 17 00:00:00 2001 From: Fredrik Thulin Date: Sun, 15 May 2016 10:42:23 +0200 Subject: add simple filetransfer poc --- projects/cli-test/filetransfer | 89 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 projects/cli-test/filetransfer (limited to 'projects/cli-test/filetransfer') diff --git a/projects/cli-test/filetransfer b/projects/cli-test/filetransfer new file mode 100755 index 0000000..92b117f --- /dev/null +++ b/projects/cli-test/filetransfer @@ -0,0 +1,89 @@ +#!/usr/bin/python + +import os +import sys +import time +import struct +import serial + +from binascii import crc32 + + +def _write(dst, data): + dst.write(data) + if len(data) == 4: + print("Wrote 0x{:02x}{:02x}{:02x}{:02x}".format(ord(data[0]), ord(data[1]), ord(data[2]), ord(data[3]))) + else: + print("Wrote {!r}".format(data)) + + +def _read(dst): + res = '' + while True: + x = dst.read(1) + if not x: + break + res += x + print ("Read {!r}".format(res)) + return res + + +def _execute(dst, cmd): + _write(dst, '\r') + prompt = _read(dst) + if prompt.endswith('Username: '): + _write(dst, 'ct\r') + prompt = _read(dst) + if prompt.endswith('Password: '): + _write(dst, 'ct\r') + prompt = _read(dst) + if not prompt.endswith('> '): + sys.stderr.write('Device does not seem to be ready for a file transfer (got {!r})\n'.format(prompt)) + return False + _write(dst, cmd + '\r') + response = _read(dst) + return response + +def send_file(filename, device='/dev/ttyUSB0', initiate=True): + s = os.stat(filename) + size = s.st_size + src = open(filename, 'rb') + + dst = serial.Serial(device, 115200, timeout=0.5) + + if initiate: + response = _execute(dst, 'filetransfer') + if 'OK' not in response: + sys.stderr.write('Device did not accept the filetransfer command (got {!r})\n'.format(response)) + return False + + # 1. Write size of file (4 bytes) + _write(dst, struct.pack('