
    ;)di                         d dl Z 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  G d	 d
e          Z G d dee          Zee_        dS )    N   )
ESP32C3ROM)
ESP32C6ROM   )	ESPLoader	StubMixin)log)
FatalErrorc                      e Zd ZU 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dZdZdZdZdZ dZ!dZ"dZ#ddddZ$g dg dg dg dg dg dg dg d g d!g d"g d#gZ%d$Z&d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4Z'e(e)e*f         e+d5<   d6 Z,d7 Z-d8 Z.d9 Z/d: Z0d; Z1d< Z2d= Z3d> Z4d? Z5d@ Z6dA Z7dB Z8dCS )D
ESP32C5ROMESP32-C5   i    i H`D   0   4         8   r      
      i   i      B   Dia	`i      i@r   )80m40m20m)r   i   PADDING)r   r   DROM)  @  @DRAM)r    r!   BYTE_ACCESSIBLE) @i  @	DROM_MASK)i   @r$   	IROM_MASK)r   r   IROM)r    r!   IRAM)   P @ PRTC_IRAM)r)   r*   RTC_DRAM)i `i  `MEM_INTERNAL2l   C8n z
USER/EMPTY	ECDSA_KEY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XTS_AES_128_PSRAM_KEYECDSA_KEY_P192ECDSA_KEY_P384_LECDSA_KEY_P384_H)r   r      r            	   r         r            KEY_PURPOSESc                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr   r<      r>   read_regEFUSE_BLOCK1_ADDRselfnum_words     ^/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/esptool/targets/esp32c5.pyget_pkg_versionzESP32C5ROM.get_pkg_versione   s0    d4HEFF"LPTTT    c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr   r<   r   r   rI   rL   s     rO   get_minor_chip_versionz!ESP32C5ROM.get_minor_chip_versioni   /    d4HEFF!KtSSrQ   c                 R    d}|                      | j        d|z  z             dz	  dz  S )Nr   r<      rI   rL   s     rO   get_major_chip_versionz!ESP32C5ROM.get_major_chip_versionm   rT   rQ   c                     ddi                     |                                 d          }|                                 }|                                 }| d| d| dS )Nr   r   zUnknown ESP32-C5z (revision v.))getrP   rW   rS   )rM   	chip_name	major_rev	minor_revs       rO   get_chip_descriptionzESP32C5ROM.get_chip_descriptionq   sp    z

#d""$$&8
9
9 	 //11	//11	AAAAYAAAArQ   c                 
    g dS )N)zWi-Fi 6 (dual-band)z	BT 5 (LE)zIEEE802.15.4zSingle Core + LP Core240MHz rM   s    rO   get_chip_featureszESP32C5ROM.get_chip_featuresy   s    
 
 
 	
rQ   c                 *    t          j        |           S N)r   get_crystal_freqrc   s    rO   rg   zESP32C5ROM.get_crystal_freq   s     )$///rQ   c                 V    |                      | j                  | j        z  | j        z	  S rf   )rJ   PCR_SYSCLK_CONF_REGPCR_SYSCLK_XTAL_FREQ_VPCR_SYSCLK_XTAL_FREQ_Src   s    rO   get_crystal_freq_rom_expectz&ESP32C5ROM.get_crystal_freq_rom_expect   s,    MM$233d6QQ() 	)rQ   c                 T    t          j        | |                                            d S rf   )r   
hard_resetuses_usb_jtag_serialrc   s    rO   rn   zESP32C5ROM.hard_reset   s'    T4#<#<#>#>?????rQ   c                    | j         s&|                                 }|                                 }t          j        d| d| d           |}|dk    r|dk    r	|dz  dz  }n,|dk    r|dk    r	|dz  dz  }nt          j        | |           d S t          j        d| d           |                     | j        d         t          j
        d	|d
                     t          j        d           |                     |           t          j        d           |                                  d S t          j        | |           d S )NzROM expects crystal freq: z MHz, detected z MHz.r   (   zChanging baud rate to z...CHANGE_BAUDRATEz<IIr   zChanged.g?)IS_STUBrl   rg   r	   printr   change_baudcommandESP_CMDSstructpack_set_port_baudratetimesleepflush_input)rM   baudcrystal_freq_rom_expectcrystal_freq_detect	baud_rates        rO   ru   zESP32C5ROM.change_baud   s   | 	.&*&F&F&H&H#"&"7"7"9"9I7-D 7 7/7 7 7   I"b((-D-J-J 2IO		$**/F"/L/L 2IO		%dI666I=y===>>>LL/0&+eYPQ2R2R   Ij!!!##D)))Jt!$-----rQ   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_SHIFTrJ   )rM   	key_blockregshifts       rO   get_key_block_purposez ESP32C5ROM.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+t33rQ   c                       fdt           j        dz             D             }t           fd|D                       S )Nc                 :    g | ]}                     |          S rb   )r   ).0brM   s     rO   
