
    ;)di-                         d dl Z d dlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZ  G d	 d
e          Z G d dee          Zee_        dS )    N)sleep   )ESP32ROM   )	ESPLoader	StubMixin)log)
FatalErrorNotSupportedErrorc                      e Zd ZU 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dZdZdZdZedz   Zedz   Zedz   Zedz   Zd	Zedz   Zd
Zedz   ZdZedz   Z dZ!edz   Z"dZ#edz   Z$dZ%eZ&dZ'edz   Z(dZ)edz   Z*d Z+ed!z   Z,d"Z-dZ.d#Z/dZ0d$Z1dZ2d%Z3d&Z4dZ5dZ6d'Z7d(Z8d)Z9e9d*z   Z:e9d+z   Z;e9d,z   Z<d-Z=g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9gZ>edz   Z?dZ@dZAd:ZBd;ZCd<d=d>d?d@dAdBdCdDdEdFdGdHZDeEeFeGf         eHdI<   dJ ZIdK ZJdL ZKdM ZLdN ZMdO ZNdP ZOdQ ZPdR ZQdS ZRdT ZSdU ZTdV ZUdedXZVdY ZWdZ ZXd[ ZYd\ ZZd] Z[d^ Z\d_ Z]d` Z^da Z_db Z`dc ZaddS )f
ESP32S2ROMESP32-S2r     @i  @   ?i  ??i  i  @?          $   (   X   FiDA?i @?T   i A?0   D   \   4   8   r            i   i   i   <   i      i?i   i8@@?i(@?r   i @?         i:P)r   i   PADDING)r     ?DROM)i  P?r&   EXTRAM_DATA) ?i  ?RTC_DRAM)r)      @BYTE_ACCESSIBLE)r)     @MEM_INTERNAL)i  ?r+   DRAM)r+   i @	IROM_MASK)i  @  @IRAM)r1   r-   RTC_IRAM)r   i  @IROM)i   Pi   PRTC_DATA@   l   N z
USER/EMPTYRESERVEDXTS_AES_256_KEY_1XTS_AES_256_KEY_2XTS_AES_128_KEYHMAC_DOWN_ALLHMAC_DOWN_JTAGHMAC_DOWN_DIGITAL_SIGNATUREHMAC_UPSECURE_BOOT_DIGEST0SECURE_BOOT_DIGEST1SECURE_BOOT_DIGEST2)r   r   r   r!   r            r   	   
      KEY_PURPOSESc                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr   r      read_regEFUSE_BLOCK1_ADDRselfnum_words     ^/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/esptool/targets/esp32s2.pyget_pkg_versionzESP32S2ROM.get_pkg_version   s/    d4HEFF!KtSS    c                     d}|                      | j        d|z  z             dz	  dz  }d}|                      | j        d|z  z             dz	  dz  }|dz  |z   S )Nr!   r      r   rD   rK   )rO   hi_num_wordhilow_num_wordlows        rQ   get_minor_chip_versionz!ESP32S2ROM.get_minor_chip_version   sk    mmD2a+oFGG2MQUU}}T3q<7GHIIQNRVVa3rS   c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr!   r      rK   rN   s     rQ   get_major_chip_versionz!ESP32S2ROM.get_major_chip_version   0    d4HEFF"LPTTTrS   c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr!   r      rJ   rK   rN   s     rQ   get_flash_versionzESP32S2ROM.get_flash_version   r^   rS   c                 *    |                                  S N)ra   rO   s    rQ   get_flash_capzESP32S2ROM.get_flash_cap       %%'''rS   c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr!   r   r   rJ   rK   rN   s     rQ   get_psram_versionzESP32S2ROM.get_psram_version   r^   rS   c                 *    |                                  S rc   )rh   rd   s    rQ   get_psram_capzESP32S2ROM.get_psram_cap   rf   rS   c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr   rD   )rL   EFUSE_BLOCK2_ADDRrN   s     rQ   get_block2_versionzESP32S2ROM.get_block2_version   s/    d4HEFF!KtSSrS   c                     dddddd                     |                                 |                                 dz  z   d          }|                                 }|                                 }| d	| d
