
    ;)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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!Z0dZ1d"Z2d!Z3dZ4d#Z5e5d$z   Z6d%Z7e5d&z   Z8d'Z9e5d(z   Z:e5d)z   Z;e5d*z   Z<d+Z=d,Z>d-Z?dZ@dZAd.ZBd/ZCd0ZDg d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<gZEedz   ZFdZGdZHd=ZId>ZJd?d@dAdBdCdDdEdFdGdHdIdJdKZKeLeMeNf         eOdL<   dM ZPdN ZQdO ZRdP ZSdQ ZTdR ZUdS ZVdT ZWdU ZXdV ZYdW ZZdX Z[dY Z\dZ Z]d[ Z^d\ Z_d] Z`d^ Zad_ Zbd` Zcda ZddndcZedd Zfde Zgdf Zhdg Zidh Zjdi Zkdj Zldk Zmdl ZndmS )o
ESP32S3ROMzESP32-S3	      Bi   D   <   >i  `i   `          $   (   X   Fr   T   i p `D   \   0   4   8            i   i   <   i   r      iL?i  `   l           l   *1:          i:Pi   i8@ `i, `r   i  `)r   i   PADDING)r      =DROM)r)   r   EXTRAM_DATA) `  `RTC_DRAM) ?  ?BYTE_ACCESSIBLE)r/   i  >@MEM_INTERNAL)r/   r0   DRAM)i   @i @	IROM_MASK)i  7@i  >@IRAM)r,   r-   RTC_IRAM)r   i  BIROM)i   Pi   PRTC_DATA@   l   gW 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   r   
      KEY_PURPOSESc                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr"   r      rG   read_regEFUSE_BLOCK1_ADDRselfnum_words     ^/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/esptool/targets/esp32s3.pyget_pkg_versionzESP32S3ROM.get_pkg_version   0    d4HEFF"LPTTT    c                 t    |dz  dk    o/|                                  dk    o|                                 dk    S )NrG   r   r   )get_blk_version_majorget_blk_version_minorrQ   	minor_raws     rS   is_eco0zESP32S3ROM.is_eco0   sG    
 _" 2**,,12**,,1	
rV   c                 \    |                                  }|                     |          rdS |S Nr   )get_raw_minor_chip_versionr\   rZ   s     rS   get_minor_chip_versionz!ESP32S3ROM.get_minor_chip_version   s2    3355	<<	"" 	1rV   c                     d}|                      | j        d|z  z             dz	  dz  }d}|                      | j        d|z  z             dz	  dz  }|dz  |z   S )NrE   r      r   r"      rG   rM   )rQ   hi_num_wordhilow_num_wordlows        rS   r_   z%ESP32S3ROM.get_raw_minor_chip_version   sk    mmD2a+oFGG2MQUU}}T3q<7GHIIROSWWa3rV   c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr   r   r"   )rN   EFUSE_BLOCK2_ADDRrP   s     rS   rX   z ESP32S3ROM.get_blk_version_major   s/    d4HEFF!KtSSrV   c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr"   r   r   rG   rM   rP   s     rS   rY   z ESP32S3ROM.get_blk_version_minor   rU   rV   c                     |                                  }|                     |          rdS |                                 S r^   )r_   r\   get_raw_major_chip_versionrZ   s     rS   get_major_chip_versionz!ESP32S3ROM.get_major_chip_version   s>    3355	<<	"" 	1..000rV   c                 R    d}|                      | j        d|z  z             dz	  dz  S )NrE   r   r   r"   rM   rP   s     rS   rl   z%ESP32S3ROM.get_raw_major_chip_version   rU   rV   c                     |                                  }|                                 }|                                 }ddd                    |d          }| d| d| dS )NzESP32-S3 (QFN56)zESP32-S3-PICO-1 (LGA56))r   r   zUnknown ESP32-S3z (revision v.))rm   r`   rT   get)rQ   	major_rev	minor_revpkg_version	chip_names        rS   get_chip_descriptionzESP32S3ROM.get_chip_description   s    //11	//11	**,, "(
 
 #k-
