
    ;)diB              	          d dl Zd dlmZmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZmZ  G d dej                  Z G d	 d
ej                  Z G d dej                  Z G d de          Z G d de          Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z  G d dej                  Z!de"d e#fd!Z$d"e%e"         d e%e&e#         e&e#         e&e"         e&e"         f         fd#Z'd$ed%e#e"z  d e#fd&Z(dS )'    N)	ESPLoaderintel_hex_to_bin)detect_flash_size)
FatalErrorflash_size_bytesstrip_chip_name)log)IOAnyc                   N     e Zd ZdZdedej        dz  dej        def fdZ	 xZ
S )ChipTypezGCustom type to accept chip names in any case and with or without hyphenvalueparamNctxreturnc                 h    t          |          }t                                          |||          S N)r   superconvert)selfr   r   r   	__class__s       W/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/esptool/cli_util.pyr   zChipType.convert   s,      &&wwueS111    __name__
__module____qualname____doc__strclick	ParameterContextr   r   __classcell__r   s   @r   r   r      sl        QQ22!&4!72>Cm2	2 2 2 2 2 2 2 2 2 2r   r   c                   H     e Zd ZdZdedej        dej        def fdZ	 xZ
S )ResetModeTypezcCustom type to accept reset mode names with underscores as separators
    for compatibility with v4r   r   r   r   c           	         d|v r[|                     dd          }|| j        vrt          j        | d          t	          j        d| d|j         d| d           |S t                                          |||          S )N_-z is not a valid reset mode.zDeprecated: Choice 'z' for option '--' is deprecated. Use '
' instead.)	replacechoicesr    BadParameterr	   warningnamer   r   )r   r   r   r   	new_valuer   s        r   r   zResetModeType.convert   s    %<<c3//I,,(E)N)N)NOOOK:u : :ej : :$-: : :   wwueS111r   r   r$   s   @r   r&   r&      sh        ! !
2S 
2 
2u} 
2QT 
2 
2 
2 
2 
2 
2 
2 
2 
2 
2r   r&   c                   H    e Zd ZdZdZdedej        dz  dej        de	fdZ
dS )	
AnyIntTypezGCustom type to parse any integer value - decimal, hex, octal, or binaryintegerr   r   Nr   r   c                     t          |t                    r|S 	 t          |          S # t          $ r t	          j        |d          w xY w)Nz is not a valid integer.)
isinstanceintarg_auto_int
ValueErrorr    r.   )r   r   r   r   s       r   r   zAnyIntType.convert1   sh     eS!! 	L	K&&& 	K 	K 	K$%I%I%IJJJ	Ks	   ( "A
)r   r   r   r   r0   r   r    r!   r"   r7   r    r   r   r3   r3   ,   sf        QQDKK!&4!7K>CmK	K K K K K Kr   r3   c                   `     e Zd ZdZddef fdZdedej        dz  dej	        d	e
f fd
Z xZS )AutoSizeTypezSimilar to AnyIntType but allows 'k', 'M' suffixes for kilo(1024), Mega(1024^2)
    and 'all' as a value to e.g. read whole flashT	allow_allc                 V    || _         t                                                       d S r   )r=   r   __init__)r   r=   r   s     r   r?   zAutoSizeType.__init__@   s&    "r   r   r   Nr   r   c                 f   | j         r|                                dk    r|S |d         dv rc	 t          |d d                   }n%# t          $ r t	          j        |d          w xY w|d         dk    r|dz  }n|d         dk    r|dz  }|S t                                          |||          S )	Nall)kMz is not a valid integerrC   i   rD   i   )r=   lowerr8   r9   r    r.   r   r   r   r   r   r   numr   s        r   r   zAutoSizeType.convertD   s     > 	ekkmmu44L9
""N"5":.. N N N(E)L)L)LMMMNRyCtrc!!{"JwwueS111s   A "A(T)r   r   r   r   boolr?   r   r    r!   r"   r   r   r#   r$   s   @r   r<   r<   <   s        5 5 $      22!&4!72>Cm2	2 2 2 2 2 2 2 2 2 2r   r<   c                   R     e Zd ZdZdZdedej        dz  dej        de	f fdZ
 xZS )	AutoChunkSizeTypez6Custom type for chunk size that must be 4-byte alignedr4   r   r   Nr   r   c                     t                                          |||          }|dz  dk    rt          j        d          |S )N   r   z-Chunk size should be a 4-byte aligned number.)r   r   r    r.   rF   s        r   r   zAutoChunkSizeType.convert\   sB     ggooeUC007a<<$%TUUU
