
    7ji                        d Z ddlmZ ddlmZ ddlmZ ddlZddl	m
Z
mZ ddlmZ ddlmZmZ dd	lmZmZ dd
lmZ ddlmZmZ d Zd Z ej6                  dddej8                  j;                  d       ed      d       ej6                  dddd       ej6                  dddd       ej6                  dd d!"       ej6                  d#d$eed%&       ej6                  d'd(ed)*       ej6                  d+d,ddd-.       ej6                  d/d0ed1d23       ej6                  d4d5dd6g d78       ej6                  d9d:ddd;.       ej>                  d<      e
ed=                                                                                            Z y)>zCompile and flash QMK Firmware

You can compile a keymap already in the repo or using a QMK Configurator export.
A bootloader must be specified.
    )FilesCompleter)Path)cliN)automagic_keyboardautomagic_keymap)build_environment)keyboard_completerkeyboard_folder)keymap_completerlocate_keymap)flasher)KeyboardKeymapBuildTargetJsonKeymapBuildTargetc                  r   t        j                          t         j                  j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t         j                  j                  d	       t        j                  d
       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  d       y)z<Prints the available bootloaders listed in docs.qmk.fm.
    z#Here are the available bootloaders:z	avrdudez	bootloadhidz	dfuz		dfu-utilz		mdloaderz		st-flashz	st-link-cliz&Enhanced variants for split keyboards:z	avrdude-split-leftz	avrdude-split-rightz	dfu-eez	dfu-split-leftz	dfu-split-rightz	dfu-util-split-leftz	dfu-util-split-rightz	uf2-split-leftz	uf2-split-rightz3For more info, visit https://docs.qmk.fm/#/flashingF)r   
print_helploginfoecho     F/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/cli/flash.py_list_bootloadersr      s    NNGGLL67HH[HH_HHWHH\HH\HH\HH_GGLL9:HH#$HH$%HHZHH HH !HH$%HH%&HH HH !HHBCr   c                     t        j                  d       	 t        ||       \  }}|r t         j                  j	                  |       y	 y# t
        $ r" t         j                  j                  d       Y yw xY w)z!Try to flash binary firmware
    zgFlashing binary firmware...
Please reset your keyboard into bootloader mode now!
Press Ctrl-C to exit.
FzCtrl-C was pressed, exiting...T)r   r   r   r   errorKeyboardInterruptr   )filenamemcuerrmsgs       r   _flash_binaryr    .   sk     HHyz73)SGGMM# 
   7567s   0A
 
(A54A5r   ?Trz.jsonzuA configurator export JSON to be compiled and flashed or a pre-compiled binary firmware file (bin/hex) to be flashed.)nargsarg_onlytype	completerhelpz-bz--bootloaders
store_truezList the available bootloaders.)actionr'   z-blz--bootloaderflashzFThe flash command, corresponding to qmk's make options of bootloaders.)defaultr'   z-mz--mcuzGThe MCU name. Required for HalfKay, HID, USBAspLoader and ISP flashing.)r'   z-kbz
--keyboardzUThe keyboard to build a firmware for. Ignored when a configurator export is supplied.)r%   r&   r'   z-kmz--keymapzSThe keymap to build a firmware for. Ignored when a configurator export is supplied.)r&   r'   z-nz	--dry-runz;Don't actually build, just show the make command to be run.)r$   r)   r'   z-jz
--parallel   z8Set the number of parallel make jobs; 0 means unlimited.)r%   r+   r'   z-ez--envappendzBSet a variable to be passed to make. May be passed multiple times.)r$   r)   r+   r'   z-cz--cleanz%Remove object files before compiling.z
QMK Flash.c                 l   | j                   j                  rzt        | j                   j                  t              rV| j                   j                  j                  dv r4t        | j                   j                  | j                   j                        S | j                   j                  r
t               S t        | j                   j                        }d}| j                   j                  r t        | j                   j                        }n| j                  j                  j                  r| j                  j                  j                  rt!        | j                  j                  j                  | j                  j                  j                        s-| j"                  j%                  d        | j&                          yt)        | j                  j                  j                  | j                  j                  j                        }|s-| j"                  j%                  d        | j&                          y|j+                  | j                  j                  j,                  | j                   j.                          |j0                  | j                   j2                  fd| j                   j4                  i|S )a  Compile and or flash QMK Firmware or keyboard/layout

    If a binary firmware is supplied, try to flash that.

    If a Configurator export is supplied this command will create a new keymap, overwriting an existing keymap if one exists.

    If a keyboard and keymap are provided this command will build a firmware based on that.

    If bootloader is omitted the make system will use the configured bootloader for that keyboard.
    )z.binz.hexz.uf2NzInvalid keymap argument.FzwYou must supply a configurator export, both `--keyboard` and `--keymap`, or be in a directory for a keyboard or keymap.)parallelcleandry_run)argsr   
isinstancer   suffixr    r   bootloadersr   r   envr   configr*   keyboardkeymapr   r   r   r   r   	configurer/   r0   compile
bootloaderr1   )r   envstargets      r   r*   r*   <   s   0 xxZ(9(94@SXXEVEVE]E]ayEySXX..==
xx "" SXX\\*D F
xx&sxx'8'89				"	"szz'7'7'>'>SZZ--66

8H8H8O8OPGGMM45CNN +3::+;+;+D+DcjjFVFVF]F]^  P  	Q
cjj..77sxx~~N6>>#((--Psxx7G7GP4PPr   )!__doc__argcomplete.completersr   pathlibr   milcr   qmk.pathqmkqmk.decoratorsr   r   qmk.commandsr   qmk.keyboardr	   r
   
qmk.keymapr   r   qmk.flashersr   qmk.build_targetsr   r   r   r    argumentpathFileTypeint
subcommandr*   r   r   r   <module>rP      s  
 2    ? * < 6   N4 jd9J9J39O[ijq[r  zq  rdOL?`ae^W  <E  FdG"kle\CU  ]t  ueZ+;  CX  YdK$|  KH  IdLsA<vwdGd8R  OS  TdI\Hop+Q    q T x I Y u m F b r+Qr   