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

master
QMK Bot 2023-01-01 00:44:40 +00:00
commit 422fd8aed8
1 changed files with 22 additions and 11 deletions

View File

@ -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(): dev = _find_usb_device(vid_hex, pid_hex)
# 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)
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!")