
    ;)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                   z   e Zd ZU 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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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)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2d Z3e4d!             Z5d"Z6d#Z7g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.gZ8d/Z9d0d1d2d3d4d5d6d7d8d9d:d;d<d=Z:e;e<e=f         e>d><   d?Z?e?dz   Z@e?dz   ZAe?d
z   ZBd@ZCe?dz   ZDdAZEe?dz   ZFd@ZGdB ZHdC ZIdD ZJdE ZKdF ZLdG ZMdH ZNdI ZOdYdKZPdL ZQdM ZRdN ZSdO ZTdP ZUdQ ZVdR ZWdS ZXdT ZYdU ZZdV Z[dW Z\dXS )Z
ESP32P4ROMESP32-P4      @   Li    iPi PD   i P          $   (   X   F0   4   8   r            i   i   r      i   i8 Pi PT   c                 H    d}|                                  dk     rdnd}||z   S )z`Variable .bss.UartDev.buff_uart_no in ROM .bss
        which indicates the port in use.
        r   ,  iOiOget_chip_revision)selfBUF_UART_NO_OFFSETBSS_UART_DEV_ADDRs      ^/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/esptool/targets/esp32p4.pyUARTDEV_BUF_NOzESP32P4ROM.UARTDEV_BUF_NOS   s6    
  *.*@*@*B*BS*H*HJJj #555          )r   i   PADDING)r   r   DROM)  O  ODRAM)r/   r0   BYTE_ACCESSIBLE)  O  O	DROM_MASK)r3   r4   	IROM_MASK)r   r   IROM)r/   r0   IRAM) P  PRTC_IRAM)r9   r:   RTC_DRAM)i `i  `MEM_INTERNAL2i0=z
USER/EMPTY	ECDSA_KEY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KM_INIT_KEY)r   r   r   r   r   r+   r,      r   	   
      r   KEY_PURPOSESi `Pi:Pi   c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr   r      rJ   read_regEFUSE_BLOCK1_ADDRr%   num_words     r(   get_pkg_versionzESP32P4ROM.get_pkg_version   s0    d4HEFF"LPTTTr*   c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr   r   r      rQ   rT   s     r(   get_minor_chip_versionz!ESP32P4ROM.get_minor_chip_version   s/    d4HEFF!KtSSr*   c                 n    d}|                      | j        d|z  z             }|dz	  dz  dz  |dz	  dz  z  S )Nr   r      r   r   rQ   )r%   rU   words      r(   get_major_chip_versionz!ESP32P4ROM.get_major_chip_version   sF    }}T3q8|DEE"*!a'TQY$,>??r*   c                     ddi                     |                                 d          }|                                 }|                                 }| d| d| dS )Nr   r   zUnknown ESP32-P4z (revision v.))getrV   r]   rY   )r%   	chip_name	major_rev	minor_revs       r(   get_chip_descriptionzESP32P4ROM.get_chip_description   sp    z

#d""$$&8
9
9 	 //11	//11	AAAAYAAAAr*   c                 
    ddgS )NzDual Core + LP Core400MHz r%   s    r(   get_chip_featureszESP32P4ROM.get_chip_features   s    %x00r*   c                     dS )Nr   rh   ri   s    r(   get_crystal_freqzESP32P4ROM.get_crystal_freq   s    rr*   c                 "    t          | d          )NzReading flash voltager   ri   s    r(   get_flash_voltagezESP32P4ROM.get_flash_voltage   s    &=>>>r*   c                 "    t          | d          )NzOverriding VDDSDIOrn   )r%   new_voltages     r(   override_vddsdiozESP32P4ROM.override_vddsdio   s    &:;;;r*   BASE_MACc                     |dk    rdS |                      | j                  }|                      | j        dz             }t          j        d||          dd         }t	          |          S )zRead MAC from EFUSE regionrs   Nr   z>IIr   )rR   MAC_EFUSE_REGstructpacktuple)r%   mac_typemac0mac1	bitstrings        r(   read_maczESP32P4ROM.read_mac   si    z!!4}}T/00}}T/!344KtT221226	Yr*   c                     d S Nrh   ri   s    r(   get_flash_crypt_configz!ESP32P4ROM.get_flash_crypt_config   s    tr*   c                 F    |                      | j                  | j        z  S r   )rR   EFUSE_SECURE_BOOT_EN_REGEFUSE_SECURE_BOOT_EN_MASKri   s    r(   get_secure_boot_enabledz"ESP32P4ROM.get_secure_boot_enabled   s$    MM$788,-	
r*   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-rX   )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_SHIFTrR   )r%   	key_blockregshifts       r(   get_key_block_purposez ESP32P4ROM.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2r*   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 rh   )r   ).0br%   s     r(   
<listcomp>z<ESP32P4ROM.is_flash_encryption_key_valid.<locals>.<listcomp>   s4     
 
 
./D&&q))
 
 
r*   r   c              3   .   K   | ]}|j         k    V  d S r   )PURPOSE_VAL_XTS_AES128_KEYr   pr%   s     r(   	<genexpr>z;ESP32P4ROM.is_flash_encryption_key_valid.<locals>.<genexpr>   s+      FFqD33FFFFFFr*   Tc              3   .   K   | ]}|j         k    V  d S r   )PURPOSE_VAL_XTS_AES256_KEY_1r   s     r(   r   z;ESP32P4ROM.is_flash_encryption_key_valid.<locals>.<genexpr>   s+      LLa199LLLLLLr*   c              3   .   K   | ]}|j         k    V  d S r   )PURPOSE_VAL_XTS_AES256_KEY_2r   s     r(   r   z;ESP32P4ROM.is_flash_encryption_key_valid.<locals>.<genexpr>   sD       U
 U
78A22U
 U
 U
 U
 U
 U
r*   )ranger   any)r%   purposess   ` r(   is_flash_encryption_key_validz(ESP32P4ROM.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
 	
r*   c                 0    t          j        | |           d S r   )r   change_baud)r%   bauds     r(   r   zESP32P4ROM.change_baud   s    dD)))))r*   c                     |                                  r| j        | _        | j        s|                                  d S d S r   )uses_usb_otgUSB_RAM_BLOCKESP_RAM_BLOCKsync_stub_detecteddisable_watchdogsri   s    r(   _post_connectzESP32P4ROM._post_connect   sN     	4!%!3D& 	%""$$$$$	% 	%r*   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_OTGri   s    r(   r   zESP32P4ROM.uses_usb_otg   s.     $ 	5!!T%@@@r*   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_SERIALri   s    r(   uses_usb_jtag_serialzESP32P4ROM.uses_usb_jtag_serial   s.     $ 	5!!T%HHHr*   c                    |                                  r|                     | j        | j                   |                     | j        d           |                     | j        d           |                     | j        | j                   |                     | j        |                     | j                  | j        z             |                     | j        d           d S d S )Nr   )	r   	write_regRTC_CNTL_WDTWPROTECT_REGRTC_CNTL_SWD_WKEYRTC_CNTL_WDTCONFIG0_REGRTC_CNTL_SWD_WPROTECT_REGRTC_CNTL_SWD_CONF_REGrR   RTC_CNTL_SWD_AUTO_FEED_ENri   s    r(   r   zESP32P4ROM.disable_watchdogs   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=====	> 	>r*   c                     t          |                              t          t          dd                              st          d          t	          d |D                       rt          j        d           d S d S )Nr   7   z*SPI Pin numbers must be in the range 0-54.c                     g | ]}|d v |	S ))r      rh   )r   vs     r(   r   z3ESP32P4ROM.check_spi_connection.<locals>.<listcomp>  s    ;;;aQ(]]]]]r*   zdGPIO pins 24 and 25 are used by USB-Serial/JTAG, consider using other pins for SPI flash connection.)setissubsetr   r
   r   r	   warning)r%   spi_connections     r(   check_spi_connectionzESP32P4ROM.check_spi_connection
  s    >""++Ca,=,=>> 	KIJJJ;;>;;;<< 	KF    	 	r*   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   RTC_CNTL_WDT_WKEYRTC_CNTL_WDTCONFIG1_REGr   r   ri   s    r(   watchdog_resetzESP32P4ROM.watchdog_reset  s    	5666t4d6LMMMt3T:::(*N	
 	
 	
 	t4a888c




r*   c                     |                                  r|                                  d S t          j        |            d S r   )r   r   r   
hard_resetri   s    r(   r   zESP32P4ROM.hard_reset  sE     	'!!!!! &&&&&r*   N)rs   )]__name__
__module____qualname__	CHIP_NAMEIMAGE_CHIP_IDIROM_MAP_STARTIROM_MAP_ENDDROM_MAP_STARTDROM_MAP_ENDBOOTLOADER_FLASH_OFFSETUART_DATE_REG_ADDR
EFUSE_BASErS   ru   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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   GPIO_STRAP_REGGPIO_STRAP_SPI_BOOT_MASKRTC_CNTL_OPTION1_REG!RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASKSUPPORTS_ENCRYPTED_FLASHFLASH_ENCRYPTED_WRITE_ALIGNpropertyr)   r   r   
MEMORY_MAPUF2_FAMILY_IDrN   dictintstr__annotations__DR_REG_LP_WDT_BASEr   r   r   r   r   r   r   r   rV   rY   r]   re   rj   rl   ro   rr   r}   r   r   r   r   r   r   r   r   r   r   r   r   rh   r*   r(   r   r      s        IMNLNL$*J"U*&MLLMMK"U*'$.!'$.!'$. '$. '$. '$.!,=)(/%#-#5 $-!)E1 '#$ #$ !"MN"%(+%#"$6 6 X6  &'" 	,++((((((333------((((((,,,,,,111J M ( !!$ $L$sCx.     $0360691F:".7 ' 2V ;"U U UT T T@ @ @
B B B1 1 1  ? ? ?< < <         
 
 
3 3 3 
 
 
* * *% % %A A AI I I> > >$    ' ' ' ' 'r*   r   c                   (     e Zd ZdZ fdZd Z xZS )ESP32P4StubLoaderz-Stub loader for ESP32-P4, runs on top of ROM.c                     t                                          |           |                                r| j        | _        | j        | _        d S d S r   )super__init__r   r   r   FLASH_WRITE_SIZE)r%   
rom_loader	__class__s     r(   r   zESP32P4StubLoader.__init__'  sU    $$$""$$ 	7!%!3D$($6D!!!	7 	7r*   c                 :    |                                  dk     rdS dS )Nr"   zesp32p4rc1.jsonzesp32p4.jsonr#   ri   s    r(   stub_json_namez ESP32P4StubLoader.stub_json_name-  s$    !!##c))$$~r*   )r   r   r   __doc__r   r  __classcell__)r  s   @r(   r   r   $  sM        777 7 7 7 7      r*   r   )rv   timer   esp32r   loaderr   r   loggerr	   utilr
   r   r   r   
STUB_CLASSrh   r*   r(   <module>r     s                 ) ) ) ) ) ) ) )       0 0 0 0 0 0 0 0R' R' R' R' R' R' R' R'j    	:    *
   r*   