| dS )Nr   zESP32-S2FH2zESP32-S2FH4zESP32-S2FNR2z
ESP32-S2R2)r   r   r   f   d   rp   zUnknown ESP32-S2z (revision v.))getre   rj   r]   rZ   )rO   	chip_name	major_rev	minor_revs       rQ   get_chip_descriptionzESP32S2ROM.get_chip_description   s    
 
 #  4#5#5#7#7##==
 
 	 //11	//11	AAAAYAAAArS   c                 :   g d}dddd                     |                                 d          }||gz  }ddd	d                     |                                 d
          }||gz  }dddd                     |                                 d          }||gz  }|S )N)zWi-FizSingle Core240MHzzNo Embedded FlashzEmbedded Flash 2MBzEmbedded Flash 4MB)r   r   r   zUnknown Embedded FlashzNo Embedded PSRAMzEmbedded PSRAM 2MBzEmbedded PSRAM 4MBzUnknown Embedded PSRAMzNo calibration in BLK2 of efusez:ADC and temperature sensor calibration in BLK2 of eFuse V1z:ADC and temperature sensor calibration in BLK2 of eFuse V2zUnknown calibration in BLK2)rs   re   rj   rm   )rO   featuresflash_versionpsram_versionblock2_versions        rQ   get_chip_featureszESP32S2ROM.get_chip_features   s    555 ###
 
 #d  ""$<
=
=	 	
 	]O# ###
 
 #d  ""$<
=
=	 	
 	]O# 1KK
 
 #d%%'')F
G
G	 	
 	^$$rS   c                     dS )Nr    rd   s    rQ   get_crystal_freqzESP32S2ROM.get_crystal_freq   s    rrS   c                     d S rc   r   rd   s    rQ   _get_rtc_cntl_flash_voltagez&ESP32S2ROM._get_rtc_cntl_flash_voltage       trS   c                 "    t          | d          )NzOverriding VDDSDIO)r   )rO   new_voltages     rQ   override_vddsdiozESP32S2ROM.override_vddsdio   s    &:;;;rS   BASE_MACc                     |dk    rdS |                      | j                  }|                      | j        dz             }t          j        d||          dd         }t	          |          S )zRead MAC from EFUSE regionr   Nr   z>IIr   )rL   MAC_EFUSE_REGstructpacktuple)rO   mac_typemac0mac1	bitstrings        rQ   read_maczESP32S2ROM.read_mac   si    z!!4}}T/00}}T/!344KtT221226	YrS   c                 N    |                      | j                  | j        z  rdndS )Nr   r   )rL   EFUSE_RD_REPEAT_DATA3_REG)EFUSE_RD_REPEAT_DATA3_REG_FLASH_TYPE_MASKrd   s    rQ   
