diff --git a/transfer.py b/transfer.py index 7074140dac95db9525c2271886e5e7874f7a4393..8a2adfcb46a0cd3a907066d01c1979e984089ecd 100644 --- a/transfer.py +++ b/transfer.py @@ -1,43 +1,78 @@ +import ports import psutil import urllib.request import os import shutil import platform +import time import subprocess -def get_windows_drive_name(letter): - return subprocess.check_output(["cmd", "/c vol " + letter]).decode().split("\r\n")[0].split(" ").pop() +def get_drive(): + def get_windows_drive_name(letter): + return subprocess.check_output(["cmd", "/c vol " + letter]).decode().split("\r\n")[0].split(" ").pop() -if platform.system().lower() == 'windows': - disks = [(x.mountpoint, get_windows_drive_name(x.mountpoint.strip('\\'))) - for x in psutil.disk_partitions()] - disks = [(x, name) - for x, name in disks if 'TRINKEY' in name or 'CIRCUIT' in name] -else: - disks = [(x.mountpoint, x.mountpoint) for x in psutil.disk_partitions( - ) if 'TRINKEY' in x.mountpoint.upper() or 'CIRCUIT' in x.mountpoint.upper()] + if platform.system().lower() == 'windows': + disks = [(x.mountpoint, get_windows_drive_name(x.mountpoint.strip('\\'))) + for x in psutil.disk_partitions()] + disks = [(x, name) + for x, name in disks if 'TRINKEY' in name or 'CIRCUIT' in name] + else: + disks = [(x.mountpoint, x.mountpoint) for x in psutil.disk_partitions( + ) if 'TRINKEY' in x.mountpoint.upper() or 'CIRCUIT' in x.mountpoint.upper()] -if len(disks) != 1: - print("Could not find the trinkey. Did you click the reset button twice and connect it?") - exit(1) + if len(disks) != 1: + print("Could not find the Trinkey. Did you click the reset button twice and connect it?") + exit(1) -disk, name = disks[0] + disk, name = disks[0] + return disk, name -if 'TRINKEY' in name: + +def reset_drive(): urllib.request.urlretrieve( "https://downloads.circuitpython.org/bin/adafruit_proxlight_trinkey_m0/en_US/adafruit-circuitpython-adafruit_proxlight_trinkey_m0-en_US-9.1.4.uf2", os.path.join( disk, 'trinkey.uf2')) - print("The drive will now eject. You can quit any keyboard popups that appear. Run the transfer.py file again for it to be bootable.") -else: - shutil.rmtree(os.path.join(disk, 'lib'), True) - shutil.rmtree(os.path.join(disk, 'src'), True) - shutil.rmtree(os.path.join(disk, 'boot_out.txt'), True) - shutil.rmtree(os.path.join('src', '__pycache__'), True) - shutil.rmtree(os.path.join('support', '__pycache__'), True) - shutil.copytree('src', os.path.join(disk, 'src'), dirs_exist_ok=True) - shutil.copytree('support', os.path.join(disk, 'support'), dirs_exist_ok=True) - shutil.copy('code.py', os.path.join(disk, 'code.py')) - print("Done! Switch back to the Serial Monitor!") + print("The drive will now eject and then re-attach. Please wait 10 seconds.") + time.sleep(10) + + +disk, name = get_drive() +if 'TRINKEY' in name: + reset_drive() + +disk, name = get_drive() +trinkey = ports.get_trinkey_port() +if not trinkey: + print("Could not find the Trinkey to connect to...try removing it from the USB drive and plugging it back in.") + exit(1) + +# Kill any running program +trinkey.write(bytes(chr(0x03), 'utf-8')) +trinkey.flush() + +print("Connected to Trinkey! Transfering files...") + +shutil.rmtree(os.path.join(disk, 'src'), True) +shutil.rmtree(os.path.join(disk, '__pycache__'), True) +for x in os.listdir(disk): + try: + os.unlink(os.path.join(disk, x)) + except (PermissionError, FileNotFoundError, OSError): + pass + +shutil.copytree('src', os.path.join(disk, 'src'), dirs_exist_ok=True) +shutil.copytree('support', os.path.join(disk, 'support'), dirs_exist_ok=True) +shutil.copy('code.py', os.path.join(disk, 'code.py')) + +print("Files transfered...connecting to Trinkey...") +time.sleep(1) + +print("Restarting Trinkey!") +# Kill any running program +trinkey.write(bytes(chr(0x04), 'utf-8')) +trinkey.flush() +time.sleep(1) +miniterm = ports.connect_to_serial(trinkey)