.
. 	
 AAAAYAAAArV   c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr"   r      rG   rM   rP   s     rS   get_flash_capzESP32S3ROM.get_flash_cap   rU   rV   c                     d}|                      | j        d|z  z             dz	  dz  }dddddd	                    |d
          S )Nr   r   rG   XMCGDFMTTBY)r   r   r"   r   rE    rN   rO   rr   rQ   rR   	vendor_ids      rS   get_flash_vendorzESP32S3ROM.get_flash_vendor   sS    ]]4#9Q\#JKKqPTXX	Tdt==AA)RPPPrV   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"   rE      r   r   rM   )rQ   rR   	psram_cappsram_cap_hi_bits       rS   get_psram_capzESP32S3ROM.get_psram_cap   sq    ]]4#9Q\#JKKqPTXX	MM$0ALABBbH !A%22rV   c                     d}|                      | j        d|z  z             dz	  dz  }ddd                    |d          S )Nr   rG   r"   AP_3v3AP_1v8)r   r   r   r   r   s      rS   get_psram_vendorzESP32S3ROM.get_psram_vendor   sM    ]]4#9Q\#JKKqPTXX	))--i<<<rV   c                 F   g d}d ddd                     |                                 d          }|||d|                                  dz   gz  }d dd	d
dd                     |                                 d          }|||d|                                  dz   gz  }|S )N)zWi-Fiz	BT 5 (LE)zDual Core + LP Core240MHzzEmbedded Flash 8MBzEmbedded Flash 4MB)r   r   r   zUnknown Embedded Flashz (rq   zEmbedded PSRAM 8MBzEmbedded PSRAM 2MBzEmbedded PSRAM 16MBzEmbedded PSRAM 4MB)r   r   r   r"   r   zUnknown Embedded PSRAM)rr   rz   r   r   r   )rQ   featuresflashpsrams       rS   get_chip_featureszESP32S3ROM.get_chip_features   s    JJJ ##
 
 #d  ""$<
=
=	 	
 !@d&;&;&=&=!@!@!@@AAH ##$#
 
 #d  ""$<
=
= 	 !@d&;&;&=&=!@!@!@@AAHrV   c                     dS )Nr    rQ   s    rS   get_crystal_freqzESP32S3ROM.get_crystal_freq   s    rrV   c                     d S Nr   r   s    rS   get_flash_crypt_configz!ESP32S3ROM.get_flash_crypt_config       trV   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-   )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_SHIFTrN   )rQ   	key_blockregshifts       rS   get_key_block_purposez ESP32S3ROM.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2rV   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brQ   s     rS   
<listcomp>z<ESP32S3ROM.is_flash_encryption_key_valid.<locals>.<listcomp>  s4     
 
 
./D&&q))
 
 
rV   r   c              3   .   K   | ]}|j         k    V  d S r   )PURPOSE_VAL_XTS_AES128_KEYr   prQ   s     rS   	<genexpr>z;ESP32S3ROM.is_flash_encryption_key_valid.<locals>.<genexpr>  s+      FFqD33FFFFFFrV   Tc              3   .   K   | ]}|j         k    V  d S r   )PURPOSE_VAL_XTS_AES256_KEY_1r   s     rS   r   z;ESP32S3ROM.is_flash_encryption_key_valid.<locals>.<genexpr>  s+      LLa199LLLLLLrV   c              3   .   K   | ]}|j         k    V  d S r   )PURPOSE_VAL_XTS_AES256_KEY_2r   s     rS   r   z;ESP32S3ROM.is_flash_encryption_key_valid.<locals>.<genexpr>  sD       U
 U
78A22U
 U
 U
 U
 U
 U
