
    :)diB                     x   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mZmZ ddl	m
Z
 ddl	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          Z G d de          Z G d de          Z G d de          ZdS )    N)log   )EfuseDefineBlocksEfuseDefineFieldsEfuseDefineRegisters   )base_fields)utilc                   ,     e Zd Zd Zd fd	Zd Z xZS )
EfuseBlockc                     | j         S N)lenselfs    b/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/espefuse/efuse/esp32/fields.pylen_of_burn_unitzEfuseBlock.len_of_burn_unit   s	    x    Fc                     |r|j         j        |_        n|j        |                                 t	                                          |||           d S )N	skip_read)REGSCODING_SCHEME_NONEcoding_schemeread_coding_schemesuper__init__)r   parentparamr   	__class__s       r   r   zEfuseBlock.__init__   s[     	,#);#AF  #+))+++)<<<<<r   c                    |                      d          d d d         }|                                 | j        j        j        k    rt          |          dk    rt          j        d          |d d         }d}t          |          dk    r|dd         }|dd          }d}d}d	}t          j	        d
|          D ]&}||z  }||t          j        |          z  z  }|d	z  }'||z  }|t          j        d||          z  }t          |          dk    t          j	        ddt          |          dz  z  z   |          }n+t          j	        ddt          |          dz  z  z   |          }|S )NF)	from_read   z&Should take 24 bytes for 3/4 encoding.r   r      r   BBBBBBBB<I   )get_rawget_coding_schemer   r   CODING_SCHEME_34r   esptool
FatalErrorstructunpackr
   popcntpack)	r   dataoutbitsbitsxor_resmul_resindexbwordss	            r   apply_coding_schemezEfuseBlock.apply_coding_scheme    sz   ||e|,,TTrT2!!##t{'7'HHH 4yyB()QRRR9DGd))a--AaCyABBxw55  AqLGut{1~~55GQJEE46;tWg>>> d))a-- M#s7||q/@(A"A7KKEE
 M#D		Q)?"@$GGEr   F)__name__
__module____qualname__r   r   r<   __classcell__r    s   @r   r   r      s[          = = = = = =      r   r   c                   ^     e Zd ZdZ	 	 	 	 d fd	Zd Zd Zd Zd Zd	 Z	d
 Z
ddZd Z xZS )	EspEfuseszQ
    Wrapper object to manage the efuse fields in a connected ESP bootloader
    FNc                     t                                          ||||           t                       _        t	          |           _        t           _         j                                         _	         j        
                                 _        |j        dk    rt          j        d|j         d           fd j        j        D              _        s                                   fd j        j        D              _        rt xj         fd j        j        D             z  c_         xj         fd j        j        D             z  c_         xj         fd j        j        D             z  c_        d S  j         j        j        k    r' xj         fd	 j        j        D             z  c_        nY j         j        j        k    r' xj         fd
 j        j        D             z  c_        nt          j        d j         d           d                                         dk    r& xj         fd j        j        D             z  c_         d                                         r& xj         fd j        j        D             z  c_         xj         fd j        j        D             z  c_        d S )NESP32z5Expected the 'esp' param for ESP32 chip but got for 'z'.c                 d    g | ],}t          j                            |                     -S )r   )r   Blocksget).0blockr   skip_connects     r   