flash_typezESP32S2ROM.flash_type   s4     }}T;<<<=AA 		
rS   c                     d S rc   r   rd   s    rQ   get_flash_crypt_configz!ESP32S2ROM.get_flash_crypt_config   r   rS   c                 F    |                      | j                  | j        z  S rc   )rL   EFUSE_SECURE_BOOT_EN_REGEFUSE_SECURE_BOOT_EN_MASKrd   s    rQ   get_secure_boot_enabledz"ESP32S2ROM.get_secure_boot_enabled   s$    MM$788,-	
rS   c                 :   |dk     s|| j         k    rt          d| j                    | j        | j        f| j        | j        f| j        | j        f| j        | j	        f| j
        | j        f| j        | j        fg|         \  }}|                     |          |z	  dz  S )Nr   z+Valid key block numbers must be in range 0-rJ   )EFUSE_MAX_KEYr
   EFUSE_PURPOSE_KEY0_REGEFUSE_PURPOSE_KEY0_SHIFTEFUSE_PURPOSE_KEY1_REGEFUSE_PURPOSE_KEY1_SHIFTEFUSE_PURPOSE_KEY2_REGEFUSE_PURPOSE_KEY2_SHIFTEFUSE_PURPOSE_KEY3_REGEFUSE_PURPOSE_KEY3_SHIFTEFUSE_PURPOSE_KEY4_REGEFUSE_PURPOSE_KEY4_SHIFTEFUSE_PURPOSE_KEY5_REGEFUSE_PURPOSE_KEY5_SHIFTrL   )rO   	key_blockregshifts       rQ   get_key_block_purposez ESP32S2ROM.get_key_block_purpose   s    q==I(:::Rd>PRR  
 ($*GH($*GH($*GH($*GH($*GH($*GH
 
U c""e+s22rS   c                       fdt           j        dz             D             }t           fd|D                       rdS t           fd|D                       ot           fd|D                       S )Nc                 :    g | ]}                     |          S r   )r   ).0brO   s     rQ   
<listcomp>z<ESP32S2ROM.is_flash_encryption_key_valid.<locals>.<listcomp>  s4     
 
 
./D&&q))
 
 
rS   r   c              3   .   K   | ]}|j         k    V  d S rc   )PURPOSE_VAL_XTS_AES128_KEYr   prO   s     rQ   	<genexpr>z;ESP32S2ROM.is_flash_encryption_key_valid.<locals>.<genexpr>
  s+      FFqD33FFFFFFrS   Tc              3   .   K   | ]}|j         k    V  d S rc   )PURPOSE_VAL_XTS_AES256_KEY_1r   s     rQ   r   z;ESP32S2ROM.is_flash_encryption_key_valid.<locals>.<genexpr>  s+      LLa199LLLLLLrS   c              3   .   K   | ]}|j         k    V  d S rc   )PURPOSE_VAL_XTS_AES256_KEY_2r   s     rQ   r   z;ESP32S2ROM.is_flash_encryption_key_valid.<locals>.<genexpr>  sD       U
 U
78A22U
 U
 U
 U
 U
 U
