
    :)diǛ                         d dl mZ d dlZd dlZd dlmZmZmZmZ d dl	m
Z
mZ d dlZd dlmZ ddlmZ  G d d	          Z G d
 d          Z G d de          Z G d d          Z G d de          ZdS )    )abstractmethodN)BitArray	BitStreamBitsCreationError)EfuseBlocksBaseEfuseRegistersBase)log   )utilc                       e Zd Zd Zd ZdS )CheckArgValuec                 "    || _         || _        d S N)efusesname)selfr   r   s      a/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/espefuse/efuse/base_fields.py__init__zCheckArgValue.__init__   s    			    c                 n    d }| j         | j                 }|                    |          } |||          S )Nc           	      H   | j                             d          rI|dnt          |d          }|dk    r-t          j        d                    | j        |                    n| j                             d          r| j        dk    rD|0|                                 }|}d}||k    r||z  }|dz  }||k    ngt          |d          }nU|,t          j        d                    | j                            t          |d          }|dk    r-t          j        d                    | j        |                    n| j                             d	          r|,t          j        d                    | j                            t          |          d
z  | j
        j	        k    rHt          j        d                    | j        | j
        j	        t          |          d
z                      n2t          j        d                    | j         | j                            |S )Nboolr   r   zPNew value is not accepted for eFuse '{}' (will always burn 0->1), given value={})intuintbitcountz.New value required for eFuse '{}' (given None)z4New value should not be 0 for '{}' (given value= {})bytes   zHThe length of eFuse '{}' ({} bits) (given len of the new value= {} bits)z6The '{}' type for the '{}' eFuse is not supported yet.)
efuse_type
startswithr   esptool
FatalErrorformatr   efuse_classget_rawlenbitarray)efuse	new_value	old_valuebits       r   check_arg_valuez/CheckArgValue.__call__.<locals>.check_arg_value   sf   **622 5!*!2AAIq8I8I	>>!,BBH&!J	C C   " !,,_== ,$
22 ($)MMOO	$-	'944(+iIAIC (944 %(	1$5$5		 (%0LSS %
   
 !$Iq 1 1I A~~%0006uz90M0M   &
 !,,W55 $!,HOO!J   
 y>>A%);;;!,@@F!J(:C	NNQ<NA A   < (LSS(%*   
 r   )r   r   check_format)r   new_value_strr,   r(   r)   s        r   __call__zCheckArgValue.__call__   sG    7	 7	 7	r DI&&&}55	ui000r   N)__name__
__module____qualname__r   r/    r   r   r   r      s2          <1 <1 <1 <1 <1r   r   c                       e Zd ZU eee         z  dz  ed<   eee         z  dz  ed<   ded<   eed<   ddZd Zdd	edz  d
e	fdZ
d Zd
e	fdZd Zd ZdS )EfuseProtectBaseNread_disable_bitwrite_disable_bitEspEfusesBaseparentr   c                     d}t          | j        t                    r)|| j        D ]
}|d|z  z  }n|d| j        |         z  z  }n
d| j        z  }|S )zReturns mask of read protection bits
        blk_part:
            - None: Calculate mask for all read protection bits.
            - a number: Calculate mask only for specific item in read protection list.
        r   Nr   )
isinstancer6   list)r   blk_partmaskis       r   get_read_disable_maskz&EfuseProtectBase.get_read_disable_mask_   sw     d+T22 	.. # #AAFNDD# T28<<<--Dr   c                 j    t          |                                                               d          S )z<Returns the number of read protection bits used by the field1)binr@   countr   s    r   get_count_read_disable_bitsz,EfuseProtectBase.get_count_read_disable_bitsp   s,     4--//0066s;;;r   r=   returnc                     | j         }|dS | j        d                                         |                     |          z  dk    S )zCheck if the eFuse is readable by software

        Args:
            blk_part: The part of the block to check.
                If None, check all parts.

        Returns:
            bool: True if the eFuse is readable by software
        NTRD_DISr   )r6   r9   getr@   )r   r=   num_bits      r   is_readablezEfuseProtectBase.is_readableu   sH     '?4H%))++d.H.H.R.RRWXXXr   c                 
   | j         }|t          j        d          | j        d                                         st          j        d          | j        d                             |                                            d S )Nz"This eFuse cannot be read-disabledrI   zWThis eFuse cannot be read-disabled due to the RD_DIS field being already write-disabled)r6   r!   r"   r9   is_writeablesaver@   r   rK   s     r   disable_readzEfuseProtectBase.disable_read   s    '?$%IJJJ{8$1133 	$)   	H""4#=#=#?#?@@@@@r   c                 j    | j         }|dS | j        d                                         d|z  z  dk    S )zCheck if the eFuse is writeable by software

        Returns:
            bool: True if the eFuse is writeable by software
        NTWR_DISr   r   )r7   r9   rJ   rP   s     r   rN   zEfuseProtectBase.is_writeable   s=     (?4H%))++qG|<BBr   c                     | j         }| j        d                                         st          j        d          | j        d                             d|z             d S )NrS   zXThis eFuse cannot be write-disabled due to the WR_DIS field being already write-disabledr   )r7   r9   rN   r!   r"   rO   rP   s     r   disable_writezEfuseProtectBase.disable_write   sf    ({8$1133 	$)   	H""1<00000r   c                 6   |                                  s:d                    | j                  }	 |dz  }| j                            |           |                                 s6d                    | j                  }| j                            |           d S d S )Nz	{} is read-protected.z7	Burn in this case may damage an already written value.z-	{} is write-protected. Burn is not possible.)rL   r#   r   r9   print_error_msgrN   r   	error_msgs     r   check_wr_rd_protectz$EfuseProtectBase.check_wr_rd_protect   s    !! 	3188CCIRSSIK''	222  "" 	3HOO	 I K''	22222		3 	3r   r   )r0   r1   r2   r   r<   __annotations__strr@   rF   r   rL   rQ   rN   rU   rZ   r3   r   r   r5   r5   X   s        DIo,,,,T#Y----
