
    ;)di>                         d dl Z d dlZddlmZmZ ddlmZ ddlmZ  G d de          Z	 G d d	ee	          Z
e
e	_        dS )
    N   )	ESPLoader	StubMixin)log)
FatalErrorc                   $   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZedz   Zedz   Zedz   ZdZeZdZedz   ZdZdZedz   ZdZdZdZdZedz   Z dZ!dZ"dZ#dZ$dZ%dZ&dZ'd Z(d!Z)dZ*d"Z+d#Z,d$Z-d%Z.d&Z/d'Z0d(Z1dddd)d*d+d,d-d.Z2d/ddd0d1Z3d2Z4g d3Z5g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBgZ6dZ7dCZ8	 dD Z9dE Z:dF Z;dG Z<dH Z=dI Z>dJ Z?dK Z@dL ZAdM ZBdN ZCdO ZDd]dQZEdR ZFdSeGdTz  fdUZHdSeGdTz  fdVZIdW ZJdX ZKdY ZLdZ ZMd[ ZNd\ ZOdTS )^ESP32ROMz%Access class for ESP32 ROM bootloaderESP32r   i   @  @@  @?  ?i  ?       $   (   ,   i ?            i     i @  i      i `?|         i ?il?i   i8@?it?l        i   `i   i   i  @ i    0   @   P   `   p   )1MB2MB4MB8MB16MB32MB64MB128MB   r   )80m40m26m20m   )1.8V1.9VOFF)r   r   PADDING)r   r   DROM)r   i  ?EXTRAM_DATA)i  ?i  ?RTC_DRAM)i  ?   @BYTE_ACCESSIBLE)i ?r8   DRAM)i  ?i?
DIRAM_DRAM)r8     @IROM)r<    @	CACHE_PRO)r>     @	CACHE_APP)r@     
@IRAM)rB   i@
DIRAM_IRAM)i  @i  @RTC_IRAM)r   r   r=   )i   Pi   PRTC_DATAi!_c                     |                      d          }|dz	  dz  }|rdS dgdz  }t          t          |                    D ],}|                      d|z             ||<   ||         dk    r dS -dS )znBit 0 of efuse_rd_disable[3:0] is mapped to BLOCK1
        this bit is at position 16 in EFUSE_BLK0_RDATA0_REGr   r   r   Tr      F)
read_efuserangelen)selfword0
rd_disablekey_wordis        \/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/esptool/targets/esp32.pyis_flash_encryption_key_validz&ESP32ROM.is_flash_encryption_key_valid~   s     ""rkS(
  	4 sQwH3x==))    "oob1f55A;!##44 $5    c                     |                      d          }|dz	  dz  }|dk    r 	 |                      d          }|dz	  dz  }|S dS )a  For flash encryption related commands we need to make sure
        user has programmed all the relevant efuse correctly so before
        writing encrypted write_flash_encrypt esptool will verify the values
        of flash_crypt_config to be non zero if they are not read
        protected. If the values are zero a warning will be printed

        bit 3 in efuse_rd_disable[3:0] is mapped to flash_crypt_config
        this bit is at position 19 in EFUSE_BLK0_RDATA0_REGr      r      r   r+   rI   )rL   rM   rN   word5s       rQ   get_flash_crypt_configzESP32ROM.get_flash_crypt_config   s\     ""rkS(
??>OOA&&Eb[C'EL 3rS   c                 F    |                      | j                  | j        z  S N)read_reg%EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG!EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPTrL   s    rQ   get_encrypted_download_disabledz(ESP32ROM.get_encrypted_download_disabled   s$    MM$DEE45	
rS   c                     |                      | j                  | j        z  }t          |                              d          dz  dk    S )N1r   r   )r\   EFUSE_SPI_BOOT_CRYPT_CNT_REGEFUSE_SPI_BOOT_CRYPT_CNT_MASKbincount)rL   flash_crypt_cnts     rQ   get_flash_encryption_enabledz%ESP32ROM.get_flash_encryption_enabled   sL    MM$;<<01 	
 ?##))#..2a77rS   c                     |                      | j                  }|                                 }|| j        z  p|dk    o	|| j        z  S )Ni,  )r\   EFUSE_RD_ABS_DONE_REGget_chip_revisionEFUSE_RD_ABS_DONE_0_MASKEFUSE_RD_ABS_DONE_1_MASK)rL   efusesrevs      rQ   get_secure_boot_enabledz ESP32ROM.get_secure_boot_enabled   sP    t9::$$&&55 