rS   )ranger   any)rO   purposess   ` rQ   is_flash_encryption_key_validz(ESP32S2ROM.is_flash_encryption_key_valid  s    
 
 
 
389Ka9O3P3P
 
 
 FFFFXFFFFF 	4LLLL8LLLLL 
QT U
 U
 U
 U
<DU
 U
 U
 R
 R
 	
rS   c                 N    | j         rdS |                                 | j        k    S )z[
        Check the UARTDEV_BUF_NO register to see if USB-OTG console is being used
        F)secure_download_modeget_uart_noUARTDEV_BUF_NO_USB_OTGrd   s    rQ   uses_usb_otgzESP32S2ROM.uses_usb_otg  s.     $ 	5!!T%@@@rS   c                 J    |                                  r| j        | _        d S d S rc   )r   USB_RAM_BLOCKESP_RAM_BLOCKrd   s    rQ   _post_connectzESP32S2ROM._post_connect  s1     	4!%!3D	4 	4rS   c                 .   t          j        d           |                     | j        | j                   |                     | j        d           |                     | j        d           |                     | j        d           t          d           d S )Nz!Hard resetting with a watchdog...i  l      r   g      ?)r	   print	write_regRTC_CNTL_WDTWPROTECT_REGRTC_CNTL_WDT_WKEYRTC_CNTL_WDTCONFIG1_REGRTC_CNTL_WDTCONFIG0_REGr   rd   s    rQ   watchdog_resetzESP32S2ROM.watchdog_reset  s    	5666t4d6LMMMt3T:::(*N	
 	
 	
 	t4a888c




rS   c                 (   |                                  }|rf|                     | j                  }|                     | j                  }|| j        z  dk    r$|| j        z  dk    r|                                  d S t          j        | |           d S )Nr   )	r   rL   GPIO_STRAP_REGRTC_CNTL_OPTION1_REGGPIO_STRAP_SPI_BOOT_MASK!RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASKr   r   
hard_reset)rO   r   	strap_regforce_dl_regs       rQ   r   zESP32S2ROM.hard_reset'  s    ((** 		d&9::I==)BCCLD99Q>> 4#IIQNN##%%%T<00000rS   c                 0    t          j        | |           d S rc   )r   change_baud)rO   bauds     rQ   r   zESP32S2ROM.change_baud6  s    dD)))))rS   c           	      8   t          |                              t          t          dd                    t          t          dd                    z            st          d          t	          d |D                       rt          j        d           d S d S )Nr         /   z4SPI Pin numbers must be in the range 0-21, or 26-46.c                     g | ]}|d v |	S ))   rU   r   )r   vs     rQ   r   z3ESP32S2ROM.check_spi_connection.<locals>.<listcomp><  s    ;;;aQ(]]]]]rS   z\GPIO pins 19 and 20 are used by USB-OTG, consider using other pins for SPI flash connection.)setissubsetr   r
   r   r	   warning)rO   spi_connections     rQ   check_spi_connectionzESP32S2ROM.check_spi_connection9  s    >""++Ca,=,=E"bMM@R@R,RSS 	USTTT;;>;;;<< 	KF    	 	rS   N)r   )b__name__
__module____qualname__	CHIP_NAMEIMAGE_CHIP_IDIROM_MAP_STARTIROM_MAP_ENDDROM_MAP_STARTDROM_MAP_ENDMAGIC_VALUESPI_REG_BASESPI_USR_OFFSSPI_USR1_OFFSSPI_USR2_OFFSSPI_MOSI_DLEN_OFFSSPI_MISO_DLEN_OFFSSPI_W0_OFFSSPI_ADDR_REG_MSBr   UART_CLKDIV_REGSUPPORTS_ENCRYPTED_FLASHFLASH_ENCRYPTED_WRITE_ALIGN
EFUSE_BASEEFUSE_RD_REG_BASErM   rl   r   r   r   r   r   r   r   r   r   r   r   r   %EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG!EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPTEFUSE_SPI_BOOT_CRYPT_CNT_REGEFUSE_SPI_BOOT_CRYPT_CNT_MASKr   r   r   r   r   r   r   UARTDEV_BUF_NOr   r   r   r   GPIO_STRAP_VDDSPI_MASKr   r   RTCCNTL_BASE_REGr   r   r   r   
MEMORY_MAPEFUSE_VDD_SPI_REGVDD_SPI_XPDVDD_SPI_TIEHVDD_SPI_FORCEUF2_FAMILY_IDrH   dictintstr__annotations__rR   rZ   r]   ra   re   rh   rj   rm   rw   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   rQ   r   r      s%        IMNLNLKLLMMKM O#"$ J"U*"U*"U*'$.!'$.!'$. '$. '$. '$.!,=)(/%#-#5 $-!)E1 ' *T 106-#$ #$ !"NMN%#%(+%!.7.7/&8" 	,++(((///,,,333000(((---(((,,,(((,,,J #T)KLMM ( !!$ $L$sCx.   T T T  U U UU U U( ( (U U U( ( (T T T
B B B  4    < < <       
 
 
  
 
 
3 3 3 
 
 
A A A4 4 4  1 1 1* * *    rS   r   c                   "     e Zd ZdZ fdZ xZS )ESP32S2StubLoaderz-Stub loader for ESP32-S2, runs on top of ROM.c                     t                                          |           |                                r| j        | _        | j        | _        d S d S rc   )super__init__r   r   r   FLASH_WRITE_SIZE)rO   
rom_loader	__class__s     rQ   r  zESP32S2StubLoader.__init__F  sU    $$$""$$ 	7!%!3D$($6D!!!	7 	7rS   )r   r   r   __doc__r  __classcell__)r  s   @rQ   r  r  C  s>        777 7 7 7 7 7 7 7 7rS   r  )r   timer   esp32r   loaderr   r   loggerr	   utilr
   r   r   r  
STUB_CLASSr   rS   rQ   <module>r!     s                 ) ) ) ) ) ) ) )       0 0 0 0 0 0 0 0q q q q q q q qh	7 7 7 7 7	: 7 7 7 *
   rS   