mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Add 2MB option for partitions.csv generation and restore use of user-defined partitions (#5779)
This commit is contained in:
		| @@ -3,23 +3,26 @@ from typing import Union, Optional | |||||||
| from pathlib import Path | from pathlib import Path | ||||||
| import logging | import logging | ||||||
| import os | import os | ||||||
|  | import esphome.final_validate as fv | ||||||
|  |  | ||||||
| from esphome.helpers import copy_file_if_changed, write_file_if_changed, mkdir_p | from esphome.helpers import copy_file_if_changed, write_file_if_changed, mkdir_p | ||||||
| from esphome.const import ( | from esphome.const import ( | ||||||
|  |     CONF_ADVANCED, | ||||||
|     CONF_BOARD, |     CONF_BOARD, | ||||||
|     CONF_COMPONENTS, |     CONF_COMPONENTS, | ||||||
|  |     CONF_ESPHOME, | ||||||
|     CONF_FRAMEWORK, |     CONF_FRAMEWORK, | ||||||
|  |     CONF_IGNORE_EFUSE_MAC_CRC, | ||||||
|     CONF_NAME, |     CONF_NAME, | ||||||
|  |     CONF_PATH, | ||||||
|  |     CONF_PLATFORMIO_OPTIONS, | ||||||
|  |     CONF_REF, | ||||||
|  |     CONF_REFRESH, | ||||||
|     CONF_SOURCE, |     CONF_SOURCE, | ||||||
|     CONF_TYPE, |     CONF_TYPE, | ||||||
|  |     CONF_URL, | ||||||
|     CONF_VARIANT, |     CONF_VARIANT, | ||||||
|     CONF_VERSION, |     CONF_VERSION, | ||||||
|     CONF_ADVANCED, |  | ||||||
|     CONF_REFRESH, |  | ||||||
|     CONF_PATH, |  | ||||||
|     CONF_URL, |  | ||||||
|     CONF_REF, |  | ||||||
|     CONF_IGNORE_EFUSE_MAC_CRC, |  | ||||||
|     KEY_CORE, |     KEY_CORE, | ||||||
|     KEY_FRAMEWORK_VERSION, |     KEY_FRAMEWORK_VERSION, | ||||||
|     KEY_NAME, |     KEY_NAME, | ||||||
| @@ -327,6 +330,32 @@ def _detect_variant(value): | |||||||
|     return value |     return value | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def final_validate(config): | ||||||
|  |     if CONF_PLATFORMIO_OPTIONS not in fv.full_config.get()[CONF_ESPHOME]: | ||||||
|  |         return config | ||||||
|  |  | ||||||
|  |     pio_flash_size_key = "board_upload.flash_size" | ||||||
|  |     pio_partitions_key = "board_build.partitions" | ||||||
|  |     if ( | ||||||
|  |         CONF_PARTITIONS in config | ||||||
|  |         and pio_partitions_key | ||||||
|  |         in fv.full_config.get()[CONF_ESPHOME][CONF_PLATFORMIO_OPTIONS] | ||||||
|  |     ): | ||||||
|  |         raise cv.Invalid( | ||||||
|  |             f"Do not specify '{pio_partitions_key}' in '{CONF_PLATFORMIO_OPTIONS}' with '{CONF_PARTITIONS}' in esp32" | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     if ( | ||||||
|  |         pio_flash_size_key | ||||||
|  |         in fv.full_config.get()[CONF_ESPHOME][CONF_PLATFORMIO_OPTIONS] | ||||||
|  |     ): | ||||||
|  |         raise cv.Invalid( | ||||||
|  |             f"Please specify {CONF_FLASH_SIZE} within esp32 configuration only" | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |     return config | ||||||
|  |  | ||||||
|  |  | ||||||
| CONF_PLATFORM_VERSION = "platform_version" | CONF_PLATFORM_VERSION = "platform_version" | ||||||
|  |  | ||||||
| ARDUINO_FRAMEWORK_SCHEMA = cv.All( | ARDUINO_FRAMEWORK_SCHEMA = cv.All( | ||||||
| @@ -387,6 +416,7 @@ FRAMEWORK_SCHEMA = cv.typed_schema( | |||||||
|  |  | ||||||
|  |  | ||||||
| FLASH_SIZES = [ | FLASH_SIZES = [ | ||||||
|  |     "2MB", | ||||||
|     "4MB", |     "4MB", | ||||||
|     "8MB", |     "8MB", | ||||||
|     "16MB", |     "16MB", | ||||||
| @@ -394,6 +424,7 @@ FLASH_SIZES = [ | |||||||
| ] | ] | ||||||
|  |  | ||||||
| CONF_FLASH_SIZE = "flash_size" | CONF_FLASH_SIZE = "flash_size" | ||||||
|  | CONF_PARTITIONS = "partitions" | ||||||
| CONFIG_SCHEMA = cv.All( | CONFIG_SCHEMA = cv.All( | ||||||
|     cv.Schema( |     cv.Schema( | ||||||
|         { |         { | ||||||
| @@ -401,6 +432,7 @@ CONFIG_SCHEMA = cv.All( | |||||||
|             cv.Optional(CONF_FLASH_SIZE, default="4MB"): cv.one_of( |             cv.Optional(CONF_FLASH_SIZE, default="4MB"): cv.one_of( | ||||||
|                 *FLASH_SIZES, upper=True |                 *FLASH_SIZES, upper=True | ||||||
|             ), |             ), | ||||||
|  |             cv.Optional(CONF_PARTITIONS): cv.file_, | ||||||
|             cv.Optional(CONF_VARIANT): cv.one_of(*VARIANTS, upper=True), |             cv.Optional(CONF_VARIANT): cv.one_of(*VARIANTS, upper=True), | ||||||
|             cv.Optional(CONF_FRAMEWORK, default={}): FRAMEWORK_SCHEMA, |             cv.Optional(CONF_FRAMEWORK, default={}): FRAMEWORK_SCHEMA, | ||||||
|         } |         } | ||||||
| @@ -410,6 +442,9 @@ CONFIG_SCHEMA = cv.All( | |||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | FINAL_VALIDATE_SCHEMA = cv.Schema(final_validate) | ||||||
|  |  | ||||||
|  |  | ||||||
| async def to_code(config): | async def to_code(config): | ||||||
|     cg.add_platformio_option("board", config[CONF_BOARD]) |     cg.add_platformio_option("board", config[CONF_BOARD]) | ||||||
|     cg.add_platformio_option("board_upload.flash_size", config[CONF_FLASH_SIZE]) |     cg.add_platformio_option("board_upload.flash_size", config[CONF_FLASH_SIZE]) | ||||||
| @@ -462,6 +497,9 @@ async def to_code(config): | |||||||
|         add_idf_sdkconfig_option("CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0", False) |         add_idf_sdkconfig_option("CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0", False) | ||||||
|         add_idf_sdkconfig_option("CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1", False) |         add_idf_sdkconfig_option("CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1", False) | ||||||
|  |  | ||||||
|  |         if CONF_PARTITIONS in config: | ||||||
|  |             cg.add_platformio_option("board_build.partitions", config[CONF_PARTITIONS]) | ||||||
|  |         else: | ||||||
|             cg.add_platformio_option("board_build.partitions", "partitions.csv") |             cg.add_platformio_option("board_build.partitions", "partitions.csv") | ||||||
|  |  | ||||||
|         for name, value in conf[CONF_SDKCONFIG_OPTIONS].items(): |         for name, value in conf[CONF_SDKCONFIG_OPTIONS].items(): | ||||||
| @@ -507,6 +545,9 @@ async def to_code(config): | |||||||
|             [f"platformio/framework-arduinoespressif32@{conf[CONF_SOURCE]}"], |             [f"platformio/framework-arduinoespressif32@{conf[CONF_SOURCE]}"], | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|  |         if CONF_PARTITIONS in config: | ||||||
|  |             cg.add_platformio_option("board_build.partitions", config[CONF_PARTITIONS]) | ||||||
|  |         else: | ||||||
|             cg.add_platformio_option("board_build.partitions", "partitions.csv") |             cg.add_platformio_option("board_build.partitions", "partitions.csv") | ||||||
|  |  | ||||||
|         cg.add_define( |         cg.add_define( | ||||||
| @@ -518,6 +559,7 @@ async def to_code(config): | |||||||
|  |  | ||||||
|  |  | ||||||
| APP_PARTITION_SIZES = { | APP_PARTITION_SIZES = { | ||||||
|  |     "2MB": 0x0C0000,  # 768 KB | ||||||
|     "4MB": 0x1C0000,  # 1792 KB |     "4MB": 0x1C0000,  # 1792 KB | ||||||
|     "8MB": 0x3C0000,  # 3840 KB |     "8MB": 0x3C0000,  # 3840 KB | ||||||
|     "16MB": 0x7C0000,  # 7936 KB |     "16MB": 0x7C0000,  # 7936 KB | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user