III   "< < <
Y YC$J Y$ Y Y Y Y	A 	A 	A	Cd 	C 	C 	C 	C1 1 1
3 
3 
3 
3 
3r   r5   c                       e Zd ZddddeddfdZed             Zd	 Zd
 ZddZ	ddede
fdZddede
fdZd Zd ZddZddZd Zd Zd Zd ZdS )EfuseBlockBaseFr9   r8   	skip_readrG   Nc                    || _         |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j	        | _
        |                                 dz  }t          |          | _        | j                            d           t          |          | _        | j                            d           d| _        d| _        | j        dk    r/t          |          | _        | j                            d           nd | _        |s|                                  d S d S )Nr   r   F)r9   r   aliasidrd_addrwr_addrr7   r6   r&   key_purposekey_purpose_nameget_block_lenr   r'   setwr_bitarrayfail
num_errorserr_bitarrayread)r   r9   paramr_   bit_block_lens        r   r   zEfuseBlockBase.__init__   s0   %+	 %
x!M!M-2-D,1,B	,1,=!//11A5#,]#;#;!&/&>&>Q	 7a<<2;M2J2JD!!!$$$$ $D 	IIKKKKK	 	r   c                     d S r   r3   rE   s    r   apply_coding_schemez"EfuseBlockBase.apply_coding_scheme       r   c                     |                                  }|| j        j        j        k    r
| j        dz  S || j        j        j        k    r| j        dz  dz  dz  S || j        j        j        k    r
| j        dz  S t          j        d| d          )N      zCoding scheme (z) not supported)	get_coding_schemer9   REGSCODING_SCHEME_NONEr&   CODING_SCHEME_34CODING_SCHEME_RSr!   r"   )r   coding_schemes     r   rg   zEfuseBlockBase.get_block_len   s    ..00DK,???8a<dk.???HqLA%**dk.???8a<$%U}%U%U%UVVVr   c                 R    | j         dk    r| j        j        j        S | j        j        S )Nr   )rb   r9   rw   rx   r{   rE   s    r   rv   z EfuseBlockBase.get_coding_scheme   s&    7a<<;#66;,,r   Tc                 6    |r| j         j        S | j        j        S r   )r'   r   ri   r   	from_reads     r   r%   zEfuseBlockBase.get_raw   s!     	*=&&#))r   r   c                 .    |                      |          S )Nr   get_bitstringr~   s     r   rJ   zEfuseBlockBase.get   s    !!I!666r   c                 "    |r| j         S | j        S r   )r'   ri   r~   s     r   r   zEfuseBlockBase.get_bitstring   s     	$= ##r   c                 r    t          |t                    r|S t          |t          |          dz            S )Nr   r   length)r;   r   r&   )r   new_datas     r   convert_to_bitstringz#EfuseBlockBase.convert_to_bitstring   s8    h)) 	FO(3x==13DEEEEr   c                 8     d } fd |           D             S )Nc                 b      fdt          d                                 d          D             S )Nc                 $    g | ]}|j         z   S r3   )rc   ).0xr   s     r   
<listcomp>zAEfuseBlockBase.get_words.<locals>.get_offsets.<locals>.<listcomp>   s     PPPA$PPPr   r   rt   )rangerg   rE   s   `r   get_offsetsz-EfuseBlockBase.get_words.<locals>.get_offsets   s5    PPPPeAt7I7I7K7KQ.O.OPPPPr   c                 D    g | ]}j                             |          S r3   )r9   read_reg)r   offsr   s     r   r   z,EfuseBlockBase.get_words.<locals>.<listcomp>   s)    IIIt$$T**IIIr   r3   )r   r   s   ` r   	get_wordszEfuseBlockBase.get_words   s<    	Q 	Q 	Q JIII{{47H7HIIIIr   c                    |                                  }t                      }t          |          D ]}|                    d|            | j                            |d           |r|                     | j        d           d S d S )Nzuint:32=r   pos	read_regs)r   r   reversedappendr'   	overwriteprint_block)r   
print_infowordsdatawords        r   rm   zEfuseBlockBase.read   s      zzUOO 	+ 	+DKK)4))****!,,, 	9T]K88888	9 	9r   c                 r   | j         j        s|rd|_        t          j        | j        ddd                    | j                  d d         dd| j        dd	| d
d                    d |	                    t          |j        dz             d          d d d         D                                  d S d S )Nr   z<15s (    z<16sz) [<2dz] :c                     g | ]}|d S )08xr3   )r   r   s     r   r   z.EfuseBlockBase.print_block.<locals>.<listcomp>  s,            r       z*uint:32)r9   debugr   r
   printr   joinra   rb   readlistr   r&   )r   