<listcomp>z&EspEfuses.__init__.<locals>.<listcomp>W   sF     
 
 
 tT[__U33|LLL
 
 
r   c                 F    g | ]}t                               |          S  
EfuseFieldconvertrJ   efuser   s     r   rM   z&EspEfuses.__init__.<locals>.<listcomp>]   s)    WWW5z))$66WWWr   c                 F    g | ]}t                               |          S rO   rP   rS   s     r   rM   z&EspEfuses.__init__.<locals>.<listcomp>_   6       49
""4//  r   c                 F    g | ]}t                               |          S rO   rP   rS   s     r   rM   z&EspEfuses.__init__.<locals>.<listcomp>b   rV   r   c                 F    g | ]}t                               |          S rO   rP   rS   s     r   rM   z&EspEfuses.__init__.<locals>.<listcomp>e   rV   r   c                 F    g | ]}t                               |          S rO   rP   rS   s     r   rM   z&EspEfuses.__init__.<locals>.<listcomp>j   9           &&tU33     r   c                 F    g | ]}t                               |          S rO   rP   rS   s     r   rM   z&EspEfuses.__init__.<locals>.<listcomp>o   rZ   r   zThe coding scheme (z) - is not supportedMAC_VERSIONr   c                 F    g | ]}t                               |          S rO   rP   rS   s     r   rM   z&EspEfuses.__init__.<locals>.<listcomp>x   6          8=J&&tU33     r   BLK3_PART_RESERVEc                 F    g | ]}t                               |          S rO   rP   rS   s     r   rM   z&EspEfuses.__init__.<locals>.<listcomp>|   rZ   r   c                 F    g | ]}t                               |          S rO   rP   rS   s     r   rM   z&EspEfuses.__init__.<locals>.<listcomp>   rV   r   )r   r   r   rH   r   Fieldsr   r   get_burn_block_data_namesBURN_BLOCK_DATA_NAMESget_blocks_for_keysBLOCKS_FOR_KEYS	CHIP_NAMEr.   r/   BLOCKSblocksget_coding_scheme_warningsEFUSESefusesKEYBLOCKS_256
CUSTOM_MACADC_CALIBRATIONr   r   r-   KEYBLOCKS_192rI   CALC)r   esprL   debugdo_not_confirmextend_efuse_tabler    s   ` `   r   r   zEspEfuses.__init__E   s    	lE>CUVVV'))'(:;;(	%)[%J%J%L%L"#{>>@@=G##$YYYY  
 
 
 
 
+
 
 
  	.++---WWWWDKDVWWW $	KK    =A[=V   KK KK    =A[=S   KK KK    =A[=X   KKKK !TY%AAA        !%!:       #ty'AAA        !%!:      
 (R$*<RRR   M"&&((A--        AEAW       '(,,..         !%!<       KK    =A[=M   KKKKr   c                      j         D ]1}|j        k    s t          fd|j        D                       r|c S 2d} j        j        D ]U}|j        k    s t          fd|j        D                       r( xj          fd j        j        D             z  c_         d}V j        j        D ]U}|j        k    s t          fd|j        D                       r( xj          fd j        j        D             z  c_         d}V|r9 j         D ]1}|j        k    s t          fd|j        D                       r|c S 2t          )	z*Return the efuse field with the given namec              3   $   K   | ]
}|k    V  d S r   rO   rJ   x
efuse_names     r   	<genexpr>z(EspEfuses.__getitem__.<locals>.<genexpr>   s'      *P*Pq1
?*P*P*P*P*P*Pr   Fc              3   $   K   | ]
}|k    V  d S r   rO   rx   s     r   r{   z(EspEfuses.__getitem__.<locals>.<genexpr>   8       / /$%Z/ / / / / /r   c                 F    g | ]}t                               |          S rO   rP   rS   s     r   rM   z)EspEfuses.__getitem__.<locals>.<listcomp>   r^   r   Tc              3   $   K   | ]
}|k    V  d S r   rO   rx   s     r   r{   z(EspEfuses.__getitem__.<locals>.<genexpr>   r}   r   c                 F    g | ]}t                               |          S rO   rP   rS   s     r   rM   z)EspEfuses.__getitem__.<locals>.<listcomp>   rZ   r   c              3   $   K   | ]
}|k    V  d S r   rO   rx   s     r   r{   z(EspEfuses.__getitem__.<locals>.<genexpr>   s'      .T.T1qJ.T.T.T.T.T.Tr   )rl   nameany	alt_namesrb   rn   ro   KeyError)r   rz   e
new_fieldsrT   s   ``   r   __getitem__zEspEfuses.__getitem__   s    	 	AQV##s*P*P*P*PAK*P*P*P'P'P# $
[+ 	" 	"EzZ''3 / / / /)./ / / , ,'         AEAW       "
[0 	" 	"EzZ''3 / / / /)./ / / , ,'         !%!<       "
 	[  ''3.T.T.T.T.T.T.T+T+T'HHH (r   c                     |                      | j        j                  | j        j        z  }|| j        j        k    r| j        j        | _        d S || _        d S r   )
read_efuser   EFUSE_CODING_SCHEME_WORDEFUSE_CODING_SCHEME_MASKCODING_SCHEME_NONE_RECOVERYr   r   )r   r   s     r   r   zEspEfuses.read_coding_scheme   s[    OODI>??i01 	 DIAAA!%!=D!.Dr   c                     t          j        d           t          j        d                    d|                     | j        j                                       d S )N z{:27} 0x{:08x}EFUSE_REG_DEC_STATUS)r   printformatread_regr   r   r   s    r   print_status_regszEspEfuses.print_status_regs   sV    	"	##&di6T(U(U 	
 	
 	
 	
 	
r   c                 T   |                                  }| j        j        |         \  }}}|                     | j        j        | j        j        |           |                     | j        j        | j        j        |           |                     | j        j        | j        j        |           | 	                    | j        j
        | j        j                   | 	                    | j        j        | j        j                   |                                  |                     d          S )z|Write the values in the efuse write registers to
        the efuse hardware, then refresh the efuse read registers.
        T)silent)get_crystal_freqr   EFUSE_CLK_SETTINGS
