
    7j5#                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 dddddd	d
dZddddZ G d d      Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)     N)BOOTLOADER_VIDS_PIDS)cli
atmega16u2
atmega32u2
atmega16u4
atmega32u4	at90usb64
at90usb162
at90usb128)2fef2ff02ff32ff42ff92ffa2ffbm32m328pm328)	atmega32a
atmega328p	atmega328c                       e Zd Zd Zd Zd Zy)DelayedKeyboardInterruptc                 x    d| _         t        j                  t        j                  | j                        | _        y )NF)signal_receivedsignalSIGINThandlerold_handler)selfs    E/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/flashers.py	__enter__z"DelayedKeyboardInterrupt.__enter__"   s%    $!==E    c                     ||f| _         y N)r   )r!   sigframes      r"   r   z DelayedKeyboardInterrupt.handler&   s     #U|r$   c                     t        j                   t         j                  | j                         | j                  r | j                  | j                    y y r&   )r   r   r    r   )r!   typevalue	tracebacks       r"   __exit__z!DelayedKeyboardInterrupt.__exit__)   s>    fmmT%5%56Dd223  r$   N)__name__
__module____qualname__r#   r   r-    r$   r"   r   r      s    F,4r$   r   c                      t        j                  ddgdd      } | j                  j                  d      d   }|j                         d   }|j                  d	      \  }}}t	        |      dk\  rt	        |      d
k\  ryy)Ndfu-programmerz	--versionT   )combined_outputtimeout
r      .   F)r   runstdoutsplitint)check
first_lineversion_numbermajmin_bugs         r"   _check_dfu_programmer_versionrE   0   sx    GG%{3TSTUE##D)!,J%%'*N#))#.NCs
3x1}Tar$   c                 D   dt        j                         j                  j                         v r2t	        j
                  g d      }d| dd|d|j                  v r| |fS y t               5  t        j                  j                  | |      cd d d        S # 1 sw Y   y xY w)N	microsoft)zpowershell.exez-commandz?Get-PnpDevice -PresentOnly | Select-Object -Property InstanceIdzUSB\VID_04Xz&PID_)idVendor	idProduct)platformunamereleaselowerr   r;   r<   r   usbcorefind)vid_hexpid_hexrets      r"   _find_usb_devicerU   <   s    hnn&..4466ggwxwsm56#**DW%% E &' 	F 88=='W=E		F 	F 	Fs   +!BBc                  `    t        j                  ddg      j                  j                         S )zbDelegate to uf2conv.py as VID:PID pairs can potentially fluctuate more than other bootloaders
    util/uf2conv.pyz--list)r   r;   r<   
splitlinesr1   r$   r"   _find_uf2_devicesrY   J   s(     77%x0188CCEEr$   c                     t        j                          } t        j                          | z
  dk  rt        D ]  }t        |   D ]r  \  }}t        d| d      }t        d| d      }t        ||      }|s3|dk(  r
t        |   }n*|dk(  r||f}n |dk(  r|dk(  r|dk(  rd	}nd
}n|dv r||f}nd }||fc c S   t               ryt        j                  d       t        j                          | z
  dk  ry)NiX  0xr   	atmel-dfucaterinahid-bootloader16c00478halfkayzqmk-hid>   kiibohdat32-dfu	apm32-dfu	gd32v-dfu	stm32-dfu)_uf2_compatible_Ng?)NN)timer   r>   rU   _PID_TO_MCUrY   sleep)
start_timeblvidpidrR   rS   devdetailss           r"   _find_bootloaderrq   P   s   J
))+

"S
(& 	)B04 )S3%j!,3%j!,&w8[("-c"2z)#*G"4//&=SF]&/G&/G]]#&*"&=(%)	)( -

3/ ))+

"S
(0 r$   c                    dt         j                  j                         v r	ddlm} d}nddlm} d}t        j                         }t        j                         |z
  dk  r |       D ]  }|\  }}}| dd|d|j                         v s#|dk(  rt        j                  d       |c S t        j                         }t        j                         |z
  dk  rXt        j                  |t        j                        r|c S t        j                  d	       t        j                         |z
  dk  rX y  t        j                         |z
  dk  ry )
Nwindowsr   )comportsposix   04x:r8   g      ?)r   rK   rN   serial.tools.list_ports_windowsrt   serial.tools.list_ports_posixrh   casefoldrj   osaccessW_OK)rm   rn   rt   rK   rk   portdeschwids           r"   _find_serial_portr   n   s   CLL&&((<:J
))+

"Q
&J 	D#D$c!C9%8y(JJqMK!%J))+
2Q699T2773#'K JJsO	 ))+
2Q6
 	 ))+