bit_stringcommentr   s       r   r   zEfuseBlockBase.print_block  s   ; 	 	JNI9G . .SXXdj%9%9#2#%>G . .G-. .#*. . . $.$7$7":>B#677AAA% %$B$%        	 	r   c           
         | j         }|                    d          r@| j        j        r2t	          j        d                    | j        | j                             dS t          |j
                  t          | j        j
                  k    rLt          j        d| j         dt          | j        j
                   dt          |j
                   d          |                                  |                                                     d          r4t	          j        d                    | j        | j                             d S |                                 |k    rIt	          j        d                    | j        | j                             |                    d	           d S t	          j        d
                    | j        | j                             t	          j        d|                                            t	          j        d|           |                                 |z  }||k    r+t	          j        d           |                    d	           d S |                                 }|| j        j        j        k    rt	          j        d           d S || j        j        j        k    r;t	          j        d           d| j         d}| j                            |           d S || j        j        j        k    rZt	          j        d           d}t/          d	|                                 j	        d          D ]}|                                 ||dz            }|||dz            }|                    d          r|                    d          rt	          j        d|dz   dd           ||k    r5t	          j        d           |||dz                                d	           t	          j        d           t	          j        d|           t	          j        d|           d}|r'd| j         d}| j                            |           d S d S t          j        d| d          ) NFz[{:02}] {:20} nothing to burnzData does not fit: blockz size z bytes, data z bytesz/[{:02}] {:20} is empty, will burn the new valuezJ[{:02}] {:20} is already written the same value, continue with EMPTY_BLOCKr   z[{:02}] {:20} is not emptyz	(written ):z	(to write):zJ	All wr_data bits are set in the written block, continue with EMPTY_BLOCK.z	(coding scheme = NONE)z	(coding scheme = RS)z	Burn into z5 is forbidden (RS coding scheme does not allow this).z	(coding scheme = 3/4)0   Tz	written chunk [z] and wr_chunk are not empty.  )endz0wr_chunk == rd_chunk. Continue with empty chunk.z#wr_chunk != rd_chunk. Can not burn.z		written z		to writez6 is forbidden (3/4 coding scheme does not allow this).zThe coding scheme (z) is not supported.)ri   allr9   r   r
   r   r#   rb   r   r&   r   r'   r!   r"   rZ   r   rh   rv   rw   rx   rz   rW   ry   r   any)	r   wr_datar>   r{   rY   data_can_not_be_burnr?   rd_chunkwr_chunks	            r   check_wr_datazEfuseBlockBase.check_wr_data  s   ";;u 	{  V	9@@$)TTUUU5w}T]%8!9!999$U47 U Ut}*++U U:=gm:L:LU U U   	  """##E** E	IAHHGTY      !!##w..	006tw	0J0J   A	6==dgtyQQRRR	/4+=+=+?+?@@@	/7333))++g57??I5   KKNNNNN$($:$:$<$<M$(8(KKK	"<=====&$+*:*KKK	":;;;F49 F F F " 33I>>>>>&$+*:*KKK	";<<</4,!&q$*<*<*>*>*BE!J!J D DA'+'9'9';';AE	O'LH'.q1u9'?H'||D11 D#+<<#5#5 !D$'I);A%L ); ); );,.%& %& %& %&
 (08';';(+	-I)* )* )* )0AI(@(D(DQ(G(G(G(G(+	2W(X(X(X(+	,(I(I(I(+	,(I(I(I?C(</ C!Kty !K !K !K & !K77	BBBBBC C &0T-TTT  r   c                    t          |d d d         t          |          dz            }| j        j        r,t	          j        d|                                  d|            | j                            | j        |z  d           d S )Nr   r   r   z	written : z ->
	to write: r   r   )	r   r&   r9   r   r
   r   r   ri   r   )r   r   r   s      r   rO   zEfuseBlockBase.savej  s     x"~c(mma6GHHH; 	TIRT%7%7%9%9RRDRRSSS""4#3d#:"BBBBBr   c                    t          d          D ]}| j                                         | j        j        rt	          j        d| j                    | j        }|D ]J}| j        j        rt	          j        d|dd|d           | j                            ||           |dz  }K| j        	                    | j                   t          d          D ]u}| j        
                                 | j                            d	           | j        s| j        r1t	          j        d
| j         d| d| j         d| j                     nv| j        s| j        dk    r~|                     d           | j        | j        z  | j        k    rM|dk     r%t	          j        d| j         d|dz    d           t	          j        d|dz    d| j                     d S d S )Nru   zWrite data to BLOCKzAddr 10xz, data=rt      T)silentzError in BLOCKz, re-burn it again (#z) to fix. fail_bit=z, num_errors=r   F)r      z
Repeat burning BLOCKz (#z) because not all bits were setz
After r   z1 attempts, the required data was not set to BLOCK)r   r9   efuse_controller_setupr   r
   r   rb   rd   	write_regwrite_efuses
efuse_readget_coding_scheme_warningsrj   rk   rm   ri   r'   )r   r   burnswrite_reg_addrr   _s         r   
burn_wordszEfuseBlockBase.burn_wordsx  sr   1XX +	 +	EK..000{  ;	999:::!\N $ $ ;$ MIKnKKKKKKLLL%%nd;;;!#K$$TW---1XX  &&(((66d6CCC9  IO O Ou O O%)YO O=A_O O   E 9 A!5!5		U	+++#dm3t7GGGqyy	<TW < < < < <   !	5uqy 5 5+/75 5   W+	 +	r   c                 .   | j                             d          rd S | j        d d          }|| j        usJ |                     | j         d           |                                 }|                     |           |                                  |                                 s~t          j	        | j
         d| j         d           | j                            d          rt          j	        d           nt          j        d| j
         d| j        j         d          | j         | j        k    rt          j	        d	| j        d
d           n| j         | j        z  | j         k    r-| j        |z  |k    rt          j	        d	| j        d
d           nf|                     | j         d           |                     | j        d           | j        dk    r%t          j        d| j
         d| j         d          | j                             d           d S )NFto_writer   z>) is read-protected. Read back the burn value is not possible.zRead all '0'zThe z$ is read-protected but not all '0' ()z
BURN BLOCKr   z! - OK (write block == read block)z$ - OK (all write block bits are set)ExpectedzReal    r   zBurn z) was not successful.)ri   r   r'   r   rq   r   rm   rL   r
   r   r   ra   r!   r"   hexrb   rh   )r   before_burn_bitarrayr   s      r   burnzEfuseBlockBase.burn  sa   && 	F#}QQQ/#4=8888):666((**		!! !	I9 < <
 < < <   }  '' 	.)))) (-49 - -)- - -  
 4=00	UtwUUUUVVVV 4=0D4DDDM$88<PPP	RRRRR      !1:>>>  