update_regEFUSE_DAC_CONF_REGEFUSE_DAC_CLK_DIV_MASKEFUSE_CLK_REGEFUSE_CLK_SEL0_MASKEFUSE_CLK_SEL1_MASK	write_regEFUSE_REG_CONFEFUSE_CONF_WRITEEFUSE_REG_CMDEFUSE_CMD_WRITE
efuse_readrj   )r   rK   apb_freqclk_sel0clk_sel1dac_clk_divs         r   write_efuseszEspEfuses.write_efuses   s	    ((***.)*Fx*P'(KI($)*JK	
 	
 	
 	I#TY%BH	
 	
 	
 	I#TY%BH	
 	
 	
 	ty/1KLLLty.	0IJJJ..d.;;;r   c                    t          j                     | j        j        z   }t          j                     |k     r<|                     | j        j                  dk    rd S t          j                     |k     <t          j        d          )Nr   z:Timed out waiting for eFuse controller command to complete)timer   EFUSE_BURN_TIMEOUTr   r   r.   r/   )r   deadlines     r   wait_efuse_idlezEspEfuses.wait_efuse_idle   sv    9;;!==ikkH$$}}TY455:: ikkH$$  H
 
 	
r   c                     |                                   |                     | j        j        | j        j                   |                     | j        j        | j        j                   |                                   d S r   )r   r   r   r   EFUSE_CONF_READr   EFUSE_CMD_READr   s    r   r   zEspEfuses.efuse_read   sh    ty/1JKKKty.	0HIIIr   c           
      ^   |                      | j        j                  | j        j        z  }| j        D ]U}|j        dk    rd|_        |dk    |_        |s4|j        r-t          j	        d|j         d|j         d|j         d           V| j
        s|r|s|                                  |dk    S )znCheck if the coding scheme has detected any errors.
        Meaningless for default coding scheme (0)
        r   zError(s) in BLOCKz	 [ERRORS:z FAIL:])r   r   r   EFUSE_REG_DEC_STATUS_MASKri   id
num_errorsfailr   r   rs   r   )r   r   errrK   s       r   rj   z$EspEfuses.get_coding_scheme_warnings   s    
 MM$)899i12 	 [ 	 	Ex1}}#$  AX
 ej 	E E E$/E E7<zE E E   J 	%# 	%v 	%""$$$axr   c                     | d                                          dk    rd}nD| d                                          dk    rd}n#| d                                          dk    rd}nd}|S )	NXPD_SDIO_FORCEr   zWFlash voltage (VDD_SDIO) determined by GPIO12 on reset (High for 1.8V, Low/NC for 3.3V)XPD_SDIO_REGz>Flash voltage (VDD_SDIO) internal regulator disabled by efuse.XPD_SDIO_TIEHz.Flash voltage (VDD_SDIO) set to 1.8V by efuse.z.Flash voltage (VDD_SDIO) set to 3.3V by efuse.)rI   )r   outputs     r   summaryzEspEfuses.summary   sv     !%%''1,,nFF.!%%''1,,UFF/"&&((A--EFFEFr   )FFFNr=   )r>   r?   r@   __doc__r   r   r   r   r   r   r   rj   r   rA   rB   s   @r   rD   rD   @   s          = = = = = =~  :/ / /
 
 
< < <2
 
 
     *	 	 	 	 	 	 	r   rD   c                   $    e Zd Zed             ZdS )rQ   c                     	 t          t          t          t          t          t
          d                    |j        t                    | |          S )N)macspipinvrefadc_tpwaferpkg)	EfuseMacFieldEfuseSpiPinFieldEfuseVRefFieldEfuseAdcPointCalibration
EfuseWaferEfusePkgrI   
class_typerQ   )r   rT   s     r   rR   zEfuseField.convert   sJ    , &".
 
 #e

