diff --git a/README.md b/README.md index ac8bbb3..d7c8a34 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32-S3 | -| ----------------- | -------- | +| Supported Targets | ESP32-S3 · Project Babble · FaceFocusVR | +| ----------------- | --------------------------------------- | ## OpenIris-ESPIDF @@ -12,6 +12,12 @@ Firmware and tools for OpenIris — Wi‑Fi, UVC streaming, and a Python setup C - Python tools for setup over USB serial: - `tools/switchBoardType.py` — choose a board profile (builds the right sdkconfig) - `tools/openiris_setup.py` — interactive CLI for Wi‑Fi, MDNS/Name, Mode, LED PWM, Logs, and a Settings Summary + - Composite USB (UVC + CDC) when UVC mode is enabled (`GENERAL_INCLUDE_UVC_MODE`) for simultaneous video streaming and command channel + - LED current monitoring (if enabled via `MONITORING_LED_CURRENT`) with filtered mA readings + - Configurable debug LED + external IR LED control with optional error mirroring (`LED_DEBUG_ENABLE`, `LED_EXTERNAL_AS_DEBUG`) + - Auto‑discovered per‑board configuration overlays under `boards/` + - Command framework (JSON over serial / CDC / REST) for mode switching, Wi‑Fi config, OTA credentials, LED brightness, info & monitoring + - Single source advertised name (`CONFIG_GENERAL_ADVERTISED_NAME`) used for both UVC device name and mDNS hostname (unless overridden at runtime) --- @@ -50,20 +56,29 @@ After this, you’re ready for the Quick start below. ## Quick start ### 1) Pick your board (loads the default configuration) +Boards are auto‑discovered from the `boards/` directory. First list them, then pick one: + Windows (cmd): ```cmd -python .\tools\switchBoardType.py --board xiao-esp32s3 --diff +python .\tools\switchBoardType.py --list +python .\tools\switchBoardType.py --board seed_studio_xiao_esp32s3 --diff ``` macOS/Linux (bash): ```bash -python3 ./tools/switchBoardType.py --board xiao-esp32s3 --diff +python3 ./tools/switchBoardType.py --list +python3 ./tools/switchBoardType.py --board seed_studio_xiao_esp32s3 --diff ``` -- Set `--board` to your target board -- `--diff` shows what changed in the config +Notes: +- Use `--list` to see all detected board keys. +- Board key = relative path under `boards/` with `/` replaced by `_` (and duplicate tail segments collapsed, e.g. `project_babble/project_babble` -> `project_babble`). +- `--diff` shows what will change vs the current `sdkconfig`. +- You can also pass partial or path‑like inputs (e.g. `facefocusvr/eye_L`), the tool normalizes them. ### 2) Build & flash - Set the target (e.g., ESP32‑S3). - Build, flash, and open the serial monitor. + - (Optional) For UVC mode ensure `GENERAL_INCLUDE_UVC_MODE=y`. If you want device to boot directly into UVC: also set `START_IN_UVC_MODE=y`. + - Disable Wi‑Fi services for pure wired builds: `GENERAL_ENABLE_WIRELESS=n`. ### 3) Use the Python setup CLI (recommended) Configure the device over USB serial. @@ -84,7 +99,7 @@ Examples: What the CLI can do: - Wi‑Fi menu: automatic (scan → pick → password → connect → wait for IP) or manual (scan, show, configure, connect, status) - Set MDNS/Device name (also used for the UVC device name) -- Switch mode (Wi‑Fi / UVC / Auto) +- Switch mode (Wi‑Fi / UVC / Setup) - Adjust LED PWM - Show a Settings Summary (MAC, Wi‑Fi status, mode, PWM, …) - View logs @@ -96,12 +111,23 @@ What the CLI can do: - The CLI displays the MAC by default (clearer); it’s the value used as the serial number. - The UVC device name is based on the MDNS hostname. +## Advertised Name (UVC + mDNS) +`CONFIG_GENERAL_ADVERTISED_NAME` (Kconfig) defines the base name announced over: +- USB UVC descriptor (appears in OS camera list) +- mDNS hostname / service name + +Runtime override: If the setup CLI (or a JSON command) provides a new device name, that value supersedes the compile-time default until next flash/reset of settings. + --- ## Common workflows - Fast Wi‑Fi setup: in the CLI, go to “Wi‑Fi settings” → “Automatic setup”, then check “status”. - Change name/MDNS: set the device name in the CLI, then replug USB — UVC will show the new name. - Adjust brightness/LED: set LED PWM in the CLI. + - Switch to UVC mode over commands (CDC/serial): + `{"commands":[{"command":"switch_mode","data":{"mode":"uvc"}}]}` then reboot. + - Read filtered LED current (if enabled): + `{"commands":[{"command":"get_led_current"}]}` --- @@ -114,10 +140,73 @@ If you want to dig deeper: commands are mapped via the `CommandManager` under `c --- -## Troubleshooting +### USB Composite (UVC + CDC) +When UVC support is compiled in the device enumerates as a composite USB device: +- UVC interface: video streaming (JPEG frames) +- CDC (virtual COM): command channel accepting newline‑terminated JSON objects + +Example newline‑terminated JSON commands over CDC (one per line): +``` +{"commands":[{"command":"ping"}]} +{"commands":[{"command":"get_who_am_i"}]} +{"commands":[{"command":"switch_mode","data":{"mode":"wifi"}}]} +``` + +Chained commands in a single request (processed in order): +``` +{"commands":[ + {"command":"set_mdns","data":{"hostname":"tracker"}}, + {"command":"set_wifi","data":{"name":"main","ssid":"your_network","password":"password","channel":0,"power":0}} +]} +``` +Responses are JSON blobs flushed immediately. + +--- + +### Monitoring (LED Current) +Enabled with `MONITORING_LED_CURRENT=y` plus shunt/gain settings. The task samples every `CONFIG_MONITORING_LED_INTERVAL_MS` ms and maintains a filtered moving average over `CONFIG_MONITORING_LED_SAMPLES` samples. Use `get_led_current` command to query. + +### Debug & External LED Configuration +| Kconfig | Effect | +|---------|--------| +| LED_DEBUG_ENABLE | Enables/disables discrete status LED GPIO init & drive | +| LED_EXTERNAL_CONTROL | Enables PWM control for IR / external LED | +| LED_EXTERNAL_PWM_DUTY_CYCLE | Default duty % applied at boot (0–100) | +| LED_EXTERNAL_AS_DEBUG | Mirrors only error patterns onto external LED (0%/50%) when debug LED absent or also for redundancy | + +### Board Profiles +Each file under `boards/` overlays `sdkconfig.base_defaults`. The merge order: base → board file → (optional) dynamic Wi‑Fi overrides via `switchBoardType.py` flags. Duplicate trailing segment directories collapse to unique keys. + - UVC doesn’t appear on the host? - Switch mode to UVC via CLI tool, replug USB and wait 20s. +### Adding a new board configuration +1. Create a new config file under `boards/` (you can nest folders): for example `boards/my_family/my_variant`. +2. Populate it with only the `CONFIG_...` lines that differ from the shared defaults. Shared baseline lives in `boards/sdkconfig.base_defaults` and is always merged first. +3. The board key the script accepts will be the relative path with `/` turned into `_` (example: `boards/my_family/my_variant` -> `my_family_my_variant`). +4. Run `python tools/switchBoardType.py --list` to verify it’s detected, then switch using `-b my_family_my_variant`. +5. If you accidentally create two files that collapse to the same key the last one found wins—rename to keep keys unique. + +Tips: +- Use `--diff` after adding a board to sanity‑check only the intended keys change. +- For Wi‑Fi overrides on first flash: add none—pass `--ssid` / `--password` when switching if needed. + +--- + +## Troubleshooting +### LED Status / Error Patterns +The firmware uses a small set of LED patterns to indicate status and blocking errors. When `LED_DEBUG_ENABLE` is disabled and `LED_EXTERNAL_AS_DEBUG` is enabled the external IR LED mirrors ONLY error patterns (0%/50% duty). Non‑error patterns are not mirrored. + +| State | Visual | Category | Timing Pattern (ms) | Meaning | +|-------|--------|----------|---------------------|---------| +| LedStateNone | ![idle](docs/led_patterns/idle.svg) | idle | (off) | No activity / heartbeat window waiting | +| LedStateStreaming | ![stream](docs/led_patterns/streaming.svg) | active | steady on | Streaming running (UVC or Wi‑Fi) | +| LedStateStoppedStreaming | ![stopped](docs/led_patterns/stopped.svg) | inactive | steady off | Streaming intentionally stopped | +| CameraError | ![camera error](docs/led_patterns/camera_error.svg) | error | 300/300 300/700 (loop) | Camera init/runtime failure (check sensor, ribbon, power) | +| WiFiStateConnecting | ![wifi connecting](docs/led_patterns/wifi_connecting.svg) | transitional | 400/400 (loop) | Wi‑Fi associating / DHCP pending | +| WiFiStateConnected | ![wifi connected](docs/led_patterns/wifi_connected.svg) | notification | 150/150×3 then 600 off | Wi‑Fi connected successfully | +| WiFiStateError | ![wifi error](docs/led_patterns/wifi_error.svg) | error | 200/100 500/300 (loop) | Wi‑Fi failed (auth timeout or no AP) | + --- Feedback, issues, and PRs are welcome. \ No newline at end of file diff --git a/sdkconfig.board.facefocusvr_face b/boards/facefocusvr/eye_L similarity index 78% rename from sdkconfig.board.facefocusvr_face rename to boards/facefocusvr/eye_L index 2769e22..2655bfc 100644 --- a/sdkconfig.board.facefocusvr_face +++ b/boards/facefocusvr/eye_L @@ -1,7 +1,4 @@ -CONFIG_BLINK_LED_GPIO=y -CONFIG_BLINK_GPIO=21 CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y -CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y CONFIG_ESP32S3_SPIRAM_SUPPORT=y CONFIG_SPIRAM_MODE_OCT=y # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set @@ -57,7 +54,18 @@ CONFIG_SPIRAM_SPEED_80M=y CONFIG_LED_EXTERNAL_CONTROL=y CONFIG_LED_EXTERNAL_GPIO=9 CONFIG_LED_EXTERNAL_PWM_FREQ=20000 -CONFIG_LED_EXTERNAL_PWM_DUTY_CYCLE=100 +CONFIG_LED_EXTERNAL_PWM_DUTY_CYCLE=45 CONFIG_CAMERA_USB_XCLK_FREQ=23000000 -CONFIG_GENERAL_DEFAULT_WIRED_MODE=y -CONFIG_START_IN_UVC_MODE=y \ No newline at end of file +CONFIG_GENERAL_INCLUDE_UVC_MODE=y +CONFIG_START_IN_UVC_MODE=y +CONFIG_MONITORING_LED_CURRENT=y +CONFIG_MONITORING_LED_ADC_GPIO=3 +CONFIG_MONITORING_LED_GAIN=11 +CONFIG_MONITORING_LED_SHUNT_MILLIOHM=22000 +CONFIG_MONITORING_LED_SAMPLES=10 +CONFIG_MONITORING_LED_INTERVAL_MS=500 +CONFIG_GENERAL_BOARD="facefocusvr_eye_l" +# CONFIG_GENERAL_ENABLE_WIRELESS is not set +# CONFIG_LED_DEBUG_ENABLE is not set +CONFIG_LED_EXTERNAL_AS_DEBUG=y +CONFIG_GENERAL_ADVERTISED_NAME="FFVR Eye L" \ No newline at end of file diff --git a/boards/facefocusvr/eye_R b/boards/facefocusvr/eye_R new file mode 100644 index 0000000..9d3af2c --- /dev/null +++ b/boards/facefocusvr/eye_R @@ -0,0 +1,71 @@ +CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y +CONFIG_ESP32S3_SPIRAM_SUPPORT=y +CONFIG_SPIRAM_MODE_OCT=y +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE="8MB" +# Camera sensor pinout configuration +CONFIG_CAMERA_MODULE_NAME="FaceFocusVR_Face" +CONFIG_PWDN_GPIO_NUM=-1 +CONFIG_RESET_GPIO_NUM=-1 +CONFIG_XCLK_GPIO_NUM=10 +CONFIG_SIOD_GPIO_NUM=40 +CONFIG_SIOC_GPIO_NUM=39 +CONFIG_Y9_GPIO_NUM=48 +CONFIG_Y8_GPIO_NUM=11 +CONFIG_Y7_GPIO_NUM=12 +CONFIG_Y6_GPIO_NUM=14 +CONFIG_Y5_GPIO_NUM=16 +CONFIG_Y4_GPIO_NUM=18 +CONFIG_Y3_GPIO_NUM=17 +CONFIG_Y2_GPIO_NUM=15 +CONFIG_VSYNC_GPIO_NUM=38 +CONFIG_HREF_GPIO_NUM=47 +CONFIG_PCLK_GPIO_NUM=13 +# end of Camera sensor pinout configuration +# CONFIG_FLASHMODE_QIO is not set +# CONFIG_FLASHMODE_QOUT is not set +CONFIG_FLASHMODE_DIO=y +CONFIG_SPIRAM_MODE_OCT=y +CONFIG_SPIRAM_TYPE_AUTO=y +# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set +CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_SPIRAM_CLK_IO=30 +CONFIG_SPIRAM_CS_IO=26 +# CONFIG_SPIRAM_XIP_FROM_PSRAM is not set +# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set +# CONFIG_SPIRAM_RODATA is not set +CONFIG_SPIRAM_SPEED_80M=y +# CONFIG_SPIRAM_SPEED_40M is not set +# CONFIG_SPIRAM_XIP_FROM_PSRAM is not set +# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set +# CONFIG_SPIRAM_RODATA is not set +# CONFIG_SPIRAM_SPEED_120M is not set +CONFIG_SPIRAM_SPEED=80 +CONFIG_SPIRAM_SPEED_80M=y +CONFIG_LED_EXTERNAL_CONTROL=y +CONFIG_LED_EXTERNAL_GPIO=9 +CONFIG_LED_EXTERNAL_PWM_FREQ=20000 +CONFIG_LED_EXTERNAL_PWM_DUTY_CYCLE=45 +CONFIG_CAMERA_USB_XCLK_FREQ=23000000 +CONFIG_GENERAL_INCLUDE_UVC_MODE=y +CONFIG_START_IN_UVC_MODE=y +CONFIG_MONITORING_LED_CURRENT=y +CONFIG_MONITORING_LED_ADC_GPIO=3 +CONFIG_MONITORING_LED_GAIN=11 +CONFIG_MONITORING_LED_SHUNT_MILLIOHM=22000 +CONFIG_MONITORING_LED_SAMPLES=10 +CONFIG_MONITORING_LED_INTERVAL_MS=500 +CONFIG_GENERAL_BOARD="facefocusvr_eye_r" +# CONFIG_GENERAL_ENABLE_WIRELESS is not set +# CONFIG_LED_DEBUG_ENABLE is not set +CONFIG_LED_EXTERNAL_AS_DEBUG=y +CONFIG_GENERAL_ADVERTISED_NAME="FFVR Eye R" \ No newline at end of file diff --git a/sdkconfig.board.facefocusvr_eye b/boards/facefocusvr/face similarity index 78% rename from sdkconfig.board.facefocusvr_eye rename to boards/facefocusvr/face index e4a0abd..e51b9e7 100644 --- a/sdkconfig.board.facefocusvr_eye +++ b/boards/facefocusvr/face @@ -1,7 +1,4 @@ -CONFIG_BLINK_LED_GPIO=y -CONFIG_BLINK_GPIO=21 CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y -CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y CONFIG_ESP32S3_SPIRAM_SUPPORT=y CONFIG_SPIRAM_MODE_OCT=y # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set @@ -57,7 +54,18 @@ CONFIG_SPIRAM_SPEED_80M=y CONFIG_LED_EXTERNAL_CONTROL=y CONFIG_LED_EXTERNAL_GPIO=9 CONFIG_LED_EXTERNAL_PWM_FREQ=20000 -CONFIG_LED_EXTERNAL_PWM_DUTY_CYCLE=50 +CONFIG_LED_EXTERNAL_PWM_DUTY_CYCLE=85 CONFIG_CAMERA_USB_XCLK_FREQ=23000000 -CONFIG_GENERAL_DEFAULT_WIRED_MODE=y -CONFIG_START_IN_UVC_MODE=y \ No newline at end of file +CONFIG_GENERAL_INCLUDE_UVC_MODE=y +CONFIG_START_IN_UVC_MODE=y +CONFIG_MONITORING_LED_CURRENT=y +CONFIG_MONITORING_LED_ADC_GPIO=3 +CONFIG_MONITORING_LED_GAIN=11 +CONFIG_MONITORING_LED_SHUNT_MILLIOHM=22000 +CONFIG_MONITORING_LED_SAMPLES=10 +CONFIG_MONITORING_LED_INTERVAL_MS=500 +CONFIG_GENERAL_BOARD="facefocusvr_face" +# CONFIG_GENERAL_ENABLE_WIRELESS is not set +# CONFIG_LED_DEBUG_ENABLE is not set +CONFIG_LED_EXTERNAL_AS_DEBUG=y +CONFIG_GENERAL_ADVERTISED_NAME="FFVR Face" \ No newline at end of file diff --git a/sdkconfig.board.project_babble b/boards/project_babble/project_babble similarity index 88% rename from sdkconfig.board.project_babble rename to boards/project_babble/project_babble index 7be1b7d..507ffbe 100644 --- a/sdkconfig.board.project_babble +++ b/boards/project_babble/project_babble @@ -1,4 +1,4 @@ -CONFIG_BLINK_GPIO=38 +CONFIG_LED_DEBUG_GPIO=38 CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y CONFIG_ESP32S3_SPIRAM_SUPPORT=y # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set @@ -51,5 +51,8 @@ CONFIG_LED_EXTERNAL_PWM_FREQ=5000 CONFIG_LED_EXTERNAL_PWM_DUTY_CYCLE=100 CONFIG_LED_EXTERNAL_GPIO=1 CONFIG_CAMERA_USB_XCLK_FREQ=23000000 -CONFIG_GENERAL_DEFAULT_WIRED_MODE=y -# CONFIG_START_IN_UVC_MODE is not set \ No newline at end of file +CONFIG_GENERAL_INCLUDE_UVC_MODE=y +# CONFIG_START_IN_UVC_MODE is not set +# CONFIG_MONITORING_LED_CURRENT is not set +CONFIG_GENERAL_BOARD="project_babble" +CONFIG_GENERAL_ENABLE_WIRELESS=y \ No newline at end of file diff --git a/sdkconfig.base_defaults b/boards/sdkconfig.base_defaults similarity index 99% rename from sdkconfig.base_defaults rename to boards/sdkconfig.base_defaults index 11c4cab..71ea29d 100644 --- a/sdkconfig.base_defaults +++ b/boards/sdkconfig.base_defaults @@ -570,9 +570,10 @@ CONFIG_ENV_GPIO_OUT_RANGE_MAX=48 # # OpenIris: General Configuration # -# CONFIG_GENERAL_DEFAULT_WIRED_MODE is not set +# CONFIG_GENERAL_INCLUDE_UVC_MODE is not set # CONFIG_START_IN_UVC_MODE is not set -# CONFIG_GENERAL_UVC_DELAY is not set +# CONFIG_GENERAL_STARTUP_DELAY is not set +CONFIG_GENERAL_VERSION="0.0.1" # end of OpenIris: General Configuration # @@ -595,7 +596,7 @@ CONFIG_WIFI_AP_PASSWORD="12345678" # # OpenIris: LED Configuration # -CONFIG_LED_BLINK_GPIO=8 +CONFIG_LED_DEBUG_GPIO=8 CONFIG_LED_EXTERNAL_GPIO=1 CONFIG_LED_EXTERNAL_CONTROL=y CONFIG_LED_EXTERNAL_PWM_FREQ=5000 @@ -2566,4 +2567,4 @@ CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y CONFIG_SUPPORT_TERMIOS=y CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# End of deprecated options +# End of deprecated options \ No newline at end of file diff --git a/sdkconfig.board.xiao-esp32s3 b/boards/seed_studio/xiao_esp32s3 similarity index 89% rename from sdkconfig.board.xiao-esp32s3 rename to boards/seed_studio/xiao_esp32s3 index 703f771..98da3bb 100644 --- a/sdkconfig.board.xiao-esp32s3 +++ b/boards/seed_studio/xiao_esp32s3 @@ -1,5 +1,4 @@ -CONFIG_BLINK_LED_GPIO=y -CONFIG_BLINK_GPIO=21 +CONFIG_LED_DEBUG_GPIO=21 CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y CONFIG_ESP32S3_SPIRAM_SUPPORT=y @@ -56,5 +55,8 @@ CONFIG_SPIRAM_SPEED=80 CONFIG_SPIRAM_SPEED_80M=y # CONFIG_LED_EXTERNAL_CONTROL is not set CONFIG_CAMERA_USB_XCLK_FREQ=23000000 -CONFIG_GENERAL_DEFAULT_WIRED_MODE=y -# CONFIG_START_IN_UVC_MODE is not set \ No newline at end of file +CONFIG_GENERAL_INCLUDE_UVC_MODE=y +# CONFIG_START_IN_UVC_MODE is not set +# CONFIG_MONITORING_LED_CURRENT is not set +CONFIG_GENERAL_BOARD="xiao_esp32s3" +CONFIG_GENERAL_ENABLE_WIRELESS=y diff --git a/bootloader_components/boot_hooks.c b/bootloader_components/boot_hooks.c index c0d7cc2..8f00ddb 100644 --- a/bootloader_components/boot_hooks.c +++ b/bootloader_components/boot_hooks.c @@ -1,6 +1,6 @@ // source: https://github.com/espressif/esp-iot-solution/blob/4730d91db70df7e6e0a3191d725ab1c5f98ff9ce/examples/usb/device/usb_webcam/bootloader_components/boot_hooks/boot_hooks.c -#ifdef CONFIG_GENERAL_DEFAULT_WIRED_MODE +#ifdef CONFIG_GENERAL_INCLUDE_UVC_MODE #include "esp_log.h" #include "soc/rtc_cntl_struct.h" #include "soc/usb_serial_jtag_reg.h" diff --git a/components/CameraManager/CameraManager/CameraManager.cpp b/components/CameraManager/CameraManager/CameraManager.cpp index 26bd8b5..d9ef530 100644 --- a/components/CameraManager/CameraManager/CameraManager.cpp +++ b/components/CameraManager/CameraManager/CameraManager.cpp @@ -48,7 +48,7 @@ void CameraManager::setupCameraPinout() ESP_LOGI(CAMERA_MANAGER_TAG, "CAM_BOARD"); #endif -#if CONFIG_GENERAL_DEFAULT_WIRED_MODE +#if CONFIG_GENERAL_INCLUDE_UVC_MODE xclk_freq_hz = CONFIG_CAMERA_USB_XCLK_FREQ; #endif @@ -79,10 +79,10 @@ void CameraManager::setupCameraPinout() .pixel_format = PIXFORMAT_JPEG, // YUV422,GRAYSCALE,RGB565,JPEG .frame_size = FRAMESIZE_240X240, // QQVGA-UXGA, For ESP32, do not use sizes above QVGA when not JPEG. The performance of the ESP32-S series has improved a lot, but JPEG mode always gives better frame rates. - .jpeg_quality = 7, // 0-63, for OV series camera sensors, lower number means higher quality // Below 6 stability problems - .fb_count = 2, // When jpeg mode is used, if fb_count more than one, the driver will work in continuous mode. - .fb_location = CAMERA_FB_IN_DRAM, - .grab_mode = CAMERA_GRAB_LATEST, // CAMERA_GRAB_WHEN_EMPTY + .jpeg_quality = 8, // 0-63, for OV series camera sensors, lower number means higher quality // Below 6 stability problems + .fb_count = 2, // When jpeg mode is used, if fb_count more than one, the driver will work in continuous mode. + .fb_location = CAMERA_FB_IN_DRAM, + .grab_mode = CAMERA_GRAB_WHEN_EMPTY, // was CAMERA_GRAB_LATEST; new mode reduces frame skips at cost of minor latency }; } @@ -196,7 +196,7 @@ bool CameraManager::setupCamera() return false; } -#if CONFIG_GENERAL_DEFAULT_WIRED_MODE +#if CONFIG_GENERAL_INCLUDE_UVC_MODE const auto temp_sensor = esp_camera_sensor_get(); // Thanks to lick_it, we discovered that OV5640 likes to overheat when diff --git a/components/CommandManager/CMakeLists.txt b/components/CommandManager/CMakeLists.txt index e4b61ca..dc8ed4e 100644 --- a/components/CommandManager/CMakeLists.txt +++ b/components/CommandManager/CMakeLists.txt @@ -11,5 +11,5 @@ idf_component_register( INCLUDE_DIRS "CommandManager" "CommandManager/commands" - REQUIRES ProjectConfig cJSON CameraManager OpenIrisTasks wifiManager Helpers LEDManager + REQUIRES ProjectConfig cJSON CameraManager OpenIrisTasks wifiManager Helpers LEDManager Monitoring ) \ No newline at end of file diff --git a/components/CommandManager/CommandManager/CommandManager.cpp b/components/CommandManager/CommandManager/CommandManager.cpp index 9787d3d..ca1b68d 100644 --- a/components/CommandManager/CommandManager/CommandManager.cpp +++ b/components/CommandManager/CommandManager/CommandManager.cpp @@ -26,6 +26,8 @@ std::unordered_map commandTypeMap = { {"set_led_duty_cycle", CommandType::SET_LED_DUTY_CYCLE}, {"get_led_duty_cycle", CommandType::GET_LED_DUTY_CYCLE}, {"get_serial", CommandType::GET_SERIAL}, + {"get_led_current", CommandType::GET_LED_CURRENT}, + {"get_who_am_i", CommandType::GET_WHO_AM_I}, }; std::function CommandManager::createCommand(const CommandType type, std::string_view json) const @@ -103,6 +105,12 @@ std::function CommandManager::createCommand(const CommandType t case CommandType::GET_SERIAL: return [this] { return getSerialNumberCommand(this->registry); }; + case CommandType::GET_LED_CURRENT: + return [this] + { return getLEDCurrentCommand(this->registry); }; + case CommandType::GET_WHO_AM_I: + return [this] + { return getInfoCommand(this->registry); }; default: return nullptr; } diff --git a/components/CommandManager/CommandManager/CommandManager.hpp b/components/CommandManager/CommandManager/CommandManager.hpp index a4fde07..9e8886a 100644 --- a/components/CommandManager/CommandManager/CommandManager.hpp +++ b/components/CommandManager/CommandManager/CommandManager.hpp @@ -47,6 +47,8 @@ enum class CommandType SET_LED_DUTY_CYCLE, GET_LED_DUTY_CYCLE, GET_SERIAL, + GET_LED_CURRENT, + GET_WHO_AM_I, }; class CommandManager diff --git a/components/CommandManager/CommandManager/DependencyRegistry.hpp b/components/CommandManager/CommandManager/DependencyRegistry.hpp index b0758dd..28d3df4 100644 --- a/components/CommandManager/CommandManager/DependencyRegistry.hpp +++ b/components/CommandManager/CommandManager/DependencyRegistry.hpp @@ -9,7 +9,8 @@ enum class DependencyType project_config, camera_manager, wifi_manager, - led_manager + led_manager, + monitoring_manager }; class DependencyRegistry diff --git a/components/CommandManager/CommandManager/commands/device_commands.cpp b/components/CommandManager/CommandManager/commands/device_commands.cpp index ac9e294..a0ef9c3 100644 --- a/components/CommandManager/CommandManager/commands/device_commands.cpp +++ b/components/CommandManager/CommandManager/commands/device_commands.cpp @@ -1,5 +1,6 @@ #include "device_commands.hpp" #include "LEDManager.hpp" +#include "MonitoringManager.hpp" #include "esp_mac.h" #include @@ -171,9 +172,9 @@ CommandResult switchModeCommand(std::shared_ptr registry, st { newMode = StreamingMode::WIFI; } - else if (strcmp(modeStr, "auto") == 0) + else if (strcmp(modeStr, "setup") == 0 || strcmp(modeStr, "auto") == 0) { - newMode = StreamingMode::AUTO; + newMode = StreamingMode::SETUP; } else { @@ -203,8 +204,8 @@ CommandResult getDeviceModeCommand(std::shared_ptr registry) case StreamingMode::WIFI: modeStr = "WiFi"; break; - case StreamingMode::AUTO: - modeStr = "Auto"; + case StreamingMode::SETUP: + modeStr = "Setup"; break; } @@ -231,3 +232,30 @@ CommandResult getSerialNumberCommand(std::shared_ptr /*regis auto result = std::format("{{ \"serial\": \"{}\", \"mac\": \"{}\" }}", serial_no_sep, mac_colon); return CommandResult::getSuccessResult(result); } + +CommandResult getLEDCurrentCommand(std::shared_ptr registry) +{ +#if CONFIG_MONITORING_LED_CURRENT + auto mon = registry->resolve(DependencyType::monitoring_manager); + if (!mon) + { + return CommandResult::getErrorResult("MonitoringManager unavailable"); + } + float ma = mon->getCurrentMilliAmps(); + auto result = std::format("{{ \"led_current_ma\": {:.3f} }}", static_cast(ma)); + return CommandResult::getSuccessResult(result); +#else + return CommandResult::getErrorResult("Monitoring disabled"); +#endif +} + +CommandResult getInfoCommand(std::shared_ptr /*registry*/) +{ + const char* who = CONFIG_GENERAL_BOARD; + const char* ver = CONFIG_GENERAL_VERSION; + // Ensure non-null strings + if (!who) who = ""; + if (!ver) ver = ""; + auto result = std::format("{{ \"who_am_i\": \"{}\", \"version\": \"{}\" }}", who, ver); + return CommandResult::getSuccessResult(result); +} diff --git a/components/CommandManager/CommandManager/commands/device_commands.hpp b/components/CommandManager/CommandManager/commands/device_commands.hpp index 06e7751..e744af5 100644 --- a/components/CommandManager/CommandManager/commands/device_commands.hpp +++ b/components/CommandManager/CommandManager/commands/device_commands.hpp @@ -22,4 +22,10 @@ CommandResult switchModeCommand(std::shared_ptr registry, st CommandResult getDeviceModeCommand(std::shared_ptr registry); -CommandResult getSerialNumberCommand(std::shared_ptr registry); \ No newline at end of file +CommandResult getSerialNumberCommand(std::shared_ptr registry); + +// Monitoring +CommandResult getLEDCurrentCommand(std::shared_ptr registry); + +// General info +CommandResult getInfoCommand(std::shared_ptr registry); \ No newline at end of file diff --git a/components/CommandManager/CommandManager/commands/scan_commands.cpp b/components/CommandManager/CommandManager/commands/scan_commands.cpp index 6844344..bd5d6f7 100644 --- a/components/CommandManager/CommandManager/commands/scan_commands.cpp +++ b/components/CommandManager/CommandManager/commands/scan_commands.cpp @@ -1,11 +1,15 @@ #include "scan_commands.hpp" +#include "sdkconfig.h" CommandResult scanNetworksCommand(std::shared_ptr registry) { +#if !CONFIG_GENERAL_ENABLE_WIRELESS + return CommandResult::getErrorResult("Not supported by current firmware"); +#endif auto wifiManager = registry->resolve(DependencyType::wifi_manager); if (!wifiManager) { - return CommandResult::getErrorResult("WiFiManager not available"); + return CommandResult::getErrorResult("Not supported by current firmware"); } auto networks = wifiManager->ScanNetworks(); diff --git a/components/CommandManager/CommandManager/commands/wifi_commands.cpp b/components/CommandManager/CommandManager/commands/wifi_commands.cpp index 8ca0fcf..6499b58 100644 --- a/components/CommandManager/CommandManager/commands/wifi_commands.cpp +++ b/components/CommandManager/CommandManager/commands/wifi_commands.cpp @@ -1,5 +1,6 @@ #include "wifi_commands.hpp" #include "esp_netif.h" +#include "sdkconfig.h" std::optional parseSetWiFiCommandPayload(std::string_view jsonPayload) { @@ -143,6 +144,9 @@ std::optional parseUpdateAPWiFiCommandPayload(const std::st CommandResult setWiFiCommand(std::shared_ptr registry, std::string_view jsonPayload) { +#if !CONFIG_GENERAL_ENABLE_WIRELESS + return CommandResult::getErrorResult("Not supported by current firmware"); +#endif const auto payload = parseSetWiFiCommandPayload(jsonPayload); if (!payload.has_value()) @@ -164,6 +168,9 @@ CommandResult setWiFiCommand(std::shared_ptr registry, std:: CommandResult deleteWiFiCommand(std::shared_ptr registry, std::string_view jsonPayload) { +#if !CONFIG_GENERAL_ENABLE_WIRELESS + return CommandResult::getErrorResult("Not supported by current firmware"); +#endif const auto payload = parseDeleteWifiCommandPayload(jsonPayload); if (!payload.has_value()) return CommandResult::getErrorResult("Invalid payload"); @@ -176,6 +183,9 @@ CommandResult deleteWiFiCommand(std::shared_ptr registry, st CommandResult updateWiFiCommand(std::shared_ptr registry, std::string_view jsonPayload) { +#if !CONFIG_GENERAL_ENABLE_WIRELESS + return CommandResult::getErrorResult("Not supported by current firmware"); +#endif const auto payload = parseUpdateWifiCommandPayload(jsonPayload); if (!payload.has_value()) { @@ -207,6 +217,9 @@ CommandResult updateWiFiCommand(std::shared_ptr registry, st CommandResult updateAPWiFiCommand(std::shared_ptr registry, std::string_view jsonPayload) { +#if !CONFIG_GENERAL_ENABLE_WIRELESS + return CommandResult::getErrorResult("Not supported by current firmware"); +#endif const auto payload = parseUpdateAPWiFiCommandPayload(jsonPayload); if (!payload.has_value()) @@ -226,7 +239,13 @@ CommandResult updateAPWiFiCommand(std::shared_ptr registry, } CommandResult getWiFiStatusCommand(std::shared_ptr registry) { - auto wifiManager = registry->resolve(DependencyType::wifi_manager); +#if !CONFIG_GENERAL_ENABLE_WIRELESS + return CommandResult::getErrorResult("Not supported by current firmware"); +#endif + auto wifiManager = registry->resolve(DependencyType::wifi_manager); + if (!wifiManager) { + return CommandResult::getErrorResult("Not supported by current firmware"); + } auto projectConfig = registry->resolve(DependencyType::project_config); // Get current WiFi state @@ -287,7 +306,13 @@ CommandResult getWiFiStatusCommand(std::shared_ptr registry) } CommandResult connectWiFiCommand(std::shared_ptr registry) { - auto wifiManager = registry->resolve(DependencyType::wifi_manager); +#if !CONFIG_GENERAL_ENABLE_WIRELESS + return CommandResult::getErrorResult("Not supported by current firmware"); +#endif + auto wifiManager = registry->resolve(DependencyType::wifi_manager); + if (!wifiManager) { + return CommandResult::getErrorResult("Not supported by current firmware"); + } auto projectConfig = registry->resolve(DependencyType::project_config); auto networks = projectConfig->getWifiConfigs(); diff --git a/components/LEDManager/LEDManager/LEDManager.cpp b/components/LEDManager/LEDManager/LEDManager.cpp index f2e7568..b3baa4e 100644 --- a/components/LEDManager/LEDManager/LEDManager.cpp +++ b/components/LEDManager/LEDManager/LEDManager.cpp @@ -2,63 +2,23 @@ const char *LED_MANAGER_TAG = "[LED_MANAGER]"; +// Pattern design rules: +// - Error states: isError=true, repeat indefinitely, easily distinguishable (avoid overlap). +// - Non-error repeating: show continuous activity (e.g. streaming ON steady, connecting blink). +// - Non-repeating notification (e.g. Connected) gives user a brief confirmation burst then turns off. +// Durations in ms. ledStateMap_t LEDManager::ledStateMap = { - { - LEDStates_e::LedStateNone, - { - false, - false, - {{LED_OFF, 1000}}, - }, - }, - { - LEDStates_e::LedStateStreaming, - { - false, - true, - {{LED_ON, 1000}}, - }, - }, - { - LEDStates_e::LedStateStoppedStreaming, - { - false, - true, - {{LED_OFF, 1000}}, - }, - }, - { - LEDStates_e::CameraError, - { - true, - true, - {{{LED_ON, 300}, {LED_OFF, 300}, {LED_ON, 300}, {LED_OFF, 300}}}, - }, - }, - { - LEDStates_e::WiFiStateConnecting, - { - false, - true, - {{LED_ON, 400}, {LED_OFF, 400}}, - }, - }, - { - LEDStates_e::WiFiStateConnected, - { - false, - false, - {{LED_ON, 200}, {LED_OFF, 200}, {LED_ON, 200}, {LED_OFF, 200}, {LED_ON, 200}, {LED_OFF, 200}, {LED_ON, 200}, {LED_OFF, 200}, {LED_ON, 200}, {LED_OFF, 200}}, - }, - }, - { - LEDStates_e::WiFiStateError, - { - true, - true, - {{LED_ON, 200}, {LED_OFF, 100}, {LED_ON, 500}, {LED_OFF, 100}, {LED_ON, 200}}, - }, - }, + { LEDStates_e::LedStateNone, { /*isError*/false, /*repeat*/false, {{LED_OFF, 1000}} } }, + { LEDStates_e::LedStateStreaming, { false, /*repeat steady*/true, {{LED_ON, 1000}} } }, + { LEDStates_e::LedStateStoppedStreaming, { false, true, {{LED_OFF, 1000}} } }, + // CameraError: double blink pattern repeating + { LEDStates_e::CameraError, { true, true, {{ {LED_ON,300}, {LED_OFF,300}, {LED_ON,300}, {LED_OFF,700} }} } }, + // WiFiStateConnecting: balanced slow blink 400/400 + { LEDStates_e::WiFiStateConnecting, { false, true, {{ {LED_ON,400}, {LED_OFF,400} }} } }, + // WiFiStateConnected: short 3 quick flashes then done (was long noisy burst before) + { LEDStates_e::WiFiStateConnected, { false, false, {{ {LED_ON,150}, {LED_OFF,150}, {LED_ON,150}, {LED_OFF,150}, {LED_ON,150}, {LED_OFF,600} }} } }, + // WiFiStateError: asymmetric attention pattern (fast, pause, long, pause, fast) + { LEDStates_e::WiFiStateError, { true, true, {{ {LED_ON,200}, {LED_OFF,100}, {LED_ON,500}, {LED_OFF,300} }} } }, }; LEDManager::LEDManager(gpio_num_t pin, gpio_num_t illumninator_led_pin, @@ -73,10 +33,13 @@ LEDManager::LEDManager(gpio_num_t pin, gpio_num_t illumninator_led_pin, void LEDManager::setup() { ESP_LOGI(LED_MANAGER_TAG, "Setting up status led."); +#ifdef CONFIG_LED_DEBUG_ENABLE gpio_reset_pin(blink_led_pin); - /* Set the GPIO as a push/pull output */ gpio_set_direction(blink_led_pin, GPIO_MODE_OUTPUT); this->toggleLED(LED_OFF); +#else + ESP_LOGI(LED_MANAGER_TAG, "Debug LED disabled via Kconfig (LED_DEBUG_ENABLE=n)"); +#endif #ifdef CONFIG_LED_EXTERNAL_CONTROL ESP_LOGI(LED_MANAGER_TAG, "Setting up illuminator led."); @@ -168,6 +131,31 @@ void LEDManager::updateState(const LEDStates_e newState) if (newState == this->currentState) return; + // Handle external LED mirroring transitions (store/restore duty) +#if defined(CONFIG_LED_EXTERNAL_CONTROL) && defined(CONFIG_LED_EXTERNAL_AS_DEBUG) + bool wasError = ledStateMap[this->currentState].isError; + bool willBeError = ledStateMap[newState].isError; + if (!wasError && willBeError) + { + // store current duty once + if (!hasStoredExternalDuty) + { + storedExternalDuty = ledc_get_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0); + hasStoredExternalDuty = true; + } + } + else if (wasError && !willBeError) + { + // restore duty + if (hasStoredExternalDuty) + { + ESP_ERROR_CHECK_WITHOUT_ABORT(ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, storedExternalDuty)); + ESP_ERROR_CHECK_WITHOUT_ABORT(ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0)); + hasStoredExternalDuty = false; + } + } +#endif + this->currentState = newState; this->currentPatternIndex = 0; this->finishedPattern = false; @@ -175,7 +163,20 @@ void LEDManager::updateState(const LEDStates_e newState) void LEDManager::toggleLED(const bool state) const { +#ifdef CONFIG_LED_DEBUG_ENABLE gpio_set_level(blink_led_pin, state); +#endif + +#if defined(CONFIG_LED_EXTERNAL_CONTROL) && defined(CONFIG_LED_EXTERNAL_AS_DEBUG) + // Mirror only for error states + if (ledStateMap.contains(this->currentState) && ledStateMap.at(this->currentState).isError) + { + // For pattern ON use 50%, OFF use 0% + uint32_t duty = (state == LED_ON) ? ((50 * 255) / 100) : 0; + ESP_ERROR_CHECK_WITHOUT_ABORT(ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, duty)); + ESP_ERROR_CHECK_WITHOUT_ABORT(ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0)); + } +#endif } void LEDManager::setExternalLEDDutyCycle(uint8_t dutyPercent) diff --git a/components/LEDManager/LEDManager/LEDManager.hpp b/components/LEDManager/LEDManager/LEDManager.hpp index 8f0838f..a08ace3 100644 --- a/components/LEDManager/LEDManager/LEDManager.hpp +++ b/components/LEDManager/LEDManager/LEDManager.hpp @@ -70,6 +70,11 @@ private: size_t currentPatternIndex = 0; size_t timeToDelayFor = 100; bool finishedPattern = false; + +#if defined(CONFIG_LED_EXTERNAL_CONTROL) && defined(CONFIG_LED_EXTERNAL_AS_DEBUG) + bool hasStoredExternalDuty = false; + uint32_t storedExternalDuty = 0; // raw 0-255 +#endif }; void HandleLEDDisplayTask(void *pvParameter); diff --git a/components/Monitoring/CMakeLists.txt b/components/Monitoring/CMakeLists.txt new file mode 100644 index 0000000..fd6f78f --- /dev/null +++ b/components/Monitoring/CMakeLists.txt @@ -0,0 +1,6 @@ +idf_component_register(SRCS + "Monitoring/CurrentMonitor.cpp" + "Monitoring/MonitoringManager.cpp" + INCLUDE_DIRS "Monitoring" + REQUIRES driver esp_adc Helpers +) diff --git a/components/Monitoring/Monitoring/CurrentMonitor.cpp b/components/Monitoring/Monitoring/CurrentMonitor.cpp new file mode 100644 index 0000000..024d767 --- /dev/null +++ b/components/Monitoring/Monitoring/CurrentMonitor.cpp @@ -0,0 +1,179 @@ +#include "CurrentMonitor.hpp" +#include +#include + +#if CONFIG_MONITORING_LED_CURRENT +#include "esp_adc/adc_oneshot.h" +#include "esp_adc/adc_cali.h" +#include "esp_adc/adc_cali_scheme.h" +#endif + +static const char *TAG_CM = "[CurrentMonitor]"; + +CurrentMonitor::CurrentMonitor() +{ +#if CONFIG_MONITORING_LED_CURRENT + samples_.assign(CONFIG_MONITORING_LED_SAMPLES, 0); +#endif +} + +void CurrentMonitor::setup() +{ +#if CONFIG_MONITORING_LED_CURRENT + init_adc(); +#else + ESP_LOGI(TAG_CM, "LED current monitoring disabled"); +#endif +} + +float CurrentMonitor::getCurrentMilliAmps() const +{ +#if CONFIG_MONITORING_LED_CURRENT + const int shunt_milliohm = CONFIG_MONITORING_LED_SHUNT_MILLIOHM; // mΩ + if (shunt_milliohm <= 0) + return 0.0f; + // Physically correct scaling: + // I[mA] = 1000 * Vshunt[mV] / R[mΩ] + return (1000.0f * static_cast(filtered_mv_)) / static_cast(shunt_milliohm); +#else + return 0.0f; +#endif +} + +float CurrentMonitor::pollAndGetMilliAmps() +{ + sampleOnce(); + return getCurrentMilliAmps(); +} + +void CurrentMonitor::sampleOnce() +{ +#if CONFIG_MONITORING_LED_CURRENT + int mv = read_mv_once(); + // Divide by analog gain/divider factor to get shunt voltage + if (CONFIG_MONITORING_LED_GAIN > 0) + mv = mv / CONFIG_MONITORING_LED_GAIN; + + // Moving average over N samples + if (samples_.empty()) + { + samples_.assign(CONFIG_MONITORING_LED_SAMPLES, 0); + sample_sum_ = 0; + sample_idx_ = 0; + sample_count_ = 0; + } + + sample_sum_ -= samples_[sample_idx_]; + samples_[sample_idx_] = mv; + sample_sum_ += mv; + sample_idx_ = (sample_idx_ + 1) % samples_.size(); + if (sample_count_ < samples_.size()) + sample_count_++; + + filtered_mv_ = sample_sum_ / static_cast(sample_count_ > 0 ? sample_count_ : 1); +#else + (void)0; +#endif +} + +#if CONFIG_MONITORING_LED_CURRENT + +static adc_oneshot_unit_handle_t s_adc_handle = nullptr; +static adc_cali_handle_t s_cali_handle = nullptr; +static bool s_cali_inited = false; +static adc_channel_t s_channel; +static adc_unit_t s_unit; + +void CurrentMonitor::init_adc() +{ + // Derive ADC unit/channel from GPIO + int gpio = CONFIG_MONITORING_LED_ADC_GPIO; + + esp_err_t err; + adc_oneshot_unit_init_cfg_t unit_cfg = { + .unit_id = ADC_UNIT_1, + }; + err = adc_oneshot_new_unit(&unit_cfg, &s_adc_handle); + if (err != ESP_OK) + { + ESP_LOGE(TAG_CM, "adc_oneshot_new_unit failed: %s", esp_err_to_name(err)); + return; + } + + // Try to map GPIO to ADC channel automatically if helper exists; otherwise guess for ESP32-S3 ADC1 +#ifdef ADC1_GPIO1_CHANNEL + (void)0; // placeholder for potential future macros +#endif + + // Use IO-to-channel helper where available +#ifdef CONFIG_IDF_TARGET_ESP32S3 + // ESP32-S3: ADC1 channels on GPIO1..GPIO10 map to CH0..CH9 + if (gpio >= 1 && gpio <= 10) + { + s_unit = ADC_UNIT_1; + s_channel = static_cast(gpio - 1); + } + else + { + ESP_LOGW(TAG_CM, "Configured GPIO %d may not be ADC-capable on ESP32-S3", gpio); + s_unit = ADC_UNIT_1; + s_channel = ADC_CHANNEL_0; + } +#else + // Fallback: assume ADC1 CH0 + s_unit = ADC_UNIT_1; + s_channel = ADC_CHANNEL_0; +#endif + + adc_oneshot_chan_cfg_t chan_cfg = { + .atten = ADC_ATTEN_DB_11, + .bitwidth = ADC_BITWIDTH_DEFAULT, + }; + err = adc_oneshot_config_channel(s_adc_handle, s_channel, &chan_cfg); + if (err != ESP_OK) + { + ESP_LOGE(TAG_CM, "adc_oneshot_config_channel failed: %s", esp_err_to_name(err)); + } + + // Calibration using curve fitting if available + adc_cali_curve_fitting_config_t cal_cfg = { + .unit_id = s_unit, + .atten = chan_cfg.atten, + .bitwidth = chan_cfg.bitwidth, + }; + if (adc_cali_create_scheme_curve_fitting(&cal_cfg, &s_cali_handle) == ESP_OK) + { + s_cali_inited = true; + ESP_LOGI(TAG_CM, "ADC calibration initialized (curve fitting)"); + } + else + { + s_cali_inited = false; + ESP_LOGW(TAG_CM, "ADC calibration not available; using raw-to-mV approximation"); + } +} + +int CurrentMonitor::read_mv_once() +{ + if (!s_adc_handle) + return 0; + int raw = 0; + if (adc_oneshot_read(s_adc_handle, s_channel, &raw) != ESP_OK) + return 0; + + int mv = 0; + if (s_cali_inited) + { + if (adc_cali_raw_to_voltage(s_cali_handle, raw, &mv) != ESP_OK) + mv = 0; + } + else + { + // Very rough fallback for 11dB attenuation + // Typical full-scale ~2450mV at raw max 4095 (12-bit). IDF defaults may vary. + mv = (raw * 2450) / 4095; + } + return mv; +} + +#endif // CONFIG_MONITORING_LED_CURRENT diff --git a/components/Monitoring/Monitoring/CurrentMonitor.hpp b/components/Monitoring/Monitoring/CurrentMonitor.hpp new file mode 100644 index 0000000..d1163d3 --- /dev/null +++ b/components/Monitoring/Monitoring/CurrentMonitor.hpp @@ -0,0 +1,49 @@ +#ifndef CURRENT_MONITOR_HPP +#define CURRENT_MONITOR_HPP +#pragma once +#include +#include +#include +#include "sdkconfig.h" + +class CurrentMonitor { +public: + CurrentMonitor(); + ~CurrentMonitor() = default; + + void setup(); + void sampleOnce(); + + // Returns filtered voltage in millivolts at shunt (after dividing by gain) + int getFilteredMillivolts() const { return filtered_mv_; } + // Returns current in milliamps computed as Vshunt[mV] / R[mΩ] + float getCurrentMilliAmps() const; + + // convenience: combined sampling and compute; returns mA + float pollAndGetMilliAmps(); + + // Whether monitoring is enabled by Kconfig + static constexpr bool isEnabled() + { + #ifdef CONFIG_MONITORING_LED_CURRENT + return true; + #else + return false; + #endif + } + +private: +#if CONFIG_MONITORING_LED_CURRENT + void init_adc(); + int read_mv_once(); + int gpio_to_adc_channel(int gpio); +#endif + + int filtered_mv_ = 0; + int sample_sum_ = 0; + std::vector samples_; + size_t sample_idx_ = 0; + size_t sample_count_ = 0; +}; + +#endif diff --git a/components/Monitoring/Monitoring/MonitoringManager.cpp b/components/Monitoring/Monitoring/MonitoringManager.cpp new file mode 100644 index 0000000..1a371b5 --- /dev/null +++ b/components/Monitoring/Monitoring/MonitoringManager.cpp @@ -0,0 +1,58 @@ +#include "MonitoringManager.hpp" +#include +#include "sdkconfig.h" + +static const char* TAG_MM = "[MonitoringManager]"; + +void MonitoringManager::setup() +{ +#if CONFIG_MONITORING_LED_CURRENT + cm_.setup(); + ESP_LOGI(TAG_MM, "Monitoring enabled. Interval=%dms, Samples=%d, Gain=%d, R=%dmΩ", + CONFIG_MONITORING_LED_INTERVAL_MS, + CONFIG_MONITORING_LED_SAMPLES, + CONFIG_MONITORING_LED_GAIN, + CONFIG_MONITORING_LED_SHUNT_MILLIOHM); +#else + ESP_LOGI(TAG_MM, "Monitoring disabled by Kconfig"); +#endif +} + +void MonitoringManager::start() +{ +#if CONFIG_MONITORING_LED_CURRENT + if (task_ == nullptr) + { + xTaskCreate(&MonitoringManager::taskEntry, "MonitoringTask", 2048, this, 1, &task_); + } +#endif +} + +void MonitoringManager::stop() +{ + if (task_) + { + TaskHandle_t toDelete = task_; + task_ = nullptr; + vTaskDelete(toDelete); + } +} + +void MonitoringManager::taskEntry(void* arg) +{ + static_cast(arg)->run(); +} + +void MonitoringManager::run() +{ +#if CONFIG_MONITORING_LED_CURRENT + while (true) + { + float ma = cm_.pollAndGetMilliAmps(); + last_current_ma_.store(ma); + vTaskDelay(pdMS_TO_TICKS(CONFIG_MONITORING_LED_INTERVAL_MS)); + } +#else + vTaskDelete(nullptr); +#endif +} diff --git a/components/Monitoring/Monitoring/MonitoringManager.hpp b/components/Monitoring/Monitoring/MonitoringManager.hpp new file mode 100644 index 0000000..3e7a6c2 --- /dev/null +++ b/components/Monitoring/Monitoring/MonitoringManager.hpp @@ -0,0 +1,24 @@ +#pragma once +#include +#include +#include +#include "CurrentMonitor.hpp" + +class MonitoringManager { +public: + + void setup(); + void start(); + void stop(); + + // Latest filtered current in mA + float getCurrentMilliAmps() const { return last_current_ma_.load(); } + +private: + static void taskEntry(void* arg); + void run(); + + TaskHandle_t task_{nullptr}; + std::atomic last_current_ma_{0.0f}; + CurrentMonitor cm_; +}; diff --git a/components/ProjectConfig/ProjectConfig/Models.hpp b/components/ProjectConfig/ProjectConfig/Models.hpp index e400f14..448f625 100644 --- a/components/ProjectConfig/ProjectConfig/Models.hpp +++ b/components/ProjectConfig/ProjectConfig/Models.hpp @@ -23,7 +23,7 @@ struct BaseConfigModel enum class StreamingMode { - AUTO, + SETUP, UVC, WIFI, }; @@ -31,18 +31,18 @@ enum class StreamingMode struct DeviceMode_t : BaseConfigModel { StreamingMode mode; - explicit DeviceMode_t(Preferences *pref) : BaseConfigModel(pref), mode(StreamingMode::AUTO) {} + explicit DeviceMode_t(Preferences *pref) : BaseConfigModel(pref), mode(StreamingMode::SETUP) {} void load() { - // Default mode can be controlled via sdkconfig: - // - If CONFIG_START_IN_UVC_MODE is enabled, default to UVC - // - Otherwise default to AUTO + // Default mode can be controlled via sdkconfig: + // - If CONFIG_START_IN_UVC_MODE is enabled, default to UVC + // - Otherwise default to SETUP int default_mode = #if CONFIG_START_IN_UVC_MODE static_cast(StreamingMode::UVC); #else - static_cast(StreamingMode::AUTO); + static_cast(StreamingMode::SETUP); #endif int stored_mode = this->pref->getInt("mode", default_mode); @@ -103,9 +103,13 @@ struct MDNSConfig_t : BaseConfigModel void load() { - // by default, this will be openiris - // but we can override it at compile time - std::string default_hostname = CONFIG_WIFI_MDNS_HOSTNAME; + // Default hostname comes from GENERAL_ADVERTISED_NAME (unified advertised name) + std::string default_hostname = +#ifdef CONFIG_GENERAL_ADVERTISED_NAME + CONFIG_GENERAL_ADVERTISED_NAME; +#else + "openiristracker"; +#endif if (default_hostname.empty()) { diff --git a/components/ProjectConfig/ProjectConfig/ProjectConfig.cpp b/components/ProjectConfig/ProjectConfig/ProjectConfig.cpp index 9459113..04f12e5 100644 --- a/components/ProjectConfig/ProjectConfig/ProjectConfig.cpp +++ b/components/ProjectConfig/ProjectConfig/ProjectConfig.cpp @@ -115,7 +115,7 @@ void ProjectConfig::setMDNSConfig(const std::string &hostname) { ESP_LOGD(CONFIGURATION_TAG, "Updating MDNS config"); this->config.mdns.hostname.assign(hostname); - this->config.device.save(); + this->config.mdns.save(); } void ProjectConfig::setCameraConfig(const uint8_t vflip, diff --git a/components/StateManager/StateManager/StateManager.hpp b/components/StateManager/StateManager/StateManager.hpp index fc882d8..4541e2f 100644 --- a/components/StateManager/StateManager/StateManager.hpp +++ b/components/StateManager/StateManager/StateManager.hpp @@ -6,15 +6,17 @@ #include "freertos/FreeRTOS.h" #include "freertos/queue.h" +// LED status categories +// Naming kept stable for existing queues; documented meanings added. enum class LEDStates_e { - LedStateNone, - LedStateStreaming, - LedStateStoppedStreaming, - CameraError, - WiFiStateError, - WiFiStateConnecting, - WiFiStateConnected + LedStateNone, // Idle / no indication (LED off) + LedStateStreaming, // Active streaming (UVC or WiFi) – steady ON + LedStateStoppedStreaming, // Streaming stopped intentionally – steady OFF (could differentiate later) + CameraError, // Camera init / runtime failure – double blink pattern + WiFiStateError, // WiFi connection error – distinctive blink sequence + WiFiStateConnecting, // WiFi association / DHCP pending – slow blink + WiFiStateConnected // WiFi connected (momentary confirmation burst) }; enum class WiFiState_e diff --git a/components/UVCStream/UVCStream/UVCStream.cpp b/components/UVCStream/UVCStream/UVCStream.cpp index 473fc1e..4f773a6 100644 --- a/components/UVCStream/UVCStream/UVCStream.cpp +++ b/components/UVCStream/UVCStream/UVCStream.cpp @@ -6,6 +6,10 @@ static const char *UVC_STREAM_TAG = "[UVC DEVICE]"; +// Tracks whether a frame has been handed to TinyUSB and not yet returned. +// File scope so both get_cb and return_cb can access it safely. +static bool s_frame_inflight = false; + extern "C" { static char serial_number_str[13]; @@ -85,55 +89,57 @@ static void UVCStreamHelpers::camera_stop_cb(void *cb_ctx) static uvc_fb_t *UVCStreamHelpers::camera_fb_get_cb(void *cb_ctx) { auto *mgr = static_cast(cb_ctx); - s_fb.cam_fb_p = esp_camera_fb_get(); - if (!s_fb.cam_fb_p) - { - return nullptr; - } + // Guard against requesting a new frame while previous is still in flight. + // This was causing intermittent corruption/glitches because the pointer + // to the underlying camera buffer was overwritten before TinyUSB returned it. - //-------------------------------------------------------------------------------------------------------------- - // Pace frames to exactly 60 fps (drop extras). Uses fixed-point accumulator - // to achieve an exact average of 60.000 fps without drifting. - static int64_t next_deadline_us = 0; - static int rem_acc = 0; // remainder accumulator for 1e6 % fps distribution - constexpr int target_fps = 60; - constexpr int64_t us_per_sec = 1000000LL; - constexpr int base_interval_us = us_per_sec / target_fps; // 16666 - constexpr int rem_us = us_per_sec % target_fps; // 40 + // --- Frame pacing BEFORE grabbing a new camera frame --- + static int64_t next_deadline_us = 0; // next permitted capture time + static int rem_acc = 0; // fractional remainder accumulator + static const int target_fps = 60; // desired FPS + static const int64_t us_per_sec = 1000000; // 1e6 microseconds + static const int base_interval_us = us_per_sec / target_fps; // 16666 + static const int rem_us = us_per_sec % target_fps; // 40 (distributed) const int64_t now_us = esp_timer_get_time(); if (next_deadline_us == 0) { - // First frame: allow immediately and schedule next slot from now + // First allowed capture immediately next_deadline_us = now_us; } - if (now_us < next_deadline_us) + + // If a frame is still being transmitted or we are too early, just signal no frame + if (s_frame_inflight || now_us < next_deadline_us) + { + return nullptr; // host will poll again + } + + // Acquire a fresh frame only when allowed and no frame in flight + camera_fb_t *cam_fb = esp_camera_fb_get(); + if (!cam_fb) { - // Too early for next frame: drop this camera buffer - esp_camera_fb_return(s_fb.cam_fb_p); - s_fb.cam_fb_p = nullptr; return nullptr; } - //-------------------------------------------------------------------------------------------------------------- - s_fb.uvc_fb.buf = s_fb.cam_fb_p->buf; - s_fb.uvc_fb.len = s_fb.cam_fb_p->len; - s_fb.uvc_fb.width = s_fb.cam_fb_p->width; - s_fb.uvc_fb.height = s_fb.cam_fb_p->height; - s_fb.uvc_fb.format = UVC_FORMAT_JPEG; // we gotta make sure we're ALWAYS using JPEG - s_fb.uvc_fb.timestamp = s_fb.cam_fb_p->timestamp; + s_fb.cam_fb_p = cam_fb; + s_fb.uvc_fb.buf = cam_fb->buf; + s_fb.uvc_fb.len = cam_fb->len; + s_fb.uvc_fb.width = cam_fb->width; + s_fb.uvc_fb.height = cam_fb->height; + s_fb.uvc_fb.format = UVC_FORMAT_JPEG; + s_fb.uvc_fb.timestamp = cam_fb->timestamp; - // Ensure frame fits into configured UVC transfer buffer + // Validate size fits into transfer buffer if (mgr && s_fb.uvc_fb.len > mgr->getUvcBufferSize()) { ESP_LOGE(UVC_STREAM_TAG, "Frame size %d exceeds UVC buffer size %u", (int)s_fb.uvc_fb.len, (unsigned)mgr->getUvcBufferSize()); - esp_camera_fb_return(s_fb.cam_fb_p); + esp_camera_fb_return(cam_fb); + s_fb.cam_fb_p = nullptr; return nullptr; } - //-------------------------------------------------------------------------------------------------------------- - // Schedule the next allowed frame time: base interval plus distributed remainder + // Schedule next frame time (distribute remainder for exact long‑term 60.000 fps) rem_acc += rem_us; int extra_us = 0; if (rem_acc >= target_fps) @@ -141,11 +147,10 @@ static uvc_fb_t *UVCStreamHelpers::camera_fb_get_cb(void *cb_ctx) rem_acc -= target_fps; extra_us = 1; } - // Accumulate from the previous deadline to avoid drift; if we are badly late, catch up from now - const int64_t base_next = next_deadline_us + base_interval_us + extra_us; - next_deadline_us = (base_next < now_us) ? now_us : base_next; - //-------------------------------------------------------------------------------------------------------------- + const int64_t candidate_next = next_deadline_us + base_interval_us + extra_us; + next_deadline_us = (candidate_next < now_us) ? now_us : candidate_next; + s_frame_inflight = true; return &s_fb.uvc_fb; } @@ -153,13 +158,18 @@ static void UVCStreamHelpers::camera_fb_return_cb(uvc_fb_t *fb, void *cb_ctx) { (void)cb_ctx; assert(fb == &s_fb.uvc_fb); - esp_camera_fb_return(s_fb.cam_fb_p); + if (s_fb.cam_fb_p) + { + esp_camera_fb_return(s_fb.cam_fb_p); + s_fb.cam_fb_p = nullptr; + } + s_frame_inflight = false; } esp_err_t UVCStreamManager::setup() { -#ifndef CONFIG_GENERAL_DEFAULT_WIRED_MODE +#ifndef CONFIG_GENERAL_INCLUDE_UVC_MODE ESP_LOGE(UVC_STREAM_TAG, "The board does not support UVC, please, setup WiFi connection."); return ESP_FAIL; #endif diff --git a/components/usb_device_uvc/tusb/usb_descriptors.c b/components/usb_device_uvc/tusb/usb_descriptors.c index 315d141..5ccb305 100644 --- a/components/usb_device_uvc/tusb/usb_descriptors.c +++ b/components/usb_device_uvc/tusb/usb_descriptors.c @@ -70,6 +70,8 @@ uint8_t const *tud_descriptor_device_cb(void) #define STRID_PRODUCT 2 #define STRID_SERIAL 3 #define STRID_UVC_CAM1 4 +// CDC interface string index used by TUD_CDC_DESCRIPTOR below +#define STRID_CDC 6 // Endpoint numbers for CDC #define EPNUM_CDC_NOTIF 0x81 @@ -124,7 +126,8 @@ static uint8_t const desc_fs_configuration[] = { // TUD_CONFIG_DESCRIPTOR(config_number, interface_count, string_index, // total_length, attributes, power_mA) // attributes: 0 = bus-powered (default). Add TUSB_DESC_CONFIG_ATT_SELF_POWERED or _REMOTE_WAKEUP if needed. - TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0, 500), + // Advertise max bus power consumption: 200 mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0, 200), TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 6, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 64), // IAD for Video Control #if CFG_TUD_CAM1_VIDEO_STREAMING_BULK @@ -200,12 +203,15 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index) //--------------------------------------------------------------------+ // Array of pointers to string literals. Indices must match STRID_* above. +// NOTE: Indices must be contiguous up to the highest used index (STRID_CDC = 6) char const *string_desc_arr[] = { (const char[]){0x09, 0x04}, // 0: Supported language: English (0x0409) CONFIG_TUSB_MANUFACTURER, // 1: Manufacturer - CONFIG_TUSB_PRODUCT, // 2: Product + CONFIG_TUSB_PRODUCT, // 2: Product (overridden by advertised name) CONFIG_TUSB_SERIAL_NUM, // 3: Serial (overridden by get_serial_number()) - "UVC CAM1", // 4: UVC Interface name for Cam1 (overridden by get_uvc_device_name()) + "UVC CAM1", // 4: UVC Interface name for Cam1 (overridden by get_uvc_device_name()) + "CDC", // 5: placeholder (unused) + "CDC Interface", // 6: CDC Interface name (overridden to advertised name) }; static uint16_t _desc_str[32]; @@ -249,7 +255,8 @@ uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) // Allow dynamic overrides for specific indices if (index == STRID_SERIAL) str = get_serial_number(); - if (index == STRID_UVC_CAM1) + // Unify all user-visible names (Product, UVC interface, CDC interface) to advertised name + if (index == STRID_UVC_CAM1 || index == STRID_PRODUCT || index == STRID_CDC) str = get_uvc_device_name(); if (str == NULL) str = string_desc_arr[index]; diff --git a/docs/led_patterns/camera_error.svg b/docs/led_patterns/camera_error.svg new file mode 100644 index 0000000..89af1a7 --- /dev/null +++ b/docs/led_patterns/camera_error.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/docs/led_patterns/idle.svg b/docs/led_patterns/idle.svg new file mode 100644 index 0000000..906d6ac --- /dev/null +++ b/docs/led_patterns/idle.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/led_patterns/stopped.svg b/docs/led_patterns/stopped.svg new file mode 100644 index 0000000..43f2fc2 --- /dev/null +++ b/docs/led_patterns/stopped.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/led_patterns/streaming.svg b/docs/led_patterns/streaming.svg new file mode 100644 index 0000000..214566d --- /dev/null +++ b/docs/led_patterns/streaming.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/led_patterns/wifi_connected.svg b/docs/led_patterns/wifi_connected.svg new file mode 100644 index 0000000..0a1c510 --- /dev/null +++ b/docs/led_patterns/wifi_connected.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/docs/led_patterns/wifi_connecting.svg b/docs/led_patterns/wifi_connecting.svg new file mode 100644 index 0000000..9a517a9 --- /dev/null +++ b/docs/led_patterns/wifi_connecting.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/led_patterns/wifi_error.svg b/docs/led_patterns/wifi_error.svg new file mode 100644 index 0000000..f74cd49 --- /dev/null +++ b/docs/led_patterns/wifi_error.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 0fcf058..064f8e0 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -7,28 +7,64 @@ endmenu menu "OpenIris: General Configuration" config START_IN_UVC_MODE - bool "Start in UVC Mode" + bool "Default initial streaming mode = UVC" default false help - Enables UVC (wired) support in the firmware by default. - To be used when a board is designed to be used primarily with wired headsets. - When enabled, the default device streaming mode will be UVC unless overridden by a - saved preference. When disabled, the default mode is AUTO. + Sets the power‑on default streaming mode (before any user preference is stored). + If enabled AND UVC support is compiled in (GENERAL_INCLUDE_UVC_MODE), the device + will default to UVC mode on first boot. If disabled it defaults to SETUP mode, + waiting for a user choice or commands. This option does NOT compile UVC support in; + it only changes the initial preference used when no saved mode exists. - config GENERAL_DEFAULT_WIRED_MODE - bool "Wired mode" + config GENERAL_INCLUDE_UVC_MODE + bool "Include UVC (USB Video Class) support" default false help - Enables UVC (wired) support in the firmware. When enabled, the - default device streaming mode will be UVC unless overridden by a - saved preference. When disabled, the default mode is AUTO. + Compiles in UVC (USB Video Class) streaming support (camera + CDC bridge). + Disable this on boards that are Wi‑Fi only or where USB bandwidth / memory + should be conserved. If disabled any attempt to switch to UVC mode will log + an error and fall back to Wi‑Fi (if wireless is enabled). Combine with + START_IN_UVC_MODE only when the hardware supports UVC. - config GENERAL_UVC_DELAY - int "UVC delay (s)" - default 30 + config GENERAL_STARTUP_DELAY + int "Setup grace period (s)" + default 20 range 10 10000 help - Delay in seconds before the ESP reports itself as a UVC device. + Number of seconds the device remains in SETUP / heartbeat mode on boot (when the + current streaming mode resolves to SETUP) before automatically launching the + selected streaming backend (UVC or Wi‑Fi). During this window host commands can + change mode or other settings. After the timer expires, streaming starts + automatically unless a command was received or startup was paused. + + config GENERAL_ENABLE_WIRELESS + bool "Enable wireless (WiFi/Bluetooth)" + default y + help + When disabled, the firmware will not start WiFi or related services (mDNS/REST), + and any Bluetooth memory (if present on the SoC) should be left released. This can + reduce power consumption when operating solely in UVC mode or without networking. + + config GENERAL_BOARD + string "Board / device identifier" + default "OpenIris" + help + A human-readable board or device identifier exposed via the get_info command. + + config GENERAL_VERSION + string "Firmware version" + default "0.0.1" + help + A firmware version string exposed via the get_info command. + + config GENERAL_ADVERTISED_NAME + string "Advertised device name (UVC + mDNS)" + default "openiristracker" + help + Human-readable device name advertised uniformly across interfaces. + Used as the default mDNS hostname and (indirectly) the UVC USB + device name via get_uvc_device_name(). Users can still override + the runtime hostname through preferences. endmenu @@ -51,10 +87,7 @@ menu "OpenIris: Camera Configuration" endmenu menu "OpenIris: WiFi Configuration" - - config WIFI_MDNS_HOSTNAME - string "mDNS hostname" - default "openiristracker" + # mDNS hostname now derives from GENERAL_ADVERTISED_NAME (no separate Kconfig) config WIFI_SSID string "WiFi network name (SSID)" @@ -76,12 +109,20 @@ endmenu menu "OpenIris: LED Configuration" - config LED_BLINK_GPIO - int "Blink GPIO number" + config LED_DEBUG_ENABLE + bool "Enable debug/status LED" + default y + help + When disabled the firmware will not drive the dedicated debug/status GPIO. + Useful on boards without a discrete status LED. Error/state patterns can + optionally be mirrored onto the external IR LED if LED_EXTERNAL_AS_DEBUG is set. + + config LED_DEBUG_GPIO + int "Debug LED GPIO number" range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX default 8 help - GPIO number (IOxx) used to blink an onboard LED. + GPIO number (IOxx) used to drive an onboard debug/status LED. Some GPIOs are reserved for other functions (e.g. flash) and cannot be used. config LED_EXTERNAL_GPIO @@ -97,6 +138,17 @@ menu "OpenIris: LED Configuration" help Enable this if your board can control external IR LEDs. + config LED_EXTERNAL_AS_DEBUG + bool "Mirror error pattern on external LED" + depends on LED_EXTERNAL_CONTROL + default n + help + When enabled and an error LED pattern is active, the external IR LED PWM output + will blink (0% / 50% duty) to replicate the debug/status LED pattern. If + LED_DEBUG_ENABLE is disabled this provides visual error feedback using only + the external LED. Normal configured PWM brightness is restored when leaving + the error pattern. + config LED_EXTERNAL_PWM_FREQ int "External LED PWM frequency (Hz)" default 5000 @@ -114,4 +166,54 @@ menu "OpenIris: LED Configuration" Duty cycle of the PWM signal for external IR LEDs, in percent. 0 means always off, 100 means always on. +endmenu + +menu "OpenIris: Monitoring" + + config MONITORING_LED_CURRENT + bool "Enable LED current monitoring" + default y + help + Enable sampling LED current via ADC and report it over commands. + + config MONITORING_LED_ADC_GPIO + int "ADC GPIO for LED current sense" + depends on MONITORING_LED_CURRENT + range 0 48 + default 3 + help + GPIO connected to the current sense input (ADC1 on ESP32-S3: 1..10 supported). + + config MONITORING_LED_GAIN + int "Analog front-end gain/divider" + depends on MONITORING_LED_CURRENT + range 1 1024 + default 11 + help + Divider or amplifier gain between shunt and ADC. The measured mV are divided by this value. + + config MONITORING_LED_SHUNT_MILLIOHM + int "Shunt resistance (milli-ohms)" + depends on MONITORING_LED_CURRENT + range 1 1000000 + default 22000 + help + Shunt resistor value in milli-ohms. Current[mA] = 1000 * Vshunt[mV] / R[mΩ]. + + config MONITORING_LED_SAMPLES + int "Filter window size (samples)" + depends on MONITORING_LED_CURRENT + range 1 200 + default 10 + help + Moving-average window length for voltage filtering. + + config MONITORING_LED_INTERVAL_MS + int "Sampling interval (ms)" + depends on MONITORING_LED_CURRENT + range 10 60000 + default 500 + help + Period between samples when background monitoring is active. + endmenu \ No newline at end of file diff --git a/main/openiris_main.cpp b/main/openiris_main.cpp index 71602a0..80dd83c 100644 --- a/main/openiris_main.cpp +++ b/main/openiris_main.cpp @@ -5,6 +5,7 @@ #include "freertos/queue.h" #include "driver/gpio.h" #include "esp_log.h" +#include "esp_timer.h" #include "sdkconfig.h" #include "nvs_flash.h" @@ -21,12 +22,18 @@ #include #include #include +#include -#ifdef CONFIG_GENERAL_DEFAULT_WIRED_MODE +#ifdef CONFIG_GENERAL_INCLUDE_UVC_MODE #include #endif -#define BLINK_GPIO (gpio_num_t) CONFIG_LED_BLINK_GPIO +#ifdef CONFIG_LED_DEBUG_ENABLE +#define BLINK_GPIO (gpio_num_t) CONFIG_LED_DEBUG_GPIO +#else +// Use an invalid / unused GPIO when debug LED disabled to avoid accidental toggles +#define BLINK_GPIO (gpio_num_t) -1 +#endif #define CONFIG_LED_C_PIN_GPIO (gpio_num_t) CONFIG_LED_EXTERNAL_GPIO TaskHandle_t serialManagerHandle; @@ -52,12 +59,13 @@ StreamServer streamServer(80, stateManager); auto *restAPI = new RestAPI("http://0.0.0.0:81", commandManager); -#ifdef CONFIG_GENERAL_DEFAULT_WIRED_MODE +#ifdef CONFIG_GENERAL_INCLUDE_UVC_MODE UVCStreamManager uvcStream; #endif auto ledManager = std::make_shared(BLINK_GPIO, CONFIG_LED_C_PIN_GPIO, ledStateQueue, deviceConfig); auto *serialManager = new SerialManager(commandManager, &timerHandle, deviceConfig); +std::shared_ptr monitoringManager = std::make_shared(); void startWiFiMode(bool shouldCloseSerialManager); void startWiredMode(bool shouldCloseSerialManager); @@ -81,14 +89,14 @@ int websocket_logger(const char *format, va_list args) void launch_streaming() { - // Note, when switching and later right away activating UVC mode when we were previously in WiFi or Auto mode, the WiFi + // Note, when switching and later right away activating UVC mode when we were previously in WiFi or Setup mode, the WiFi // utilities will still be running since we've launched them with startAutoMode() -> startWiFiMode() // we could add detection of this case, but it's probably not worth it since the next start of the device literally won't launch them // and we're telling folks to just reboot the device anyway // same case goes for when switching from UVC to WiFi StreamingMode deviceMode = deviceConfig->getDeviceMode(); - // if we've changed the mode from auto to something else, we can clean up serial manager + // if we've changed the mode from setup to something else, we can clean up serial manager // either the API endpoints or CDC will take care of further configuration if (deviceMode == StreamingMode::WIFI) { @@ -98,10 +106,10 @@ void launch_streaming() { startWiredMode(true); } - else if (deviceMode == StreamingMode::AUTO) + else if (deviceMode == StreamingMode::SETUP) { - // we're still in auto, the user didn't select anything yet, let's give a bit of time for them to make a choice - ESP_LOGI("[MAIN]", "No mode was selected, staying in AUTO mode. WiFi streaming will be enabled still. \nPlease select another mode if you'd like."); + // we're still in setup, the user didn't select anything yet, let's give a bit of time for them to make a choice + ESP_LOGI("[MAIN]", "No mode was selected, staying in SETUP mode. WiFi streaming will be enabled still. \nPlease select another mode if you'd like."); } else { @@ -150,7 +158,7 @@ void force_activate_streaming() void startWiredMode(bool shouldCloseSerialManager) { -#ifndef CONFIG_GENERAL_DEFAULT_WIRED_MODE +#ifndef CONFIG_GENERAL_INCLUDE_UVC_MODE ESP_LOGE("[MAIN]", "UVC mode selected but the board likely does not support it."); ESP_LOGI("[MAIN]", "Falling back to WiFi mode if credentials available"); deviceMode = StreamingMode::WIFI; @@ -211,7 +219,7 @@ void startWiFiMode(bool shouldCloseSerialManager) ESP_LOGI("[MAIN]", "We're still connected to serial. Serial manager task will remain running."); } } - +#ifdef CONFIG_GENERAL_ENABLE_WIRELESS wifiManager->Begin(); mdnsManager.start(); restAPI->begin(); @@ -223,16 +231,20 @@ void startWiFiMode(bool shouldCloseSerialManager) restAPI, 1, // it's the rest API, we only serve commands over it so we don't really need a higher priority nullptr); +#else + ESP_LOGW("[MAIN]", "Wireless is disabled by configuration; skipping WiFi/mDNS/REST startup."); +#endif } void startSetupMode() { - // If we're in an auto mode - Device starts with a 20-second delay before deciding on what to do + // If we're in SETUP mode - Device starts with a 20-second delay before deciding on what to do // during this time we await any commands + const uint64_t startup_delay_s = CONFIG_GENERAL_STARTUP_DELAY; ESP_LOGI("[MAIN]", "====================================="); - ESP_LOGI("[MAIN]", "STARTUP: 20-SECOND DELAY MODE ACTIVE"); + ESP_LOGI("[MAIN]", "STARTUP: %llu-SECOND DELAY MODE ACTIVE", (unsigned long long)startup_delay_s); ESP_LOGI("[MAIN]", "====================================="); - ESP_LOGI("[MAIN]", "Device will wait 20 seconds for commands..."); + ESP_LOGI("[MAIN]", "Device will wait %llu seconds for commands...", (unsigned long long)startup_delay_s); // Create a one-shot timer for 20 seconds const esp_timer_create_args_t startup_timer_args = { @@ -243,17 +255,21 @@ void startSetupMode() .skip_unhandled_events = false}; ESP_ERROR_CHECK(esp_timer_create(&startup_timer_args, &timerHandle)); - ESP_ERROR_CHECK(esp_timer_start_once(timerHandle, CONFIG_GENERAL_UVC_DELAY * 1000000)); - ESP_LOGI("[MAIN]", "Started 20-second startup timer"); - ESP_LOGI("[MAIN]", "Send any command within 20 seconds to enter heartbeat mode"); + ESP_ERROR_CHECK(esp_timer_start_once(timerHandle, startup_delay_s * 1000000)); + ESP_LOGI("[MAIN]", "Started %llu-second startup timer", (unsigned long long)startup_delay_s); + ESP_LOGI("[MAIN]", "Send any command within %llu seconds to enter heartbeat mode", (unsigned long long)startup_delay_s); } extern "C" void app_main(void) { dependencyRegistry->registerService(DependencyType::project_config, deviceConfig); dependencyRegistry->registerService(DependencyType::camera_manager, cameraHandler); + // Register WiFiManager only when wireless is enabled to avoid exposing WiFi commands in no-wireless builds +#ifdef CONFIG_GENERAL_ENABLE_WIRELESS dependencyRegistry->registerService(DependencyType::wifi_manager, wifiManager); +#endif dependencyRegistry->registerService(DependencyType::led_manager, ledManager); + dependencyRegistry->registerService(DependencyType::monitoring_manager, monitoringManager); // add endpoint to check firmware version // add firmware version somewhere @@ -266,6 +282,8 @@ extern "C" void app_main(void) initNVSStorage(); deviceConfig->load(); ledManager->setup(); + monitoringManager->setup(); + monitoringManager->start(); xTaskCreate( HandleStateManagerTask, @@ -316,7 +334,8 @@ extern "C" void app_main(void) { // since we're in setup mode, we have to have wireless functionality on, // so we can do wifi scanning, test connection etc - startWiFiMode(false); + // if wireless is disabled by configuration, we will not start WiFi services here + startWiFiMode(false); startSetupMode(); } } \ No newline at end of file diff --git a/sdkconfig b/sdkconfig index acaf9ba..ce3f32c 100644 --- a/sdkconfig +++ b/sdkconfig @@ -571,8 +571,12 @@ CONFIG_ENV_GPIO_OUT_RANGE_MAX=48 # OpenIris: General Configuration # # CONFIG_START_IN_UVC_MODE is not set -CONFIG_GENERAL_DEFAULT_WIRED_MODE=y -CONFIG_GENERAL_UVC_DELAY=30 +CONFIG_GENERAL_INCLUDE_UVC_MODE=y +CONFIG_GENERAL_STARTUP_DELAY=20 +CONFIG_GENERAL_ENABLE_WIRELESS=y +CONFIG_GENERAL_BOARD="project_babble" +CONFIG_GENERAL_VERSION="0.0.1" +CONFIG_GENERAL_ADVERTISED_NAME="openiristracker" # end of OpenIris: General Configuration # @@ -585,7 +589,6 @@ CONFIG_CAMERA_WIFI_XCLK_FREQ=16500000 # # OpenIris: WiFi Configuration # -CONFIG_WIFI_MDNS_HOSTNAME="openiristracker" CONFIG_WIFI_SSID="" CONFIG_WIFI_PASSWORD="" CONFIG_WIFI_AP_SSID="EyeTrackVR" @@ -595,13 +598,21 @@ CONFIG_WIFI_AP_PASSWORD="12345678" # # OpenIris: LED Configuration # -CONFIG_LED_BLINK_GPIO=8 +CONFIG_LED_DEBUG_ENABLE=y +CONFIG_LED_DEBUG_GPIO=38 CONFIG_LED_EXTERNAL_GPIO=1 CONFIG_LED_EXTERNAL_CONTROL=y +# CONFIG_LED_EXTERNAL_AS_DEBUG is not set CONFIG_LED_EXTERNAL_PWM_FREQ=5000 CONFIG_LED_EXTERNAL_PWM_DUTY_CYCLE=100 # end of OpenIris: LED Configuration +# +# OpenIris: Monitoring +# +# CONFIG_MONITORING_LED_CURRENT is not set +# end of OpenIris: Monitoring + # # Camera sensor pinout configuration # diff --git a/sdkconfig.old b/sdkconfig.old deleted file mode 100644 index c729d33..0000000 --- a/sdkconfig.old +++ /dev/null @@ -1,2532 +0,0 @@ -# -# Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.4.2 Project Configuration -# -CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 -CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 -CONFIG_SOC_ADC_SUPPORTED=y -CONFIG_SOC_UART_SUPPORTED=y -CONFIG_SOC_PCNT_SUPPORTED=y -CONFIG_SOC_PHY_SUPPORTED=y -CONFIG_SOC_WIFI_SUPPORTED=y -CONFIG_SOC_TWAI_SUPPORTED=y -CONFIG_SOC_GDMA_SUPPORTED=y -CONFIG_SOC_AHB_GDMA_SUPPORTED=y -CONFIG_SOC_GPTIMER_SUPPORTED=y -CONFIG_SOC_LCDCAM_SUPPORTED=y -CONFIG_SOC_LCDCAM_I80_LCD_SUPPORTED=y -CONFIG_SOC_LCDCAM_RGB_LCD_SUPPORTED=y -CONFIG_SOC_MCPWM_SUPPORTED=y -CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y -CONFIG_SOC_CACHE_SUPPORT_WRAP=y -CONFIG_SOC_ULP_SUPPORTED=y -CONFIG_SOC_ULP_FSM_SUPPORTED=y -CONFIG_SOC_RISCV_COPROC_SUPPORTED=y -CONFIG_SOC_BT_SUPPORTED=y -CONFIG_SOC_USB_OTG_SUPPORTED=y -CONFIG_SOC_USB_SERIAL_JTAG_SUPPORTED=y -CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y -CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y -CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y -CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y -CONFIG_SOC_EFUSE_SUPPORTED=y -CONFIG_SOC_SDMMC_HOST_SUPPORTED=y -CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y -CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y -CONFIG_SOC_RTC_MEM_SUPPORTED=y -CONFIG_SOC_PSRAM_DMA_CAPABLE=y -CONFIG_SOC_XT_WDT_SUPPORTED=y -CONFIG_SOC_I2S_SUPPORTED=y -CONFIG_SOC_RMT_SUPPORTED=y -CONFIG_SOC_SDM_SUPPORTED=y -CONFIG_SOC_GPSPI_SUPPORTED=y -CONFIG_SOC_LEDC_SUPPORTED=y -CONFIG_SOC_I2C_SUPPORTED=y -CONFIG_SOC_SYSTIMER_SUPPORTED=y -CONFIG_SOC_SUPPORT_COEXISTENCE=y -CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y -CONFIG_SOC_AES_SUPPORTED=y -CONFIG_SOC_MPI_SUPPORTED=y -CONFIG_SOC_SHA_SUPPORTED=y -CONFIG_SOC_HMAC_SUPPORTED=y -CONFIG_SOC_DIG_SIGN_SUPPORTED=y -CONFIG_SOC_FLASH_ENC_SUPPORTED=y -CONFIG_SOC_SECURE_BOOT_SUPPORTED=y -CONFIG_SOC_MEMPROT_SUPPORTED=y -CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y -CONFIG_SOC_BOD_SUPPORTED=y -CONFIG_SOC_CLK_TREE_SUPPORTED=y -CONFIG_SOC_MPU_SUPPORTED=y -CONFIG_SOC_WDT_SUPPORTED=y -CONFIG_SOC_SPI_FLASH_SUPPORTED=y -CONFIG_SOC_RNG_SUPPORTED=y -CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y -CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y -CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y -CONFIG_SOC_PM_SUPPORTED=y -CONFIG_SOC_SIMD_INSTRUCTION_SUPPORTED=y -CONFIG_SOC_XTAL_SUPPORT_40M=y -CONFIG_SOC_APPCPU_HAS_CLOCK_GATING_BUG=y -CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y -CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y -CONFIG_SOC_ADC_ARBITER_SUPPORTED=y -CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y -CONFIG_SOC_ADC_MONITOR_SUPPORTED=y -CONFIG_SOC_ADC_DMA_SUPPORTED=y -CONFIG_SOC_ADC_PERIPH_NUM=2 -CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 -CONFIG_SOC_ADC_ATTEN_NUM=4 -CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 -CONFIG_SOC_ADC_PATT_LEN_MAX=24 -CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 -CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 -CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 -CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611 -CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12 -CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y -CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y -CONFIG_SOC_ADC_SHARED_POWER=y -CONFIG_SOC_APB_BACKUP_DMA=y -CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y -CONFIG_SOC_CACHE_WRITEBACK_SUPPORTED=y -CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y -CONFIG_SOC_CPU_CORES_NUM=2 -CONFIG_SOC_CPU_INTR_NUM=32 -CONFIG_SOC_CPU_HAS_FPU=y -CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y -CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 -CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 -CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 -CONFIG_SOC_SIMD_PREFERRED_DATA_ALIGNMENT=16 -CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096 -CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 -CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 -CONFIG_SOC_AHB_GDMA_VERSION=1 -CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1 -CONFIG_SOC_GDMA_PAIRS_PER_GROUP=5 -CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=5 -CONFIG_SOC_AHB_GDMA_SUPPORT_PSRAM=y -CONFIG_SOC_GPIO_PORT=1 -CONFIG_SOC_GPIO_PIN_COUNT=49 -CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y -CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y -CONFIG_SOC_GPIO_SUPPORT_RTC_INDEPENDENT=y -CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y -CONFIG_SOC_GPIO_VALID_GPIO_MASK=0x1FFFFFFFFFFFF -CONFIG_SOC_GPIO_IN_RANGE_MAX=48 -CONFIG_SOC_GPIO_OUT_RANGE_MAX=48 -CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x0001FFFFFC000000 -CONFIG_SOC_GPIO_CLOCKOUT_BY_IO_MUX=y -CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3 -CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y -CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_GPIO_OUT_AUTO_ENABLE=y -CONFIG_SOC_I2C_NUM=2 -CONFIG_SOC_HP_I2C_NUM=2 -CONFIG_SOC_I2C_FIFO_LEN=32 -CONFIG_SOC_I2C_CMD_REG_NUM=8 -CONFIG_SOC_I2C_SUPPORT_SLAVE=y -CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y -CONFIG_SOC_I2C_SUPPORT_XTAL=y -CONFIG_SOC_I2C_SUPPORT_RTC=y -CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y -CONFIG_SOC_I2C_SLAVE_CAN_GET_STRETCH_CAUSE=y -CONFIG_SOC_I2S_NUM=2 -CONFIG_SOC_I2S_HW_VERSION_2=y -CONFIG_SOC_I2S_SUPPORTS_XTAL=y -CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y -CONFIG_SOC_I2S_SUPPORTS_PCM=y -CONFIG_SOC_I2S_SUPPORTS_PDM=y -CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y -CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2 -CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y -CONFIG_SOC_I2S_PDM_MAX_RX_LINES=4 -CONFIG_SOC_I2S_SUPPORTS_TDM=y -CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y -CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y -CONFIG_SOC_LEDC_TIMER_NUM=4 -CONFIG_SOC_LEDC_CHANNEL_NUM=8 -CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14 -CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y -CONFIG_SOC_MCPWM_GROUPS=2 -CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 -CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 -CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 -CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y -CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 -CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 -CONFIG_SOC_MCPWM_SWSYNC_CAN_PROPAGATE=y -CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1 -CONFIG_SOC_MMU_PERIPH_NUM=1 -CONFIG_SOC_PCNT_GROUPS=1 -CONFIG_SOC_PCNT_UNITS_PER_GROUP=4 -CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 -CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 -CONFIG_SOC_RMT_GROUPS=1 -CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=4 -CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=4 -CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 -CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48 -CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y -CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y -CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP=y -CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y -CONFIG_SOC_RMT_SUPPORT_TX_LOOP_AUTO_STOP=y -CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y -CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y -CONFIG_SOC_RMT_SUPPORT_XTAL=y -CONFIG_SOC_RMT_SUPPORT_RC_FAST=y -CONFIG_SOC_RMT_SUPPORT_APB=y -CONFIG_SOC_RMT_SUPPORT_DMA=y -CONFIG_SOC_LCD_I80_SUPPORTED=y -CONFIG_SOC_LCD_RGB_SUPPORTED=y -CONFIG_SOC_LCD_I80_BUSES=1 -CONFIG_SOC_LCD_RGB_PANELS=1 -CONFIG_SOC_LCD_I80_BUS_WIDTH=16 -CONFIG_SOC_LCD_RGB_DATA_WIDTH=16 -CONFIG_SOC_LCD_SUPPORT_RGB_YUV_CONV=y -CONFIG_SOC_LCDCAM_I80_NUM_BUSES=1 -CONFIG_SOC_LCDCAM_I80_BUS_WIDTH=16 -CONFIG_SOC_LCDCAM_RGB_NUM_PANELS=1 -CONFIG_SOC_LCDCAM_RGB_DATA_WIDTH=16 -CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128 -CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=549 -CONFIG_SOC_RTC_CNTL_TAGMEM_PD_DMA_BUS_WIDTH=128 -CONFIG_SOC_RTCIO_PIN_COUNT=22 -CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y -CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y -CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y -CONFIG_SOC_LP_IO_CLOCK_IS_INDEPENDENT=y -CONFIG_SOC_SDM_GROUPS=y -CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 -CONFIG_SOC_SDM_CLK_SUPPORT_APB=y -CONFIG_SOC_SPI_PERIPH_NUM=3 -CONFIG_SOC_SPI_MAX_CS_NUM=6 -CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 -CONFIG_SOC_SPI_SUPPORT_DDRCLK=y -CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y -CONFIG_SOC_SPI_SUPPORT_CD_SIG=y -CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y -CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y -CONFIG_SOC_SPI_SUPPORT_CLK_APB=y -CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y -CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y -CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y -CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 -CONFIG_SOC_SPI_SUPPORT_OCT=y -CONFIG_SOC_SPI_SCT_SUPPORTED=y -CONFIG_SOC_SPI_SCT_REG_NUM=14 -CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y -CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA -CONFIG_SOC_MEMSPI_SRC_FREQ_120M=y -CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y -CONFIG_SOC_SPIRAM_SUPPORTED=y -CONFIG_SOC_SPIRAM_XIP_SUPPORTED=y -CONFIG_SOC_SYSTIMER_COUNTER_NUM=2 -CONFIG_SOC_SYSTIMER_ALARM_NUM=3 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20 -CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y -CONFIG_SOC_SYSTIMER_INT_LEVEL=y -CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y -CONFIG_SOC_TIMER_GROUPS=2 -CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 -CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 -CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y -CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y -CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 -CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32 -CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16 -CONFIG_SOC_TOUCH_SENSOR_VERSION=2 -CONFIG_SOC_TOUCH_SENSOR_NUM=15 -CONFIG_SOC_TOUCH_SUPPORT_SLEEP_WAKEUP=y -CONFIG_SOC_TOUCH_SUPPORT_WATERPROOF=y -CONFIG_SOC_TOUCH_SUPPORT_PROX_SENSING=y -CONFIG_SOC_TOUCH_PROXIMITY_CHANNEL_NUM=3 -CONFIG_SOC_TOUCH_PROXIMITY_MEAS_DONE_SUPPORTED=y -CONFIG_SOC_TOUCH_SAMPLE_CFG_NUM=1 -CONFIG_SOC_TWAI_CONTROLLER_NUM=1 -CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y -CONFIG_SOC_TWAI_BRP_MIN=2 -CONFIG_SOC_TWAI_BRP_MAX=16384 -CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y -CONFIG_SOC_UART_NUM=3 -CONFIG_SOC_UART_HP_NUM=3 -CONFIG_SOC_UART_FIFO_LEN=128 -CONFIG_SOC_UART_BITRATE_MAX=5000000 -CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y -CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y -CONFIG_SOC_UART_SUPPORT_APB_CLK=y -CONFIG_SOC_UART_SUPPORT_RTC_CLK=y -CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y -CONFIG_SOC_USB_OTG_PERIPH_NUM=1 -CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 -CONFIG_SOC_SHA_SUPPORT_DMA=y -CONFIG_SOC_SHA_SUPPORT_RESUME=y -CONFIG_SOC_SHA_GDMA=y -CONFIG_SOC_SHA_SUPPORT_SHA1=y -CONFIG_SOC_SHA_SUPPORT_SHA224=y -CONFIG_SOC_SHA_SUPPORT_SHA256=y -CONFIG_SOC_SHA_SUPPORT_SHA384=y -CONFIG_SOC_SHA_SUPPORT_SHA512=y -CONFIG_SOC_SHA_SUPPORT_SHA512_224=y -CONFIG_SOC_SHA_SUPPORT_SHA512_256=y -CONFIG_SOC_SHA_SUPPORT_SHA512_T=y -CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 -CONFIG_SOC_MPI_OPERATIONS_NUM=3 -CONFIG_SOC_RSA_MAX_BIT_LEN=4096 -CONFIG_SOC_AES_SUPPORT_DMA=y -CONFIG_SOC_AES_GDMA=y -CONFIG_SOC_AES_SUPPORT_AES_128=y -CONFIG_SOC_AES_SUPPORT_AES_256=y -CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_CPU_PD=y -CONFIG_SOC_PM_SUPPORT_TAGMEM_PD=y -CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y -CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y -CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y -CONFIG_SOC_PM_SUPPORT_MAC_BB_PD=y -CONFIG_SOC_PM_SUPPORT_MODEM_PD=y -CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y -CONFIG_SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY=y -CONFIG_SOC_PM_CPU_RETENTION_BY_RTCCNTL=y -CONFIG_SOC_PM_MODEM_RETENTION_BY_BACKUPDMA=y -CONFIG_SOC_PM_MODEM_PD_BY_SW=y -CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y -CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y -CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y -CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y -CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y -CONFIG_SOC_EFUSE_DIS_DOWNLOAD_DCACHE=y -CONFIG_SOC_EFUSE_HARD_DIS_JTAG=y -CONFIG_SOC_EFUSE_DIS_USB_JTAG=y -CONFIG_SOC_EFUSE_SOFT_DIS_JTAG=y -CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y -CONFIG_SOC_EFUSE_DIS_ICACHE=y -CONFIG_SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK=y -CONFIG_SOC_SECURE_BOOT_V2_RSA=y -CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=3 -CONFIG_SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS=y -CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y -CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=64 -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_OPTIONS=y -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_256=y -CONFIG_SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE=16 -CONFIG_SOC_MEMPROT_MEM_ALIGN_SIZE=256 -CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 -CONFIG_SOC_MAC_BB_PD_MEM_SIZE=192 -CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12 -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y -CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_OPI_MODE=y -CONFIG_SOC_SPI_MEM_SUPPORT_TIMING_TUNING=y -CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y -CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y -CONFIG_SOC_MEMSPI_TIMING_TUNING_BY_MSPI_DELAY=y -CONFIG_SOC_MEMSPI_CORE_CLK_SHARED_WITH_PSRAM=y -CONFIG_SOC_SPI_MEM_SUPPORT_CACHE_32BIT_ADDR_MAP=y -CONFIG_SOC_COEX_HW_PTI=y -CONFIG_SOC_EXTERNAL_COEX_LEADER_TX_LINE=y -CONFIG_SOC_SDMMC_USE_GPIO_MATRIX=y -CONFIG_SOC_SDMMC_NUM_SLOTS=2 -CONFIG_SOC_SDMMC_SUPPORT_XTAL_CLOCK=y -CONFIG_SOC_SDMMC_DELAY_PHASE_NUM=4 -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y -CONFIG_SOC_WIFI_HW_TSF=y -CONFIG_SOC_WIFI_FTM_SUPPORT=y -CONFIG_SOC_WIFI_GCMP_SUPPORT=y -CONFIG_SOC_WIFI_WAPI_SUPPORT=y -CONFIG_SOC_WIFI_CSI_SUPPORT=y -CONFIG_SOC_WIFI_MESH_SUPPORT=y -CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y -CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y -CONFIG_SOC_BLE_SUPPORTED=y -CONFIG_SOC_BLE_MESH_SUPPORTED=y -CONFIG_SOC_BLE_50_SUPPORTED=y -CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y -CONFIG_SOC_BLUFI_SUPPORTED=y -CONFIG_SOC_ULP_HAS_ADC=y -CONFIG_SOC_PHY_COMBO_MODULE=y -CONFIG_IDF_CMAKE=y -CONFIG_IDF_TOOLCHAIN="gcc" -CONFIG_IDF_TOOLCHAIN_GCC=y -CONFIG_IDF_TARGET_ARCH_XTENSA=y -CONFIG_IDF_TARGET_ARCH="xtensa" -CONFIG_IDF_TARGET="esp32s3" -CONFIG_IDF_INIT_VERSION="5.3.3" -CONFIG_IDF_TARGET_ESP32S3=y -CONFIG_IDF_FIRMWARE_CHIP_ID=0x0009 - -# -# Build type -# -CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y -# CONFIG_APP_BUILD_TYPE_RAM is not set -CONFIG_APP_BUILD_GENERATE_BINARIES=y -CONFIG_APP_BUILD_BOOTLOADER=y -CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y -# CONFIG_APP_REPRODUCIBLE_BUILD is not set -# CONFIG_APP_NO_BLOBS is not set -# end of Build type - -# -# Bootloader config -# - -# -# Bootloader manager -# -CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y -CONFIG_BOOTLOADER_PROJECT_VER=1 -# end of Bootloader manager - -CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 -CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set - -# -# Log -# -# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set -CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y -# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set -CONFIG_BOOTLOADER_LOG_LEVEL=3 - -# -# Format -# -# CONFIG_BOOTLOADER_LOG_COLORS is not set -CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y -# end of Format -# end of Log - -# -# Serial Flash Configurations -# -# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set -CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y -# end of Serial Flash Configurations - -CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y -# CONFIG_BOOTLOADER_FACTORY_RESET is not set -# CONFIG_BOOTLOADER_APP_TEST is not set -CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y -CONFIG_BOOTLOADER_WDT_ENABLE=y -# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set -CONFIG_BOOTLOADER_WDT_TIME_MS=9000 -# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set -CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 -# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set -# end of Bootloader config - -# -# Security features -# -CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y -CONFIG_SECURE_BOOT_V2_PREFERRED=y -# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set -# CONFIG_SECURE_BOOT is not set -# CONFIG_SECURE_FLASH_ENC_ENABLED is not set -CONFIG_SECURE_ROM_DL_MODE_ENABLED=y -# end of Security features - -# -# Application manager -# -CONFIG_APP_COMPILE_TIME_DATE=y -# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set -# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set -# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set -CONFIG_APP_RETRIEVE_LEN_ELF_SHA=9 -# end of Application manager - -CONFIG_ESP_ROM_HAS_CRC_LE=y -CONFIG_ESP_ROM_HAS_CRC_BE=y -CONFIG_ESP_ROM_HAS_MZ_CRC32=y -CONFIG_ESP_ROM_HAS_JPEG_DECODE=y -CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y -CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y -CONFIG_ESP_ROM_USB_OTG_NUM=3 -CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=4 -CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG=y -CONFIG_ESP_ROM_HAS_ENCRYPTED_WRITES_USING_LEGACY_DRV=y -CONFIG_ESP_ROM_GET_CLK_FREQ=y -CONFIG_ESP_ROM_HAS_HAL_WDT=y -CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y -CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y -CONFIG_ESP_ROM_HAS_SPI_FLASH=y -CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG=y -CONFIG_ESP_ROM_HAS_NEWLIB=y -CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y -CONFIG_ESP_ROM_HAS_NEWLIB_32BIT_TIME=y -CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y -CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y -CONFIG_ESP_ROM_HAS_FLASH_COUNT_PAGES_BUG=y -CONFIG_ESP_ROM_HAS_CACHE_SUSPEND_WAITI_BUG=y -CONFIG_ESP_ROM_HAS_CACHE_WRITEBACK_BUG=y -CONFIG_ESP_ROM_HAS_SW_FLOAT=y -CONFIG_ESP_ROM_HAS_VERSION=y -CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y -CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y - -# -# Boot ROM Behavior -# -CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y -# CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set -# end of Boot ROM Behavior - -# -# Serial flasher config -# -# CONFIG_ESPTOOLPY_NO_STUB is not set -# CONFIG_ESPTOOLPY_OCT_FLASH is not set -CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT=y -CONFIG_ESPTOOLPY_FLASHMODE_QIO=y -# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set -# CONFIG_ESPTOOLPY_FLASHMODE_DIO is not set -# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set -CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y -CONFIG_ESPTOOLPY_FLASHMODE="dio" -# CONFIG_ESPTOOLPY_FLASHFREQ_120M is not set -CONFIG_ESPTOOLPY_FLASHFREQ_80M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="80m" -# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y -# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="4MB" -# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set -CONFIG_ESPTOOLPY_BEFORE_RESET=y -# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set -CONFIG_ESPTOOLPY_BEFORE="default_reset" -CONFIG_ESPTOOLPY_AFTER_RESET=y -# CONFIG_ESPTOOLPY_AFTER_NORESET is not set -CONFIG_ESPTOOLPY_AFTER="hard_reset" -CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 -# end of Serial flasher config - -# -# Partition Table -# -# CONFIG_PARTITION_TABLE_SINGLE_APP is not set -# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set -# CONFIG_PARTITION_TABLE_TWO_OTA is not set -# CONFIG_PARTITION_TABLE_TWO_OTA_LARGE is not set -CONFIG_PARTITION_TABLE_CUSTOM=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="min_spiffs.csv" -CONFIG_PARTITION_TABLE_FILENAME="min_spiffs.csv" -CONFIG_PARTITION_TABLE_OFFSET=0x8000 -CONFIG_PARTITION_TABLE_MD5=y -# end of Partition Table - -# -# OpenIris basic configuration -# -CONFIG_ENV_GPIO_RANGE_MIN=0 -CONFIG_ENV_GPIO_RANGE_MAX=48 -CONFIG_ENV_GPIO_IN_RANGE_MAX=48 -CONFIG_ENV_GPIO_OUT_RANGE_MAX=48 -CONFIG_BLINK_GPIO=38 -CONFIG_SUPPORTS_EXTERNAL_LED_CONTROL=y -CONFIG_LED_C_PIN=1 -CONFIG_BLINK_PERIOD=1000 -CONFIG_WIRED_MODE=y -CONFIG_MDNS_HOSTNAME="openiristracker" -CONFIG_WIFI_SSID="" -CONFIG_WIFI_PASSWORD="" -CONFIG_AP_WIFI_SSID="EyeTrackVR" -CONFIG_AP_WIFI_PASSWORD="12345678" -# end of OpenIris basic configuration - -# -# Camera sensor pinout configuration -# -CONFIG_CAMERA_MODULE_NAME="SWROOM_BABBLE_S3" -CONFIG_PWDN_GPIO_NUM=-1 -CONFIG_RESET_GPIO_NUM=-1 -CONFIG_XCLK_GPIO_NUM=4 -CONFIG_SIOD_GPIO_NUM=48 -CONFIG_SIOC_GPIO_NUM=47 -CONFIG_Y9_GPIO_NUM=13 -CONFIG_Y8_GPIO_NUM=5 -CONFIG_Y7_GPIO_NUM=6 -CONFIG_Y6_GPIO_NUM=15 -CONFIG_Y5_GPIO_NUM=17 -CONFIG_Y4_GPIO_NUM=8 -CONFIG_Y3_GPIO_NUM=18 -CONFIG_Y2_GPIO_NUM=16 -CONFIG_VSYNC_GPIO_NUM=21 -CONFIG_HREF_GPIO_NUM=14 -CONFIG_PCLK_GPIO_NUM=7 -# end of Camera sensor pinout configuration - -# -# Compiler options -# -# CONFIG_COMPILER_OPTIMIZATION_DEBUG is not set -# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set -CONFIG_COMPILER_OPTIMIZATION_PERF=y -# CONFIG_COMPILER_OPTIMIZATION_NONE is not set -CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set -CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y -CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y -CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 -# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set -CONFIG_COMPILER_HIDE_PATHS_MACROS=y -# CONFIG_COMPILER_CXX_EXCEPTIONS is not set -# CONFIG_COMPILER_CXX_RTTI is not set -CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y -# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set -# CONFIG_COMPILER_NO_MERGE_CONSTANTS is not set -# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y -# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set -# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set -# CONFIG_COMPILER_DISABLE_GCC14_WARNINGS is not set -# CONFIG_COMPILER_DUMP_RTL_FILES is not set -CONFIG_COMPILER_RT_LIB_GCCLIB=y -CONFIG_COMPILER_RT_LIB_NAME="gcc" -# CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING is not set -CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE=y -# CONFIG_COMPILER_STATIC_ANALYZER is not set -# end of Compiler options - -# -# Component config -# - -# -# Application Level Tracing -# -# CONFIG_APPTRACE_DEST_JTAG is not set -CONFIG_APPTRACE_DEST_NONE=y -# CONFIG_APPTRACE_DEST_UART1 is not set -# CONFIG_APPTRACE_DEST_UART2 is not set -# CONFIG_APPTRACE_DEST_USB_CDC is not set -CONFIG_APPTRACE_DEST_UART_NONE=y -CONFIG_APPTRACE_UART_TASK_PRIO=1 -CONFIG_APPTRACE_LOCK_ENABLE=y -# end of Application Level Tracing - -# -# Bluetooth -# -# CONFIG_BT_ENABLED is not set - -# -# Common Options -# -# CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED is not set -# end of Common Options -# end of Bluetooth - -# -# Console Library -# -# CONFIG_CONSOLE_SORTED_HELP is not set -# end of Console Library - -# -# Driver Configurations -# - -# -# TWAI Configuration -# -# CONFIG_TWAI_ISR_IN_IRAM is not set -CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y -# end of TWAI Configuration - -# -# Legacy ADC Driver Configuration -# -# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set - -# -# Legacy ADC Calibration Configuration -# -# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy ADC Calibration Configuration -# end of Legacy ADC Driver Configuration - -# -# Legacy MCPWM Driver Configurations -# -# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_MCPWM_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy MCPWM Driver Configurations - -# -# Legacy Timer Group Driver Configurations -# -# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy Timer Group Driver Configurations - -# -# Legacy RMT Driver Configurations -# -# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_RMT_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy RMT Driver Configurations - -# -# Legacy I2S Driver Configurations -# -# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_I2S_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy I2S Driver Configurations - -# -# Legacy I2C Driver Configurations -# -# CONFIG_I2C_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy I2C Driver Configurations - -# -# Legacy PCNT Driver Configurations -# -# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_PCNT_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy PCNT Driver Configurations - -# -# Legacy SDM Driver Configurations -# -# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_SDM_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy SDM Driver Configurations - -# -# Legacy Temperature Sensor Driver Configurations -# -# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy Temperature Sensor Driver Configurations -# end of Driver Configurations - -# -# eFuse Bit Manager -# -# CONFIG_EFUSE_CUSTOM_TABLE is not set -# CONFIG_EFUSE_VIRTUAL is not set -CONFIG_EFUSE_MAX_BLK_LEN=256 -# end of eFuse Bit Manager - -# -# ESP-TLS -# -CONFIG_ESP_TLS_USING_MBEDTLS=y -CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y -# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set -# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set -# CONFIG_ESP_TLS_PSK_VERIFICATION is not set -# CONFIG_ESP_TLS_INSECURE is not set -# end of ESP-TLS - -# -# ADC and ADC Calibration -# -# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set -# CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3 is not set -# CONFIG_ADC_ENABLE_DEBUG_LOG is not set -# end of ADC and ADC Calibration - -# -# Wireless Coexistence -# -CONFIG_ESP_COEX_ENABLED=y -# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set -# CONFIG_ESP_COEX_GPIO_DEBUG is not set -# end of Wireless Coexistence - -# -# Common ESP-related -# -CONFIG_ESP_ERR_TO_NAME_LOOKUP=y -# end of Common ESP-related - -# -# ESP-Driver:GPIO Configurations -# -# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set -# end of ESP-Driver:GPIO Configurations - -# -# ESP-Driver:GPTimer Configurations -# -CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y -# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set -# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set -CONFIG_GPTIMER_OBJ_CACHE_SAFE=y -# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:GPTimer Configurations - -# -# ESP-Driver:I2C Configurations -# -# CONFIG_I2C_ISR_IRAM_SAFE is not set -# CONFIG_I2C_ENABLE_DEBUG_LOG is not set -# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set -# end of ESP-Driver:I2C Configurations - -# -# ESP-Driver:I2S Configurations -# -# CONFIG_I2S_ISR_IRAM_SAFE is not set -# CONFIG_I2S_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:I2S Configurations - -# -# ESP-Driver:LEDC Configurations -# -# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set -# end of ESP-Driver:LEDC Configurations - -# -# ESP-Driver:MCPWM Configurations -# -# CONFIG_MCPWM_ISR_IRAM_SAFE is not set -# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:MCPWM Configurations - -# -# ESP-Driver:PCNT Configurations -# -# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_PCNT_ISR_IRAM_SAFE is not set -# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:PCNT Configurations - -# -# ESP-Driver:RMT Configurations -# -# CONFIG_RMT_ISR_IRAM_SAFE is not set -# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set -# CONFIG_RMT_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:RMT Configurations - -# -# ESP-Driver:Sigma Delta Modulator Configurations -# -# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_SDM_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Sigma Delta Modulator Configurations - -# -# ESP-Driver:SPI Configurations -# -# CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y -# CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of ESP-Driver:SPI Configurations - -# -# ESP-Driver:Touch Sensor Configurations -# -# CONFIG_TOUCH_CTRL_FUNC_IN_IRAM is not set -# CONFIG_TOUCH_ISR_IRAM_SAFE is not set -# CONFIG_TOUCH_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Touch Sensor Configurations - -# -# ESP-Driver:Temperature Sensor Configurations -# -# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Temperature Sensor Configurations - -# -# ESP-Driver:UART Configurations -# -# CONFIG_UART_ISR_IN_IRAM is not set -# end of ESP-Driver:UART Configurations - -# -# ESP-Driver:USB Serial/JTAG Configuration -# -CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=y -# end of ESP-Driver:USB Serial/JTAG Configuration - -# -# Ethernet -# -CONFIG_ETH_ENABLED=y -CONFIG_ETH_USE_SPI_ETHERNET=y -# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set -# CONFIG_ETH_SPI_ETHERNET_W5500 is not set -# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set -# CONFIG_ETH_USE_OPENETH is not set -# CONFIG_ETH_TRANSMIT_MUTEX is not set -# end of Ethernet - -# -# Event Loop Library -# -# CONFIG_ESP_EVENT_LOOP_PROFILING is not set -CONFIG_ESP_EVENT_POST_FROM_ISR=y -CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y -# end of Event Loop Library - -# -# GDB Stub -# -CONFIG_ESP_GDBSTUB_ENABLED=y -# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set -CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y -CONFIG_ESP_GDBSTUB_MAX_TASKS=32 -# end of GDB Stub - -# -# ESP HID -# -CONFIG_ESPHID_TASK_SIZE_BT=2048 -CONFIG_ESPHID_TASK_SIZE_BLE=4096 -# end of ESP HID - -# -# ESP HTTP client -# -CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y -# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set -CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTP client - -# -# HTTP Server -# -CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 -CONFIG_HTTPD_MAX_URI_LEN=512 -CONFIG_HTTPD_ERR_RESP_NO_DELAY=y -CONFIG_HTTPD_PURGE_BUF_LEN=32 -# CONFIG_HTTPD_LOG_PURGE_DATA is not set -CONFIG_HTTPD_WS_SUPPORT=y -# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set -CONFIG_HTTPD_SERVER_EVENT_POST_TIMEOUT=2000 -# end of HTTP Server - -# -# ESP HTTPS OTA -# -# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set -# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set -CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS OTA - -# -# ESP HTTPS server -# -# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set -CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS server - -# -# Hardware Settings -# - -# -# Chip revision -# -CONFIG_ESP32S3_REV_MIN_0=y -# CONFIG_ESP32S3_REV_MIN_1 is not set -# CONFIG_ESP32S3_REV_MIN_2 is not set -CONFIG_ESP32S3_REV_MIN_FULL=0 -CONFIG_ESP_REV_MIN_FULL=0 - -# -# Maximum Supported ESP32-S3 Revision (Rev v0.99) -# -CONFIG_ESP32S3_REV_MAX_FULL=99 -CONFIG_ESP_REV_MAX_FULL=99 -CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0 -CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=199 - -# -# Maximum Supported ESP32-S3 eFuse Block Revision (eFuse Block Rev v1.99) -# -# end of Chip revision - -# -# MAC Config -# -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y -CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_TWO is not set -CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set -# end of MAC Config - -# -# Sleep Config -# -CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y -CONFIG_ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND=y -CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y -CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y -CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y -CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 -# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set -# CONFIG_ESP_SLEEP_DEBUG is not set -CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y -# end of Sleep Config - -# -# RTC Clock Config -# -CONFIG_RTC_CLK_SRC_INT_RC=y -# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_RTC_CLK_CAL_CYCLES=1024 -# end of RTC Clock Config - -# -# Peripheral Control -# -CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y -# end of Peripheral Control - -# -# GDMA Configurations -# -CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y -CONFIG_GDMA_ISR_HANDLER_IN_IRAM=y -CONFIG_GDMA_OBJ_DRAM_SAFE=y -# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set -# CONFIG_GDMA_ISR_IRAM_SAFE is not set -# end of GDMA Configurations - -# -# Main XTAL Config -# -CONFIG_XTAL_FREQ_40=y -CONFIG_XTAL_FREQ=40 -# end of Main XTAL Config - -CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y -# end of Hardware Settings - -# -# ESP-Driver:LCD Controller Configurations -# -# CONFIG_LCD_ENABLE_DEBUG_LOG is not set -# CONFIG_LCD_RGB_ISR_IRAM_SAFE is not set -# CONFIG_LCD_RGB_RESTART_IN_VSYNC is not set -# end of ESP-Driver:LCD Controller Configurations - -# -# ESP-MM: Memory Management Configurations -# -# CONFIG_ESP_MM_CACHE_MSYNC_C2M_CHUNKED_OPS is not set -# end of ESP-MM: Memory Management Configurations - -# -# ESP NETIF Adapter -# -CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 -# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set -CONFIG_ESP_NETIF_TCPIP_LWIP=y -# CONFIG_ESP_NETIF_LOOPBACK is not set -CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y -CONFIG_ESP_NETIF_REPORT_DATA_TRAFFIC=y -# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set -# CONFIG_ESP_NETIF_L2_TAP is not set -# CONFIG_ESP_NETIF_BRIDGE_EN is not set -# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set -# end of ESP NETIF Adapter - -# -# Partition API Configuration -# -# end of Partition API Configuration - -# -# PHY -# -CONFIG_ESP_PHY_ENABLED=y -CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP_PHY_MAX_TX_POWER=20 -# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set -CONFIG_ESP_PHY_ENABLE_USB=y -# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set -CONFIG_ESP_PHY_RF_CAL_PARTIAL=y -# CONFIG_ESP_PHY_RF_CAL_NONE is not set -# CONFIG_ESP_PHY_RF_CAL_FULL is not set -CONFIG_ESP_PHY_CALIBRATION_MODE=0 -# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set -# CONFIG_ESP_PHY_RECORD_USED_TIME is not set -# end of PHY - -# -# Power Management -# -# CONFIG_PM_ENABLE is not set -# CONFIG_PM_SLP_IRAM_OPT is not set -CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y -CONFIG_PM_RESTORE_CACHE_TAGMEM_AFTER_LIGHT_SLEEP=y -# end of Power Management - -# -# ESP PSRAM -# -CONFIG_SPIRAM=y - -# -# SPI RAM config -# -CONFIG_SPIRAM_MODE_QUAD=y -# CONFIG_SPIRAM_MODE_OCT is not set -CONFIG_SPIRAM_TYPE_AUTO=y -# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set -# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set -# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set -CONFIG_SPIRAM_CLK_IO=30 -CONFIG_SPIRAM_CS_IO=26 -# CONFIG_SPIRAM_XIP_FROM_PSRAM is not set -# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set -# CONFIG_SPIRAM_RODATA is not set -# CONFIG_SPIRAM_SPEED_120M is not set -CONFIG_SPIRAM_SPEED_80M=y -# CONFIG_SPIRAM_SPEED_40M is not set -CONFIG_SPIRAM_SPEED=80 -CONFIG_SPIRAM_BOOT_INIT=y -CONFIG_SPIRAM_PRE_CONFIGURE_MEMORY_PROTECTION=y -# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set -# CONFIG_SPIRAM_USE_MEMMAP is not set -# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set -CONFIG_SPIRAM_USE_MALLOC=y -CONFIG_SPIRAM_MEMTEST=y -CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=32768 -# 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_NOINIT_SEG_EXTERNAL_MEMORY is not set -# end of SPI RAM config -# end of ESP PSRAM - -# -# ESP Ringbuf -# -# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set -# end of ESP Ringbuf - -# -# ESP Security Specific -# -# end of ESP Security Specific - -# -# ESP System Settings -# -# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set -# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set -CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y -CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240 - -# -# Cache config -# -CONFIG_ESP32S3_INSTRUCTION_CACHE_16KB=y -# CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB is not set -CONFIG_ESP32S3_INSTRUCTION_CACHE_SIZE=0x4000 -# CONFIG_ESP32S3_INSTRUCTION_CACHE_4WAYS is not set -CONFIG_ESP32S3_INSTRUCTION_CACHE_8WAYS=y -CONFIG_ESP32S3_ICACHE_ASSOCIATED_WAYS=8 -# CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_16B is not set -CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_32B=y -CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_SIZE=32 -# CONFIG_ESP32S3_DATA_CACHE_16KB is not set -CONFIG_ESP32S3_DATA_CACHE_32KB=y -# CONFIG_ESP32S3_DATA_CACHE_64KB is not set -CONFIG_ESP32S3_DATA_CACHE_SIZE=0x8000 -# CONFIG_ESP32S3_DATA_CACHE_4WAYS is not set -CONFIG_ESP32S3_DATA_CACHE_8WAYS=y -CONFIG_ESP32S3_DCACHE_ASSOCIATED_WAYS=8 -# CONFIG_ESP32S3_DATA_CACHE_LINE_16B is not set -CONFIG_ESP32S3_DATA_CACHE_LINE_32B=y -# CONFIG_ESP32S3_DATA_CACHE_LINE_64B is not set -CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE=32 -# end of Cache config - -# -# Memory -# -# CONFIG_ESP32S3_RTCDATA_IN_FAST_MEM is not set -# CONFIG_ESP32S3_USE_FIXED_STATIC_RAM_SIZE is not set -# end of Memory - -# -# Trace memory -# -# CONFIG_ESP32S3_TRAX is not set -CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0 -# end of Trace memory - -# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set -CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y -# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT 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_ALLOW_RTC_FAST_MEM_AS_HEAP=y - -# -# Memory protection -# -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y -# end of Memory protection - -CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 -CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y -# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set -# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set -CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 -CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 -CONFIG_ESP_CONSOLE_UART_DEFAULT=y -# CONFIG_ESP_CONSOLE_USB_CDC is not set -# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set -# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set -# CONFIG_ESP_CONSOLE_NONE is not set -# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set -CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y -CONFIG_ESP_CONSOLE_UART=y -CONFIG_ESP_CONSOLE_UART_NUM=0 -CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0 -CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 -CONFIG_ESP_INT_WDT=y -CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 -CONFIG_ESP_INT_WDT_CHECK_CPU1=y -CONFIG_ESP_TASK_WDT_EN=y -CONFIG_ESP_TASK_WDT_INIT=y -# CONFIG_ESP_TASK_WDT_PANIC is not set -CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -# CONFIG_ESP_PANIC_HANDLER_IRAM is not set -# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP_DEBUG_OCDAWARE=y -CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y - -# -# Brownout Detector -# -CONFIG_ESP_BROWNOUT_DET=y -CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set -CONFIG_ESP_BROWNOUT_DET_LVL=7 -# end of Brownout Detector - -CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y -CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y -# end of ESP System Settings - -# -# IPC (Inter-Processor Call) -# -CONFIG_ESP_IPC_TASK_STACK_SIZE=1280 -CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y -CONFIG_ESP_IPC_ISR_ENABLE=y -# end of IPC (Inter-Processor Call) - -# -# ESP Timer (High Resolution Timer) -# -# CONFIG_ESP_TIMER_PROFILING is not set -CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y -CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y -CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 -# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set -CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 -CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y -CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y -# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set -CONFIG_ESP_TIMER_IMPL_SYSTIMER=y -# end of ESP Timer (High Resolution Timer) - -# -# Wi-Fi -# -CONFIG_ESP_WIFI_ENABLED=y -CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10 -CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -CONFIG_ESP_WIFI_STATIC_TX_BUFFER=y -# CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER is not set -CONFIG_ESP_WIFI_TX_BUFFER_TYPE=0 -CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM=16 -CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y -# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0 -CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5 -# CONFIG_ESP_WIFI_CSI_ENABLED is not set -CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP_WIFI_TX_BA_WIN=6 -CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP_WIFI_RX_BA_WIN=6 -CONFIG_ESP_WIFI_NVS_ENABLED=y -CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y -# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set -CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP_WIFI_IRAM_OPT=y -# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set -CONFIG_ESP_WIFI_RX_IRAM_OPT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP_WIFI_ENABLE_SAE_PK=y -CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y -# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set -CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 -CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10 -CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15 -# CONFIG_ESP_WIFI_FTM_ENABLE is not set -CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y -# CONFIG_ESP_WIFI_GCMP_SUPPORT is not set -CONFIG_ESP_WIFI_GMAC_SUPPORT=y -CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y -# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set -CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 -CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y -CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y -# CONFIG_ESP_WIFI_WAPI_PSK is not set -# CONFIG_ESP_WIFI_SUITE_B_192 is not set -# CONFIG_ESP_WIFI_11KV_SUPPORT is not set -# CONFIG_ESP_WIFI_MBO_SUPPORT is not set -# CONFIG_ESP_WIFI_DPP_SUPPORT is not set -# CONFIG_ESP_WIFI_11R_SUPPORT is not set -# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set - -# -# WPS Configuration Options -# -# CONFIG_ESP_WIFI_WPS_STRICT is not set -# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set -# end of WPS Configuration Options - -# CONFIG_ESP_WIFI_DEBUG_PRINT is not set -# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set -CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y -# CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set -# end of Wi-Fi - -# -# Core dump -# -# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set -# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set -CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y -# end of Core dump - -# -# FAT Filesystem support -# -CONFIG_FATFS_VOLUME_COUNT=2 -CONFIG_FATFS_LFN_NONE=y -# CONFIG_FATFS_LFN_HEAP is not set -# CONFIG_FATFS_LFN_STACK is not set -# CONFIG_FATFS_SECTOR_512 is not set -CONFIG_FATFS_SECTOR_4096=y -# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set -CONFIG_FATFS_CODEPAGE_437=y -# CONFIG_FATFS_CODEPAGE_720 is not set -# CONFIG_FATFS_CODEPAGE_737 is not set -# CONFIG_FATFS_CODEPAGE_771 is not set -# CONFIG_FATFS_CODEPAGE_775 is not set -# CONFIG_FATFS_CODEPAGE_850 is not set -# CONFIG_FATFS_CODEPAGE_852 is not set -# CONFIG_FATFS_CODEPAGE_855 is not set -# CONFIG_FATFS_CODEPAGE_857 is not set -# CONFIG_FATFS_CODEPAGE_860 is not set -# CONFIG_FATFS_CODEPAGE_861 is not set -# CONFIG_FATFS_CODEPAGE_862 is not set -# CONFIG_FATFS_CODEPAGE_863 is not set -# CONFIG_FATFS_CODEPAGE_864 is not set -# CONFIG_FATFS_CODEPAGE_865 is not set -# CONFIG_FATFS_CODEPAGE_866 is not set -# CONFIG_FATFS_CODEPAGE_869 is not set -# CONFIG_FATFS_CODEPAGE_932 is not set -# CONFIG_FATFS_CODEPAGE_936 is not set -# CONFIG_FATFS_CODEPAGE_949 is not set -# CONFIG_FATFS_CODEPAGE_950 is not set -CONFIG_FATFS_CODEPAGE=437 -CONFIG_FATFS_FS_LOCK=0 -CONFIG_FATFS_TIMEOUT_MS=10000 -CONFIG_FATFS_PER_FILE_CACHE=y -CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y -# CONFIG_FATFS_USE_FASTSEEK is not set -CONFIG_FATFS_USE_STRFUNC_NONE=y -# CONFIG_FATFS_USE_STRFUNC_WITHOUT_CRLF_CONV is not set -# CONFIG_FATFS_USE_STRFUNC_WITH_CRLF_CONV is not set -CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 -# CONFIG_FATFS_IMMEDIATE_FSYNC is not set -# CONFIG_FATFS_USE_LABEL is not set -CONFIG_FATFS_LINK_LOCK=y -# CONFIG_FATFS_USE_DYN_BUFFERS is not set - -# -# File system free space calculation behavior -# -CONFIG_FATFS_DONT_TRUST_FREE_CLUSTER_CNT=0 -CONFIG_FATFS_DONT_TRUST_LAST_ALLOC=0 -# end of File system free space calculation behavior -# end of FAT Filesystem support - -# -# FreeRTOS -# - -# -# Kernel -# -# CONFIG_FREERTOS_SMP is not set -# CONFIG_FREERTOS_UNICORE is not set -CONFIG_FREERTOS_HZ=1000 -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set -CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 -# CONFIG_FREERTOS_USE_IDLE_HOOK is not set -# CONFIG_FREERTOS_USE_TICK_HOOK is not set -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 -# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set -CONFIG_FREERTOS_USE_TIMERS=y -CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" -# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set -# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU1 is not set -CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y -CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 -# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set -# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set -# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set -# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set -# end of Kernel - -# -# Port -# -# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y -# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set -# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set -CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y -CONFIG_FREERTOS_ISR_STACKSIZE=1536 -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -# CONFIG_FREERTOS_FPU_IN_ISR is not set -CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y -CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y -# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set -CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y -# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set -# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -# end of Port - -# -# Extra -# -CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y -# end of Extra - -CONFIG_FREERTOS_PORT=y -CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y -CONFIG_FREERTOS_DEBUG_OCDAWARE=y -CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y -CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y -CONFIG_FREERTOS_NUMBER_OF_CORES=2 -# end of FreeRTOS - -# -# Hardware Abstraction Layer (HAL) and Low Level (LL) -# -CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y -# CONFIG_HAL_ASSERTION_DISABLE is not set -# CONFIG_HAL_ASSERTION_SILENT is not set -# CONFIG_HAL_ASSERTION_ENABLE is not set -CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 -CONFIG_HAL_WDT_USE_ROM_IMPL=y -CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y -CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y -# end of Hardware Abstraction Layer (HAL) and Low Level (LL) - -# -# Heap memory debugging -# -CONFIG_HEAP_POISONING_DISABLED=y -# CONFIG_HEAP_POISONING_LIGHT is not set -# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set -CONFIG_HEAP_TRACING_OFF=y -# CONFIG_HEAP_TRACING_STANDALONE is not set -# CONFIG_HEAP_TRACING_TOHOST is not set -# CONFIG_HEAP_USE_HOOKS is not set -# CONFIG_HEAP_TASK_TRACKING is not set -# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set -# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set -# end of Heap memory debugging - -# -# Log -# - -# -# Log Level -# -# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set -# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set -# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set -CONFIG_LOG_DEFAULT_LEVEL_INFO=y -# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set -# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set -CONFIG_LOG_DEFAULT_LEVEL=3 -# CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT is not set -# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set -CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE=y -CONFIG_LOG_MAXIMUM_LEVEL=5 - -# -# Level Settings -# -# CONFIG_LOG_MASTER_LEVEL is not set -CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y -# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set -# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set -CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_AND_LINKED_LIST=y -# CONFIG_LOG_TAG_LEVEL_CACHE_ARRAY is not set -CONFIG_LOG_TAG_LEVEL_CACHE_BINARY_MIN_HEAP=y -CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31 -# end of Level Settings -# end of Log Level - -# -# Format -# -CONFIG_LOG_COLORS=y -CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y -# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set -# end of Format -# end of Log - -# -# LWIP -# -CONFIG_LWIP_ENABLE=y -CONFIG_LWIP_LOCAL_HOSTNAME="espressif" -# CONFIG_LWIP_NETIF_API is not set -CONFIG_LWIP_TCPIP_TASK_PRIO=18 -# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set -# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# CONFIG_LWIP_L2_TO_L3_COPY is not set -# CONFIG_LWIP_IRAM_OPTIMIZATION is not set -# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set -CONFIG_LWIP_TIMERS_ONDEMAND=y -CONFIG_LWIP_ND6=y -# CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set -CONFIG_LWIP_MAX_SOCKETS=10 -# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set -# CONFIG_LWIP_SO_LINGER is not set -CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y -# CONFIG_LWIP_SO_RCVBUF is not set -# CONFIG_LWIP_NETBUF_RECVINFO is not set -CONFIG_LWIP_IP_DEFAULT_TTL=64 -CONFIG_LWIP_IP4_FRAG=y -CONFIG_LWIP_IP6_FRAG=y -# CONFIG_LWIP_IP4_REASSEMBLY is not set -# CONFIG_LWIP_IP6_REASSEMBLY is not set -CONFIG_LWIP_IP_REASS_MAX_PBUFS=10 -# CONFIG_LWIP_IP_FORWARD is not set -# CONFIG_LWIP_STATS is not set -CONFIG_LWIP_ESP_GRATUITOUS_ARP=y -CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_ESP_MLDV6_REPORT=y -CONFIG_LWIP_MLDV6_TMR_INTERVAL=40 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 -CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y -# CONFIG_LWIP_DHCP_DOES_ACD_CHECK is not set -# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set -# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set -CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set -CONFIG_LWIP_DHCP_OPTIONS_LEN=68 -CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0 -CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 - -# -# DHCP server -# -CONFIG_LWIP_DHCPS=y -CONFIG_LWIP_DHCPS_LEASE_UNIT=60 -CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 -CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y -CONFIG_LWIP_DHCPS_ADD_DNS=y -# end of DHCP server - -# CONFIG_LWIP_AUTOIP is not set -CONFIG_LWIP_IPV4=y -CONFIG_LWIP_IPV6=y -# CONFIG_LWIP_IPV6_AUTOCONFIG is not set -CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 -# CONFIG_LWIP_IPV6_FORWARD is not set -# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=y -CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 - -# -# TCP -# -CONFIG_LWIP_MAX_ACTIVE_TCP=16 -CONFIG_LWIP_MAX_LISTENING_TCP=16 -CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y -CONFIG_LWIP_TCP_MAXRTX=12 -CONFIG_LWIP_TCP_SYNMAXRTX=12 -CONFIG_LWIP_TCP_MSS=1440 -CONFIG_LWIP_TCP_TMR_INTERVAL=250 -CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760 -CONFIG_LWIP_TCP_WND_DEFAULT=5760 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6 -CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6 -CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4 -# CONFIG_LWIP_TCP_SACK_OUT is not set -CONFIG_LWIP_TCP_OVERSIZE_MSS=y -# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set -CONFIG_LWIP_TCP_RTO_TIME=1500 -# end of TCP - -# -# UDP -# -CONFIG_LWIP_MAX_UDP_PCBS=16 -CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 -# end of UDP - -# -# Checksums -# -# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set -# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set -CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y -# end of Checksums - -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set -CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF -CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 -CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -CONFIG_LWIP_IPV6_ND6_NUM_PREFIXES=5 -CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS=3 -CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS=10 -# CONFIG_LWIP_PPP_SUPPORT is not set -# CONFIG_LWIP_SLIP_SUPPORT is not set - -# -# ICMP -# -CONFIG_LWIP_ICMP=y -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP - -# -# LWIP RAW API -# -CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API - -# -# SNTP -# -CONFIG_LWIP_SNTP_MAX_SERVERS=1 -# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set -CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 -CONFIG_LWIP_SNTP_STARTUP_DELAY=y -CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000 -# end of SNTP - -# -# DNS -# -CONFIG_LWIP_DNS_MAX_HOST_IP=1 -CONFIG_LWIP_DNS_MAX_SERVERS=3 -# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set -# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set -# end of DNS - -CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 -CONFIG_LWIP_ESP_LWIP_ASSERT=y - -# -# Hooks -# -# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set -CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y -# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y -# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set -CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y -# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set -# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set -CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set -CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y -# CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set -# end of Hooks - -# CONFIG_LWIP_DEBUG is not set -# end of LWIP - -# -# mbedTLS -# -CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y -# CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC is not set -# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set -# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set -CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y -CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 -CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 -# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set -# CONFIG_MBEDTLS_DEBUG is not set - -# -# mbedTLS v3.x related -# -# CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set -# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set -# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set -# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set -CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y -CONFIG_MBEDTLS_PKCS7_C=y -# end of mbedTLS v3.x related - -# -# Certificate Bundle -# -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set -# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 -# end of Certificate Bundle - -# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set -CONFIG_MBEDTLS_CMAC_C=y -CONFIG_MBEDTLS_HARDWARE_AES=y -CONFIG_MBEDTLS_AES_USE_INTERRUPT=y -CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0 -CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER=y -CONFIG_MBEDTLS_HARDWARE_MPI=y -# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set -CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y -CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0 -CONFIG_MBEDTLS_HARDWARE_SHA=y -CONFIG_MBEDTLS_ROM_MD5=y -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set -CONFIG_MBEDTLS_HAVE_TIME=y -# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set -# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set -CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y -CONFIG_MBEDTLS_SHA1_C=y -CONFIG_MBEDTLS_SHA512_C=y -# CONFIG_MBEDTLS_SHA3_C is not set -CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y -# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set -# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set -# CONFIG_MBEDTLS_TLS_DISABLED is not set -CONFIG_MBEDTLS_TLS_SERVER=y -CONFIG_MBEDTLS_TLS_CLIENT=y -CONFIG_MBEDTLS_TLS_ENABLED=y - -# -# TLS Key Exchange Methods -# -# CONFIG_MBEDTLS_PSK_MODES is not set -CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y -# end of TLS Key Exchange Methods - -CONFIG_MBEDTLS_SSL_RENEGOTIATION=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y -# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set -# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set -CONFIG_MBEDTLS_SSL_ALPN=y -CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y -CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y - -# -# Symmetric Ciphers -# -CONFIG_MBEDTLS_AES_C=y -# CONFIG_MBEDTLS_CAMELLIA_C is not set -# CONFIG_MBEDTLS_DES_C is not set -# CONFIG_MBEDTLS_BLOWFISH_C is not set -# CONFIG_MBEDTLS_XTEA_C is not set -CONFIG_MBEDTLS_CCM_C=y -CONFIG_MBEDTLS_GCM_C=y -# CONFIG_MBEDTLS_NIST_KW_C is not set -# end of Symmetric Ciphers - -# CONFIG_MBEDTLS_RIPEMD160_C is not set - -# -# Certificates -# -CONFIG_MBEDTLS_PEM_PARSE_C=y -CONFIG_MBEDTLS_PEM_WRITE_C=y -CONFIG_MBEDTLS_X509_CRL_PARSE_C=y -CONFIG_MBEDTLS_X509_CSR_PARSE_C=y -# end of Certificates - -CONFIG_MBEDTLS_ECP_C=y -CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=y -CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=y -# CONFIG_MBEDTLS_DHM_C is not set -CONFIG_MBEDTLS_ECDH_C=y -CONFIG_MBEDTLS_ECDSA_C=y -# CONFIG_MBEDTLS_ECJPAKE_C is not set -CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y -CONFIG_MBEDTLS_ECP_NIST_OPTIM=y -CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y -# CONFIG_MBEDTLS_POLY1305_C is not set -# CONFIG_MBEDTLS_CHACHA20_C is not set -# CONFIG_MBEDTLS_HKDF_C is not set -# CONFIG_MBEDTLS_THREADING_C is not set -CONFIG_MBEDTLS_ERROR_STRINGS=y -CONFIG_MBEDTLS_FS_IO=y -# CONFIG_MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION is not set -# end of mbedTLS - -# -# ESP-MQTT Configurations -# -CONFIG_MQTT_PROTOCOL_311=y -# CONFIG_MQTT_PROTOCOL_5 is not set -CONFIG_MQTT_TRANSPORT_SSL=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y -# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set -# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set -# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set -# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set -# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set -# CONFIG_MQTT_CUSTOM_OUTBOX is not set -# end of ESP-MQTT Configurations - -# -# Newlib -# -CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set -CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y -# CONFIG_NEWLIB_NANO_FORMAT is not set -CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y -# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set -# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set -# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set -# end of Newlib - -CONFIG_STDATOMIC_S32C1I_SPIRAM_WORKAROUND=y - -# -# NVS -# -# CONFIG_NVS_ENCRYPTION is not set -# CONFIG_NVS_ASSERT_ERROR_CHECK is not set -# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set -# CONFIG_NVS_ALLOCATE_CACHE_IN_SPIRAM is not set -# end of NVS - -# -# OpenThread -# -# CONFIG_OPENTHREAD_ENABLED is not set - -# -# OpenThread Spinel -# -# CONFIG_OPENTHREAD_SPINEL_ONLY is not set -# end of OpenThread Spinel -# end of OpenThread - -# -# Protocomm -# -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_PATCH_VERSION=y -# end of Protocomm - -# -# PThreads -# -CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_PTHREAD_STACK_MIN=768 -CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y -# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set -# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set -CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" -# end of PThreads - -# -# MMU Config -# -CONFIG_MMU_PAGE_SIZE_64KB=y -CONFIG_MMU_PAGE_MODE="64KB" -CONFIG_MMU_PAGE_SIZE=0x10000 -# end of MMU Config - -# -# Main Flash configuration -# - -# -# SPI Flash behavior when brownout -# -CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y -CONFIG_SPI_FLASH_BROWNOUT_RESET=y -# end of SPI Flash behavior when brownout - -# -# Optional and Experimental Features (READ DOCS FIRST) -# - -# -# Features here require specific hardware (READ DOCS FIRST!) -# -# CONFIG_SPI_FLASH_HPM_ENA is not set -CONFIG_SPI_FLASH_HPM_AUTO=y -# CONFIG_SPI_FLASH_HPM_DIS is not set -CONFIG_SPI_FLASH_HPM_ON=y -CONFIG_SPI_FLASH_HPM_DC_AUTO=y -# CONFIG_SPI_FLASH_HPM_DC_DISABLE is not set -# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set -CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 -# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set -# CONFIG_SPI_FLASH_FORCE_ENABLE_C6_H2_SUSPEND is not set -# end of Optional and Experimental Features (READ DOCS FIRST) -# end of Main Flash configuration - -# -# SPI Flash driver -# -# CONFIG_SPI_FLASH_VERIFY_WRITE is not set -# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set -CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y -# CONFIG_SPI_FLASH_ROM_IMPL is not set -CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set -# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set -CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y -CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 -CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 -CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 -# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set -# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set -# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set - -# -# Auto-detect flash chips -# -CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED=y -CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_MXIC_OPI_CHIP=y -# end of Auto-detect flash chips - -CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y -# end of SPI Flash driver - -# -# SPIFFS Configuration -# -CONFIG_SPIFFS_MAX_PARTITIONS=3 - -# -# SPIFFS Cache Configuration -# -CONFIG_SPIFFS_CACHE=y -CONFIG_SPIFFS_CACHE_WR=y -# CONFIG_SPIFFS_CACHE_STATS is not set -# end of SPIFFS Cache Configuration - -CONFIG_SPIFFS_PAGE_CHECK=y -CONFIG_SPIFFS_GC_MAX_RUNS=10 -# CONFIG_SPIFFS_GC_STATS is not set -CONFIG_SPIFFS_PAGE_SIZE=256 -CONFIG_SPIFFS_OBJ_NAME_LEN=32 -# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set -CONFIG_SPIFFS_USE_MAGIC=y -CONFIG_SPIFFS_USE_MAGIC_LENGTH=y -CONFIG_SPIFFS_META_LENGTH=4 -CONFIG_SPIFFS_USE_MTIME=y - -# -# Debug Configuration -# -# CONFIG_SPIFFS_DBG is not set -# CONFIG_SPIFFS_API_DBG is not set -# CONFIG_SPIFFS_GC_DBG is not set -# CONFIG_SPIFFS_CACHE_DBG is not set -# CONFIG_SPIFFS_CHECK_DBG is not set -# CONFIG_SPIFFS_TEST_VISUALISATION is not set -# end of Debug Configuration -# end of SPIFFS Configuration - -# -# TCP Transport -# - -# -# Websocket -# -CONFIG_WS_TRANSPORT=y -CONFIG_WS_BUFFER_SIZE=1024 -# CONFIG_WS_DYNAMIC_BUFFER is not set -# end of Websocket -# end of TCP Transport - -# -# Ultra Low Power (ULP) Co-processor -# -# CONFIG_ULP_COPROC_ENABLED is not set - -# -# ULP Debugging Options -# -# end of ULP Debugging Options -# end of Ultra Low Power (ULP) Co-processor - -# -# Unity unit testing library -# -CONFIG_UNITY_ENABLE_FLOAT=y -CONFIG_UNITY_ENABLE_DOUBLE=y -# CONFIG_UNITY_ENABLE_64BIT is not set -# CONFIG_UNITY_ENABLE_COLOR is not set -CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y -# CONFIG_UNITY_ENABLE_FIXTURE is not set -# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set -# end of Unity unit testing library - -# -# USB-OTG -# -CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE=256 -CONFIG_USB_HOST_HW_BUFFER_BIAS_BALANCED=y -# CONFIG_USB_HOST_HW_BUFFER_BIAS_IN is not set -# CONFIG_USB_HOST_HW_BUFFER_BIAS_PERIODIC_OUT is not set - -# -# Hub Driver Configuration -# - -# -# Root Port configuration -# -CONFIG_USB_HOST_DEBOUNCE_DELAY_MS=250 -CONFIG_USB_HOST_RESET_HOLD_MS=30 -CONFIG_USB_HOST_RESET_RECOVERY_MS=30 -CONFIG_USB_HOST_SET_ADDR_RECOVERY_MS=10 -# end of Root Port configuration - -# CONFIG_USB_HOST_HUBS_SUPPORTED is not set -# end of Hub Driver Configuration - -# CONFIG_USB_HOST_ENABLE_ENUM_FILTER_CALLBACK is not set -CONFIG_USB_OTG_SUPPORTED=y -# end of USB-OTG - -# -# Virtual file system -# -CONFIG_VFS_SUPPORT_IO=y -CONFIG_VFS_SUPPORT_DIR=y -CONFIG_VFS_SUPPORT_SELECT=y -CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y -# CONFIG_VFS_SELECT_IN_RAM is not set -CONFIG_VFS_SUPPORT_TERMIOS=y -CONFIG_VFS_MAX_COUNT=8 - -# -# Host File System I/O (Semihosting) -# -CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# end of Host File System I/O (Semihosting) - -CONFIG_VFS_INITIALIZE_DEV_NULL=y -# end of Virtual file system - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 -# end of Wear Levelling - -# -# Wi-Fi Provisioning Manager -# -CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 -CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 -CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y -# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set -# end of Wi-Fi Provisioning Manager - -# -# CMake Utilities -# -# CONFIG_CU_RELINKER_ENABLE is not set -# CONFIG_CU_DIAGNOSTICS_COLOR_NEVER is not set -CONFIG_CU_DIAGNOSTICS_COLOR_ALWAYS=y -# CONFIG_CU_DIAGNOSTICS_COLOR_AUTO is not set -# CONFIG_CU_GCC_LTO_ENABLE is not set -# CONFIG_CU_GCC_STRING_1BYTE_ALIGN is not set -# end of CMake Utilities - -# -# Camera configuration -# -# CONFIG_OV7670_SUPPORT is not set -# CONFIG_OV7725_SUPPORT is not set -# CONFIG_NT99141_SUPPORT is not set -CONFIG_OV2640_SUPPORT=y -# CONFIG_OV3660_SUPPORT is not set -CONFIG_OV5640_SUPPORT=y -# CONFIG_GC2145_SUPPORT is not set -# CONFIG_GC032A_SUPPORT is not set -# CONFIG_GC0308_SUPPORT is not set -# CONFIG_BF3005_SUPPORT is not set -# CONFIG_BF20A6_SUPPORT is not set -# CONFIG_SC101IOT_SUPPORT is not set -# CONFIG_SC030IOT_SUPPORT is not set -# CONFIG_SC031GS_SUPPORT is not set -# CONFIG_SCCB_HARDWARE_I2C_PORT0 is not set -CONFIG_SCCB_HARDWARE_I2C_PORT1=y -CONFIG_SCCB_CLK_FREQ=100000 -CONFIG_CAMERA_TASK_STACK_SIZE=30720 -CONFIG_CAMERA_CORE0=y -# CONFIG_CAMERA_CORE1 is not set -# CONFIG_CAMERA_NO_AFFINITY is not set -CONFIG_CAMERA_DMA_BUFFER_SIZE_MAX=32768 -CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE_AUTO=y -# CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE_CUSTOM is not set -# CONFIG_CAMERA_CONVERTER_ENABLED is not set -# CONFIG_LCD_CAM_ISR_IRAM_SAFE is not set -# end of Camera configuration - -# -# mDNS -# -CONFIG_MDNS_MAX_INTERFACES=3 -CONFIG_MDNS_MAX_SERVICES=10 -CONFIG_MDNS_TASK_PRIORITY=1 -CONFIG_MDNS_ACTION_QUEUE_LEN=16 -CONFIG_MDNS_TASK_STACK_SIZE=4096 -# CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set -CONFIG_MDNS_TASK_AFFINITY_CPU0=y -# CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set -CONFIG_MDNS_TASK_AFFINITY=0x0 -CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 -CONFIG_MDNS_TIMER_PERIOD_MS=100 -# CONFIG_MDNS_NETWORKING_SOCKET is not set -# CONFIG_MDNS_SKIP_SUPPRESSING_OWN_QUERIES is not set -# CONFIG_MDNS_ENABLE_DEBUG_PRINTS is not set -CONFIG_MDNS_ENABLE_CONSOLE_CLI=y -# CONFIG_MDNS_RESPOND_REVERSE_QUERIES is not set -CONFIG_MDNS_MULTIPLE_INSTANCE=y - -# -# MDNS Predefined interfaces -# -CONFIG_MDNS_PREDEF_NETIF_STA=y -CONFIG_MDNS_PREDEF_NETIF_AP=y -CONFIG_MDNS_PREDEF_NETIF_ETH=y -# end of MDNS Predefined interfaces -# end of mDNS - -# -# USB Device UVC -# -CONFIG_TUSB_VID=0x303A -CONFIG_TUSB_PID=0x8000 -CONFIG_TUSB_MANUFACTURER="ETVR" -CONFIG_TUSB_PRODUCT="OpenIris Camera" -CONFIG_TUSB_SERIAL_NUM="12345678" -# CONFIG_UVC_SUPPORT_TWO_CAM is not set - -# -# USB Cam1 Config -# -CONFIG_FORMAT_MJPEG_CAM1=y -# CONFIG_FORMAT_H264_CAM1 is not set -# CONFIG_FORMAT_UNCOMPR_CAM1 is not set -# CONFIG_UVC_MODE_ISOC_CAM1 is not set -CONFIG_UVC_MODE_BULK_CAM1=y -CONFIG_FRAMESIZE_QVGA=y -# CONFIG_FRAMESIZE_HVGA is not set -# CONFIG_FRAMESIZE_VGA is not set -# CONFIG_FRAMESIZE_SVGA is not set -# CONFIG_FRAMESIZE_HD is not set -# CONFIG_FRAMESIZE_FHD is not set -CONFIG_UVC_CAM1_FRAMERATE=90 -CONFIG_UVC_CAM1_FRAMESIZE_WIDTH=240 -CONFIG_UVC_CAM1_FRAMESIZE_HEIGT=240 -CONFIG_UVC_CAM1_MULTI_FRAMESIZE=y -# end of USB Cam1 Config - -# -# UVC_MULTI_FRAME_CONFIG -# - -# -# FRAME_SIZE_1 -# -CONFIG_UVC_MULTI_FRAME_WIDTH_1=240 -CONFIG_UVC_MULTI_FRAME_HEIGHT_1=240 -CONFIG_UVC_MULTI_FRAME_FPS_1=60 -# end of FRAME_SIZE_1 - -# -# FRAME_SIZE_2 -# -CONFIG_UVC_MULTI_FRAME_WIDTH_2=240 -CONFIG_UVC_MULTI_FRAME_HEIGHT_2=240 -CONFIG_UVC_MULTI_FRAME_FPS_2=60 -# end of FRAME_SIZE_2 - -# -# FRAME_SIZE_3 -# -CONFIG_UVC_MULTI_FRAME_WIDTH_3=240 -CONFIG_UVC_MULTI_FRAME_HEIGHT_3=240 -CONFIG_UVC_MULTI_FRAME_FPS_3=60 -# end of FRAME_SIZE_3 -# end of UVC_MULTI_FRAME_CONFIG - -# -# UVC Task Config -# -CONFIG_UVC_TINYUSB_TASK_PRIORITY=4 -CONFIG_UVC_TINYUSB_TASK_CORE=-1 -CONFIG_UVC_CAM1_TASK_PRIORITY=3 -CONFIG_UVC_CAM1_TASK_CORE=-1 -# end of UVC Task Config -# end of USB Device UVC -# end of Component config - -# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set - -# Deprecated options for backward compatibility -# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set -# CONFIG_NO_BLOBS is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set -CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y -# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set -CONFIG_LOG_BOOTLOADER_LEVEL=3 -# CONFIG_APP_ROLLBACK_ENABLE is not set -# CONFIG_FLASH_ENCRYPTION_ENABLED is not set -CONFIG_FLASHMODE_QIO=y -# CONFIG_FLASHMODE_QOUT is not set -# CONFIG_FLASHMODE_DIO is not set -# CONFIG_FLASHMODE_DOUT is not set -CONFIG_MONITOR_BAUD=115200 -# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set -# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set -# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set -CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y -# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set -CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 -# CONFIG_CXX_EXCEPTIONS is not set -CONFIG_STACK_CHECK_NONE=y -# CONFIG_STACK_CHECK_NORM is not set -# CONFIG_STACK_CHECK_STRONG is not set -# CONFIG_STACK_CHECK_ALL is not set -# CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set -CONFIG_ESP32_APPTRACE_DEST_NONE=y -CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y -# CONFIG_EXTERNAL_COEX_ENABLE is not set -# CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set -# CONFIG_MCPWM_ISR_IN_IRAM is not set -# CONFIG_EVENT_LOOP_PROFILING is not set -CONFIG_POST_EVENTS_FROM_ISR=y -CONFIG_POST_EVENTS_FROM_IRAM_ISR=y -CONFIG_GDBSTUB_SUPPORT_TASKS=y -CONFIG_GDBSTUB_MAX_TASKS=32 -# CONFIG_OTA_ALLOW_HTTP is not set -CONFIG_ESP32S3_DEEP_SLEEP_WAKEUP_DELAY=2000 -CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 -CONFIG_ESP32S3_RTC_CLK_SRC_INT_RC=y -# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_ESP32S3_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_ESP32S3_RTC_CLK_CAL_CYCLES=1024 -CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP32_PHY_MAX_TX_POWER=20 -# CONFIG_REDUCE_PHY_TX_POWER is not set -# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set -CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y -CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP=y -CONFIG_ESP32S3_SPIRAM_SUPPORT=y -CONFIG_DEFAULT_PSRAM_CLK_IO=30 -CONFIG_DEFAULT_PSRAM_CS_IO=26 -# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80 is not set -# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set -CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y -CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=240 -CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_MAIN_TASK_STACK_SIZE=3584 -CONFIG_CONSOLE_UART_DEFAULT=y -# CONFIG_CONSOLE_UART_CUSTOM is not set -# CONFIG_CONSOLE_UART_NONE is not set -# CONFIG_ESP_CONSOLE_UART_NONE is not set -CONFIG_CONSOLE_UART=y -CONFIG_CONSOLE_UART_NUM=0 -CONFIG_CONSOLE_UART_BAUDRATE=115200 -CONFIG_INT_WDT=y -CONFIG_INT_WDT_TIMEOUT_MS=300 -CONFIG_INT_WDT_CHECK_CPU1=y -CONFIG_TASK_WDT=y -CONFIG_ESP_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=5 -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP32S3_DEBUG_OCDAWARE=y -CONFIG_BROWNOUT_DET=y -CONFIG_ESP32S3_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_7=y -CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_1 is not set -CONFIG_BROWNOUT_DET_LVL=7 -CONFIG_ESP32S3_BROWNOUT_DET_LVL=7 -CONFIG_IPC_TASK_STACK_SIZE=1280 -CONFIG_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP32_WIFI_ENABLED=y -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y -# CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER is not set -CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 -CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16 -# CONFIG_ESP32_WIFI_CSI_ENABLED is not set -CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=6 -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=6 -CONFIG_ESP32_WIFI_NVS_ENABLED=y -CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y -# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set -CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP32_WIFI_IRAM_OPT=y -CONFIG_ESP32_WIFI_RX_IRAM_OPT=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y -CONFIG_WPA_MBEDTLS_CRYPTO=y -CONFIG_WPA_MBEDTLS_TLS_CLIENT=y -# CONFIG_WPA_WAPI_PSK is not set -# CONFIG_WPA_SUITE_B_192 is not set -# CONFIG_WPA_11KV_SUPPORT is not set -# CONFIG_WPA_MBO_SUPPORT is not set -# CONFIG_WPA_DPP_SUPPORT is not set -# CONFIG_WPA_11R_SUPPORT is not set -# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set -# CONFIG_WPA_WPS_STRICT is not set -# CONFIG_WPA_DEBUG_PRINT is not set -# CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set -CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y -CONFIG_TIMER_TASK_PRIORITY=1 -CONFIG_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_TIMER_QUEUE_LENGTH=10 -# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y -# CONFIG_HAL_ASSERTION_SILIENT is not set -# CONFIG_L2_TO_L3_COPY is not set -CONFIG_ESP_GRATUITOUS_ARP=y -CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=32 -CONFIG_TCP_MAXRTX=12 -CONFIG_TCP_SYNMAXRTX=12 -CONFIG_TCP_MSS=1440 -CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=5760 -CONFIG_TCP_WND_DEFAULT=5760 -CONFIG_TCP_RECVMBOX_SIZE=6 -CONFIG_TCP_QUEUE_OOSEQ=y -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set -CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set -CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_PPP_SUPPORT is not set -CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_SYSTIMER=y -CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_FRC1=y -# CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC is not set -# CONFIG_ESP32S3_TIME_SYSCALL_USE_SYSTIMER is not set -# CONFIG_ESP32S3_TIME_SYSCALL_USE_FRC1 is not set -# CONFIG_ESP32S3_TIME_SYSCALL_USE_NONE is not set -CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_ESP32_PTHREAD_STACK_MIN=768 -CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set -CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" -CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set -CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y -CONFIG_SUPPORT_TERMIOS=y -CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# End of deprecated options diff --git a/tools/openiris_setup.py b/tools/openiris_setup.py index 30b6ff8..403267c 100644 --- a/tools/openiris_setup.py +++ b/tools/openiris_setup.py @@ -378,7 +378,7 @@ class OpenIrisDevice: return True def switch_mode(self, mode: str) -> bool: - """Switch device mode between WiFi, UVC, and Auto""" + """Switch device mode between WiFi, UVC, and Setup""" print(f"🔄 Switching device mode to '{mode}'...") params = {"mode": mode} @@ -707,11 +707,9 @@ def configure_wifi(device: OpenIrisDevice, args = None): def configure_mdns(device: OpenIrisDevice, args = None): current_name = device.get_mdns_name() - print(f"\n📍 Current device name: {current_name} \n") - print("💡 Please enter your preferred device name, your board will be accessible under http://.local/") - print("💡 Please avoid spaces and special characters") - print(" To back out, enter `back`") - print("\n Note, this will also modify the name of the UVC device") + print(f"\n📍 Current advertised name: {current_name} \n") + print("💡 This single name is used for both: mDNS (http://.local/) and USB UVC device descriptor.") + print("💡 Avoid spaces / special chars. Enter 'back' to cancel.") while True: name_choice = input("\nDevice name: ").strip() @@ -906,7 +904,7 @@ def switch_device_mode(device: OpenIrisDevice, args = None): print("\n🔄 Select new device mode:") print("1. WiFi - Stream over WiFi connection") print("2. UVC - Stream as USB webcam") - print("3. Auto - Automatic mode selection") + print("3. Setup - Configuration mode") mode_choice = input("\nSelect mode (1-3): ").strip() @@ -915,7 +913,7 @@ def switch_device_mode(device: OpenIrisDevice, args = None): elif mode_choice == "2": device.switch_mode("uvc") elif mode_choice == "3": - device.switch_mode("auto") + device.switch_mode("setup") else: print("❌ Invalid mode selection") @@ -975,11 +973,49 @@ def _probe_serial(device: OpenIrisDevice) -> Dict: serial, mac = info return {"serial": serial, "mac": mac} +def _probe_info(device: OpenIrisDevice) -> Dict: + resp = device.send_command("get_who_am_i") + if "error" in resp: + return {"who_am_i": None, "version": None, "error": resp["error"]} + try: + results = resp.get("results", []) + if results: + result_data = json.loads(results[0]) + payload = result_data["result"] + if isinstance(payload, str): + payload = json.loads(payload) + return {"who_am_i": payload.get("who_am_i"), "version": payload.get("version")} + except Exception as e: + return {"who_am_i": None, "version": None, "error": str(e)} + return {"who_am_i": None, "version": None} + +def _probe_advertised_name(device: OpenIrisDevice) -> Dict: + # Currently the advertised name == mdns hostname + name = device.get_mdns_name() + return {"advertised_name": name} + def _probe_led_pwm(device: OpenIrisDevice) -> Dict: duty = device.get_led_duty_cycle() return {"led_external_pwm_duty_cycle": duty} +def _probe_led_current(device: OpenIrisDevice) -> Dict: + # Query device for current in mA via new command + resp = device.send_command("get_led_current") + if "error" in resp: + return {"led_current_ma": None, "error": resp["error"]} + try: + results = resp.get("results", []) + if results: + result_data = json.loads(results[0]) + payload = result_data["result"] + if isinstance(payload, str): + payload = json.loads(payload) + return {"led_current_ma": float(payload.get("led_current_ma"))} + except Exception as e: + return {"led_current_ma": None, "error": str(e)} + return {"led_current_ma": None} + def _probe_mode(device: OpenIrisDevice) -> Dict: mode = device.get_device_mode() @@ -997,7 +1033,10 @@ def get_settings(device: OpenIrisDevice, args=None): probes = [ ("Identity", _probe_serial), + ("AdvertisedName", _probe_advertised_name), + ("Info", _probe_info), ("LED", _probe_led_pwm), + ("Current", _probe_led_current), ("Mode", _probe_mode), ("WiFi", _probe_wifi_status), ] @@ -1023,6 +1062,20 @@ def get_settings(device: OpenIrisDevice, args=None): if not serial and not mac: print("🔑 Serial/MAC: unavailable") + # Advertised Name + advertised_name_data = summary.get("AdvertisedName", {}) + if advertised_name := advertised_name_data.get("advertised_name"): + print(f"📛 Name: {advertised_name}") + + # Info + info = summary.get("Info", {}) + who = info.get("who_am_i") + ver = info.get("version") + if who: + print(f"🏷️ Device: {who}") + if ver: + print(f"🧭 Version: {ver}") + # LED led = summary.get("LED", {}) duty = led.get("led_external_pwm_duty_cycle") @@ -1035,6 +1088,16 @@ def get_settings(device: OpenIrisDevice, args=None): mode = summary.get("Mode", {}).get("mode") print(f"🎚️ Mode: {mode if mode else 'unknown'}") + # Current + current_section = summary.get("Current", {}) + if (led_current_ma := current_section.get("led_current_ma")) is not None: + print(f"🔌 LED Current: {led_current_ma:.3f} mA") + else: + if (err := current_section.get("error")): + print(f"🔌 LED Current: unavailable ({err})") + else: + print("🔌 LED Current: unavailable") + # WiFi wifi = summary.get("WiFi", {}).get("wifi_status", {}) if wifi: @@ -1051,12 +1114,11 @@ def get_settings(device: OpenIrisDevice, args=None): COMMANDS_MAP = { "1": wifi_menu, "2": configure_mdns, - "3": configure_mdns, - "4": start_streaming, - "5": switch_device_mode, - "6": set_led_duty_cycle, - "7": monitor_logs, - "8": get_settings, + "3": start_streaming, + "4": switch_device_mode, + "5": set_led_duty_cycle, + "6": monitor_logs, + "7": get_settings, } @@ -1146,15 +1208,14 @@ def main(): while True: print("\n🔧 Setup Options:") print(f"{str(1):>2} 📶 WiFi settings") - print(f"{str(2):>2} 🌐 Configure MDNS") - print(f"{str(3):>2} 💻 Configure UVC Name") - print(f"{str(4):>2} 🚀 Start streaming mode") - print(f"{str(5):>2} 🔄 Switch device mode (WiFi/UVC/Auto)") - print(f"{str(6):>2} 💡 Update PWM Duty Cycle") - print(f"{str(7):>2} 📖 Monitor logs") - print(f"{str(8):>2} 🧩 Get settings summary") + print(f"{str(2):>2} 📛 Configure advertised name (mDNS + UVC)") + print(f"{str(3):>2} 🚀 Start streaming mode") + print(f"{str(4):>2} 🔄 Switch device mode (WiFi/UVC/Setup)") + print(f"{str(5):>2} 💡 Update PWM Duty Cycle") + print(f"{str(6):>2} 📖 Monitor logs") + print(f"{str(7):>2} 🧩 Get settings summary") print("exit 🚪 Exit") - choice = input("\nSelect option (1-8): ").strip() + choice = input("\nSelect option (1-7): ").strip() if choice == "exit": break diff --git a/tools/switchBoardType.py b/tools/switchBoardType.py index 997650c..0ff17f6 100644 --- a/tools/switchBoardType.py +++ b/tools/switchBoardType.py @@ -1,5 +1,7 @@ import os +import difflib import argparse +from typing import Dict, Optional, List HEADER_COLOR = "\033[95m" OKGREEN = '\033[92m' @@ -7,38 +9,112 @@ WARNING = '\033[93m' OKBLUE = '\033[94m' ENDC = '\033[0m' -sdkconfig_defaults = "sdkconfig.base_defaults" -supported_boards = [ - "xiao-esp32s3", - "project_babble", - "facefocusvr_face", - "facefocusvr_eye" -] - -parser = argparse.ArgumentParser() -parser.add_argument("-b", "--board", help="Board to switch to", choices=supported_boards) -parser.add_argument("--dry-run", help="Dry run, won't modify files", action="store_true", required=False) -parser.add_argument("--diff", help="Show the difference between base config and selected board", action="store_true", required=False) -parser.add_argument("--ssid", help="Set the SSID for the selected board", required=False, type=str, default="") -parser.add_argument("--password", help="Set the password For the provided network", required=False, type=str, default="") -parser.add_argument("--clear-wifi", help="Should we clear the wifi details", action="store_true", required=False) -args = parser.parse_args() - +BOARDS_DIR_NAME = "boards" +SDKCONFIG_DEFAULTS_FILENAME = "sdkconfig.base_defaults" def get_root_path() -> str: return os.path.split(os.path.dirname(os.path.realpath(__file__)))[0] +def get_boards_root() -> str: + return os.path.join(get_root_path(), BOARDS_DIR_NAME) + + +def enumerate_board_configs() -> Dict[str, str]: + """Walk the boards directory and build a mapping of board names to absolute file paths. + + Naming strategy: + - Relative path from boards/ to file with path separators replaced by '_'. + - If the last two path segments are identical (e.g. project_babble/project_babble) collapse to a single segment. + - For facefocusvr eye boards we keep eye_L / eye_R suffix to distinguish configs even though WHO_AM_I is same. + """ + boards_dir = get_boards_root() + mapping: Dict[str, str] = {} + if not os.path.isdir(boards_dir): + return mapping + for root, _dirs, files in os.walk(boards_dir): + for f in files: + if f == SDKCONFIG_DEFAULTS_FILENAME: + continue + rel_path = os.path.relpath(os.path.join(root, f), boards_dir) + parts = rel_path.split(os.sep) + if len(parts) >= 2 and parts[-1] == parts[-2]: # collapse duplicate tail + parts = parts[:-1] + board_key = "_".join(parts) + mapping[board_key] = os.path.join(root, f) + return mapping + + +BOARD_CONFIGS = enumerate_board_configs() + +def build_arg_parser() -> argparse.ArgumentParser: + p = argparse.ArgumentParser() + p.add_argument("-b", "--board", help="Board name (run with --list to see options). Flexible: accepts path-like or partial if unique.") + p.add_argument("--list", help="List discovered boards and exit", action="store_true") + p.add_argument("--dry-run", help="Dry run, won't modify files", action="store_true") + p.add_argument("--diff", help="Show the difference between base config and selected board", action="store_true") + p.add_argument("--ssid", help="Set the WiFi SSID", type=str, default="") + p.add_argument("--password", help="Set the WiFi password", type=str, default="") + p.add_argument("--clear-wifi", help="Clear WiFi credentials", action="store_true") + return p + +def list_boards(): + print("Discovered boards:") + width = max((len(k) for k in BOARD_CONFIGS), default=0) + for name, path in sorted(BOARD_CONFIGS.items()): + print(f" {name.ljust(width)} -> {os.path.relpath(path, get_root_path())}") + +def _suggest_boards(partial: str) -> List[str]: + if not partial: + return [] + partial_low = partial.lower() + contains = [b for b in BOARD_CONFIGS if partial_low in b.lower()] + if contains: + return contains[:10] + # fallback to fuzzy matching using difflib + choices = list(BOARD_CONFIGS.keys()) + return difflib.get_close_matches(partial, choices, n=5, cutoff=0.4) + +def normalize_board_name(raw: Optional[str]) -> Optional[str]: + if raw is None: + return None + candidate = raw.strip() + if not candidate: + return None + candidate = candidate.replace('\\', '/').rstrip('/') + # strip leading folders like tools/, boards/ + parts = [p for p in candidate.split('/') if p not in ('.', '') and p not in ('tools', 'boards')] + if parts: + candidate = parts[-1] if len(parts) == 1 else "_".join(parts) + candidate = candidate.replace('-', '_') + # exact match + if candidate in BOARD_CONFIGS: + return candidate + # try ending match + endings = [b for b in BOARD_CONFIGS if b.endswith(candidate)] + if len(endings) == 1: + return endings[0] + if len(endings) > 1: + print(f"Ambiguous board '{raw}'. Could be: {', '.join(endings)}") + return None + # attempt case-insensitive + lower_map = {b.lower(): b for b in BOARD_CONFIGS} + if candidate.lower() in lower_map: + return lower_map[candidate.lower()] + return None + + def get_main_config_path() -> str: return os.path.join(get_root_path(), "sdkconfig") -def get_board_config_path() -> str: - return os.path.join(get_root_path(), f"sdkconfig.board.{args.board}") +def get_board_config_path(board_key: str) -> str: + return BOARD_CONFIGS[board_key] def get_base_config_path() -> str: - return os.path.join(get_root_path(), sdkconfig_defaults) + # base defaults moved under boards directory + return os.path.join(get_boards_root(), SDKCONFIG_DEFAULTS_FILENAME) def parse_config(config_file) -> dict: @@ -53,15 +129,17 @@ def parse_config(config_file) -> dict: return config -def handle_wifi_config(_new_config: dict, _main_config: dict) -> dict: - if args.ssid: - _new_config["CONFIG_WIFI_SSID"] = f"\"{args.ssid}\"" - _new_config["CONFIG_WIFI_PASSWORD"] = f"\"{args.password}\"" +def handle_wifi_config(_new_config: dict, _main_config: dict, _args) -> dict: + if _args.ssid: + _new_config["CONFIG_WIFI_SSID"] = f"\"{_args.ssid}\"" + _new_config["CONFIG_WIFI_PASSWORD"] = f"\"{_args.password}\"" else: - _new_config["CONFIG_WIFI_SSID"] = _main_config["CONFIG_WIFI_SSID"] - _new_config["CONFIG_WIFI_PASSWORD"] = _main_config["CONFIG_WIFI_PASSWORD"] + if "CONFIG_WIFI_SSID" in _main_config: + _new_config["CONFIG_WIFI_SSID"] = _main_config["CONFIG_WIFI_SSID"] + if "CONFIG_WIFI_PASSWORD" in _main_config: + _new_config["CONFIG_WIFI_PASSWORD"] = _main_config["CONFIG_WIFI_PASSWORD"] - if args.clear_wifi: + if _args.clear_wifi: _new_config["CONFIG_WIFI_SSID"] = "\"\"" _new_config["CONFIG_WIFI_PASSWORD"] = "\"\"" return _new_config @@ -79,51 +157,65 @@ def compute_diff(_parsed_base_config: dict, _parsed_board_config: dict) -> dict: return _diff -print(f"{OKGREEN}Switching configuration to board:{ENDC} {OKBLUE}{args.board}{ENDC}") -print(f"{OKGREEN}Using defaults from :{ENDC} {get_base_config_path()}", ) -print(f"{OKGREEN}Using board config from :{ENDC} {get_board_config_path()}") +def main(): + parser = build_arg_parser() + args = parser.parse_args() -main_config = open(get_main_config_path(), "r+") -parsed_main_config = parse_config(main_config) -main_config.close() + if args.list: + list_boards() + return -base_config = open(get_base_config_path(), "r") -board_config = open(get_board_config_path(), "r") + board_input = args.board + if not board_input: + parser.error("--board is required (or use --list)") + normalized = normalize_board_name(board_input) + if not normalized: + print(f"{WARNING}Unknown board '{board_input}'.") + suggestions = _suggest_boards(board_input) + if suggestions: + print("Did you mean: " + ", ".join(suggestions)) + print("Use --list to see all boards.") + raise SystemExit(2) -parsed_base_config = parse_config(base_config) -parsed_board_config = parse_config(board_config) + if not os.path.isfile(get_base_config_path()): + raise SystemExit(f"Base defaults file not found: {get_base_config_path()}") -base_config.close() -board_config.close() + print(f"{OKGREEN}Switching configuration to board:{ENDC} {OKBLUE}{normalized}{ENDC}") + print(f"{OKGREEN}Using defaults from :{ENDC} {get_base_config_path()}") + print(f"{OKGREEN}Using board config from :{ENDC} {get_board_config_path(normalized)}") -new_board_config = {**parsed_base_config, **parsed_board_config} -new_board_config = handle_wifi_config(new_board_config, parsed_main_config) + with open(get_main_config_path(), "r+") as main_config: + parsed_main_config = parse_config(main_config) -if args.diff: - print("---"*5, f"{WARNING}DIFF{ENDC}", "---"*5) - diff = compute_diff(parsed_main_config, new_board_config) - if not diff: - print(f"{HEADER_COLOR}[DIFF]{ENDC} Nothing has changed between the base config and {OKBLUE}{args.board}{ENDC} config") + with open(get_base_config_path(), "r") as base_config, open(get_board_config_path(normalized), "r") as board_config: + parsed_base_config = parse_config(base_config) + parsed_board_config = parse_config(board_config) + + new_board_config = {**parsed_base_config, **parsed_board_config} + new_board_config = handle_wifi_config(new_board_config, parsed_main_config, args) + + if args.diff: + print("---"*5, f"{WARNING}DIFF{ENDC}", "---"*5) + diff = compute_diff(parsed_main_config, new_board_config) + if not diff: + print(f"{HEADER_COLOR}[DIFF]{ENDC} No changes between existing main config and {OKBLUE}{normalized}{ENDC}") + else: + print(f"{HEADER_COLOR}[DIFF]{ENDC} Keys differing (main -> new {OKBLUE}{normalized}{ENDC}):") + for key in sorted(diff): + print(f"{HEADER_COLOR}[DIFF]{ENDC} {key} : {diff[key]}") + print("---"*14) + + if not args.dry_run: + print(f"{WARNING}Writing changes to main config file{ENDC}") + with open(get_main_config_path(), "w") as main_config: + for key, value in new_board_config.items(): + if value: + main_config.write(f"{key}={value}\n") + else: + main_config.write(f"{key}\n") else: - print(f"{HEADER_COLOR}[DIFF]{ENDC} The following keys have changed between the base config and {OKBLUE}{args.board}{ENDC} config:") - for key in diff: - print(f"{HEADER_COLOR}[DIFF]{ENDC} {key} : {diff[key]}") - print("---"*14) + print(f"{WARNING}[DRY-RUN]{ENDC} Skipping writing to files") + print(f"{OKGREEN}Done. ESP-IDF is setup to build for:{ENDC} {OKBLUE}{normalized}{ENDC}") -if not args.dry_run: - # the main idea is to always replace the main config with the base config - # and then add the board config on top of that, overriding where necessary. - # This way we can have known working defaults safe from accidental modifications by espidf - # with know working per-board config - # and a still modifiable sdkconfig for espidf - - print(f"{WARNING}Writing changes to main config file{ENDC}") - with open(get_main_config_path(), "w") as main_config: - for key, value in new_board_config.items(): - if value: - main_config.write(f"{key}={value}\n") - else: - main_config.write(f"{key}\n") -else: - print(f"{WARNING}[DRY-RUN]{ENDC} Skipping writing to files") -print(f"{OKGREEN}Done. ESP-IDF is setup to build for:{ENDC} {OKBLUE}{args.board}{ENDC}") +if __name__ == "__main__": # pragma: no cover + main() \ No newline at end of file