rV   )ranger   any)rQ   purposess   ` rS   is_flash_encryption_key_validz(ESP32S3ROM.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
 	
rV   c                 F    |                      | j                  | j        z  S r   )rN   EFUSE_SECURE_BOOT_EN_REGEFUSE_SECURE_BOOT_EN_MASKr   s    rS   get_secure_boot_enabledz"ESP32S3ROM.get_secure_boot_enabled  s$    MM$788,-	
rV   c                     d S r   r   r   s    rS   _get_rtc_cntl_flash_voltagez&ESP32S3ROM._get_rtc_cntl_flash_voltage!  r   rV   c                 "    t          | d          )NzOverriding VDDSDIO)r   )rQ   new_voltages     rS   override_vddsdiozESP32S3ROM.override_vddsdio$  s    &:;;;rV   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   )rN   MAC_EFUSE_REGstructpacktuple)rQ   mac_typemac0mac1	bitstrings        rS   read_maczESP32S3ROM.read_mac'  si    z!!4}}T/00}}T/!344KtT221226	YrV   c                 N    |                      | j                  | j        z  rdndS )Nr   r   )rN   EFUSE_RD_REPEAT_DATA3_REG)EFUSE_RD_REPEAT_DATA3_REG_FLASH_TYPE_MASKr   s    rS   
flash_typezESP32S3ROM.flash_type0  s4     }}T;<<<=AA 		
rV   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_OTGr   s    rS   uses_usb_otgzESP32S3ROM.uses_usb_otg8  s.     $ 	5!!T%@@@rV   c                 N    | j         rdS |                                 | j        k    S )z[
        Check the UARTDEV_BUF_NO register to see if USB-JTAG/Serial is being used
        F)r   r   UARTDEV_BUF_NO_USB_JTAG_SERIALr   s    rS   uses_usb_jtag_serialzESP32S3ROM.uses_usb_jtag_serial@  s.     $ 	5!!T%HHHrV   c                    |                                  r|                     | j        | j                   |                     | j        d           |                     | j        d           |                     | j        | j                   |                     | j        |                     | j                  | j	        z             |                     | j        d           d S d S r^   )
r   	write_regRTC_CNTL_WDTWPROTECT_REGRTC_CNTL_WDT_WKEYRTC_CNTL_WDTCONFIG0_REGRTC_CNTL_SWD_WPROTECT_REGRTC_CNTL_SWD_WKEYRTC_CNTL_SWD_CONF_REGrN   RTC_CNTL_SWD_AUTO_FEED_ENr   s    rS   disable_watchdogszESP32S3ROM.disable_watchdogsH  s     $$&& 	>NN48$:PQQQNN47;;;NN48!<<< NN494;QRRRNN*d89901  
 NN491=====	> 	>rV   c                     |                                  r| j        | _        | j        s|                                  d S d S r   )r   USB_RAM_BLOCKESP_RAM_BLOCKsync_stub_detectedr   r   s    rS   _post_connectzESP32S3ROM._post_connectZ  sN     	4!%!3D& 	%""$$$$$	% 	%rV   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	   printr   r   r   RTC_CNTL_WDTCONFIG1_REGr   r   r   s    rS   watchdog_resetzESP32S3ROM.watchdog_reset`  s    	5666t4d6LMMMt3T:::(*N	
 	
 	
 	t4a888c




rV   c                    	 |                      | j        d| j                   n# t          $ r Y nw xY w|                                 }|rf|                     | j                  }|                     | j                  }|| j        z  dk    r$|| j        z  dk    r|                                  d S t          j
        | |           d S r^   )r   RTC_CNTL_OPTION1_REG!RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK	Exceptionr   rN   GPIO_STRAP_REGGPIO_STRAP_SPI_BOOT_MASKr   r   
