This commit is contained in:
2026-05-16 01:44:07 +07:00
parent 676634a3c7
commit 09224c1552
27 changed files with 3741 additions and 2396 deletions
Vendored Executable → Regular
View File
-3
View File
@@ -1,3 +0,0 @@
{
"C_Cpp.errorSquiggles": "disabled"
}
+12
View File
@@ -0,0 +1,12 @@
{
"folders": [
{
"name": "espLinuxESPIDF",
"path": "."
},
{
"path": "src"
}
],
"settings": {}
}
+52
View File
@@ -0,0 +1,52 @@
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)
+2 -10
View File
@@ -2,14 +2,6 @@
platform = espressif32 platform = espressif32
board = esp32-s3-devkitc-1 board = esp32-s3-devkitc-1
framework = espidf framework = espidf
board_build.partitions = partitions.csv
board_build.arduino.memory_type = qio_opi
build_flags =
-D BOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue
-D CONFIG_SPIRAM_USE_MALLOC=1
-D CONFIG_SPIRAM_TYPE_AUTO=1
-D CONFIG_SPIRAM_SPEED_80M=1
monitor_speed = 115200 monitor_speed = 115200
upload_speed = 921600
board_build.partitions = partitions.csv
Executable → Regular
+7 -10
View File
@@ -1216,9 +1216,9 @@ CONFIG_SPIRAM_TYPE_AUTO=y
# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set # CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set
CONFIG_SPIRAM_CLK_IO=30 CONFIG_SPIRAM_CLK_IO=30
CONFIG_SPIRAM_CS_IO=26 CONFIG_SPIRAM_CS_IO=26
# CONFIG_SPIRAM_XIP_FROM_PSRAM is not set CONFIG_SPIRAM_XIP_FROM_PSRAM=y
# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y
# CONFIG_SPIRAM_RODATA is not set CONFIG_SPIRAM_RODATA=y
# CONFIG_SPIRAM_SPEED_120M is not set # CONFIG_SPIRAM_SPEED_120M is not set
# CONFIG_SPIRAM_SPEED_80M is not set # CONFIG_SPIRAM_SPEED_80M is not set
CONFIG_SPIRAM_SPEED_40M=y CONFIG_SPIRAM_SPEED_40M=y
@@ -1228,12 +1228,10 @@ CONFIG_SPIRAM_BOOT_INIT=y
CONFIG_SPIRAM_PRE_CONFIGURE_MEMORY_PROTECTION=y CONFIG_SPIRAM_PRE_CONFIGURE_MEMORY_PROTECTION=y
# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set # CONFIG_SPIRAM_IGNORE_NOTFOUND is not set
# CONFIG_SPIRAM_USE_MEMMAP is not set # CONFIG_SPIRAM_USE_MEMMAP is not set
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set CONFIG_SPIRAM_USE_CAPS_ALLOC=y
CONFIG_SPIRAM_USE_MALLOC=y # CONFIG_SPIRAM_USE_MALLOC is not set
CONFIG_SPIRAM_MEMTEST=y CONFIG_SPIRAM_MEMTEST=y
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set # CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set # CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set
# CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY is not set # CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY is not set
# end of SPI RAM config # end of SPI RAM config
@@ -1304,11 +1302,10 @@ CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0
# end of Trace memory # end of Trace memory
CONFIG_ESP_SYSTEM_IN_IRAM=y CONFIG_ESP_SYSTEM_IN_IRAM=y
# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=y
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT is not set
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set # CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0
CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y
CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y
Executable → Regular
+395 -112
View File
File diff suppressed because it is too large Load Diff
+482
View File
@@ -0,0 +1,482 @@
//
// !!! WARNING !!! AUTO-GENERATED FILE!
// PLEASE DO NOT MODIFY IT AND USE "platformio.ini":
// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
//
{
"configurations": [
{
"name": "PlatformIO",
"includePath": [
"/home/koder/Repos/espLinuxESPIDF/include",
"/home/koder/.platformio/packages/framework-espidf/components/xtensa/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/xtensa/include",
"/home/koder/.platformio/packages/framework-espidf/components/xtensa/deprecated_include",
"/home/koder/Repos/espLinuxESPIDF/.pio/build/esp32-s3-devkitc-1/config",
"/home/koder/.platformio/packages/framework-espidf/components/newlib/platform_include",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/config/include",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/config/include/freertos",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/config/xtensa/include",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/include",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/esp_additions/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/include/soc",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/include/soc/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/dma/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/ldo/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/debug_probe/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/mspi_timing_tuning/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/mspi_timing_tuning/tuning_scheme_impl/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/power_supply/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/mspi_timing_tuning/port/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/mspi_timing_tuning/port/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/heap/include",
"/home/koder/.platformio/packages/framework-espidf/components/heap/tlsf",
"/home/koder/.platformio/packages/framework-espidf/components/log/include",
"/home/koder/.platformio/packages/framework-espidf/components/soc/include",
"/home/koder/.platformio/packages/framework-espidf/components/soc/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/soc/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/soc/esp32s3/register",
"/home/koder/.platformio/packages/framework-espidf/components/hal/platform_port/include",
"/home/koder/.platformio/packages/framework-espidf/components/hal/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/hal/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_rom/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_rom/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_rom/esp32s3/include/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/esp_rom/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/esp_common/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_system/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_system/port/soc",
"/home/koder/.platformio/packages/framework-espidf/components/esp_system/port/include/private",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/include",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/include/apps",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/include/apps/sntp",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/lwip/src/include",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/port/include",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/port/freertos/include",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include/arch",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include/sys",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_gpio/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_timer/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_pm/include",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/port/include",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/include",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/library",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/esp_crt_bundle/include",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/everest/include",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/p256-m",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/p256-m/p256-m",
"/home/koder/.platformio/packages/framework-espidf/components/esp_app_format/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_bootloader_format/include",
"/home/koder/.platformio/packages/framework-espidf/components/app_update/include",
"/home/koder/.platformio/packages/framework-espidf/components/bootloader_support/include",
"/home/koder/.platformio/packages/framework-espidf/components/bootloader_support/bootloader_flash/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_partition/include",
"/home/koder/.platformio/packages/framework-espidf/components/efuse/include",
"/home/koder/.platformio/packages/framework-espidf/components/efuse/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_mm/include",
"/home/koder/.platformio/packages/framework-espidf/components/spi_flash/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_security/include",
"/home/koder/.platformio/packages/framework-espidf/components/pthread/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_gptimer/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_ringbuf/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_psram/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_psram/xip_impl/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_uart/include",
"/home/koder/.platformio/packages/framework-espidf/components/vfs/include",
"/home/koder/.platformio/packages/framework-espidf/components/app_trace/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_event/include",
"/home/koder/.platformio/packages/framework-espidf/components/nvs_flash/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_phy/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_phy/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_usb_serial_jtag/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_vfs_console/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_netif/include",
"/home/koder/.platformio/packages/framework-espidf/components/wpa_supplicant/include",
"/home/koder/.platformio/packages/framework-espidf/components/wpa_supplicant/port/include",
"/home/koder/.platformio/packages/framework-espidf/components/wpa_supplicant/esp_supplicant/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_coex/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_wifi/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_wifi/include/local",
"/home/koder/.platformio/packages/framework-espidf/components/esp_wifi/wifi_apps/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_wifi/wifi_apps/nan_app/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_spi/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_gdbstub/include",
"/home/koder/.platformio/packages/framework-espidf/components/unity/include",
"/home/koder/.platformio/packages/framework-espidf/components/unity/unity/src",
"/home/koder/.platformio/packages/framework-espidf/components/cmock/CMock/src",
"/home/koder/.platformio/packages/framework-espidf/components/console",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_pcnt/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_mcpwm/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_ana_cmpr/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_i2s/include",
"/home/koder/.platformio/packages/framework-espidf/components/sdmmc/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_sdmmc/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_sdspi/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_sdio/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_dac/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_bitscrambler/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_rmt/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_tsens/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_sdm/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_i2c/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_ledc/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_parlio/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_twai/include",
"/home/koder/.platformio/packages/framework-espidf/components/driver/deprecated",
"/home/koder/.platformio/packages/framework-espidf/components/driver/i2c/include",
"/home/koder/.platformio/packages/framework-espidf/components/driver/touch_sensor/include",
"/home/koder/.platformio/packages/framework-espidf/components/driver/twai/include",
"/home/koder/.platformio/packages/framework-espidf/components/driver/touch_sensor/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/http_parser",
"/home/koder/.platformio/packages/framework-espidf/components/esp-tls",
"/home/koder/.platformio/packages/framework-espidf/components/esp-tls/esp-tls-crypto",
"/home/koder/.platformio/packages/framework-espidf/components/esp_adc/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_adc/interface",
"/home/koder/.platformio/packages/framework-espidf/components/esp_adc/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_adc/deprecated/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_isp/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_cam/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_cam/interface",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_cam/dvp/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_jpeg/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_ppa/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_touch_sens/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_touch_sens/hw_ver2/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_eth/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hal_ieee802154/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hid/include",
"/home/koder/.platformio/packages/framework-espidf/components/tcp_transport/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_http_client/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_http_server/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_https_ota/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_https_server/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_lcd/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_lcd/interface",
"/home/koder/.platformio/packages/framework-espidf/components/esp_lcd/rgb/include",
"/home/koder/.platformio/packages/framework-espidf/components/protobuf-c/protobuf-c",
"/home/koder/.platformio/packages/framework-espidf/components/protocomm/include/common",
"/home/koder/.platformio/packages/framework-espidf/components/protocomm/include/security",
"/home/koder/.platformio/packages/framework-espidf/components/protocomm/include/transports",
"/home/koder/.platformio/packages/framework-espidf/components/protocomm/include/crypto/srp6a",
"/home/koder/.platformio/packages/framework-espidf/components/protocomm/proto-c",
"/home/koder/.platformio/packages/framework-espidf/components/esp_local_ctrl/include",
"/home/koder/.platformio/packages/framework-espidf/components/espcoredump/include",
"/home/koder/.platformio/packages/framework-espidf/components/espcoredump/include/port/xtensa",
"/home/koder/.platformio/packages/framework-espidf/components/wear_levelling/include",
"/home/koder/.platformio/packages/framework-espidf/components/fatfs/diskio",
"/home/koder/.platformio/packages/framework-espidf/components/fatfs/src",
"/home/koder/.platformio/packages/framework-espidf/components/fatfs/vfs",
"/home/koder/.platformio/packages/framework-espidf/components/idf_test/include",
"/home/koder/.platformio/packages/framework-espidf/components/idf_test/include/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/ieee802154/include",
"/home/koder/.platformio/packages/framework-espidf/components/json/cJSON",
"/home/koder/.platformio/packages/framework-espidf/components/mqtt/esp-mqtt/include",
"/home/koder/.platformio/packages/framework-espidf/components/nvs_sec_provider/include",
"/home/koder/.platformio/packages/framework-espidf/components/perfmon/include",
"/home/koder/.platformio/packages/framework-espidf/components/rt/include",
"/home/koder/.platformio/packages/framework-espidf/components/spiffs/include",
"/home/koder/.platformio/packages/framework-espidf/components/touch_element/include",
"/home/koder/.platformio/packages/framework-espidf/components/usb/include",
"/home/koder/.platformio/packages/framework-espidf/components/wifi_provisioning/include",
"/home/koder/Repos/espLinuxESPIDF/components/esp_littlefs/include",
"/home/koder/Repos/espLinuxESPIDF/components/espressif__tinyusb/src",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/include/freertos",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/dotprod/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/support/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/support/mem/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/hann/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/blackman/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/blackman_harris/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/blackman_nuttall/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/nuttall/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/flat_top/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/iir/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/fir/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/add/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/sub/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/mul/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/addc/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/mulc/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/sqrt/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/mul/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/add/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/addc/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/mulc/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/sub/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/fft/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/dct/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/conv/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/common/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/mul/test/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/kalman/ekf/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/kalman/ekf_imu13states/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp_tinyusb/include",
"/home/koder/Repos/espLinuxESPIDF/src",
"/home/koder/Repos/espLinuxESPIDF/src/boot",
"/home/koder/Repos/espLinuxESPIDF/src/drivers/fs",
""
],
"browse": {
"limitSymbolsToIncludedHeaders": true,
"path": [
"/home/koder/Repos/espLinuxESPIDF/include",
"/home/koder/.platformio/packages/framework-espidf/components/xtensa/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/xtensa/include",
"/home/koder/.platformio/packages/framework-espidf/components/xtensa/deprecated_include",
"/home/koder/Repos/espLinuxESPIDF/.pio/build/esp32-s3-devkitc-1/config",
"/home/koder/.platformio/packages/framework-espidf/components/newlib/platform_include",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/config/include",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/config/include/freertos",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/config/xtensa/include",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/include",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/esp_additions/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/include/soc",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/include/soc/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/dma/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/ldo/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/debug_probe/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/mspi_timing_tuning/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/mspi_timing_tuning/tuning_scheme_impl/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/power_supply/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/mspi_timing_tuning/port/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hw_support/mspi_timing_tuning/port/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/heap/include",
"/home/koder/.platformio/packages/framework-espidf/components/heap/tlsf",
"/home/koder/.platformio/packages/framework-espidf/components/log/include",
"/home/koder/.platformio/packages/framework-espidf/components/soc/include",
"/home/koder/.platformio/packages/framework-espidf/components/soc/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/soc/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/soc/esp32s3/register",
"/home/koder/.platformio/packages/framework-espidf/components/hal/platform_port/include",
"/home/koder/.platformio/packages/framework-espidf/components/hal/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/hal/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_rom/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_rom/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_rom/esp32s3/include/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/esp_rom/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/esp_common/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_system/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_system/port/soc",
"/home/koder/.platformio/packages/framework-espidf/components/esp_system/port/include/private",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/include",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/include/apps",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/include/apps/sntp",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/lwip/src/include",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/port/include",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/port/freertos/include",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include/arch",
"/home/koder/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include/sys",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_gpio/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_timer/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_pm/include",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/port/include",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/include",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/library",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/esp_crt_bundle/include",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/everest/include",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/p256-m",
"/home/koder/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/p256-m/p256-m",
"/home/koder/.platformio/packages/framework-espidf/components/esp_app_format/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_bootloader_format/include",
"/home/koder/.platformio/packages/framework-espidf/components/app_update/include",
"/home/koder/.platformio/packages/framework-espidf/components/bootloader_support/include",
"/home/koder/.platformio/packages/framework-espidf/components/bootloader_support/bootloader_flash/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_partition/include",
"/home/koder/.platformio/packages/framework-espidf/components/efuse/include",
"/home/koder/.platformio/packages/framework-espidf/components/efuse/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_mm/include",
"/home/koder/.platformio/packages/framework-espidf/components/spi_flash/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_security/include",
"/home/koder/.platformio/packages/framework-espidf/components/pthread/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_gptimer/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_ringbuf/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_psram/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_psram/xip_impl/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_uart/include",
"/home/koder/.platformio/packages/framework-espidf/components/vfs/include",
"/home/koder/.platformio/packages/framework-espidf/components/app_trace/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_event/include",
"/home/koder/.platformio/packages/framework-espidf/components/nvs_flash/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_phy/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_phy/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_usb_serial_jtag/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_vfs_console/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_netif/include",
"/home/koder/.platformio/packages/framework-espidf/components/wpa_supplicant/include",
"/home/koder/.platformio/packages/framework-espidf/components/wpa_supplicant/port/include",
"/home/koder/.platformio/packages/framework-espidf/components/wpa_supplicant/esp_supplicant/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_coex/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_wifi/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_wifi/include/local",
"/home/koder/.platformio/packages/framework-espidf/components/esp_wifi/wifi_apps/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_wifi/wifi_apps/nan_app/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_spi/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_gdbstub/include",
"/home/koder/.platformio/packages/framework-espidf/components/unity/include",
"/home/koder/.platformio/packages/framework-espidf/components/unity/unity/src",
"/home/koder/.platformio/packages/framework-espidf/components/cmock/CMock/src",
"/home/koder/.platformio/packages/framework-espidf/components/console",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_pcnt/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_mcpwm/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_ana_cmpr/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_i2s/include",
"/home/koder/.platformio/packages/framework-espidf/components/sdmmc/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_sdmmc/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_sdspi/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_sdio/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_dac/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_bitscrambler/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_rmt/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_tsens/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_sdm/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_i2c/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_ledc/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_parlio/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_twai/include",
"/home/koder/.platformio/packages/framework-espidf/components/driver/deprecated",
"/home/koder/.platformio/packages/framework-espidf/components/driver/i2c/include",
"/home/koder/.platformio/packages/framework-espidf/components/driver/touch_sensor/include",
"/home/koder/.platformio/packages/framework-espidf/components/driver/twai/include",
"/home/koder/.platformio/packages/framework-espidf/components/driver/touch_sensor/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/http_parser",
"/home/koder/.platformio/packages/framework-espidf/components/esp-tls",
"/home/koder/.platformio/packages/framework-espidf/components/esp-tls/esp-tls-crypto",
"/home/koder/.platformio/packages/framework-espidf/components/esp_adc/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_adc/interface",
"/home/koder/.platformio/packages/framework-espidf/components/esp_adc/esp32s3/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_adc/deprecated/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_isp/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_cam/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_cam/interface",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_cam/dvp/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_jpeg/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_ppa/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_touch_sens/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_driver_touch_sens/hw_ver2/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_eth/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hal_ieee802154/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_hid/include",
"/home/koder/.platformio/packages/framework-espidf/components/tcp_transport/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_http_client/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_http_server/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_https_ota/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_https_server/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_lcd/include",
"/home/koder/.platformio/packages/framework-espidf/components/esp_lcd/interface",
"/home/koder/.platformio/packages/framework-espidf/components/esp_lcd/rgb/include",
"/home/koder/.platformio/packages/framework-espidf/components/protobuf-c/protobuf-c",
"/home/koder/.platformio/packages/framework-espidf/components/protocomm/include/common",
"/home/koder/.platformio/packages/framework-espidf/components/protocomm/include/security",
"/home/koder/.platformio/packages/framework-espidf/components/protocomm/include/transports",
"/home/koder/.platformio/packages/framework-espidf/components/protocomm/include/crypto/srp6a",
"/home/koder/.platformio/packages/framework-espidf/components/protocomm/proto-c",
"/home/koder/.platformio/packages/framework-espidf/components/esp_local_ctrl/include",
"/home/koder/.platformio/packages/framework-espidf/components/espcoredump/include",
"/home/koder/.platformio/packages/framework-espidf/components/espcoredump/include/port/xtensa",
"/home/koder/.platformio/packages/framework-espidf/components/wear_levelling/include",
"/home/koder/.platformio/packages/framework-espidf/components/fatfs/diskio",
"/home/koder/.platformio/packages/framework-espidf/components/fatfs/src",
"/home/koder/.platformio/packages/framework-espidf/components/fatfs/vfs",
"/home/koder/.platformio/packages/framework-espidf/components/idf_test/include",
"/home/koder/.platformio/packages/framework-espidf/components/idf_test/include/esp32s3",
"/home/koder/.platformio/packages/framework-espidf/components/ieee802154/include",
"/home/koder/.platformio/packages/framework-espidf/components/json/cJSON",
"/home/koder/.platformio/packages/framework-espidf/components/mqtt/esp-mqtt/include",
"/home/koder/.platformio/packages/framework-espidf/components/nvs_sec_provider/include",
"/home/koder/.platformio/packages/framework-espidf/components/perfmon/include",
"/home/koder/.platformio/packages/framework-espidf/components/rt/include",
"/home/koder/.platformio/packages/framework-espidf/components/spiffs/include",
"/home/koder/.platformio/packages/framework-espidf/components/touch_element/include",
"/home/koder/.platformio/packages/framework-espidf/components/usb/include",
"/home/koder/.platformio/packages/framework-espidf/components/wifi_provisioning/include",
"/home/koder/Repos/espLinuxESPIDF/components/esp_littlefs/include",
"/home/koder/Repos/espLinuxESPIDF/components/espressif__tinyusb/src",
"/home/koder/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/include/freertos",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/dotprod/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/support/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/support/mem/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/hann/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/blackman/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/blackman_harris/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/blackman_nuttall/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/nuttall/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/windows/flat_top/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/iir/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/fir/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/add/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/sub/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/mul/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/addc/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/mulc/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/math/sqrt/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/mul/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/add/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/addc/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/mulc/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/sub/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/fft/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/dct/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/conv/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/common/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/matrix/mul/test/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/kalman/ekf/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp-dsp/modules/kalman/ekf_imu13states/include",
"/home/koder/Repos/espLinuxESPIDF/managed_components/espressif__esp_tinyusb/include",
"/home/koder/Repos/espLinuxESPIDF/src",
"/home/koder/Repos/espLinuxESPIDF/src/boot",
"/home/koder/Repos/espLinuxESPIDF/src/drivers/fs",
""
]
},
"defines": [
"CFG_TUD_MTP_EP_CONTROL_BUFSIZE=16",
"CFG_TUD_MTP_EP_BUFSIZE=512",
"CFG_TUD_MTP=1",
"CFG_TUD_ENABLED=1",
"CFG_TUSB_MCU=OPT_MCU_ESP32S3",
"_POSIX_READER_WRITER_LOCKS",
"_GNU_SOURCE",
"_GLIBCXX_USE_POSIX_SEMAPHORE",
"_GLIBCXX_HAVE_POSIX_SEMAPHORE",
"SOC_XTAL_FREQ_MHZ=CONFIG_XTAL_FREQ",
"SOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE",
"MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"",
"IDF_VER=\"5.5.3\"",
"ESP_PLATFORM",
"PLATFORMIO=60119",
"ARDUINO_ESP32S3_DEV",
"ARDUINO_USB_MODE=1",
"ARDUINO_RUNNING_CORE=1",
"ARDUINO_EVENT_RUNNING_CORE=1",
""
],
"cStandard": "gnu17",
"cppStandard": "gnu++23",
"compilerPath": "/home/koder/.platformio/packages/toolchain-xtensa-esp-elf/bin/xtensa-esp32s3-elf-gcc",
"compilerArgs": [
"-mdisable-hardware-atomics",
"-mlongcalls",
""
]
}
],
"version": 4
}
+16 -3
View File
@@ -1,7 +1,20 @@
FILE(GLOB_RECURSE app_sources ${CMAKE_SOURCE_DIR}/src/*.c) # 1. Рекурсивно ищем все исходники (и .c и .cpp)
file(GLOB_RECURSE app_sources
"${CMAKE_CURRENT_SOURCE_DIR}/*.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/*.c"
)
# 2. Регистрируем компонент
idf_component_register( idf_component_register(
SRCS ${app_sources} SRCS ${app_sources}
INCLUDE_DIRS "." "${CMAKE_SOURCE_DIR}" INCLUDE_DIRS
REQUIRES esp_littlefs espressif__tinyusb "." # Папка src (где лежит CMakeLists)
"boot" # Чтобы видеть entry.hpp
"drivers/fs" # Чтобы видеть fs.hpp
REQUIRES
esp_littlefs
espressif__tinyusb
mbedtls
vfs
) )
View File
+7
View File
@@ -0,0 +1,7 @@
#ifndef SHELL_HPP
#define SHELL_HPP
#endif
@@ -1,4 +1,4 @@
#include "answer_code.h" #include "answer_code.hpp"
#include <stdlib.h> #include <stdlib.h>
const char* get_error(uint32_t code) { const char* get_error(uint32_t code) {
@@ -14,6 +14,9 @@ const char* get_error(uint32_t code) {
case OS_WRN_ALREADY_INIT: return "Warning: Attempting to reinitialize an object"; case OS_WRN_ALREADY_INIT: return "Warning: Attempting to reinitialize an object";
case OS_WRN_NOT_NEED_INIT: return "Warning: Attempt to initialize an uninitializable object"; case OS_WRN_NOT_NEED_INIT: return "Warning: Attempt to initialize an uninitializable object";
case VFS_ERR_TARGET_BUSY: return "Error: Remounting on busy path";
case VFS_ERR_NOT_SUPPORTED: return "Error: FS version not supported";
case VRAM_ERR_RANGE: return "Error: Attempt to write/read outside the video memory block"; case VRAM_ERR_RANGE: return "Error: Attempt to write/read outside the video memory block";
case VRAM_ERR_HANDLE: return "Error: Invalid or non-existent Handle"; case VRAM_ERR_HANDLE: return "Error: Invalid or non-existent Handle";
case VRAM_WRN_DEFRAG_REQ: return "Warning: Defragmentation required to allocate memory"; case VRAM_WRN_DEFRAG_REQ: return "Warning: Defragmentation required to allocate memory";
@@ -26,13 +29,6 @@ const char* get_error(uint32_t code) {
case DISP_ERR_UNSUPPORTED: return "Error: Screen mode or pixel format not supported"; case DISP_ERR_UNSUPPORTED: return "Error: Screen mode or pixel format not supported";
case APIOS_ERR_DUPLICATE_NAME: return "Error: Attempting to register a driver with a name that is already taken.";
case APIOS_ERR_EMPTY_API: return "Error: The driver has an empty function table.";
case APIOS_ERR_DRIVER_CRASH: return "Error: Error calling function: The function returned a critical failure that requires unloading.";
case APIOS_WRN_PARTIAL_API: return "Warning: The driver is loaded, but some of its functions are not implemented.";
case APIOS_ERR_NOT_INITIALIZED: return "Error: Attempting to call an API when the apios table is not initialized";
case APIOS_ERR_DRIVER_NOT_FOUND: return "Error: Attempt to call API of non-existent driver";
default: return "Unknown system error"; default: return "Unknown system error";
} }
} }
@@ -4,8 +4,9 @@
#include <stdlib.h> #include <stdlib.h>
#define OS_OK 0x00000000 #define OS_OK 0x00000000
#define OS_ERR 0x0000000f
// Общие системные ошибки (Generic) // Общие системные ошибки (0x00+)
#define OS_ERR_NO_MEMORY 0x00000001 // Ошибка malloc (не хватило ОЗУ) #define OS_ERR_NO_MEMORY 0x00000001 // Ошибка malloc (не хватило ОЗУ)
#define OS_ERR_NOT_INIT 0x00000002 // Объект или таблица не инициализированы (NULL) #define OS_ERR_NOT_INIT 0x00000002 // Объект или таблица не инициализированы (NULL)
#define OS_ERR_NOT_FOUND 0x00000003 // Драйвер, функция или файл не найдены #define OS_ERR_NOT_FOUND 0x00000003 // Драйвер, функция или файл не найдены
@@ -15,29 +16,25 @@
#define OS_WRN_ALREADY_INIT 0x00000007 // Объект уже был инициализирован ранее #define OS_WRN_ALREADY_INIT 0x00000007 // Объект уже был инициализирован ранее
#define OS_WRN_NOT_NEED_INIT 0x00000008 // Попытка инициалезировать когда она этого не требует #define OS_WRN_NOT_NEED_INIT 0x00000008 // Попытка инициалезировать когда она этого не требует
// Специфические ошибки VRAM (0x10+) // Ошибки VFS (0x40+)
#define VFS_ERR_TARGET_BUSY 0x00000040 // Ошибка повторное монтирование по занятому пути
#define VFS_ERR_NOT_SUPPORTED 0x00000041 // Ошибка версия FS не поддерживается
// Специфические ошибки VRAM (0x10+)
#define VRAM_ERR_RANGE 0x00000010 // Попытка записи/чтения за пределами блока #define VRAM_ERR_RANGE 0x00000010 // Попытка записи/чтения за пределами блока
#define VRAM_ERR_HANDLE 0x00000011 // Неверный или несуществующий Handle #define VRAM_ERR_HANDLE 0x00000011 // Неверный или несуществующий Handle
#define VRAM_WRN_DEFRAG_REQ 0x00000012 // Требуется дефрагментация для выделения памяти #define VRAM_WRN_DEFRAG_REQ 0x00000012 // Требуется дефрагментация для выделения памяти
#define VRAM_ERR_WR_or_RD 0x00000013 // Ошибка чтения записи #define VRAM_ERR_WR_or_RD 0x00000013 // Ошибка чтения записи
#define VRAM_ERR_POOL_MEMORY 0x00000014 // Ошибка выделения памяти #define VRAM_ERR_POOL_MEMORY 0x00000014 // Ошибка выделения памяти
// Ошибки процессов и планировщика (0x20+) // Ошибки процессов и планировщика (0x20+)
#define PROC_ERR_STACK 0x00000020 // Не хватило памяти под стек задачи #define PROC_ERR_STACK 0x00000020 // Не хватило памяти под стек задачи
#define PROC_ERR_PRIORITY 0x00000021 // Недопустимый приоритет FreeRTOS #define PROC_ERR_PRIORITY 0x00000021 // Недопустимый приоритет FreeRTOS
#define PROC_ERR_ALIVE 0x00000022 // Попытка действия над уже мертвым процессом #define PROC_ERR_ALIVE 0x00000022 // Попытка действия над уже мертвым процессом
// Ошибки графической подсистемы (0x30+) // Ошибки графической подсистемы (0x30+)
#define DISP_ERR_UNSUPPORTED 0x00000030 // Режим экрана или формат пикселя не поддерживается #define DISP_ERR_UNSUPPORTED 0x00000030 // Режим экрана или формат пикселя не поддерживается
// Ошибки APIOS (0x40+)
#define APIOS_ERR_DUPLICATE_NAME 0x00000040 // Попытка зарегистрировать драйвер с именем, которое уже занято
#define APIOS_ERR_EMPTY_API 0x00000041 // У драйвера пустая таблица функций (fn_count == 0)
#define APIOS_ERR_DRIVER_CRASH 0x00000042 // Ошибка при вызове функции: функция вернула критический сбой, требующий выгрузки
#define APIOS_WRN_PARTIAL_API 0x00000043 // Драйвер загружен, но некоторые его функции не реолизованны
#define APIOS_ERR_NOT_INITIALIZED 0x00000044 // Попытка вызова API при неинициализированной таблице APIOS
#define APIOS_ERR_DRIVER_NOT_FOUND 0x00000045 // Попытка вызвать API несущевствууещего драйвера
const char* get_error(uint32_t code); const char* get_error(uint32_t code);
#endif #endif
-38
View File
@@ -1,38 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include "FreeRTOS.h"
#include "drivers/fs/fs.h"
#include "boot/entry.h"
#include "boot/answer_code.h"
void log_result(int res, char *service_name){
if (res == OS_OK) {
printf("[ \033[0;32mOK\033[0m ] APIOS initialization\n");
} else {
char *err_text = "Error";
const char *msg = get_error(res);
if (strncmp(msg, err_text, 5) == 0) {
printf("[ \033[0;31mEROR\033[0m ] %s initialization: %s (%d)\n", service_name, msg, res);
} else {
printf("[ \033[0;33mWARN\033[0m ] %s initialization: %s (%d)\n", service_name, msg, res);
}
}
}
int main_entry()
{
printf("\033[2J\033[H");
printf("OS started\n");
init_fs();
while (true)
{
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
return 0;
}
+85
View File
@@ -0,0 +1,85 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include "FreeRTOS.h"
#include "esp_cpu.h"
#include "esp_timer.h"
#include "drivers/fs/fs.hpp"
#include "boot/entry.hpp"
#include "boot/answer_code.hpp"
#include "lib/runtime/RT.hpp"
extern Handler_vfs boot_handler;
void log_result(int res, char *service_name){
if (res == OS_OK) {
printf("[ \033[0;32mOK\033[0m ] %s\n", service_name);
} else {
char *err_text = "Error";
const char *msg = get_error(res);
if (strncmp(msg, err_text, 5) == 0) {
printf("[ \033[0;31mEROR\033[0m ] %s initialization: %s (%d)\n", service_name, msg, res);
} else {
printf("[ \033[0;33mWARN\033[0m ] %s initialization: %s (%d)\n", service_name, msg, res);
}
}
}
Result test_fn(descriptor *fn) {
/*printf("Вызов функции %s\n", fn->name);
fn->ret.int_v = 42;*/
return {OS_OK, *fn};
}
int main_entry()
{
printf("Free IRAM: %d bytes\n", heap_caps_get_free_size(MALLOC_CAP_INTERNAL | MALLOC_CAP_32BIT | MALLOC_CAP_EXEC));
printf("Largest IRAM block: %d bytes\n", heap_caps_get_largest_free_block(MALLOC_CAP_INTERNAL | MALLOC_CAP_32BIT | MALLOC_CAP_EXEC));
//printf("\033[2J\033[H");
printf("OS started\n");
log_result(init_fs(), "VFS");
mount(MOUNT_HANDLER, boot_handler.path, boot_handler.path, &boot_handler);
/*
boot_handler.link_function("/test_fn", test_fn);
int fd = open("/boot/test_fn", O_RDWR | O_CREAT | O_TRUNC);
if (fd >= 0) {
//write(fd, "Hello, world!", 13);
Result res_buffer;
ssize_t bytes_read = read(fd, &res_buffer, sizeof(Result));
if (bytes_read == sizeof(Result)) {
printf("Структура успешно получена напрямую из ядра! [%d]\n", res_buffer.data.ret.int_v);
}
close(fd);
}
*/
printf("Free IRAM: %u bytes\n",
heap_caps_get_free_size(MALLOC_CAP_EXEC));
printf("Largest IRAM block: %u bytes\n",
heap_caps_get_largest_free_block(MALLOC_CAP_EXEC));
run_app_from_iram();
while (true)
{
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
return 0;
}
+1 -1
View File
@@ -3,7 +3,7 @@
#ifndef TYPEDEF #ifndef TYPEDEF
#define TYPEDEF #define TYPEDEF
typedef int (*entry_fn_t)(void *args); typedef int (*entry_fn_t)();
typedef struct { typedef struct {
char name[128]; char name[128];
+4 -4
View File
@@ -1,5 +1,5 @@
#include "boot/entry.h" #include "boot/entry.hpp"
#include "boot/typedef.h" #include "boot/typedef.hpp"
boot_entry_t entry_data[] = { boot_entry_t entry_data[] = {
{ {
@@ -10,5 +10,5 @@ boot_entry_t entry_data[] = {
} }
}; };
const int autostart_index = 0; extern const int autostart_index = 0;
const int entry_table_count = 1; extern const int entry_table_count = 1;
-76
View File
@@ -1,76 +0,0 @@
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "esp_vfs_fat.h"
#include "esp_spiffs.h"
#include "esp_littlefs.h"
#include "drivers/fs/fs.h"
#include "boot/typedef.h"
#include "boot/answer_code.h"
#include "boot/entry.h"
esp_err_t mount(fs_type_t type, const char *path, const char *label) {
switch (type) {
case MOUNT_LITTLEFS: {
printf("fs: mount littlefs\n");
esp_vfs_littlefs_conf_t conf = {
.base_path = path,
.partition_label = label,
.format_if_mount_failed = true
};
return esp_vfs_littlefs_register(&conf);
}
case MOUNT_SD_CARD: {
printf("fs: sd card mount is not configured yet\n");
// Для SD нужны sdmmc_host_t и sdmmc_slot_config_t
// Пока возвращаем ошибку, чтобы скомпилировалось
return ESP_ERR_NOT_SUPPORTED;
}
case MOUNT_SPIFFS: {
printf("fs: mount spiffs\n");
esp_vfs_spiffs_conf_t conf = {
.base_path = path,
.partition_label = label,
.max_files = 5,
.format_if_mount_failed = true
};
return esp_vfs_spiffs_register(&conf);
}
default:
return ESP_ERR_NOT_SUPPORTED;
}
}
int unmount() {
printf("fs: unmount");
return 0;
}
int format() {
printf("fs: format");
return 0;
}
int get_info() {
printf("fs: get_info");
return 0;
}
int is_present() {
printf("fs: is_present");
return 0;
}
int get_vfs_config() {
printf("fs: get_vfs_config");
return 0;
}
int init_fs() {
// Проверьте, как называется макрос ошибки в boot/answer_code.h
// Если там ANS_ERR или что-то другое, замените здесь
if (mount(MOUNT_SPIFFS, "/spiffs", "storage") != ESP_OK) {
printf("fs: init failed\n");
return 1; // Используйте число или верный макрос из answer_code.h
}
return 0; // Аналогично для OK
}
+239
View File
@@ -0,0 +1,239 @@
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
#include "esp_vfs.h"
#include "esp_vfs_fat.h"
#include "esp_spiffs.h"
#include "esp_littlefs.h"
#include "mbedtls/sha256.h"
#include "drivers/fs/fs.hpp"
#include "boot/typedef.hpp"
#include "boot/answer_code.hpp"
#include "boot/entry.hpp"
#include "drivers/fs/handlers.hpp"
void input_string(char *buffer, size_t max_len, bool hide_echo) {
int i = 0;
while (i < max_len - 1) {
int c = getchar();
if (c == EOF || c == 0xFF) {
vTaskDelay(pdMS_TO_TICKS(10));
continue;
}
if (c == '\n' || c == '\r') {
buffer[i] = '\0';
printf("\n");
break;
}
if (c == '\b' || c == 127) {
if (i > 0) {
i--;
printf("\b \b");
fflush(stdout);
}
continue;
}
if (c >= 32 && c <= 126) {
buffer[i++] = (char)c;
if (!hide_echo) putchar(c);
else putchar('*');
fflush(stdout);
}
}
}
void create_fs() {
char device_name[32];
char user_name[32];
char user_password[32];
char user_password_sha256[32];
printf("\033[0;31mNot find file os\n\033[0m");
printf("Please entry device name: ");
input_string(device_name, 32, false);
printf("Please entry username: ");
input_string(user_name, 32, false);
printf("Please entry user password: ");
input_string(user_password, 32, true);
mbedtls_sha256((const unsigned char *)user_password, strlen(user_password), (unsigned char *)user_password_sha256, 0);
char hex_hash[65];
for (int j = 0; j < 32; j++) {
sprintf(&hex_hash[j * 2], "%02x", (unsigned char)user_password_sha256[j]);
}
printf("device_name: %s\n", device_name);
printf("user_name: %s\n", user_name);
printf("user_password: %s\n", user_password);
printf("user_password_sha256: %s\n", user_password_sha256);
int total_prograss = 0;
int max_prograss = 15;
mkdir("/bin", 0777); total_prograss++;
mkdir("/boot", 0777); total_prograss++;
mkdir("/dev", 0777); total_prograss++;
mkdir("/etc", 0777); total_prograss++;
mkdir("/home", 0777); total_prograss++;
mkdir("/lib", 0777); total_prograss++;
mkdir("/mnt", 0777); total_prograss++;
mkdir("/opt", 0777); total_prograss++;
mkdir("/root", 0777); total_prograss++;
mkdir("tmp", 0777); total_prograss++;
mkdir("/usr", 0777); total_prograss++;
FILE *file = fopen("/etc/hostname", "w"); total_prograss++;
fprintf(file, "%s\n", device_name);
fclose(file);
file = fopen("/etc/passwd", "w"); total_prograss++;
fprintf(file, "root:0:0:/root:/bin/shell\n%s:1000:1000:/home/%s:/bin/shell\n", user_name, user_name);
fclose(file);
file = fopen("/etc/shadow", "w"); total_prograss++;
fprintf(file, "root:*\n%s:%s\n", user_name, hex_hash);
fclose(file);
file = fopen("/etc/group", "w"); total_prograss++;
fprintf(file, "root:0:root\nusr:1000:%s", user_name);
fclose(file);
}
void list_files(const char *path) {
printf("Чтение директории: %s\n", path);
DIR *dir = opendir(path);
if (dir == NULL) {
printf("Не удалось открыть директорию\n");
return;
}
struct dirent *entry;
int found = 0;
while ((entry = readdir(dir)) != NULL) {
found++;
const char *type = (entry->d_type == DT_DIR) ? "DIR" : "FILE";
printf("[%s] %s\n", type, entry->d_name);
}
if (found == 0) {
printf("Директория пуста\n");
}
closedir(dir);
}
bool file_exists(const char *path) {
struct stat buffer;
return (stat(path, &buffer) == 0);
}
uint32_t mount(fs_type_t type, const char *path, const char *label, const Handler_vfs *class_fs) {
switch (type) {
case MOUNT_LITTLEFS: {
printf("fs: mount littlefs\n");
esp_vfs_littlefs_conf_t conf = {
.base_path = path,
.partition_label = label,
.format_if_mount_failed = true
};
switch (esp_vfs_littlefs_register(&conf))
{
case ESP_OK: return OS_OK;
case ESP_ERR_NO_MEM: return OS_ERR_NO_MEMORY;
case ESP_ERR_INVALID_ARG: return OS_ERR_INVALID_ARG;
case ESP_ERR_INVALID_STATE: return VFS_ERR_TARGET_BUSY;
case ESP_FAIL: return OS_ERR;
case ESP_ERR_NOT_FOUND: return OS_ERR_NOT_FOUND;
case ESP_ERR_NOT_SUPPORTED: return VFS_ERR_NOT_SUPPORTED;
default: return OS_ERR;
};
}
case MOUNT_SD_CARD: {
printf("fs: sd card mount is not configured yet\n");
return VFS_ERR_NOT_SUPPORTED;
}
case MOUNT_SPIFFS: {
printf("fs: mount spiffs\n");
esp_vfs_spiffs_conf_t conf = {
.base_path = path,
.partition_label = label,
.max_files = 5,
.format_if_mount_failed = true
};
switch (esp_vfs_spiffs_register(&conf))
{
case ESP_OK: return OS_OK;
case ESP_ERR_NO_MEM: return OS_ERR_NO_MEMORY;
case ESP_ERR_INVALID_ARG: return OS_ERR_INVALID_ARG;
case ESP_ERR_INVALID_STATE: return VFS_ERR_TARGET_BUSY;
case ESP_FAIL: return OS_ERR;
case ESP_ERR_NOT_FOUND: return OS_ERR_NOT_FOUND;
case ESP_ERR_NOT_SUPPORTED: return VFS_ERR_NOT_SUPPORTED;
default: return OS_ERR;
};
}
case MOUNT_HANDLER: {
esp_vfs_t conf = {};
memset(&conf, 0, sizeof(conf));
conf.flags = ESP_VFS_FLAG_CONTEXT_PTR;
conf.open_p = &Handler_vfs::open_vfs;
conf.read_p = &Handler_vfs::read_vfs;
conf.write_p = &Handler_vfs::write_vfs;
conf.close_p = &Handler_vfs::close_vfs;
switch (esp_vfs_register(path, &conf, (void*)class_fs))
{
case ESP_OK: return OS_OK;
case ESP_ERR_NO_MEM: return OS_ERR_NO_MEMORY;
case ESP_ERR_INVALID_ARG: return OS_ERR_INVALID_ARG;
case ESP_ERR_INVALID_STATE: return VFS_ERR_TARGET_BUSY;
case ESP_FAIL: return OS_ERR;
case ESP_ERR_NOT_FOUND: return OS_ERR_NOT_FOUND;
case ESP_ERR_NOT_SUPPORTED: return VFS_ERR_NOT_SUPPORTED;
default: return OS_ERR;
};
}
default:
return ESP_ERR_NOT_SUPPORTED;
}
}
int unmount() {
printf("fs: unmount");
return 0;
}
int format() {
printf("fs: format");
return 0;
}
int get_info() {
printf("fs: get_info");
return 0;
}
int is_present() {
printf("fs: is_present");
return 0;
}
int get_vfs_config() {
printf("fs: get_vfs_config");
return 0;
}
int init_fs() {
uint32_t ret = mount(MOUNT_LITTLEFS, "", "storage");
if (ret != OS_OK) return ret;
if (!file_exists("/etc/hostname")) create_fs();
return OS_OK;
}
-21
View File
@@ -1,21 +0,0 @@
#ifndef _FS_H_
#define _FS_H_
#include "boot/typedef.h"
typedef enum {
MOUNT_LITTLEFS,
MOUNT_SD_CARD,
MOUNT_SPIFFS
} fs_type_t;
int init_fs();
esp_err_t mount(fs_type_t type, const char *path, const char *label);
int unmount();
int format();
int get_info();
int is_present();
int get_vfs_config();
#endif
+32
View File
@@ -0,0 +1,32 @@
#ifndef _FS_H_
#define _FS_H_
#include <sys/stat.h>
#include <sys/dirent.h>
#include <sys/types.h>
#include <unistd.h>
#include "boot/typedef.hpp"
#include "drivers/fs/handlers.hpp"
#include "esp_err.h"
typedef enum {
MOUNT_LITTLEFS,
MOUNT_SD_CARD,
MOUNT_SPIFFS,
MOUNT_HANDLER
} fs_type_t;
int init_fs();
void list_files(const char *path);
bool file_exists(const char *path);
uint32_t mount(fs_type_t type, const char *path, const char *label, const Handler_vfs *class_fs = NULL);
int unmount();
int format();
int get_info();
int is_present();
int get_vfs_config();
#endif
+162
View File
@@ -0,0 +1,162 @@
#include <stdio.h>
#include <string.h>
#include "boot/answer_code.hpp"
#include "drivers/fs/handlers.hpp"
#include "drivers/fs/fs.hpp"
Handler_vfs boot_handler("/boot");
Handler_vfs::Handler_vfs(const char *path) {
strcpy(this->path, path);
count_fn = 0;
count_ds = 0;
capacity_fn = 10;
capacity_ds = 10;
functions = (function_file*)malloc(capacity_fn * sizeof(function_file));
descriptors = (descriptor*)malloc(capacity_ds * sizeof(descriptor));
};
Handler_vfs::~Handler_vfs() {
if (functions != nullptr) {
free(functions);
}
}
int Handler_vfs::link_function(const char *name, func_t func) {
if (count_fn + 1 > capacity_fn) {
int new_capacity = capacity_fn + 10;
size_t new_size = new_capacity * sizeof(function_file);
function_file* temp = (function_file*)realloc(functions, new_size);
if (temp != nullptr) {
functions = temp;
capacity_fn = new_capacity;
} else {
return -1;
}
}
strncpy(functions[count_fn].name, name, 32);
functions[count_fn].handler = func;
count_fn++;
return 0;
}
int Handler_vfs::unlink_function(const char *name) {
int index = -1;
for (int i = 0; i < count_fn; i++) {
if (strcmp(functions[i].name, name) == 0) {
index = i;
break;
}
}
if (index == -1) return -1;
for (int i = index; i < count_fn - 1; i++) {
functions[i] = functions[i + 1];
}
count_fn--;
if (capacity_fn - count_fn >= 15 && capacity_fn > 10) {
int new_capacity = capacity_fn - 10;
size_t new_size = new_capacity * sizeof(function_file);
function_file* temp = (function_file*)realloc(functions, new_size);
if (temp != nullptr || new_size == 0) {
functions = temp;
capacity_fn = new_capacity;
}
}
return 0;
}
int Handler_vfs::open(const char *name, int flags, int mode) {
int fn_idx = -1;
for (int i = 0; i < count_fn; i++) {
if (strcmp(functions[i].name, name) == 0) { { fn_idx = i; break; } }
}
if (fn_idx == -1) return OS_ERR_NOT_FOUND;
int target_fd = -1;
for (int i = 0; i < count_ds; i++) {
if (descriptors[i].handler == nullptr) {
target_fd = i;
break;
}
}
if (target_fd == -1) {
if (count_ds + 1 > capacity_ds) {
int new_capacity = capacity_ds + 10;
descriptor* temp = (descriptor*)realloc(descriptors, new_capacity * sizeof(descriptor));
if (temp == nullptr) return OS_ERR_NO_MEMORY;
descriptors = temp;
capacity_ds = new_capacity;
}
target_fd = count_ds;
count_ds++;
}
memset(descriptors[target_fd].name, 0, 32);
strncpy(descriptors[target_fd].name, name, 31);
descriptors[target_fd].handler = functions[fn_idx].handler;
return target_fd;
}
int Handler_vfs::open_vfs(void* ctx, const char *path, int flags, int mode) {
Handler_vfs* self = (Handler_vfs*)ctx;
return self->open(path, flags, mode);
}
ssize_t Handler_vfs::read(int fd, void *dst, size_t size) {
if (fd < 0 || fd >= count_ds || descriptors[fd].handler == nullptr) return OS_ERR_NOT_FOUND;
if (dst == nullptr) return OS_ERR_NOT_FOUND;
if (size < sizeof(Result)) return OS_ERR_NO_MEMORY;
Result res = descriptors[fd].handler(&descriptors[fd]);
memcpy(dst, &res, sizeof(res));
return sizeof(res);
}
ssize_t Handler_vfs::read_vfs(void* ctx, int fd, void *dst, size_t size) {
Handler_vfs* self = (Handler_vfs*)ctx;
return self->read(fd, dst, size);
}
ssize_t Handler_vfs::write(int fd, const void *src, size_t size) {
//printf("Handler write [%d]\n", fd);
return 0;
}
ssize_t Handler_vfs::write_vfs(void* ctx, int fd, const void *src, size_t size) {
Handler_vfs* self = (Handler_vfs*)ctx;
return self->write(fd, src, size);
}
int Handler_vfs::close(int fd) {
if (fd < 0 || fd >= count_ds) return OS_ERR_INVALID_ARG;
descriptors[fd].handler = nullptr;
return 0;
}
int Handler_vfs::close_vfs(void* ctx, int fd) {
Handler_vfs* self = (Handler_vfs*)ctx;
return self->close(fd);
}
int Handler_vfs::rename(const char *src, const char *dst) {
printf("Handler rename [%s] [%s]\n", src, dst);
return 0;
}
int Handler_vfs::rename_vfs(void* ctx, const char *src, const char *dst) {
Handler_vfs* self = (Handler_vfs*)ctx;
return self->rename(src, dst);
}
+81
View File
@@ -0,0 +1,81 @@
#ifndef HANDLERS_HPP
#define HANDLERS_HPP
#include <sys/stat.h>
#include <sys/dirent.h>
#include <unistd.h>
struct descriptor;
struct Result;
typedef Result (*func_t)(descriptor*);
enum arg_t { argINT_t, argFLOAT_t, argSTRING_t };
struct arg {
arg_t type;
union {
int valueINT;
float valueFLOAT;
char valueSTRING[32];
} value;
};
struct descriptor
{
char name[32];
arg args[8];
union {
int int_v;
float float_v;
char string_v[32];
} ret;
func_t handler;
};
struct function_file {
char name[32];
func_t handler;
descriptor descriptors;
};
struct Result {
int code;
descriptor data;
};
class Handler_vfs {
public:
char path[32];
Handler_vfs(const char *path);
~Handler_vfs();
int link_function(const char *name, func_t func);
int unlink_function(const char *name);
int open(const char *name, int flags, int mode);
static int open_vfs(void* ctx, const char *path, int flags, int mode);
ssize_t read(int fd, void *dst, size_t size);
static ssize_t read_vfs(void* ctx, int fd, void *dst, size_t size);
ssize_t write(int fd, const void *src, size_t size);
static ssize_t write_vfs(void* ctx, int fd, const void *src, size_t size);
int close(int fd);
static int close_vfs(void* ctx, int fd);
int rename(const char *src, const char *dst);
static int rename_vfs(void* ctx, const char *src, const char *dst);
private:
function_file* functions;
descriptor* descriptors;
int count_fn = 0;
int count_ds = 0;
int capacity_fn = 0;
int capacity_ds = 0;
static Handler_vfs* instance;
};
#endif
+28
View File
@@ -0,0 +1,28 @@
#include <stdio.h>
#include <string.h>
#include "esp_heap_caps.h"
#include "esp_cpu.h"
typedef int (*func_t)(void);
void run_app_from_iram(void)
{
uint8_t code[] = {
0x36, 0x41, 0x00, 0x2c, 0xa2, 0x1d, 0xf0
};
void *exec = heap_caps_malloc(sizeof(code),
MALLOC_CAP_EXEC | MALLOC_CAP_8BIT);
memcpy(exec, code, sizeof(code));
//esp_cpu_invalidate_icache_all();
func_t f = (func_t)exec;
int result = f();
printf("Result = %d\n", result); // Должно быть 42
heap_caps_free(exec);
}
+6
View File
@@ -0,0 +1,6 @@
#ifndef RT_HPP
#define RT_HPP
void run_app_from_iram();
#endif
+67 -48
View File
@@ -359,7 +359,7 @@ static void apply_system_config(system_config_t *cfg)
if (cfg->watchdog_timeout > 0) { if (cfg->watchdog_timeout > 0) {
esp_task_wdt_config_t wdt = { esp_task_wdt_config_t wdt = {
.timeout_ms = cfg->watchdog_timeout * 1000, .timeout_ms = (uint32_t)(cfg->watchdog_timeout * 1000),
.idle_core_mask = (1 << 0) | (1 << 1), .idle_core_mask = (1 << 0) | (1 << 1),
.trigger_panic = true .trigger_panic = true
}; };
@@ -391,18 +391,18 @@ static void apply_system_config(system_config_t *cfg)
static configurator_ctx_t *create_configurator_ctx(system_config_t *shared) static configurator_ctx_t *create_configurator_ctx(system_config_t *shared)
{ {
configurator_ctx_t *ctx = calloc(1, sizeof(configurator_ctx_t)); configurator_ctx_t *ctx = (configurator_ctx_t *)calloc(1, sizeof(configurator_ctx_t));
if (!ctx) return NULL; if (!ctx) return NULL;
ctx->main_items = calloc(8, sizeof(conf_item)); ctx->main_items = (conf_item *)calloc(8, sizeof(conf_item));
ctx->cpu_items = calloc(3, sizeof(conf_item)); ctx->cpu_items = (conf_item *)calloc(3, sizeof(conf_item));
ctx->memory_items = calloc(4, sizeof(conf_item)); ctx->memory_items = (conf_item *)calloc(4, sizeof(conf_item));
ctx->storage_items = calloc(1, sizeof(conf_item)); ctx->storage_items = (conf_item *)calloc(1, sizeof(conf_item));
ctx->hardware_items = calloc(6, sizeof(conf_item)); ctx->hardware_items = (conf_item *)calloc(6, sizeof(conf_item));
ctx->power_items = calloc(2, sizeof(conf_item)); ctx->power_items = (conf_item *)calloc(2, sizeof(conf_item));
ctx->tabs = calloc(TAB_COUNT, sizeof(conf_item *)); ctx->tabs = (conf_item **)calloc(TAB_COUNT, sizeof(conf_item *));
ctx->counts = calloc(TAB_COUNT, sizeof(int)); ctx->counts = (int *)calloc(TAB_COUNT, sizeof(int));
ctx->config = calloc(1, sizeof(system_config_t)); ctx->config = (system_config_t *)calloc(1, sizeof(system_config_t));
if (!ctx->main_items || !ctx->cpu_items || !ctx->memory_items || if (!ctx->main_items || !ctx->cpu_items || !ctx->memory_items ||
!ctx->storage_items || !ctx->hardware_items || !ctx->power_items || !ctx->storage_items || !ctx->hardware_items || !ctx->power_items ||
@@ -890,31 +890,27 @@ static int show_selection_popup(conf_item *item)
for (int i = 0; i < pw - 2; i++) printf(""); for (int i = 0; i < pw - 2; i++) printf("");
printf(""); printf("");
void draw_ch(void) { for (int i = 0; i < item->choice_count; i++) {
for (int i = 0; i < item->choice_count; i++) { printf("\033[%d;%dH║", py + 3 + i, px);
printf("\033[%d;%dH║", py + 3 + i, px); if (i == sel) printf("\033[44m\033[97m");
if (i == sel) printf("\033[44m\033[97m");
char ct[26] = ""; char ct[26] = "";
switch (item->type) { switch (item->type) {
case conf_char16_t: case conf_char16_t:
snprintf(ct, sizeof(ct), "%s", item->choices_char16[i]); break; snprintf(ct, sizeof(ct), "%s", item->choices_char16[i]); break;
case conf_int8_t: case conf_int8_t:
snprintf(ct, sizeof(ct), "%d", item->choices_int8[i]); break; snprintf(ct, sizeof(ct), "%d", item->choices_int8[i]); break;
case conf_int16_t: case conf_int16_t:
snprintf(ct, sizeof(ct), "%d", item->choices_int16[i]); break; snprintf(ct, sizeof(ct), "%d", item->choices_int16[i]); break;
case conf_bool_t: case conf_bool_t:
snprintf(ct, sizeof(ct), "%s", snprintf(ct, sizeof(ct), "%s",
item->choices_bool[i] ? "Enabled" : "Disabled"); item->choices_bool[i] ? "Enabled" : "Disabled");
break; break;
default: break; default: break;
}
printf(" %-*s \033[0m║", pw - 4, ct);
} }
printf(" %-*s \033[0m║", pw - 4, ct);
} }
draw_ch();
printf("\033[%d;%dH╚", py + 3 + item->choice_count, px); printf("\033[%d;%dH╚", py + 3 + item->choice_count, px);
for (int i = 0; i < pw - 2; i++) printf(""); for (int i = 0; i < pw - 2; i++) printf("");
printf(""); printf("");
@@ -933,7 +929,26 @@ static int show_selection_popup(conf_item *item)
if (s1 == 0x5B) { if (s1 == 0x5B) {
if (s2 == 0x41 && sel > 0) sel--; if (s2 == 0x41 && sel > 0) sel--;
else if (s2 == 0x42 && sel < item->choice_count - 1) sel++; else if (s2 == 0x42 && sel < item->choice_count - 1) sel++;
draw_ch(); for (int i = 0; i < item->choice_count; i++) {
printf("\033[%d;%dH║", py + 3 + i, px);
if (i == sel) printf("\033[44m\033[97m");
char ct[26] = "";
switch (item->type) {
case conf_char16_t:
snprintf(ct, sizeof(ct), "%s", item->choices_char16[i]); break;
case conf_int8_t:
snprintf(ct, sizeof(ct), "%d", item->choices_int8[i]); break;
case conf_int16_t:
snprintf(ct, sizeof(ct), "%d", item->choices_int16[i]); break;
case conf_bool_t:
snprintf(ct, sizeof(ct), "%s",
item->choices_bool[i] ? "Enabled" : "Disabled");
break;
default: break;
}
printf(" %-*s \033[0m║", pw - 4, ct);
}
} }
} else if (b == '\r' || b == '\n') { } else if (b == '\r' || b == '\n') {
return sel; return sel;
@@ -974,15 +989,11 @@ static bool show_confirm_dialog(const char *title, const char *msg)
printf("\033[%d;%dH║ %-*s ║", py + 3, px, pw - 4, msg); printf("\033[%d;%dH║ %-*s ║", py + 3, px, pw - 4, msg);
printf("\033[%d;%dH║ %-*s ║", py + 4, px, pw - 4, ""); printf("\033[%d;%dH║ %-*s ║", py + 4, px, pw - 4, "");
void draw_btn(void) { printf("\033[%d;%dH║", py + 5, px);
printf("\033[%d;%dH║", py + 5, px); printf(sel == 0 ? " \033[42m\033[97m Yes \033[0m" : " Yes ");
printf(sel == 0 ? " \033[42m\033[97m Yes \033[0m" : " Yes "); printf(" ");
printf(" "); printf(sel == 1 ? "\033[41m\033[97m No \033[0m" : " No ");
printf(sel == 1 ? "\033[41m\033[97m No \033[0m" : " No "); printf(" ");
printf("");
}
draw_btn();
printf("\033[%d;%dH╚", py + 6, px); printf("\033[%d;%dH╚", py + 6, px);
for (int i = 0; i < pw - 2; i++) printf(""); for (int i = 0; i < pw - 2; i++) printf("");
@@ -996,7 +1007,14 @@ static bool show_confirm_dialog(const char *title, const char *msg)
int s1 = getchar(); int s1 = getchar();
if (s1 == EOF) return false; if (s1 == EOF) return false;
int s2 = getchar(); int s2 = getchar();
if (s1 == 0x5B && (s2 == 0x43 || s2 == 0x44)) { sel = 1 - sel; draw_btn(); } if (s1 == 0x5B && (s2 == 0x43 || s2 == 0x44)) {
sel = 1 - sel;
printf("\033[%d;%dH║", py + 5, px);
printf(sel == 0 ? " \033[42m\033[97m Yes \033[0m" : " Yes ");
printf(" ");
printf(sel == 1 ? "\033[41m\033[97m No \033[0m" : " No ");
printf("");
}
} else if (b == '\r' || b == '\n') return (sel == 0); } else if (b == '\r' || b == '\n') return (sel == 0);
else if (b == 'y' || b == 'Y') return true; else if (b == 'y' || b == 'Y') return true;
else if (b == 'n' || b == 'N') return false; else if (b == 'n' || b == 'N') return false;
@@ -1180,12 +1198,13 @@ static void show_boot_info(void)
printf(" \033[1mCPU :\033[0m %d MHz (actual)\n\n", read_cpu_freq_mhz()); printf(" \033[1mCPU :\033[0m %d MHz (actual)\n\n", read_cpu_freq_mhz());
} }
void app_main(void) extern "C" void app_main(void)
{ {
bootloader_ctx_t *ctx = calloc(1, sizeof(bootloader_ctx_t));
bootloader_ctx_t *ctx = (bootloader_ctx_t *)calloc(1, sizeof(bootloader_ctx_t));
if (!ctx) return; if (!ctx) return;
ctx->config = calloc(1, sizeof(system_config_t)); ctx->config = (system_config_t *)calloc(1, sizeof(system_config_t));
if (!ctx->config) { free(ctx); return; } if (!ctx->config) { free(ctx); return; }
*ctx->config = default_config(); *ctx->config = default_config();
@@ -1235,8 +1254,8 @@ void app_main(void)
printf(" \033[32mOK\033[0m\n"); printf(" \033[32mOK\033[0m\n");
printf(" [4/4] Loading boot entries...\n"); printf(" [4/4] Loading boot entries...\n");
ctx->abstraction = malloc(sizeof(abstraction_entry_t) * (entry_table_count + 1)); ctx->abstraction = (abstraction_entry_t *)malloc(sizeof(abstraction_entry_t) * (entry_table_count + 1));
ctx->entries = malloc(sizeof(entries_t) * (entry_table_count + 1)); ctx->entries = (entries_t *)malloc(sizeof(entries_t) * (entry_table_count + 1));
if (!ctx->entries || !ctx->abstraction) { if (!ctx->entries || !ctx->abstraction) {
free_bootloader_ctx(ctx); free_bootloader_ctx(ctx);