;;; 7a<<!,N	NNTZNNN   	Qr   FT)r0   r1   r2   r   r   r   rq   rg   rv   r%   r   rJ   r   r   r   rm   r   r   rO   r   r   r3   r   r   r^   r^      sq         $ SW    6   ^	W 	W 	W- - -* * * *7 7T 7Y 7 7 7 7$ $t $y $ $ $ $F F FJ J J9 9 9 9    S S SjC C C, , ,\,  ,  ,  ,  , r   r^   c                   "   e Zd ZU dZej        ed<   g Zee	         ed<   g Z
eed<   dZdZdZeed<   dZeed	<   g Zee         ed
<   ee         ed<   eed<   	 	 	 	 d6dej        dedededdddfdZd Zed             Zd Zd Zd Zd7dZd Zd Zed             Z ed             Z!ed             Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d8d&edefd'Z)e*d(             Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5ed3             Z6ed8d4efd5            Z7dS )9r8   zQ
    Wrapper object to manage the efuse fields in a connected ESP bootloader
    _espblocksr   Nr   batch_mode_cntFpostponeBURN_BLOCK_DATA_NAMESrw   Blocksespskip_connectr   do_not_confirmextend_efuse_tablerG   c                 0    || _         || _        || _        d S r   )r   r   r   )r   r   r   r   r   r   s         r   r   zEspEfusesBase.__init__  s      	