<listcomp>z<ESP32C5ROM.is_flash_encryption_key_valid.<locals>.<listcomp>   s4     
 
 
./D&&q))
 
 
rQ   r   c              3   .   K   | ]}|j         k    V  d S rf   )PURPOSE_VAL_XTS_AES128_KEY)r   prM   s     rO   	<genexpr>z;ESP32C5ROM.is_flash_encryption_key_valid.<locals>.<genexpr>   s+      JJA177JJJJJJrQ   )ranger   any)rM   purposess   ` rO   is_flash_encryption_key_validz(ESP32C5ROM.is_flash_encryption_key_valid   s`    
 
 
 
389Ka9O3P3P
 
 
 JJJJJJJJJJrQ   c                     t          |                              t          t          dd                              st          d          t	          d |D                       rt          j        d           d S d S )Nr      z*SPI Pin numbers must be in the range 0-28.c                     g | ]}|d v |	S ))      rb   )r   vs     rO   r   z3ESP32C5ROM.check_spi_connection.<locals>.<listcomp>   s    ;;;aQ(]]]]]rQ   zdGPIO pins 13 and 14 are used by USB-Serial/JTAG, consider using other pins for SPI flash connection.)setissubsetr   r
   r   r	   warning)rM   spi_connections     rO   check_spi_connectionzESP32C5ROM.check_spi_connection   s    >""++Ca,=,=>> 	KIJJJ;;>;;;<< 	KF    	 	rQ   c                 .    t          j        |            d S rf   )r   watchdog_resetrc   s    rO   r   zESP32C5ROM.watchdog_reset   s    !$'''''rQ   N)9__name__
__module____qualname__	CHIP_NAMEIMAGE_CHIP_IDBOOTLOADER_FLASH_OFFSET
EFUSE_BASErK   MAC_EFUSE_REG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_MASKEFUSE_SECURE_BOOT_EN_REGEFUSE_SECURE_BOOT_EN_MASKIROM_MAP_STARTIROM_MAP_ENDDROM_MAP_STARTDROM_MAP_ENDri   rj   rk   UARTDEV_BUF_NOFLASH_FREQUENCY
MEMORY_MAPUF2_FAMILY_IDrF   dictintstr__annotations__rP   rS   rW   r_   rd   rg   rl   rn   ru   r   r   r   r   rb   rQ   rO   r   r      s        IM$J"U*&M"U*'$.!'$.!'$. '$. '$.!'$.!,=)(/%#-#5 $-!)E1 'NLNL$'N  O 	,++((((((333------((((((,,,,,,111J M ( !!#$ $L$sCx.   $U U UT T TT T TB B B
 
 
0 0 0
) ) )
@ @ @. . .<4 4 4 K K K  ( ( ( ( (rQ   r   c                       e Zd ZdZdS )ESP32C5StubLoaderz-Stub loader for ESP32-C5, runs on top of ROM.N)r   r   r   __doc__rb   rQ   rO   r   r      s        77DrQ   r   )rx   r{   esp32c3r   esp32c6r   loaderr   r   loggerr	   utilr
   r   r   
STUB_CLASSrb   rQ   rO   <module>r      s                  ) ) ) ) ) ) ) )            @( @( @( @( @( @( @( @(F	 	 	 	 		: 	 	 	 *
   rQ   