3JA6D$AA	
rS   c                 \    |                      d          }|dz	  dz  }||dz	  dz  dz  z  }|S )N   	   r   r   r   rW   )rL   word3pkg_versions      rQ   get_pkg_versionzESP32ROM.get_pkg_version   s?    ""zT)!s*q00rS   c                 8    |                      d          dz	  dz  S )NrV   r   rr   rW   r_   s    rQ   get_minor_chip_versionzESP32ROM.get_minor_chip_version   s    ""b(C//rS   c                    |                      d          dz	  dz  }|                      d          dz	  dz  }|                     | j                  }|| j        z	  | j        z  }|dz  |dz  z  |z  }ddddd                    |d          }|S )	Nrr   r+   r   rV   r   r   r   )r   r   rr   r   )rI   r\   APB_CTL_DATE_ADDRAPB_CTL_DATE_SAPB_CTL_DATE_Vget)rL   rev_bit0rev_bit1apb_ctl_daterev_bit2combine_valuerevisions          rQ   get_major_chip_versionzESP32ROM.get_major_chip_version   s    OOA&&",3OOA&&",3}}T%;<< D$774;NN!Q8q=9HD 	
 

 #mQ

 	 rS   c                 0   |                                  }|                                 }|                                 }|dk    }|                     d          dz  }|rdn|rdnd|rdn|rdndd	d
|rdndddd                    |d          }| d| d| dS )Nrr   r   zESP32-S0WDQ6zESP32-D0WDQ6-V3zESP32-D0WDQ6z
ESP32-S0WDzESP32-D0WD-V3z
ESP32-D0WDz
ESP32-D2WDzESP32-U4WDHzESP32-PICO-V3zESP32-PICO-D4zESP32-PICO-V3-02zESP32-D0WDR2-V3)r   r   r      rV      r   zUnknown ESP32z (revision v.))rv   r   rx   rI   r}   )rL   ru   	major_rev	minor_revrev3sc	chip_names          rQ   get_chip_descriptionzESP32ROM.get_chip_description   s    **,,//11	//11	A~__Q6* "$V~~d)V):):!P||$'PL"&;O! 
 
 #k?
+
+ 	 AAAAYAAAArS   c                    dg}|                      d          }|dz  }|dk    r|dgz  }|dz  }|r|dgz  }n|dgz  }|d	z  }|r|d
z  }|r|dgz  }n|dgz  }|                                 }|dv r|dgz  }|dk    r|dgz  }|                      d          }|dz	  dz  }	|	r|dgz  }|dz	  dz  }
|
r|dgz  }|                      d          }|dz  }|d                    ddddd|                   gz  }|S )NzWi-Firr   r   r   BTr   zSingle Core + LP CorezDual Core + LP Corei    r0   160MHz240MHz)r   r   rV   r   zEmbedded Flashr   zEmbedded PSRAMr      r   zVref calibration in eFuserH   zBLK3 partially reservedzCoding Scheme {}Nonez3/4zRepeat (UNSUPPORTED)z None (may contain encoding data))r   r   r   rr   )rI   rv   format)rL   featuresrt   chip_ver_dis_btchip_ver_dis_app_cpuchip_cpu_freq_ratedchip_cpu_freq_lowru   word4adc_vrefblk3_part_resword6coding_schemes                rQ   get_chip_featureszESP32ROM.get_chip_features   s   9""  6*aH$/ 	0011HH.//H#w/ 	' % 1  'XJ&XJ&**,,,&&)**H!)**H""QJ$& 	6455Hc) 	4233H""%%-9	 
  ! 	
 		
 rS   c                     |                      | j                  }|dz  }|dz	  dz  }|dz	  dz  }|dz	  dz  }|                      | j                  }|dz	  dz  }|||||fS )zCRead chip spi pad config
        return: clk, q, d, hd, cd
        r   rV   
   r+   r   )r\   EFUSE_BLK0_RDATA5_REG_OFFSEFUSE_BLK0_RDATA3_REG_OFFS)rL   efuse_blk0_rdata5spi_pad_clk	spi_pad_q	spi_pad_d