+
+FE; ; 	;r   N)r>   r?   r@   staticmethodrR   rO   r   r   rQ   rQ      s-        ; ; \; ; ;r   rQ   c                   h     e Zd ZdZdedz  fdZed             Zed             Zd
dZ	 fd	Z
 xZS )r   zd
    Supports: MAC and CUSTOM_MAC fields.
    (if MAC_VERSION == 1 then the CUSTOM_MAC is used)
    new_value_strNc                    |t          j        d          |                    d          dk    rt          j        d          |                    dd          }t	          |          dk    rt          j        d          t          j        |          }t           j                            |d          d	z  rt          j        d
          |S )Nz1Required MAC Address in AA:CD:EF:01:02:03 format!:   zLMAC Address needs to be a 6-byte hexadecimal format separated by colons (:)!r      zPMAC Address needs to be a 6-byte hexadecimal number (12 hexadecimal characters)!r   r   z!Custom MAC must be a unicast MAC!)	r.   r/   countreplacer   binascii	unhexlifyr
   byte)r   r   hexadbindatas       r   check_formatzEfuseMacField.check_format  s     $C   s##q(($+   %%c2..u::$/  
 $U++ <Wa((4/ 	J$%HIIIr   c                     t                               |           }||k    rd|dd}nd|dd|dd}d                    t          j        | d          |g          S )Nz(CRC z#04xz OK)z invalid - calculated ) r   )r   calc_crcjoinr
   hexify)raw_mac
stored_crccomputed_crc	valid_msgs       r   get_and_checkzEfuseMacField.get_and_check'  s~    $--g66:%%5
5555II T
SSS|SSSS  xxWc22I>???r   c                     d}t          j        d|           D ].}||z  }t          d          D ]}|dz  }|dz  }|dk    r|dz  }/|S )z
        This algorithm is the equivalent of esp_crc8() in ESP32 ROM code

        This is CRC-8 w/ inverted polynomial value 0x8C & initial value 0x00.
        r   r&      r      )r0   r1   range)r   resultr:   _lsbs        r   r   zEfuseMacField.calc_crc2  ss     w00 	# 	#AaKF1XX # #qj1!88dNF	#
 r   Tc                 6   | j         dk    r?|                     |          d d d         }| j        d                             |          }n5|                     |          }| j        d                             |          }t                              ||          S )Nrn   r#   CUSTOM_MAC_CRCMAC_CRC)r   r+   r   rI   r   r   )r   r"   r   r   s       r   rI   zEfuseMacField.getC  s    9$$,,y))$$B$/C%56::9EEJJ,,y))CY/33I>>J**3
;;;r   c                    d }| j         dk    r8| j        d         }|                                dk    r1d} ||t          |                     |                    |           nN|                                dk    r6| j        j        s*t          j        d|                                 d          |                     |          } || |           t                                          |           | 
                    |          }| j        d         } ||t          |                     |                    |           d S t          j        d	          )
Nc           
      ~    t          j        d| j         d| j         d|                                  d|            d S )Nz    - 'z' (z) z -> )r   r   r   descriptionget_bitstring)r   	new_values     r   print_fieldz'EfuseMacField.save.<locals>.print_fieldM  sQ    IX!&XXQ]XXaoo6G6GXXYXX    r   rn   r\   r   r   zMAC_VERSION = z, should be 0 or 1.r   z,Writing Factory MAC address is not supported)r   r   rI   hexsaveforce_write_alwaysr.   r/   convert_to_bitstringr   r   )	r   r   r   mac_versionmac_version_valuebitarray_maccrc_val	crc_fieldr    s	           r   r   zEfuseMacField.saveL  sk   	 	 	
 9$$
 +m4K  A%%$%!K->)?)?@@@  !23333??$$));9 %0S[__->->SSS    44Y??LKl+++GGLL###mmI..G$45IK	3w<<000NN7##### $%STTTr   T)r>   r?   r@   r   strr   r   r   r   rI   r   rA   rB   s   @r   r   r   	  s         
#*    0 @ @ \@   \ < < < <"U "U "U "U "U "U "U "U "Ur   r   c                       e Zd ZddZd ZdS )r   Tc                    | j         d                             |          }| j         d         j        dk    sJ | j         d                             |          }| j         d         j        dk    sJ | j                             | j         j        j                  }|| j         j        j        z	  | j         j        j        z  }|dz  |dz  z  |z  }ddddd                    |d          }|S )NCHIP_VER_REV1r   CHIP_VER_REV2r   r      )r   r   r     )r   rI   bit_lenr   r   APB_CTL_DATE_ADDRAPB_CTL_DATE_SAPB_CTL_DATE_V)r   r"   rev_bit0rev_bit1apb_ctl_daterev_bit2combine_valuerevisions           r   rI   zEfuseWafer.getr  s    ;/33I>>{?+3q8888;/33I>>{?+3q8888{++DK,<,NOODK,;;K+, "Q8q=9HD 	
 

 #mQ

 	 r   c                 <    t          j        d| j         d          )NBurning z is not supportedr.   r/   r   r   r   s     r   r   zEfuseWafer.save  s!     !HDI!H!H!HIIIr   Nr  r>   r?   r@   rI   r   rO   r   r   r   r   q  s<           &J J J J Jr   r   c                       e Zd ZddZd ZdS )r   Tc                     | j         d                             |          }| j         d                             |          }|dz  |z   S )NCHIP_PACKAGECHIP_PACKAGE_4BITr  )r   rI   )r   r"   lo_bitshi_bitss       r   rI   zEfusePkg.get  sF    +n-11)<<+1266yAA1''r   c                 <    t          j        d| j         d          )Nr  z is not supported.r  r  s     r   r   zEfusePkg.save  s!     !IDI!I!I!IJJJr   Nr  r  rO   r   r   r   r     s<        ( ( ( (