,r   c                 4    | j                                         S r   )r   __iter__rE   s    r   r   zEspEfusesBase.__iter__  s    {##%%%r   c                     d S r   r3   r   
efuse_names     r   __getitem__zEspEfusesBase.__getitem__  rr   r   c                 4    | j                                         S r   )r   get_crystal_freqrE   s    r   r   zEspEfusesBase.get_crystal_freq  s    y))+++r   c                 6    | j                             |          S )z,Read the nth word of the ESP3x EFUSE region.)r   
read_efuse)r   ns     r   r   zEspEfusesBase.read_efuse  s    y##A&&&r   c                 6    | j                             |          S r   )r   r   )r   addrs     r   r   zEspEfusesBase.read_reg  s    y!!$'''r       c                 >    | j                             |||||          S r   )r   r   )r   r   valuer>   delay_usdelay_after_uss         r   r   zEspEfusesBase.write_reg  s     y""4hOOOr   c                 :    | j                             |||          S r   )r   
update_reg)r   r   r>   new_vals       r   r   zEspEfusesBase.update_reg  s    y##D$888r   c                     d S r   r3   rE   s    r   r   z$EspEfusesBase.efuse_controller_setup  s    r   c                     d S r   r3   r   blocks     r   r   zEspEfusesBase.write_efuses  rr   r   c                     d S r   r3   rE   s    r   r   zEspEfusesBase.efuse_read  rr   r   c                     d S r   r3   rE   s    r   read_coding_schemez EspEfusesBase.read_coding_scheme  rr   r   c                 4   t          j        d           |j        j        }|j        j        }|                                |j        k    rdnd}t          j        d| d| d|            |j                                         t          j	        |||          S )NzRe-connecting...z	usb-resetzdefault-resetzPort: z, Baudrate: z, Connect mode: )
r
   r   _portbaudrateport_get_pidUSB_JTAG_SERIAL_PIDcloser!   detect_chip)r   r   r   r   connect_modes        r   reconnect_chipzEspEfusesBase.reconnect_chip  s    	$%%%9%y~ ||~~!888 K  	
 		U4UUXUU|UUVVV	"4<@@@r   c                 T    | j         D ]}|j        |k    s	||j        v r	|j        c S  d S r   )r   r   ra   rb   )r   r   r   s      r   get_index_block_by_namez%EspEfusesBase.get_index_block_by_name$  sA    [ 	  	 EzT!!TU[%8%8x &9tr   c                 B    | j         D ]}|                                 d S r   )r   rm   r   s     r   read_blockszEspEfusesBase.read_blocks*  s,    [ 	 	EJJLLLL	 	r   c                 n    | j         D ],}|                    | j        |j                 j                   -d S r   )r   updater   r   r'   )r   r(   s     r   update_efuseszEspEfusesBase.update_efuses.  s>    [ 	< 	<ELLU[1:;;;;	< 	<r   c                    i }|j         dk    r|S ddg}| j        j        dk    r@|                    d           |                    d           |                    d           nT|                    d           |                    d	           |                    d
           |                    d           d }|D ]} || |          ||<   t	          d |                                D                       r`| j        r(t          j        d           t          j        |           |	                                D ]}| |         
                                 |S )Nr   rS   rI   ESP32UART_DOWNLOAD_DIS
ABS_DONE_1FLASH_CRYPT_CNTENABLE_SECURITY_DOWNLOADDIS_DOWNLOAD_MODESPI_BOOT_CRYPT_CNTSECURE_BOOT_ENc                 :    | |                              d          S )NFr   r   r   s     r   get_raw_value_from_writezSEspEfusesBase.postpone_efuses_from_block0_to_burn.<locals>.get_raw_value_from_writeR  s    
#11E1BBBr   c              3   "   K   | ]
}|d k    V  dS r   Nr3   r   r   s     r   	<genexpr>zDEspEfusesBase.postpone_efuses_from_block0_to_burn.<locals>.<genexpr>X  &      @@euz@@@@@@r   z9These BLOCK0 eFuses will be burned later at the very end:)rb   r   	CHIP_NAMEr   r   valuesr   r
   r   keysreset)r   r   postpone_efusesefuses_listr  r   key_names          r   #postpone_efuses_from_block0_to_burnz1EspEfusesBase.postpone_efuses_from_block0_to_burn2  s   8q==""  *9'))2333|,,,01111 9:::23333444/000	C 	C 	C & 	U 	UJ*B*B4*T*TOJ''@@'='='?'?@@@@@ 	'z +	UVVV	/***+0022 ' 'X$$&&&&r   c                     t          d |                                D                       rLt          j        d           |                                D ]%}| |                             ||                    $d S d S )Nc              3   "   K   | ]
}|d k    V  dS r  r3   r  s     r   r  zMEspEfusesBase.recover_postponed_efuses_from_block0_to_burn.<locals>.<genexpr>b  r  r   z"Burn postponed eFuses from BLOCK0.)r   r  r
   r   r   rO   )r   r"  r$  s      r   ,recover_postponed_efuses_from_block0_to_burnz:EspEfusesBase.recover_postponed_efuses_from_block0_to_burna  s    @@'='='?'?@@@@@ 	?I:;;;+0022 ? ?X##OH$=>>>>	? 	?? ?r   check_batch_modec                    |r!| j         dk    rt          j        d           dS t          j        d           t          j        d           d}| j        D ]C}|                                 |s+|                    d                              d          rd}D|st          j        d           dS t                              d	| j	                   d
 }t          | j                  D ]O}| j        r|                     |          nd } |||           |r!|                     |            |||           Pt          j        d           |                                  |                                  |                                  dS )Nr   zH
Batch mode is enabled, the burn will be done at the end of the command.Fz
Check all blocks for burn...z$idx, BLOCK_NAME,          Conclusionr   Tz$Nothing to burn, see messages above.r   c                    | j         }| j        }|                                  | j         r|| j         k    s| j        r| j        |k    r|rt          j        d           t          j        d           t          j        d           d                    d |                                D                       }t          j        d           t          j        d| d           t          j        d	          d S d S )
Nz5The postponed eFuses were not burned due to an error.z*	1. Try to fix a coding error by this cmd:z%	   'espefuse check-error --recovery'r   c              3   T   K   | ]#\  }}|                     d           | d| V  $dS )Tr   N)r   )r   keyr   s      r   r  z=EspEfusesBase.burn_all.<locals>.burn_block.<locals>.<genexpr>  sX       . .&C 99T??.((((. . . . . .r   z2	2. Then run the cmd to burn all postponed eFuses:z	   'espefuse burn-efuse 'z Error(s) were detected in eFuses)	rj   rk   r   r
   r   r   itemsr!   r"   )r   postponed_efusesold_failold_num_errorscommand_strings        r   
burn_blockz*EspEfusesBase.burn_all.<locals>.burn_block}  s   zH"-NJJLLL
 Mx5:55   6%*%5%F%F# 
NIUVVVIKLLLIFGGG%(XX . .*:*@*@*B*B. . . & &N
 ISTTTIL>LLLMMM()KLLL  65%F%Fr   zReading updated eFuses...)r   r
   r   r   r   r   r   r8   confirmr   r   r   r%  r(  r   r
  r  )r   r)  have_wr_data_for_burnr   r4  r0  s         r   burn_allzEspEfusesBase.burn_allg  s    	"a''	G   u	2333	8999 %[ 	- 	-E!!!( -U-@-@5-@-Q-Q-U-U. . - )-%$ 	I<===4b$"5666	M 	M 	M, dk** 	4 	4E =88???  Ju./// 4AABRSSS
5"2333	-...!!!tr   c                 4   t          j        d                    | |                     d          rdnd                     |sTt          j        dd           t	                      }|dk    r,t          j        d	           t          j        d
           d S d S d S )Nz'{}{}
This is an irreversible operation!
r   z. z'Type 'BURN' (all capitals) to continue.T)flushBURNz	Aborting.r   )r
   r   r#   endswithinputsysexit)actionr   yess      r   r5  zEspEfusesBase.confirm  s    	6==food33= 	
 	
 	

  	I?tLLLL ''Cf}}	+&&&	 	
 }r   c                     | j         | j         s|dz  }| j         rt          j        |d           d S t          j        |          )Nz0(use '--force-write-always' option to ignore it)z.Skipped because '--force-write-always' option.)force_write_alwaysr
   r   r!   r"   rX   s     r   rW   zEspEfusesBase.print_error_msg  sW    ".* POO	" 	0Ii!QRRRRR$Y///r   c                 J    | j         |         j        | j         |         j        fS )z+Returns (error count, failure boolean flag))r   rk   rj   )r   	block_nums     r   get_block_errorszEspEfusesBase.get_block_errors  s!    {9%0$+i2H2MMMr   c                     dS )NFr3   rE   s    r   is_efuses_incompatible_for_burnz-EspEfusesBase.is_efuses_incompatible_for_burn  s	     ur   c                 Z    	 | d                                          S # t          $ r Y dS w xY w)NWAFER_VERSION_MAJORr   rJ   KeyErrorrE   s    r   get_major_chip_versionz$EspEfusesBase.get_major_chip_version  A    	-.22444 	 	 	11	    
**c                 Z    	 | d                                          S # t          $ r Y dS w xY w)NWAFER_VERSION_MINORr   rK  rE   s    r   get_minor_chip_versionz$EspEfusesBase.get_minor_chip_version  rN  rO  c                 Z    |                                  dz  |                                 z   S Nd   )rM  rR  rE   s    r   get_chip_versionzEspEfusesBase.get_chip_version  s*    **,,s2T5P5P5R5RRRr   c                 Z    	 | d                                          S # t          $ r Y dS w xY w)NBLK_VERSION_MAJORr   rK  rE   s    r   get_major_block_versionz%EspEfusesBase.get_major_block_version  A    	+,00222 	 	 	11	rO  c                 Z    	 | d                                          S # t          $ r Y dS w xY w)NBLK_VERSION_MINORr   rK  rE   s    r   get_minor_block_versionz%EspEfusesBase.get_minor_block_version  rZ  rO  c                 Z    |                                  dz  |                                 z   S rT  )rY  r]  rE   s    r   get_block_versionzEspEfusesBase.get_block_version  s*    ++--3d6R6R6T6TTTr   c                 Z    	 | d                                          S # t          $ r Y dS w xY w)NPKG_VERSIONr   rK  rE   s    r   get_pkg_versionzEspEfusesBase.get_pkg_version  s@    	&**,,, 	 	 	11	rO  c                     d S r   r3   rE   s    r   summaryzEspEfusesBase.summary  rr   r   r   c                     d S r   r3   )r   r   s     r   r   z(EspEfusesBase.get_coding_scheme_warnings  rr   r   )FFFN)r   r   r   r   )8r0   r1   r2   __doc__r!   	ESPLoaderr[   r   r<   r^   r   r{   rC  r   r   r   r   r   r\   typer	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r%  r(  r7  staticmethodr5  rW   rF  rH  rM  rR  rV  rY  r]  r_  rb  rd  r   r3   r   r   r8   r8     s}          
#%FD %%%FDMNCHd')49)))
!
""""
 #$#'
- 
-
- 
- 	
-
 
- !
- 

- 
- 
- 
-& & &   ^, , ,' ' '( ( (P P P P9 9 9     ^   ^   ^A A A    < < <- - -^? ? ?= = =$ = = = =~   \0 0 0N N N  
    S S S    U U U     ^      ^  r   r8   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
dd
edeez  fdZdd
edeez  ez  fdZdd
edeez  ez  fdZdd
edeez  fdZd Zd Zd ZdS )EfuseFieldBasec                 ,   |j         | _         || _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _	        |j
        | _        |j        | _        |j        | _        |j        | _        |j        | _        d| _        d| _        t'          | j                  | _        | j                            d           |                     | j        j        | j                 j                   d S )NFr   )categoryr9   r   r   r   r7   r6   r   
class_typer$   rh  r   description
dictionary
dict_valuebit_len	alt_namesrj   rk   r   r'   rh   r  r   )r   r9   rn   s      r   r   zEfuseFieldBase.__init__  s    [
J	9!&!8 % 6J	 +$z ,*}	!$,//!DK&tz2;<<<<<r   c                 &    | j         d u p| j        d u S r   )r   r   rE   s    r   is_field_calculatedz"EfuseFieldBase.is_field_calculated  s    yD 4DH$44r   c                     ||S | j                             d          rN|                    d          r%t          j        |dd                    d d d         S t          j        |          S |S )Nr   0xr   r   )r   r    binascii	unhexlify)r   r.   s     r   r-   zEfuseFieldBase.check_format  s|       ))'22 % ++D11 	= $-mABB.?@@2FF
 $-m<<<$$r   c           
         t          |t                    r|S | j                            d          r*t          |d d d         t	          |          dz            S 	 t          | j        d                    |          z             S # t          $ rA}t          j        d| d| j	         d| j         d	           t          j        |          d }~ww xY w)
Nr   r   r   r   z={}zNew value 'z' is not suitable for r   r   )r;   r   r   r    r&   r#   r   r
   r   r   r!   r"   )r   r)   errs      r   r   z#EfuseFieldBase.convert_to_bitstring   s    i** 	2))'22 2  i"oc)nnq>PQQQQ2#DOell96M6M$MNNN$ 2 2 2I;i ; ;9; ;(,; ; ;   ",S1112s   )B 
C<CCc           	      h   |                                  |                      d          z  }|                    d          s|                    d          sd S |j        |j        k    r-t          j        d| j         d|j         d|j         d          ||k    s||                                  z  |k    r;d| j         d	}|d
z  }t          j        |           |                    d           d S ||                      d          k    rJd	                    | j                  }|dz  }t          j        |           |                    d           d S | j        dvr@||z  |k    r7d}|d	                    ||z            z  }| j
                            |           |                                  d S )NFr   TzFor z7 eFuse, the length of the new value is wrong, expected z bits, was z bits.z	The same value for r   z+is already burned. Do not change the eFuse.r   z	The same value for {} z+is already prepared for the burn operation.)rS   rI   z5	New value contains some bits that cannot be cleared z(value will be {}))r   r   r&   r!   r"   r   r
   r   rh   r#   r9   rW   rZ   )r   bitarray_new_valuebitarray_old_valuerY   s       r   check_new_valuezEfuseFieldBase.check_new_value;  s   !//11D4F4FQV4F4W4WW!%%d++ 	4F4J4J44P4P 	F!%7%;;;$6ty 6 6.26 6)-6 6 6   "444!D$6$6$8$88<NNN<	<<<IFFIIi   ""1%%%%%4#5#5#5#F#FFF299$)DDIFFIIi   ""1%%%%%y 444 &(::>PPP XI!5!<!<*-??" " I K//	:::$$&&&&&r   c                     | j         j        | j                 }|j                                        }|j        | j        dz  | j        z   |j        z   z
  }|	                    ||           |xj        |z  c_        d S )Nr   r   )
r9   r   r   ri   copyr   r   r   r&   r   r   bitarray_fieldr   wr_bitarray_temppositions        r   save_to_blockzEfuseFieldBase.save_to_block`  s    "4:. ,1133#*INTX%(::
 	"">x"@@@--r   c                     |                      |          }|                     |           |                     |           d S r   )r   r  r  )r   r)   r  s      r   rO   zEfuseFieldBase.savei  sC    229==^,,,>*****r   c                    |                                  rV| j                            |                     |                     |                                                     d           d S | j        j        }|j        | j        dz  | j	        z   |z   z
  |_	        | j                            |
                    |          d           | j        j        | j                 j        }|R|j        | j        dz  | j	        z   |z   z
  |_	        |
                    |                              d           | _        d S | j        j        | j                 j        | _        | j        j        | j                 j        | _        d S )Nr   r   r   F)ru  r'   r   r   r-   rJ   r&   r   r   r   rm   r9   r   r   rl   r   rj   rk   )r   bit_array_block	field_lenrl   s       r   r  zEfuseFieldBase.updaten  sZ   ##%% 	M##))$*;*;DHHJJ*G*GHHa $    FM%	-4INTX%	1
 	 4 4Y ? ?QGGG{)$*5B#+2	B)I5 L )--i88<<UCCCDIII*4:6;DI"k0<GDOOOr   Tr   rG   c                 \    |                      |                              | j                  S )a  Return the raw (unformatted) numeric value of the eFuse bits

        Returns a simple integer or (for some subclasses) a bitstring.
        type: int or bool -> int
        type: bytes -> bytearray

        Args:
            from_read: If True, read the eFuse value from the device.
                If False, use the cached value.

        Returns:
            int | bytearray: The raw value of the eFuse
        )r   rm   r   r~   s     r   r%   zEfuseFieldBase.get_raw  s(     !!),,11$/BBBr   c                     | j                             d          r6t          j        |                     |          j        ddd         d          S |                     |          S )a  Get a formatted version of the eFuse value, suitable for display

        type: int or bool -> int
        type: bytes -> string  "01 02 03 04 05 06 07 08 ... ".
        Byte order [0] ... [N]. dump regs: 0x04030201 0x08070605 ...

        Args:
            from_read: If True, read the eFuse value from the device.
                If False, use the cached value.

        Returns:
            str | int | bytearray: The formatted version of the eFuse value
        r   Nr   r   )r   r    r   hexifyr   r   r%   r~   s     r   rJ   zEfuseFieldBase.get  s\     ?%%g.. 	+;t11)<<B44R4H#NNN<<	***r   c                     | j         r1	 | j         |                     |                   S # t          $ r Y nw xY w|                     |          S )a   Get the meaning of eFuse from dict if possible, suitable for display

        Args:
            from_read: If True, read the eFuse value from the device.
                If False, use the cached value.

        Returns:
            str | int | bytearray: The meaning of the eFuse
        )rq  r%   rL  rJ   r~   s     r   get_meaningzEfuseFieldBase.get_meaning  s^     ? 	t||I'>'>??   xx	"""s   ) 
66c                    |rd| j         _        | j         S | j         j        }| j        j        | j                 }|j        j        | j        dz  | j        z   |z   z
  |j        _        |j        	                    | j         j                  S )Nr   r   )
r'   r   r&   r9   r   r   ri   r   r   rm   )r   r   r  r   s       r   r   zEfuseFieldBase.get_bitstring  s     		= !DM= )I$(K$6tz$BE$)$5$<	B)I5%E! $))$-*;<<<r   c                 b    |                      |           | j                                         dS )z-Burn a eFuse. Added for compatibility reason.N)rO   r9   r7  )r   r)   s     r   r   zEfuseFieldBase.burn  s.    		)r   c                 V   | j          d| j         d}| j        dk    r| j        r|dz  }n/| j                            | j                  \  }}|dk    s|r|dz  }| j        dk    rD| j        j        | j                 j        }|&|d| j        |                                          dz  }|S )Nz (BLOCKr   r   z[error]keyblockz
  Purpose: z
 )	r   r   rj   r9   rF  r$   r   rf   rJ   )r   outputerrsrj   r   s        r   get_infozEfuseFieldBase.get_info  s    I33dj333:??y $)#55djAAJD$qyyDy)#z));%dj1BDF$+d*;*?*?*A*AFFFFr   c                    |                      d          }| j        j        | j                 }|j                                        }|j        | j        dz  | j        z   |j	        z   z
  }|
                    ||           ||_        dS )z+Resets a eFuse that is prepared for burningr   r   r   N)r   r9   r   r   ri   r  r   r   r   r&   r   r  s        r   r!  zEfuseFieldBase.reset  s    22155"4:. ,1133#*INTX%(::
 	"">x"@@@,r   Nr   )r0   r1   r2   r   ru  r-   r   r  r  rO   r  r   r   	bytearrayr%   r\   rJ   r  r   r   r   r   r  r!  r3   r   r   rk  rk    s{       = = =*5 5 5% % %$2 2 26#' #' #'J. . .+ + +
H H H*C C Cy C C C C + +T +S3Y-B + + + +&# #T #S3Y5J # # # #"
= 
=t 
=y47G 
= 
= 
= 
=  
  	- 	- 	- 	- 	-r   rk  )abcr   rx  r>  	bitstringr   r   r   r   "espefuse.efuse.mem_definition_baser   r	   r!   esptool.loggerr
   r   r   r   r5   r^   r8   rk  r3   r   r   <module>r     s          



 > > > > > > > > > > > > R R R R R R R R             A1 A1 A1 A1 A1 A1 A1 A1HU3 U3 U3 U3 U3 U3 U3 U3pb  b  b  b  b % b  b  b J	] ] ] ] ] ] ] ]@	k- k- k- k- k-% k- k- k- k- k-r   