r   )r   r   r   r   r0   r   r    r!   r"   r7   r   r#   r$   s   @r   rK   rK   W   sq        @@D!&4!7>Cm	         r   rK   c                   d    e Zd ZdZdZdedej        dz  dej        dee	e
e
e
e
e
f         z  fdZdS )	SpiConnectionTypez
    Custom type to parse 'spi connection' override.
    Values are SPI, HSPI, or a sequence of 5 pin numbers separated by commas.
    zspi-connectionr   r   Nr   r   c                    |                                 dv r|                                 S d|v r~|                    d          }t          |          dk    rt          j        | d          	 t          d |D                       S # t          $ r t          j        | d          w xY wt          j        | d          )N)SPIHSPI,   zW is not a valid list of comma-separated pin numbers. Must be 5 numbers - CLK,Q,D,HD,CS.c              3   4   K   | ]}t          |          V  d S r   )r8   ).0vs     r   	<genexpr>z,SpiConnectionType.convert.<locals>.<genexpr>z   s(      ==\!__======r   z: is not a valid argument. All pins must be numeric values.zk is not a valid spi-connection value. Values are SPI, HSPI, or a sequence of 5 pin numbers - CLK,Q,D,HD,CS.)uppersplitlenr    r.   tupler9   )r   r   r   r   valuess        r   r   zSpiConnectionType.convertm   s    ;;==O++;;== E\\[[%%F6{{a( 9 9 9  ==f======   ( 7 7 7   $ X X X  s   /B "B*)r   r   r   r   r0   r   r    r!   r"   r\   r7   r   r:   r   r   rO   rO   e   sw         
 D!&4!7>Cm	uS#sC,-	-     r   rO   c                        e Zd ZdZd
 fd	Zdedej        dz  dej        de	e