hard_reset)rQ   r   	strap_regforce_dl_regs       rS   r   zESP32S3ROM.hard_resetj  s    
	 NN)1d.T     	 	 	 D	 ((** 		d&9::I==)BCCLD99Q>> 4#IIQNN##%%%T<00000s   !$ 
11c                 0    t          j        | |           d S r   )r   change_baud)rQ   bauds     rS   r   zESP32S3ROM.change_baud  s    dD)))))rV   c           	      n   t          |                              t          t          dd                    t          t          dd                    z            st          d          |d         dk    rt          d          t	          d	 |D                       rt          j        d
           d S d S )Nr         1   z4SPI Pin numbers must be in the range 0-21, or 26-48.r"   .   z SPI HD Pin number must be <= 46.c                     g | ]}|d v |	S ))r      r   )r   vs     rS   r   z3ESP32S3ROM.check_spi_connection.<locals>.<listcomp>  s    ;;;aQ(]]]]]rV   zpGPIO pins 19 and 20 are used by USB-Serial/JTAG and USB-OTG, consider using other pins for SPI flash connection.)setissubsetr   r
   r   r	   warning)rQ   spi_connections     rS   check_spi_connectionzESP32S3ROM.check_spi_connection  s    >""++Ca,=,=E"bMM@R@R,RSS 	USTTT!r!!?@@@;;>;;;<< 	KF    	 	rV   N)r   )o__name__
__module____qualname__	CHIP_NAMEIMAGE_CHIP_IDIROM_MAP_STARTIROM_MAP_ENDDROM_MAP_STARTDROM_MAP_ENDUART_DATE_REG_ADDR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_MSBUSES_MAGIC_VALUEBOOTLOADER_FLASH_OFFSETSUPPORTS_ENCRYPTED_FLASHFLASH_ENCRYPTED_WRITE_ALIGN
EFUSE_BASErO   ri   r   EFUSE_RD_REG_BASEr   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   RTCCNTL_BASE_REGr   r   r   r   r   r   r   r   r   r   r   GPIO_STRAP_VDDSPI_MASKr   r   UART_CLKDIV_REG
MEMORY_MAPEFUSE_VDD_SPI_REGVDD_SPI_XPDVDD_SPI_TIEHVDD_SPI_FORCEUF2_FAMILY_IDrJ   dictintstr__annotations__rT   r\   r`   r_   rX   rY   rm   rl   rw   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   rV   rS   r   r      s        IMNLNL#LLMMK!#"$ J"T)"T)&M"U*'$.!'$.!'$. '$. '$. '$.!,=)(/%#-#5 $-!)E1 ' *T 106-#$ #$ !"N%&"!,v5 ' 06 9".7.7/&8"MN%#%(+% O 	,++(((///,,,333000(((---(((,,,(((,,,J #T)KLMM ( !!$ $L$sCx.   U U U
 
 
    T T TU U U1 1 1U U U
B 
B 
BU U UQ Q Q
3 3 3= = =
  .    3 3 3 
 
 

 
 
  < < <       
 
 
A A AI I I> > >$% % %  1 1 14* * *	 	 	 	 	rV   r   c                   "     e Zd ZdZ fdZ xZS )ESP32S3StubLoaderz-Stub loader for ESP32-S3, runs on top of ROM.c                     t                                          |           |                                r| j        | _        | j        | _        d S d S r   )super__init__r   r   r   FLASH_WRITE_SIZE)rQ   
rom_loader	__class__s     rS   r<  zESP32S3StubLoader.__init__  sU    $$$""$$ 	7!%!3D$($6D!!!	7 	7rV   )r  r  r  __doc__r<  __classcell__)r?  s   @rS   r9  r9    s>        777 7 7 7 7 7 7 7 7rV   r9  )r   timer   esp32r   loaderr   r   loggerr	   utilr
   r   r   r9  
STUB_CLASSr   rV   rS   <module>rH     s                 ) ) ) ) ) ) ) )       0 0 0 0 0 0 0 0A A A A A A A AH7 7 7 7 7	: 7 7 7 *
   rV   