K K K K Kr   r   c                       e Zd ZddZd ZdS )r   Tc                 F    |                      |          }|dk    r|dz  }|S )N   r   )r+   r   r"   vals      r   rI   zEfuseSpiPinField.get  s*    ll9%%"991HC
r   c                     ||S t          |d          }|dv rt          j        d          |dk    rt          j        d| d          |dv rt          |dz
            S |S )	Nr   )r"     z@IO pins 30 & 31 cannot be set for SPI flash. 0-29, 32 & 33 only.!   zIO pin z1 cannot be set for SPI flash. 0-29, 32 & 33 only.)    r'  r   )intr.   r/   r  )r   r   new_value_ints      r   r   zEfuseSpiPinField.check_format  s       M1--H$$$R   R$Z-ZZZ   h&&}q()))  r   Nr  )r>   r?   r@   rI   r   rO   r   r   r   r     s7           ! ! ! ! !r   r   c                   ,    e Zd ZdZdZdZdZd	dZd ZdS )
r   iL  r	        Tc                     |                      |          }|| j        z  r|| j        z   }n
|| j        z  }|| j        z  }| j        |z   S r   )r+   VREF_SIGN_BITVREF_MAG_BITSVREF_STEP_SIZEVREF_OFFSETr#  s      r   rI   zEfuseVRefField.get  s]    ll9%%## 	+$,,-CC**Ct""#%%r   c                 *    t          j        d          )Nz!Writing to VRef is not supported.)r.   r/   r  s     r   r   zEfuseVRefField.save  s     !DEEEr   Nr  )	r>   r?   r@   r2  r1  r/  r0  rI   r   rO   r   r   r   r     sP        KNMM& & & &F F F F Fr   r   c                   ,    e Zd ZdddddZdZdZdd	Zd
S )r   i  i  i  iN  )ADC1_TP_LOWADC2_TP_LOWADC1_TP_HIGHADC2_TP_HIGH)@      r*   Tc                     | j                             d          rdnd}| j        |         }| j        | j                  }|                                 }||dz
  z  ||z  z
  }||| j        z  z   S )NLOWr   r   )r   endswithSIGN_BIT	TP_OFFSETr+   	STEP_SIZE)r   r"   idxsign_bitoffsetrawdeltas          r   rI   zEfuseAdcPointCalibration.get  sp    9%%e,,3aa!=%	*llnn1%#.9/00r   Nr  )r>   r?   r@   r?  r>  r@  rI   rO   r   r   r   r     sL        	 I HI1 1 1 1 1 1r   r   )r   r0   r   r.   r   mem_definitionr   r   r   r   r	   r
   EfuseBlockBaser   EspEfusesBaserD   EfuseFieldBaserQ   r   r   r   r   r   r   rO   r   r   <module>rJ     s?             V V V V V V V V V V            * * * * *+ * * *Zy y y y y) y y yx
; 
; 
; 
; 
;+ 
; 
; 
;eU eU eU eU eUJ eU eU eUPJ J J J J J J J0K K K K Kz K K K! ! ! ! !z ! ! !6F F F F FZ F F F(1 1 1 1 1z 1 1 1 1 1r   