edz  ee         f                  fd	Z xZS )AutoHex2BinTypez>Custom type for auto conversion of input files from hex to binTc                 L    t                                          |           d S )N)exists)r   r?   )r   ra   r   s     r   r?   zAutoHex2BinType.__init__   s$    '''''r   r   r   Nr   r   c                     	 t          |d          5 }t          |          cd d d            S # 1 swxY w Y   d S # t          $ r&}t          j        t          |                    d }~ww xY w)Nrb)openr   OSErrorr    r.   r   )r   r   r   r   fes         r   r   zAutoHex2BinType.convert   s    	-eT"" +a (**+ + + + + + + + + + + + + + + + + +  	- 	- 	-$SVV,,,	-s-   ; .; 2; 2; 
A+!A&&A+rH   )r   r   r   r   r?   r   r    r!   r"   listr\   r7   r
   bytesr   r#   r$   s   @r   r_   r_      s        HH( ( ( ( ( (	-	-!&4!7	->Cm	-	eC$J5	)*	+	- 	- 	- 	- 	- 	- 	- 	-r   r_   c                       e Zd ZdZdZ	 d	dej        dz  dej        dz  fdZde	e
         dej        dz  dej        fdZdS )
AddrFilenamePairTypez>Custom type for the address/filename pairs passed as argumentszaddr-filename-pairNr   r   c                     dS )Nz<address> <filename>r:   )r   r   r   s      r   get_metavarz AddrFilenamePairType.get_metavar   s
     &%r   r   c                    t          |          dz  dk    rt          j        d          t          |          dk    r|S g }t          dt          |          d          D ]}	 t	          ||                   }n,# t
          $ r t          j        d||          d          w xY w	 t          |d          sg |_        t          ||dz            d          }|j        	                    |           n3# t          $ r&}t          j        t          |                    d }~ww xY wt          ||          }	|                    |	           d}
t          |d	 
          D ]\  }}|                    dd           |                                }|                    d           |t"          j        dz
   z  }||z   t"          j        z   dz
  t"          j        dz
   z  dz
  }||
k     r!t          j        d|dd|j         d          |}
|S )N   r   zCMust be pairs of an address and the binary filename to write there.z	Address "z" must be a number._open_files   rc   c                     | d         S )Nr   r:   xs    r   <lambda>z.AddrFilenamePairType.convert.<locals>.<lambda>   s
    AaD r   )keyzDetected overlap at address: #xz for file: .)r[   r    r.   ranger8   r9   hasattrrp   rd   appendre   r   r   extendsortedseektellr   FLASH_SECTOR_SIZEr0   )r   r   r   r   pairsiaddress	argfile_frg   argfile_listendargfilesizesector_start
sector_ends                  r   r   zAddrFilenamePairType.convert   si    u::>Q$U   u::??L-/q#e**a(( 	' 	'AT&uQx00 T T T()RU1X)R)R)RSSST1sM22 )&(CO q1ut44	&&y1111 1 1 1(Q0001 ,Iw??LLL&&&&  &u.. A A A 	 	GWLLA<<>>DLLOOO"y'BQ'F%GGL4)"==A/!345J c!!(>=> >.5l> > >   CCs%   #A99)B"&A
C11
D!;!DD!r   )r   r   r   r   r0   r    r!   r"   rm   rh   r   r   r:   r   r   rk   rk      s        HHD JN& &_t+&27-$2F& & & &
0Cy0 %0 ]	0 0 0 0 0 0r   rk   c            
            e Zd ZdddddddZdd	edz  f fd
Zdee         dee         fdZde	j
        dee         f fdZde	j
        dede	j        dz  fdZde	j
        dee         deedz  e	j        dz  ee         f         f fdZ xZS )Groupz--flash-sizez--flash-freqz--flash-modez--use-segmentsz--ignore-flash-enc-efusez--pad-to-size)z--flash_sizez--flash_freqz--flash_modez--use_segmentsz'--ignore_flash_encryption_efuse_settingz--fill-flash-sizeNespc                 D    || _          t                      j        |i |S r   )_espr   __call__)r   r   argskwargsr   s       r   r   zGroup.__call__   s&    	uww0000r   r   r   c                 *   g }|D ]}d|v r|                     dd          n|d f\  }}|| j                                        v r0| j        |         }||k    rt          j        d| d| d           |}||d| z  }|                    |           |S )N=rq   zDeprecated: Option 'r*   r+   )rZ   DEPRECATED_OPTIONSkeysr	   r/   r{   )r   r   new_argsargr   new_names         r   _replace_deprecated_argszGroup._replace_deprecated_args   s     	! 	!C.1Sjj3***sDkJCd-224444237s??K5s 5 5 (5 5 5   #C {5{{"OOC    r   r   c                     | j         |_        |                     |          |_        |                     |          }t                                          ||          S )z-Set a flag if --help is used to skip the main)r   r   list_commands_commands_listr   r   
parse_args)r   r   r   r   s      r   r   zGroup.parse_args   sO    )!//44,,T22ww!!#t,,,r   cmd_namec                 4   t           j                            | ||          }||S |                     |          D ]\}|                    dd          }||k    r>t          j        d| d| d           t           j                            | ||          c S ]dS )z@Allow dash and underscore for commands for compatibility with v4Nr)   r(   zDeprecated: Command 'r*   r+   )r    r   get_commandr   r,   r	   r/   )r   r   r   rvcmd	cmd_aliass         r   r   zGroup.get_command  s    [$$T399>I%%c** 	? 	?CC--IH$$,H , ,, , ,   {..tS#>>>>> % tr   c                 r    t                                          ||          \  }}}|d d |fS |j        ||fS r   )r   resolve_commandr0   )r   r   r   r(   r   r   s        r   r   zGroup.resolve_command  sE     ww..sD993;t##xd""r   r   )r   r   r   r   r   r   rh   r   r   r    r"   r   Commandr   r\   r   r#   r$   s   @r   r   r      sS       &&&*3M, 1 1I, 1 1 1 1 1 1T#Y 49    &-em -49 - - - - - -u}  PT@T    #=#(,S	#	sTz5=4/c:	;# # # # # # # # # #r   r   c                   H     e Zd ZdZ fdZdej        dee         fdZ	 xZ
S )AddrFilenameArgz:Parse arguments as list instead of each value individuallyc                 `     t                      j        |i | t                      | _        d S r   )r   r?   rk   typer   r   r   r   s      r   r?   zAddrFilenameArg.__init__  s0    $)&)))(**			r   r   r   c                 :    | j                             |d |          S r   )r   r   )r   r   r   s      r   type_cast_valuezAddrFilenameArg.type_cast_value!  s    y  c222r   )r   r   r   r   r?   r    r"   rh   r   r   r#   r$   s   @r   r   r     sf        DD+ + + + +35= 3c 3 3 3 3 3 3 3 3r   r   c                   2     e Zd ZdZ fdZd Z fdZ xZS )OptionEatAllz^Grab all arguments up to the next option/command.
    Imitates argparse nargs='*' for options.c                     t                      j        |i | d | _        d | _        | j        rRt          | j        d          r?d|                                 p| j        j                                         d| _	        d S d S d S )Nr0   [])
r   r?   _previous_parser_process_eat_all_parserr   rz   _get_metavarr0   rY   metavarr   s      r   r?   zOptionEatAll.__init__)  s    $)&)))(,%#9 	PF33 	POt0022Ldin6J6J6L6LOOODLLL	P 	P 	P 	Pr   c                     	 t          j        d          }| j                            d|          S # t          $ r | j                            d          cY S w xY w)zGet the metavar for the option. Wrapper for compatibility reasons.
        In Click 8.2.0+, the `get_metavar` requires new parameter `ctx`.
        T)silentN)r    get_current_contextr   rm   	TypeError)r   r   s     r   r   zOptionEatAll._get_metavar1  si    	/+4888C9((s333 	/ 	/ 	/9((.....	/s   /2 $AAc                 <     fd}t                                          ||          } j        D ]j}|j                            |          p|j                            |          }|r2| _        |j         _        ||_        t          |dg            _
         nk|S )Nc                    d}| g}|j         r|sj        j        D ]&}|j         d                             |          rd} n'|j         d         j        v rd}|s-|                    |j                             d                     |j         r|j        r|D ]}                    ||           d S                     ||           d S )NFr   T)	rargsr   prefixes
startswithr   r{   popmultipler   )r   statedoner]   prefixrW   r   s         r   parser_processz2OptionEatAll.add_to_parser.<locals>.parser_process<  s   DWF+ 6d 6"2;  F{1~0088 # ;q>T%888D 6MM%+//!"4"4555 + 6d 6 } =   < <A11!U;;;;< < --fe<<<<<r   r   )r   add_to_parseropts	_long_optget
_short_optr   processr   getattrr   )r   parserr   r   retvalr0   current_parserr   s   `      r   r   zOptionEatAll.add_to_parser;  s    	= 	= 	= 	= 	=0 &&vs33I 
	 
	D#-11$77V6;L;P;PQU;V;VN '5$0>0F-)7&&-c3CR&H&H# r   )r   r   r   r   r?   r   r   r#   r$   s   @r   r   r   %  so        0 0P P P P P/ / /% % % % % % % % %r   r   c                   <     e Zd ZdZ fdZdedefdZ fdZ xZS )MutuallyExclusiveOptionai  Custom option class to enforce mutually exclusive options in click.
    Similar to argparse function `add_mutually_exclusive_group`.

    This class ensures that certain options cannot be used together by raising
    a UsageError if mutually exclusive options are provided.

    For example, `--compress` and `--no-compress` are mutually exclusive options.
    c                 $    t          |                    dg                      _         j        rEd                     fd j        D                       }|                    dd           d| d|d<    t                      j        |i | d S )Nexclusive_with, c                 :    g | ]}                     |          S r:   _to_option_namerV   optr   s     r   
<listcomp>z4MutuallyExclusiveOption.__init__.<locals>.<listcomp>q  '    NNNs%%c**NNNr   help z; NOTE: This argument is mutually exclusive with arguments: rx   )setr   mutually_exclusivejoinr   r   r?   )r   r   r   ex_strr   s   `   r   r?   z MutuallyExclusiveOption.__init__m  s    "%fjj1A2&F&F"G"G" 	YYNNNNd6MNNN F ::fb)) - -#)- - - 6N 	$)&)))))r   r0   r   c                 4    d|                     dd           S )zConvert dictionary entry for option ('my_name') to click option name
        ('--my-name'). Add '--' prefix and replace '_' with '-'. This is assuming
        options don't use '_'.z--r(   r)   )r,   )r   r0   s     r   r   z'MutuallyExclusiveOption._to_option_namey  s      -DLLc**,,,r   c                 D     j                             |          rb j        |v rYd                     fd j         D                       }t	          j        d                      j                   d| d          t                                          |||          S )Nr   c                 :    g | ]}                     |          S r:   r   r   s     r   r   z?MutuallyExclusiveOption.handle_parse_result.<locals>.<listcomp>  r   r   zIllegal usage: z' is mutually exclusive with arguments: rx   )	r   intersectionr0   r   r    
UsageErrorr   r   handle_parse_result)r   r   r   r   optionsr   s   `    r   r   z+MutuallyExclusiveOption.handle_parse_result  s    "//55 	$)t:K:KiiNNNNd6MNNN G "8$"6"6ty"A"A 8 8-48 8 8   ww**3d;;;r   )	r   r   r   r   r?   r   r   r   r#   r$   s   @r   r   r   c  s}         
* 
* 
* 
* 
*-C -C - - - -	< 	< 	< 	< 	< 	< 	< 	< 	<r   r   rt   r   c                 "    t          | d          S )z"Parse an integer value in any baser   )r7   rs   s    r   r8   r8     s    q!99r   r   c                 (   g }g }g }g }| D ]}|                     d          }t          |          dk    rt          d          |d         dk    r)|                    t	          |d                              o|d         dk    r)|                    t	          |d                              |d         dk    r|                    |d                    |d         d	k    r|                    |d                    t          d
          ||||fS )zDParse port filter arguments into separate lists for each filter typer   ro   z8Option --port-filter argument must consist of key=value.r   vidrq   pidr0   serialz1Option --port-filter argument key not recognized.)rZ   r[   r   r{   r8   )r   
filterVids
filterPidsfilterNamesfilterSerialsrf   kvps          r   parse_port_filtersr     s(    JJKM R Rggclls88q==WXXXq6U??l3q6223333Vu__l3q6223333Vvs1v&&&&Vx  Q((((PQQQz;==r   r   r   c                    t          |t                    rE| j        s<t          t	          |                     }|r||k    rt          d|dd|dd          |S |                                dk    rt          d| d          | j        rt          d          t	          |           }|t          d
          t          j        d|            t          |          S )z:Parse the flash size argument and return the size in byteszSpecified size rw   z% is greater than detected flash size rx   rA   zInvalid size value: z. Use an integer or 'all'.zWDetecting flash size is not supported in secure download mode. Set an exact size value.Nz5Detecting flash size failed. Set an exact size value.zDetected flash size: )	r6   r7   secure_download_moder   r   r   rE   r	   print)r   r   detected_sizesize_strs       r   parse_size_argr     s#   $ ' 	,->s-C-CDDM !5!5 +dT + +$*+ + +   zz||uPPPPQQQ
 
'
 
 	
 !%%HPQQQI0h00111H%%%r   ))
rich_clickr    esptool.bin_imager   r   esptool.cmdsr   esptool.utilr   r   r   esptool.loggerr	   typingr
   r   Choicer   r&   	ParamTyper3   r<   rK   rO   Pathr_   rk   	RichGroupr   Argumentr   Optionr   r   r   r7   r8   r\   rh   r   r   r:   r   r   <module>r     s=       9 9 9 9 9 9 9 9 * * * * * * F F F F F F F F F F              
2 2 2 2 2u| 2 2 22 2 2 2 2EL 2 2 2"K K K K K K K K 2 2 2 2 2: 2 2 26    
          D- - - - -ej - - -$: : : : :5: : : :@># ># ># ># >#EO ># ># >#B3 3 3 3 3en 3 3 3; ; ; ; ;5< ; ; ;|%< %< %< %< %<el %< %< %<VC C    
>:>
49d3icDI56> > > >2&	 &s &s & & & & & &r   