"Q
&  r$   c                 v    t        | d   | d         }|r%t        j                  ddddddd	| d
d|g	d       yy)Nr   r8   avrdude-pr   -cavr109-Uflash:w::iz-PFcapture_outputT)r   r   r;   )rp   filer   s      r"   _flash_caterinar      sO    WQZ4DD,hQUPVVXFY[_aefw|}r$   c                     t               rdnd}t        j                  d| d|gd       t        j                  d| d||gd       t        j                  d| dgd       y )	Nz--force r3   eraseFr   flashreset)rE   r   r;   )mcur   forces      r"   _flash_atmel_dfur      sV    68IbEGGsGU3EJGGsGUD9%PGGsG,UCr$   c                     d }|dk(  r/t        j                  d      rd}nt        j                  d      rd}|st        j                  d      rd}nyt        j                  |d|  dd|gd	
       y )Nra   teensy_loader_clizteensy-loader-clihid_bootloader_cliTz-mmcu=z-wz-vFr   shutilwhichr   r;   )r   rp   r   cmds       r"   _flash_hid_bootloaderr      sl    
C)<<+,%C\\-.%C <<,-&CGGSF3%.$d3EJr$   c                 D   | d   dk(  r3| d   dk(  r+t        j                  dddd| d    d	| d    d
d|gd       y | d   dk(  r2| d   dk(  r*t        j                  dddd| d    d	| d    d|gd       y t        j                  dddd| d    d	| d    ddd|g	d       y )Nr   1eafr8   0003zdfu-utilz-a2z-drx   z-R-DFr   1c11b0070-sz0x08000000:leaver   r;   )rp   r   s     r"   _flash_dfu_utilr      s    qzV
f 4T3Agaj\.JDRVX\]nst	v	'!*"6T3Agaj\.JDRVWhmn 	T3Agaj\.JDRdfjlpq  CH  	Ir$   c                 p    t        j                  d      rd}nyt        j                  |dddd| gd       y )	Nzwb32-dfu-updater_cliTz-tr   
0x08000000r   Fr   r   )r   r   s     r"   _flash_wb32_dfu_updaterr      s2    ||*+$GGS$lD$7Nr$   c                     |dk(  rdnd}t         j                  | |       } t        j                  dd| d|dd| d	gd
       y )Nusbasploaderusbaspusbtinyr   r   r   r   r   r   Fr   )AVRDUDE_MCUgetr   r;   )r   
programmerr   s      r"   
_flash_ispr      sG    '>9yJ
//#s
#CGGYc4TXdV2;NO`efr$   c                 <    t        j                  ddd| dgd       y )Nmdloaderz--firstz
--downloadz	--restartFr   r   )r   s    r"   _flash_mdloaderr      s    GGZL$DUZ[r$   c                     t        j                  dd| g      j                  }d|vryt        j                  dd| gd       y )NrW   z--infozUF2 FileTz--deployFr   )r   r;   r<   )r   outputs     r"   
_flash_uf2r      s?    WW'489@@FGG
D1%Hr$   c                    |j                         }t               \  }}t        j                  d       |dk(  rt	        ||       y|dk(  rt        ||      ryy|dk(  r| rt        | ||      ryyy|dv rt        ||       y|d	k(  rt        |      ry
y|dk(  s|dk(  r| rt        | ||       yy|dk(  rt        |       y|dk(  rt        |      ryyy)Nr8   r\   r]   )Tz\The Caterina bootloader was found but is not writable. Check 'qmk doctor' output for advice.r^   )TzYPlease make sure 'teensy_loader_cli' or 'hid_bootloader_cli' is available on your system.)TzFSpecifying the MCU with '-m' is necessary for HalfKay/HID bootloaders!>   rb   rc   rd   re   rf   zwb32-dfu)TzDPlease make sure 'wb32-dfu-updater_cli' is available on your system.r   
usbtinyisp)Tz;Specifying the MCU with '-m' is necessary for ISP flashing!zmd-bootrg   )Tz(Flashing only supports uf2 format files.)Tz<Known bootloader found but flashing not currently supported!)FN)as_posixrq   rh   rj   r   r   r   r   r   r   r   r   )r   r   rl   rp   s       r"   flasherr      s   ==?D"$KBJJqM	[$'8 7 
z	7D)y2 1 
	$S'48zc& % 
M	M&" ! 
z	"4(a  
~	|!3sB%  Y	y  
!	!dE  Vr$   )rK   r   rh   r|   r   usb.corerO   qmk.constantsr   milcr   ri   r   r   rE   rU   rY   rq   r   r   r   r   r   r   r   r   r   r   r1   r$   r"   <module>r      s       	   .   4 4"	FF<:DK$	IOg\I#r$   