Browse Source

Merge remote-tracking branch 'origin/master' into develop

QMK Bot 3 years ago
parent
commit
422fd8aed8
1 changed files with 22 additions and 11 deletions
  1. 22 11
      lib/python/qmk/flashers.py

+ 22 - 11
lib/python/qmk/flashers.py

@@ -1,3 +1,4 @@
+import platform
 import shutil
 import shutil
 import time
 import time
 import os
 import os
@@ -56,6 +57,20 @@ def _check_dfu_programmer_version():
         return False
         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():
 def _find_bootloader():
     # To avoid running forever in the background, only look for bootloaders for 10min
     # To avoid running forever in the background, only look for bootloaders for 10min
     start_time = time.time()
     start_time = time.time()
@@ -64,11 +79,7 @@ def _find_bootloader():
             for vid, pid in BOOTLOADER_VIDS_PIDS[bl]:
             for vid, pid in BOOTLOADER_VIDS_PIDS[bl]:
                 vid_hex = int(f'0x{vid}', 0)
                 vid_hex = int(f'0x{vid}', 0)
                 pid_hex = int(f'0x{pid}', 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 dev:
                     if bl == 'atmel-dfu':
                     if bl == 'atmel-dfu':
                         details = _PID_TO_MCU[pid]
                         details = _PID_TO_MCU[pid]
@@ -178,25 +189,25 @@ def flasher(mcu, file):
     # Add a small sleep to avoid race conditions
     # Add a small sleep to avoid race conditions
     time.sleep(1)
     time.sleep(1)
     if bl == 'atmel-dfu':
     if bl == 'atmel-dfu':
-        _flash_atmel_dfu(details, file.name)
+        _flash_atmel_dfu(details, file)
     elif bl == 'caterina':
     elif bl == 'caterina':
-        if _flash_caterina(details, file.name):
+        if _flash_caterina(details, file):
             return (True, "The Caterina bootloader was found but is not writable. Check 'qmk doctor' output for advice.")
             return (True, "The Caterina bootloader was found but is not writable. Check 'qmk doctor' output for advice.")
     elif bl == 'hid-bootloader':
     elif bl == 'hid-bootloader':
         if mcu:
         if mcu:
-            if _flash_hid_bootloader(mcu, details, file.name):
+            if _flash_hid_bootloader(mcu, details, file):
                 return (True, "Please make sure 'teensy_loader_cli' or 'hid_bootloader_cli' is available on your system.")
                 return (True, "Please make sure 'teensy_loader_cli' or 'hid_bootloader_cli' is available on your system.")
         else:
         else:
             return (True, "Specifying the MCU with '-m' is necessary for HalfKay/HID bootloaders!")
             return (True, "Specifying the MCU with '-m' is necessary for HalfKay/HID bootloaders!")
     elif bl == 'stm32-dfu' or bl == 'apm32-dfu' or bl == 'gd32v-dfu' or bl == 'kiibohd':
     elif bl == 'stm32-dfu' or bl == 'apm32-dfu' or bl == 'gd32v-dfu' or bl == 'kiibohd':
-        _flash_dfu_util(details, file.name)
+        _flash_dfu_util(details, file)
     elif bl == 'usbasploader' or bl == 'usbtinyisp':
     elif bl == 'usbasploader' or bl == 'usbtinyisp':
         if mcu:
         if mcu:
-            _flash_isp(mcu, bl, file.name)
+            _flash_isp(mcu, bl, file)
         else:
         else:
             return (True, "Specifying the MCU with '-m' is necessary for ISP flashing!")
             return (True, "Specifying the MCU with '-m' is necessary for ISP flashing!")
     elif bl == 'md-boot':
     elif bl == 'md-boot':
-        _flash_mdloader(file.name)
+        _flash_mdloader(file)
     else:
     else:
         return (True, "Known bootloader found but flashing not currently supported!")
         return (True, "Known bootloader found but flashing not currently supported!")