spi_pad_csefuse_blk0_rdata3_reg
spi_pad_hds           rQ   get_chip_spi_padszESP32ROM.get_chip_spi_pads$  s     !MM$*IJJ'$.&!+t3	&",4	'2-5
 $d.M N N+q0D8
Iy*jHHrS   c                 B    |                      | j        d|z  z             S )z,Read the nth word of the ESP3x EFUSE region.r   )r\   EFUSE_RD_REG_BASE)rL   ns     rQ   rI   zESP32ROM.read_efuse2  s     }}T3q1u=>>>rS   BASE_MACc                     |dk    rdS |                      d          |                      d          g}t          j        dg|R  }|dd         }t          |          S )zRead MAC from EFUSE regionr   Nr   r   z>IIr   )rI   structpacktuple)rL   mac_typewords	bitstrings       rQ   read_maczESP32ROM.read_mac6  sf    z!!4##T__Q%7%78K....	acN	YrS   c                     |S r[    )rL   offsetsizes      rQ   get_erase_sizezESP32ROM.get_erase_size?  s    rS   returnNc                     |                      | j                  }|| j        | j        z  | j        z  z  rdS || j        | j        z  z  rdS || j        z  rdS d S )N3.3Vr1   r3   )r\   EFUSE_VDD_SPI_REGVDD_SPI_FORCEVDD_SPI_XPDVDD_SPI_TIEH)rL   efuses     rQ   _get_efuse_flash_voltagez!ESP32ROM._get_efuse_flash_voltageB  sr    d455D&)99D<MMN 	6d(4+;;< 	6T'' 	5trS   c                     |                      | j                  }|| j        z  r|| j        z  rdS || j        z  rdS dS d S )Nr2   r1   r3   )r\   RTC_CNTL_SDIO_CONF_REGRTC_CNTL_SDIO_FORCERTC_CNTL_DREFH_SDIO_MRTC_CNTL_XPD_SDIO_REG)rL   regs     rQ   _get_rtc_cntl_flash_voltagez$ESP32ROM._get_rtc_cntl_flash_voltageM  sZ    mmD788)) 	T// vt11 vutrS   c                     |                                  }d}|s|                                 }d}|s,|                     | j                  }|| j        z  }|rdnd}d}t          j        d| d|            dS )	z6Get flash voltage setting and print it to the console.RTC_CNTLeFuser1   r   za strapping pinzFlash voltage set by z: N)r   r   r\   GPIO_STRAP_REGGPIO_STRAP_VDDSPI_MASKr   print)rL   voltagesource	strap_regs       rQ   get_flash_voltagezESP32ROM.get_flash_voltageY  s    2244 	3355GF 	'd&9::I44I )5ffvG&F	=&==G==>>>>>rS   c                 v   |                                 }|| j        vr't          d                    | j                            | j        }|| j        z  }|dk    r
|| j        z  }|dk    r|| j        | j        z  | j	        z  z  }| 
                    | j        |           t          j        d| d           d S )Nz*The only accepted VDDSDIO overrides are , r3   r2   zVDDSDIO regulator set to r   )upperOVERRIDE_VDDSDIO_CHOICESr   joinr   RTC_CNTL_SDIO_PD_ENr   r   RTC_CNTL_DREFM_SDIO_MRTC_CNTL_DREFL_SDIO_M	write_regr   r   r   )rL   new_voltagereg_vals      rQ   override_vddsdiozESP32ROM.override_vddsdiog  s    !''))d;;;<AA1    *4++%t11G&  *,-,-G
 	t2G<<<	<k<<<=====rS   c                    d}d}t          |          |k     r)t          ||t          |          z
            }	 |                     d| j        d         t	          j        d|t          |          z   |          |          }n## t          $ r t          j        d            w xY wt          |          |k     r#t          d| d	t          |           d
          ||d |         z  }|rCt          |          dz  dk    st          |          |k    r |t          |          ||           t          |          |k     )|S )Nr   rS   zread flash blockREAD_FLASH_SLOW<II)resp_data_lenz,Consider specifying the flash size argument.z	Expected z byte block, got z bytes. Serial errors?i   r   )	rK   mincheck_commandESP_CMDSr   r   r   r   note)rL   r   lengthprogress_fn	BLOCK_LENdata	block_lenrs           rQ   read_flash_slowzESP32ROM.read_flash_slow  sx   	$ii&  IvD		'9::I	&&&M"34KvD		'99EE"+	 '      GHHH 1vv	!! %	 % %CFF % % %   AjyjM!D 7D		D 0A 5 5Tf9L9LCIIvv666+ $ii&  , s   AB  B#c                     |                      | j                  | j        z	  | j        z  }|                     d          dz  }|dz  |z  dz  }|S )zA
        Get the crystal frequency calculated by the ROM
        r      i	=  r   )r\   RTCCALICFG1TIMERS_RTC_CALI_VALUE_STIMERS_RTC_CALI_VALUErI   )rL   cali_valclk_8M_freqrom_calculated_freqs       rQ   get_rom_cal_crystal_freqz!ESP32ROM.get_rom_cal_crystal_freq  s^     MM$*++t/KK&' ooa((D1&.<rA""rS   c                    | j         dk    s
