~ruther/qmk_firmware

b8e12eed8038d172aacfd7381785643f2da9664c — Joel Challis 2 years ago 61696fd
WSL `qmk flash firmware.bin` workaround (#19434)

1 files changed, 16 insertions(+), 5 deletions(-)

M lib/python/qmk/flashers.py
M lib/python/qmk/flashers.py => lib/python/qmk/flashers.py +16 -5
@@ 1,3 1,4 @@
import platform
import shutil
import time
import os


@@ 56,6 57,20 @@ def _check_dfu_programmer_version():
        return False


def _find_usb_device(vid_hex, pid_hex):
    # WSL doesnt have access to USB - use powershell instead...?
    if 'microsoft' in platform.uname().release.lower():
        ret = cli.run(['powershell.exe', '-command', 'Get-PnpDevice -PresentOnly | Select-Object -Property InstanceId'])
        if f'USB\\VID_{vid_hex:04X}&PID_{pid_hex:04X}' in ret.stdout:
            return (vid_hex, pid_hex)
    else:
        with DelayedKeyboardInterrupt():
            # PyUSB does not like to be interrupted by Ctrl-C
            # therefore we catch the interrupt with a custom handler
            # and only process it once pyusb finished
            return usb.core.find(idVendor=vid_hex, idProduct=pid_hex)


def _find_bootloader():
    # To avoid running forever in the background, only look for bootloaders for 10min
    start_time = time.time()


@@ 64,11 79,7 @@ def _find_bootloader():
            for vid, pid in BOOTLOADER_VIDS_PIDS[bl]:
                vid_hex = int(f'0x{vid}', 0)
                pid_hex = int(f'0x{pid}', 0)
                with DelayedKeyboardInterrupt():
                    # PyUSB does not like to be interrupted by Ctrl-C
                    # therefore we catch the interrupt with a custom handler
                    # and only process it once pyusb finished
                    dev = usb.core.find(idVendor=vid_hex, idProduct=pid_hex)
                dev = _find_usb_device(vid_hex, pid_hex)
                if dev:
                    if bl == 'atmel-dfu':
                        details = _PID_TO_MCU[pid]