import os import sys from os.path import join, isfile Import("env") # 1. Находим, где на этом ПК физически лежит фреймворк ESP-IDF FRAMEWORK_DIR = env.PioPlatform().get_package_dir("framework-espidf") if not FRAMEWORK_DIR: print("[ERROR] Не удалось найти директорию framework-espidf!") sys.exit(1) def patch_file(file_path, search_str, replace_str): if not isfile(file_path): return with open(file_path, "r", encoding="utf-8") as f: content = f.read() if search_str in content and replace_str not in content: print(f"[PATCHING] Модификация файла: {file_path}") new_content = content.replace(search_str, search_str + replace_str) with open(file_path, "w", encoding="utf-8") as f: f.write(new_content) # 2. Патчим Kconfig, чтобы добавить новые кнопки в menuconfig / sdkconfig kconfig_path = join(FRAMEWORK_DIR, "components", "esp_system", "port", "soc", "esp32s3", "Kconfig.cpu") search_kconfig = 'config ESP_DEFAULT_CPU_FREQ_MHZ_240\n bool "240 MHz"' replace_kconfig = """\n config ESP_DEFAULT_CPU_FREQ_MHZ_320 bool "320 MHz" config ESP_DEFAULT_CPU_FREQ_MHZ_480 bool "480 MHz" """ search_kconfig_val = 'default 240 if ESP_DEFAULT_CPU_FREQ_MHZ_240' replace_kconfig_val = """\n default 320 if ESP_DEFAULT_CPU_FREQ_MHZ_320\n default 480 if ESP_DEFAULT_CPU_FREQ_MHZ_480""" patch_file(kconfig_path, search_kconfig, replace_kconfig) patch_file(kconfig_path, search_kconfig_val, replace_kconfig_val) # 3. Патчим rtc_clk.c, чтобы ядро умело конфигурировать тактовые делители rtc_clk_path = join(FRAMEWORK_DIR, "components", "esp_hw_support", "port", "esp32s3", "rtc_clk.c") search_rtc = "case 240:\n config.source = SOC_CPU_CLK_SRC_PLL;\n config.source_freq_mhz = 480;\n config.div = 2;\n break;" replace_rtc = """\n case 320: config.source = SOC_CPU_CLK_SRC_PLL; config.source_freq_mhz = 320; config.div = 1; break; case 480: config.source = SOC_CPU_CLK_SRC_PLL; config.source_freq_mhz = 480; config.div = 1; break;""" patch_file(rtc_clk_path, search_rtc, replace_rtc)