J d            |                                 }|dk    rdnd}t          ||z  |z            }t          j        d| d           |                     | j        d         t          j        d	|d
                     t          j        d           | 	                    |           t          j        d           |                                  d S )Nr
   z*This workaround should only apply to ESP32i@i ZbizChanging baud rate to z...CHANGE_BAUDRATEr   r   zChanged.g?)	CHIP_NAMEr   intr   r   commandr   r   r   _set_port_baudratetimesleepflush_input)rL   baudr   
valid_freqfalse_rom_bauds        rQ   change_baudzESP32ROM.change_baud  s    ~(((*V(((";;==!4x!?!?XXX
T$77:EFF	44444555M+,fk%QR.S.S	
 	
 	
 		*%%%
4rS   c                     t          |                              t          t          dd                    t          d          z            st          d          d S )Nr      )r   !   z5SPI Pin numbers must be in the range 0-29, 32, or 33.)setissubsetrJ   r   )rL   spi_connections     rQ   check_spi_connectionzESP32ROM.check_spi_connection  sW    >""++Ca,=,=H,MNN 	VTUUU	V 	VrS   )r   )P__name__
__module____qualname____doc__r   IMAGE_CHIP_IDMAGIC_VALUEIROM_MAP_STARTIROM_MAP_ENDDROM_MAP_STARTDROM_MAP_ENDSPI_REG_BASESPI_USR_OFFSSPI_USR1_OFFSSPI_USR2_OFFSSPI_MOSI_DLEN_OFFSSPI_MISO_DLEN_OFFSr   r   r   r]   r^   rc   rd   rj   rl   rm   r   r   r   r   DR_REG_SYSCON_BASErz   r|   r{   SPI_W0_OFFSUART_CLKDIV_REGXTAL_CLK_DIVIDERr   r   r   r   r   r   r   r   r   r   r   r   FLASH_SIZESFLASH_FREQUENCYBOOTLOADER_FLASH_OFFSETr   
MEMORY_MAPFLASH_ENCRYPTED_WRITE_ALIGNUF2_FAMILY_IDrR   rY   r`   rh   rp   rv   rx   r   r   r   r   rI   r   r   strr   r   r   r   r   r   r  r  r   rS   rQ   r	   r	      s       //IMKNLNLLLMM"!2U!:!2U!:,=,D)(.%#4 $.!-5%%)D0KLM#*T1NNK OK&N#'####!! 	 	K 	 O %666 	,++(((///,,,333(((...(((------(((...,,,(((,,,J$ #%ML  .  ,
 
 
8 8 8
 
 
  0 0 0  B B B&7 7 7rI I I? ? ?         	#* 	 	 	 	
S4Z 
 
 
 
? ? ?> > >0  8# # #   V V V V VrS   r	   c                       e Zd ZdZd ZdS )ESP32StubLoaderz*Stub loader for ESP32, runs on top of ROM.c                 0    t          j        | |           d S r[   )r   r  )rL   r  s     rQ   r  zESP32StubLoader.change_baud  s    dD)))))rS   N)r  r  r  r  r  r   rS   rQ   r,  r,    s)        44* * * * *rS   r,  )r   r  loaderr   r   loggerr   utilr   r	   r,  
STUB_CLASSr   rS   rQ   <module>r2     s      ) ) ) ) ) ) ) )            nV nV nV nV nVy nV nV nVb* * * * *i * * * &   rS   