Files
desklock/firmware/components/esp_hosted/CHANGELOG.md
T
jpmschweitzerandClaude Fable 5 cb5826e02b
Test, Build and Push / test-gateway (push) Successful in 12s
Test, Build and Push / release (push) Skipped
Test, Build and Push / build-gateway (push) Skipped
Fork fix: the SDIO wedge is FIXED (esp-hosted-mcu #167)
Root cause (verified against our exact IDF tree, not the community guess):
the "258" in "sdio_write_task: Failed to send data: 258" is NOT a timeout
(that is 263). 258 = 0x102 = ESP_ERR_INVALID_ARG. On the ESP32-P4, block-
mode CMD53 writes require the SOURCE buffer to be 64-byte (cache-line)
aligned; the IDF sdmmc driver rejects a misaligned source with INVALID_ARG
BEFORE any bus activity. esp_hosts write loop then declares "Unrecoverable
host sdio state" and reboots the whole P4. The audio TX payload is not
64-aligned, so streaming mic audio wedged on the very FIRST frame (which is
exactly what we saw: listening -> instant Failed to send -> reboot).

This also explains why buffer/queue/clock/retry tuning all did nothing: the
write never reached the bus. And why our symptom was instant, not after
~100 writes (the community block-mode-desync theory) — it is the first
misaligned buffer, every time.

Fix: vendored esp_hosted 2.12.11 as an editable local component (overrides
the registry copy) and bounce a misaligned TX payload through one aligned
DMA scratch buffer in hosted_sdio_write_block (port_esp_hosted_host_sdio.c).
TX is serialized by the bus lock so a single static bounce buffer is safe;
freed in hosted_sdio_deinit. Host-only change — no C6 reflash.

VERIFIED ON HARDWARE (autonomous self-test): 40s of continuous mic-audio
upstream streaming — the traffic that previously wedged on the first frame
— ran clean, zero timeouts, zero reboots. A guarded SDIO_TX_SELFTEST harness
is kept (compiled out) for future SDIO stress testing.

Credit: root cause + patch designed via multi-agent investigation; the
precise 258=INVALID_ARG decode (correcting the upstream community timeout
assumption) came from checking our actual esp_err.h.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 09:50:27 +02:00

817 lines
27 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Unreleased - Main Branch
# Releases
# $${\color{green} \text{2.12.11}}$$
- fixed SDIO deinit tearing down the shared SDMMC host (broke a co-existing SD card on the other slot)
- fixed public headers failing to build under `-Werror=undef` (e.g. Matter/external host consumers)
# $${\color{green} \text{2.12.10}}$$
- added `esp_wifi_disable_pmf_config()` support (host ↔ co-processor RPC); previously returned `ESP_ERR_NOT_SUPPORTED`
- fixed SDIO RX heap corruption on transport deinit and hardened RX buffer allocation
# $${\color{green} \text{2.12.9}}$$
- added gpios for `ESP32_P4X_C5_Function_EV_Board V2.0`
- fix build break for IDF v6 when enable power save (API renamed)
- update Kconfig to check for config `SOC_GPIO_SUPPORT_HP_PERIPH_PD_SLEEP_WAKEUP` introduced in IDF v6
- fixed bug causing a crash in SPI-HD interface with IDF v6.1 due to new uninitialised member in `spi_bus_config_t`
- reduced default number of buffers for SPI-HD and SPI-FD to resolve memory issues
- Zigbee:
- added support for Zigbee
- added Home Automation thermostat on a Zigbee Coordinator example
- added support for SPI-HD 1-bit mode (SPI 3-wire interface)
- **NOTE**: SPI-HD 1-bit mode is only supported on ESP-IDF v6.1 and above and requires [git Commit bf10423](https://github.com/espressif/esp-idf/commit/bf10423a5b01888b33ab1f4e45ef5a880eed69e6)
- updated `_h_get_semaphore` and `_h_lock_mutex` to use milliseconds instead of seconds as a timeout parameter
- added `_h_thread_yield` for use by threads to request a context switch
# $${\color{green} \text{2.12.8}}$$
- SDIO: added `ESP_HOSTED_MEMPOOL_PREFER_SPIRAM` to allocate transport buffers from PSRAM (e.g. ESP32-P4), saving internal RAM; off by default
- OS APIs: `_h_get_semaphore` and `_h_lock_mutex` now take timeout in milliseconds (was seconds)
- added `_h_thread_yield` for threads to request a context switch
# $${\color{green} \text{2.12.7}}$$
- OpenThread: added OpenThread over dedicated UART support
- co-processor is the OpenThead RCP (Radio Co-Processor)
- added host examples: `host_openthread_border_router`, `host_openthread_cli`
- Common Mempool: fixed build error on ESP-IDF v6.x when using PicolibC with `CONFIG_LIBC_PICOLIBC_NEWLIB_COMPATIBILITY` disabled
- Host: removed Unicode encoded characters in cmake file to prevent Windows build failure
# $${\color{green} \text{2.12.6}}$$
## Bug Fixes
- make `TAG` in `mempool.c` static to avoid link-time clash with other components (#187)
# $${\color{green} \text{2.12.5}}$$
## Features
### External Coexistence: allow with BT on advanced coex chips
- Aligned Kconfig with IDF change that relaxes `ESP_COEX_EXTERNAL_COEXIST_ENABLE` dependency
- On chips with `SOC_EXTERNAL_COEX_ADVANCE`, external coexistence now works alongside BT controller
- Updated compile-time checks in `slave_ext_coex.h` to match (includes `soc/soc_caps.h`)
## Bug Fixes
- fixed CI to allow building ESP32 co-processor with ESP-IDF v5.5 for SPI-FD and UART transports: was running out of IRAM space
- fixed CI build failure when building co-processor with ESP-IDF release/v5.3
- added more ESP-IDF releases to CI for testing
### OTA: fix image size calculation for partition-based OTA
- Add 16-byte alignment padding before SHA256 hash in image size parser
- Previously sent 15 fewer bytes than actual image, causing hash mismatch
# $${\color{green} \text{2.12.4}}$$
## Bug Fixes
- fix build break on co-processor if using SPI-HD interface with 2 data lines
## Features
### Custom RPC callbacks: support user context pointer
- Allows passing per-callback context without global state
- User pointer is returned as-is on every invocation
##### API Changes
- `esp_hosted_register_custom_callback`
```c
// Old
esp_err_t esp_hosted_register_custom_callback(
uint32_t msg_id,
void (*callback)(uint32_t msg_id, const uint8_t *data, size_t data_len));
// New
esp_err_t esp_hosted_register_custom_callback(
uint32_t msg_id,
void (*callback)(uint32_t msg_id, const uint8_t *data, size_t data_len, void *user),
void *user);
```
### Others
- used common mempool code for both Host and Co-processor
- made ESP-Hosted mempool code private to fix build break
- added parameter checking for RPC calls
## Bug Fixes
- Host: added NULL or validation checks for exposed user APIs
# $${\color{green} \text{2.12.3}}$$
## Bug Fixes
- Fixed `esp_wifi_scan_get_ap_records` to set the actual AP number this API returns
# $${\color{green} \text{2.12.2}}$$
## Bug Fixes
- Add slave target strings to `Kconfig` (required by Arduino build)
## Features
- Add api to get the co-processor name and chip id to identify the co-processor
- API Added
- `esp_hosted_get_cp_info`
- Updated `examples/host_bt_controller_mac_addr` to request this information
- Extended RPC for GetCoprocessorFwVersion to include the co-processor name and chip id
# $${\color{green} \text{2.12.1}}$$
## Features
### Allow disabling Wi-Fi and/or Bluetooth
- Added Co-processor option to disable Wi-Fi support (for Bluetooth-only support)
- Re-organised co-processor code: moved Wi-Fi, Wi-Fi Enterprise and Network Split code into individual files
- Added initial support for ESP32-H4 as co-processor
- only works with UART interface as ESP-Hosted Transport. SPI to be enabled later.
- Bluetooth not yet enabled in ESP-IDF
### Co-processor: External Coexistence
- Add support to manage co-processor external Wi-Fi coexistence from the host.
- APIs Added
- `esp_hosted_cp_ext_coex_set_work_mode`
- `esp_hosted_cp_ext_coex_set_gpio_pin`
- `esp_hosted_cp_ext_coex_set_grant_delay`
- `esp_hosted_cp_ext_coex_set_validate_high`
- `esp_hosted_cp_ext_coex_disable`
- Host Example Added
- examples/host_manage_copro_ext_coex
- Documentation
- examples/host_manage_copro_ext_coex/README.md
- Config
- Host
- ESP_HOSTED_CP_EXT_COEX
- ESP_HOSTED_CP_EXT_COEX_ADVANCE
- Slave
- ESP_HOSTED_CP_EXT_COEX
### Other Features
- Added support for Bluetooth-only Co-processors (like ESP32-H2)
- Allow ESP-Hosted component to be manually disabled through idf menuconfig
## Bug Fixes
- ESP Slave FW validation fails because OTA image validation depends on non-existent IDF 6.0+ APIs (GitHub ##165)
# $${\color{cyan} \text{2.12.0}}$$
## Features
- Checked incoming image validity during OTA update
- done for ESP-IDF v6.1.0 or greater
- Wi-Fi APIs
- `esp_wifi_set_scan_parameters()`
- `esp_wifi_get_scan_parameters()`
- Allow slave OTA only if correct SPI Flash Mode
## Bug Fixes
- Assert if slave uses SDIO streaming and host as SDIO packet mode
- Guard `esp_hosted_coprocessor.h`, `host_power_save.h`, `interface.h` for cplusplus inclusion
- Replace assert with graceful error on mempool alloc failure
- Building with and without bt enabled
- Disable auto connect upon sta mode started
- Add `esp_eap_client_set_eap_methods()` as `weak` in `esp_wifi_weak.c`
## Config
- Added ESP32-P4-Eye board GPIOs at slave and host Kconfig
- Fix host wakeup GPIO config
# $${\color{green} \text{2.11.7}}$$
## Features
- Added Co-processor Memory Monitor: sets up a heap memory monitor on the co-processor that periodically checks the amount of heap memory remaining. Co-processor sends memory info events to the host at periodic intervals or when heap memory falls below memory thresholds set by the host.
- Added `examples/host_hosted_cp_meminfo` as an example:
- make a one time request of heap memory
- request periodic memory reports
- get a report only when heap memory falls below a threshold
## API Added
- `esp_hosted_set_mem_monitor`
## Event Added
- `ESP_HOSTED_EVENT_MEM_MONITOR`
## Documentation
Added performance with ESP32-C3 as co-processor, using SPI-FD interface, to Performance document.
# $${\color{green} \text{2.11.6}}$$
- Fix a build break on ESP-IDF master branch
- Add `ESP_HOSTED_WIFI_AUTO_CONNECT_ON_STA_START` to control whether WiFi station auto-connects on STA start on both host and slave sides. This allows disabling auto-connect to align behavior with standard ESP-IDF examples and avoids unintended connection attempts during initialization.
- Made FreeRTOS runtime stats logging optional
- Added option to allow slave to reuse application-created STA netif handle instead of creating its own handle
- Added option to disable sharing Bluetooth with Host, for cases where BT is only required on the co-processor
# $${\color{green} \text{2.11.5}}$$
## Bug Fixes
- Renamed `H_HOST_RESTART_NO_COMMUNICATION_WITH_SLAVE_TIMEOUT` to `H_HOST_RESTART_NO_COMMUNICATION_WITH_SLAVE_TIMEOUT_MS` to clarify units are in milliseconds.
# $${\color{green} \text{2.11.4}}$$
## Features
- ESP32-P4 C61 Core board support - Improvise
## Bug Fixes
- TCP iPerf stability with documented performance optimizations
## Tested
- Host power save and wake-up functionality
- Wake-up GPIOs:
- P4 Core Board C61: IO04
- P4 Core Board P4: IO06
- GPIOs disabled by default (`-1`) due to no physical connection; verified via jumper wiring and solder
- Network split scenarios
# $${\color{green} \text{2.11.3}}$$
## Bug Fixes
- made UART Hosted interface more stable:
- flush the input after reset. Rx line may toggle while resetting the co-processor, causing Host UART to store invalid data.
- check that offset in received payload header is valid: discard packet for invalid offsets.
- check flags in received payload only after the payload is considered valid
# $${\color{green} \text{2.11.2}}$$
Minor fix: On Timeout/Failure, Print RPC req str instead of RPCId
# $${\color{green} \text{2.11.1}}$$
Minor fixes: const qualifier violations while building
# $${\color{cyan} \text{2.11.0}}$$
## Bug Fixes
- remove double freeing of buffer if `chan_arr[buf_handle->if_type]->rx()` fails. Underlying rx function will free the memory
> [!WARNING]
> This version of ESP-Hosted onwards must be used with wifi-remote component v1.3.1 or greater. See the [Migration Guide](https://github.com/espressif/esp-hosted-mcu/blob/main/docs/migration_guide.md) for more information.
# $${\color{cyan} \text{2.10.0}}$$
## Features: GPIO Expander
- **GPIO Expander**: Added feature to allow the host to control the GPIOs of the slave co-processor over the existing transport link. See [GPIO Expander Guide](./docs/gpio_expander.md).
- **GPIO Expander Example**: Added a new example `examples/host_gpio_expander` to demonstrate the usage of the GPIO expander feature.
## APIs Added
- `esp_hosted_cp_gpio_config`
- `esp_hosted_cp_gpio_reset_pin`
- `esp_hosted_cp_gpio_set_level`
- `esp_hosted_cp_gpio_get_level`
- `esp_hosted_cp_gpio_set_direction`
- `esp_hosted_cp_gpio_input_enable`
- `esp_hosted_cp_gpio_set_pull_mode`
# $${\color{green} \text{2.9.7}}$$
## Features
- Add example, [host_shuts_down_slave_to_power_save](https://components.espressif.com/components/espressif/esp_hosted/examples/host_shuts_down_slave_to_power_save)
- Use `EN` pin on coprocessor to power off/on
- Power down coprocessor when not in use
- Power on coprocessor when required
- Connect Wi-Fi on coprocessor wake up
## Bug Fixes
- Fix the memory leaks in hosted deinit -> init path
# $${\color{green} \text{2.9.5 - 2.9.6}}$$
Using shorter, more manageable names for esp hosted events
Before adoption, concise the event names from full string COPROCESSOR to just CP in event names
# $${\color{green} \text{2.9.4}}$$
## Features
- enabled ESP-Hosted events. Host can register an event handler to receive these events from co-processor:
- INIT event, indicating the co-processor has started
- HEARTBEAT event, when enabled by the host
- TRANSPORT_FAILURE event, when ESP-Hosted encounters a transport failure
- host can use these events to determine if the co-processor rebooted (unexpected INIT event) or hanged (missing HEARTBEAT)
- added `examples/host_hosted_events` as an example to show how the host can use either event to reinitialise a Station connection to an AP
## Bug Fixes
- fixed ESP-Hosted and SDIO issues that prevent transport reinitialisation
- fixed files to skip when running codespell during pre-commit
# $${\color{green} \text{2.9.3}}$$
## Bug Fixes
- removed setting `scan_method` and `sort_method` in co-processor when station is connecting. Use the values sent by the Host in the Wi-Fi config.
- fixed support for ESP32-S2 as a co-processor
# $${\color{green} \text{2.9.2}}$$
## Bug Fixes
- Slave OTA Example
- Add version-aware OTA activation
- Conditionally call esp_slave_ota_activate() only for slave FW >= v2.6.0
- Improved Slave OTA Documentation
- Comprehensive code comments explaining OTA APIs and version checks
- Mermaid sequence diagram showing complete OTA verification flow
# $${\color{green} \text{2.9.1}}$$
## Bug Fixes
- Correct esptool command usage (`write_flash` instead of invalid `write-flash`)
- Update Wi-Fi bandwidth enums for newer ESP-IDF compatibility
## Improvements
- Better validation and user-readable error messages for slave OTA
- Detect empty or uninitialized LittleFS and partition OTA sources
- Clear guidance when invalid or missing slave firmware binaries are detected
# $${\color{green} \text{2.9.0}}$$
## Bug Fixes
- Fix slave OTA failures on back-to-back updates by removing the hard dependency on `CONFIG_ESPTOOLPY_FLASHMODE_QIO`.
- Previously, mandating QIO flash mode caused consecutive OTA operations to fail; this is now resolved by removing the forced flash mode setting.
# $${\color{red} \text{2.8.5}}$$
## Features: Light Sleep Integration & Documentation
- **Light Sleep Documentation**: Added comprehensive [Light Sleep Integration Guide](https://www.google.com/search?q=https://github.com/espressif/esp-hosted-mcu/blob/main/docs/slave_light_sleep.md) detailing the handshake between host power states and slave light sleep.
- **Smart Wakeup Demo**: Added a new demo showcasing the slave waking the host MCU using specific network triggers (UDP packets).
- Example: `examples/host_network_split__power_save/host_wakeup_demo_using_udp_packet`
## Bug Fixes & Stability
- **Memory Leak Fixes**:
- Resolved memory leaks in the SDIO driver during unload/deinit by ensuring proper buffer cleanup and `sdio_slave_send_get_finished` usage.
- Fixed memory leaks in `esp_hosted_cli` by adding proper deregistration APIs for Hosted-specific commands.
- Cleanly handled timer memory removal in the Host Power Save component.
- **Concurrency & Race Conditions**:
- Added semaphore protection (mutex) in `host_power_save.c` to prevent race conditions when multiple threads attempt to wake the host simultaneously.
- **Timing & Reset Improvements**:
- Adjusted task delays in the host wakeup sequence to prevent the host from receiving incorrect or premature reset signals during the wake-up transition.
---
# $${\color{red} \text{2.8.4}}$$
## Features: Slave Auto Light sleep
- Auto Invoked when host triggers deep sleep
- Example implementation in example_light_sleep.c
# Known issue
There is memory leak when sdio driver unload is selected - working on the fix
# $${\color{red} \text{2.8.3}}$$
Add up mutex protection for callback array for Peer Data Transfer
# $${\color{red} \text{2.8.2}}$$
## Amend Peer Data Transfer example with custom msg id
Amend [Peer Data Transfer Example](https://components.espressif.com/components/espressif/esp_hosted/examples/host_peer_data_transfer):
Features:
- User can register callback-based dispatch for their own msg ids, both at host and slave
- Configurable handler slots via Kconfig (default: 3)
API:
- esp_err_t esp_hosted_send_custom_data(uint32_t msg_id, const uint8_t *data, size_t data_len)
- esp_err_t esp_hosted_register_cu
stom_callback(uint32_t msg_id, void (*callback)(uint32_t msg_id, const uint8_t *data, size_t data_len));
Example (examples/host_peer_data_transfer):
- Uses animal sound theme (CAT→MEOW, DOG→WOOF, HUMAN→HELLO)
- Host sends CAT_MSG_ID, with byte stream. Slave sends back same stream with MEOW_MGD_ID and so on.
Configuration:
- Host: CONFIG_ESP_HOSTED_MAX_CUSTOM_MSG_HANDLERS (Kconfig)
- Slave: CONFIG_ESP_HOSTED_MAX_CUSTOM_MSG_HANDLERS (Kconfig.projbuild)
- Ported as H_MAX_CUSTOM_MSG_HANDLERS on host side
## Allow to disable app_main() from slave
**Kconfig : `CONFIG_ESP_HOSTED_COPROCESSOR_APP_MAIN`** at coprocessor menuconfig
- **Default**: Enabled (for slave example from registry)
- **Purpose**: Controls whether ESP-Hosted provides its own `app_main()`
- **When to disable**:
- Using ESP-Hosted slave code base as a component in your application
# $${\color{red} \text{2.8.1}}$$
## Example: [Peer Data Transfer Example](https://components.espressif.com/components/espressif/esp_hosted/examples/host_peer_data_transfer)
## Features
- Supports sending and receiving arbitrary (preformatted) user data from/to host and slave
- Maximum payload size: 8166 bytes per packet
## APIs
- `esp_hosted_send_custom_data(data, length)`: Send raw binary data to coprocessor
- `esp_hosted_register_rx_callback_custom_data(callback)`: Register callback for receiving custom data
# $${\color{red} \text{2.8.0}}$$ - Network Split (Shared IP)
**Network Split (Shared IP)**
This major update allows the **Host MCU** and the **ESP Slave** to share a **single IP address** while running independent network stacks. This is ideal for low-power products where the Slave handles background tasks while the Host sleeps.
- Disabled by default. Enable using `CONFIG_ESP_HOSTED_NETWORK_SPLIT_ENABLED` config
- **Documentation**: [Network Split Guide](https://github.com/espressif/esp-hosted-mcu/blob/main/docs/feature_network_split.md).
## Example: [Network Split with Host Power Save Example](https://components.espressif.com/components/espressif/esp_hosted/examples/host_network_split__power_save)
## **Key Additions**
- Smart Traffic Routing: `nw_split_router.c` automatically directs traffic through function, `nw_split_filter_and_route_packet()`
- **Port-based (TCP/UDP)**: Uses `CONFIG_LWIP_TCP_LOCAL_PORT_RANGE` and `CONFIG_LWIP_UDP_LOCAL_PORT_RANGE` to decide if the Host or Slave handles a packet.
- **Reserved Ports**: Mandate packets on specific ports (e.g., 80, 443) to the Host via `CONFIG_ESP_HOSTED_HOST_RESERVED_PORTS_CONFIGURED`.
- **Non TCP/UDP**: Built-in handling for `ARP`, `ICMP`, and `DHCP` on coprocessor (configurable) to offload host for other priority work or deep sleep
- iperf Performance
- Demo of sharing same port: Port `5001` is shared smartly, allowing performance testing on either stack (at a time) without reconfiguring.
- Low-Power Support
- (Optionally) Deeply integrated with [Host Power Save](https://github.com/espressif/esp-hosted-mcu/blob/main/docs/feature_host_power_save.md)
- Smart Wakeup demo
- The Slave can "wake up" the Host when it receives specific traffic or an MQTT message containing the `"wakeup-host"` string.
- **Collision Prevention**
- Added `esp_hosted_lwip_src_port_hook.h` to ensure the Host and Slave never try to use the same source port.
- **Supported Targets**
- **Slaves**: ESP32-C5, C6, S2, S3.
- **Hosts**: ESP32-P4, H2, and non ESP MCUs.
ESP Component Registry Release: [2.8.0](https://components.espressif.com/components/espressif/esp_hosted/versions/2.8.0)
# $${\color{red} \text{2.7.4}}$$
## Bug Fixes
- fixed co-processor to properly allow wifi init and deinit
- fixed registration of event handlers in co-processor
# $${\color{red} \text{2.7.3}}$$
## Bug Fixes
- fixed RPC Response for OTA commands to return errors in responses correctly
- fixed double free bug in host OTA example
# $${\color{red} \text{2.7.2}}$$
## Bug Fixes
- Stable workaround for ota writes to slave
# $${\color{red} \text{2.7.1}}$$
- Add support for more PCBs:
- ESP32-P4 Core Board - with on-board C5
- ESP32-P4 Core Board - with on-board C6
# $${\color{red} \text{2.7.0}}$$
## Bug Fixes
Restructured the ESP-Hosted-MCU commits
# $${\color{red} \text{2.6.8}}$$
## Bug Fixes
- Clean up ESP-Hosted prints at host
# $${\color{red} \text{2.6.7}}$$
## Features
- Added Hosted API call to get co-processor Application Descriptor
# $${\color{red} \text{2.6.6}}$$
## Bug Fixes
- Fixed sta connection to remove extra disconnected event if incoming station config is different from current station config
- IRAM size limitation when using UART transport only applies to ESP32, not to all SOCs.
- workaround a bug in `esp_wifi_get_protocol()` that can cause memory corruption. See this [ESP-IDF Issue](https://github.com/espressif/esp-idf/issues/17502).
- updated CI pipelines to build mqtt/tcp example from Registry Component on master branch
# $${\color{red} \text{2.6.5}}$$
## Features
- Add example showing concurrent use of a SD Card and ESP-Hosted.
# $${\color{red} \text{2.6.4}}$$
## Bug Fixes
- Fix the `esp_wifi_deinit()` call from host
# $${\color{red} \text{2.6.3}}$$
## Bug Fixes
- Increase timing used to reset co-processors to work with a slower FreeRTOS clock tick
- Updated documentation on performance optimization
# $${\color{red} \text{2.6.2}}$$
## Bug Fixes
- fixed bug in enabling `esp_eap_client_set_eap_methods` on co-processor based on ESP-IDF version
# $${\color{red} \text{2.6.1}}$$
## Bug Fixes
Minor fixes in Slave OTA example
# $${\color{red} \text{2.6.0}}$$
- Added public OTA APIs for slave firmware updates
- Added host-triggered slave OTA example with support for HTTP, partition, and filesystem sources
- Support for LittleFS filesystem-based OTA updates
- Migration guide updated for 2.6.0
## APIs added
- `esp_hosted_ota_begin`
- `esp_hosted_ota_write`
- `esp_hosted_ota_end`
- `esp_hosted_ota_activate`
## APIs deprecated
- `esp_hosted_slave_ota` - Use the new [Host Performs Slave OTA Example](examples/host_performs_slave_ota/README.md) instead for more flexible OTA implementations with comprehensive documentation and multiple deployment methods
## Examples added
- `host_performs_slave_ota` - Host-triggered slave OTA example supporting HTTP URLs, partition sources and LittleFS filesystem sources
# $${\color{red} \text{2.5.12}}$$
## Features
- Add SPI (full and half duplex) and UART support for ESP32-C61
- Updated documentation on applying optimised Wi-Fi settings to sdkconfigs
## Bug Fixes
- Fixed build issues when raw throughput testing is enabled
- Fixed bug in co-processor causing SDIO to operate only in packet mode
# $${\color{red} \text{2.5.11}}$$
## Bug Fixes
- Fixes to use compatible version of `idf-build-apps` and constraints during CI pipeline builds
- Renamed CI pipelines to "sanity" and "regression"
- Prefix jobs with `sanity_` or `regression_` to make their names unique
- Enabled building of ESP-Hosted examples in regression pipeline
- Various bug fixes found in the process of fixing the CI pipelines
# $${\color{red} \text{2.5.10}}$$
## Features
- Version, 2.5.8 - 2.5.10:
- Add staging branch workflow for safer component releases
# $${\color{red} \text{2.5.7}}$$
## Bug Fixes
- Fixed build break when CLI Commands are enabled on coprocessor
# $${\color{red} \text{2.5.6}}$$
## Bug Fixes
- Updated co-processor and some example `idf_component.yml` files to set component dependencies based on the ESP-IDF version in use
# $${\color{red} \text{2.5.5}}$$
## Bug Fixes
- Fixed build errors when using latest version of ESP-IDF
- Updated Wi-Fi Easy Connect (DPP) code to match current ESP-IDF master
- Adjusted CI pipeline
# $${\color{red} \text{2.5.4}}$$
## Features
- Added building with ESP-IDF v5.3 in CI
- Added building ESP-Hosted examples in CI
## Bug Fixes
- Fixed building with ESP32-H2 as host in CI (was skipping build)
# $${\color{red} \text{2.5.3}}$$
## Bug Fixes
- Fix the ESP-IDF CI
# $${\color{red} \text{2.5.2}}$$
## Features
- Add support to get and set the BT Controller Mac Address
- To support set BT Controller Mac Address, BT Controller is now disabled by default on the co-processor, and host must enable the BT Controller. See [Initializing the Bluetooth Controller](https://github.com/espressif/esp-hosted-mcu/blob/main/docs/bluetooth_design.md#31-initializing-the-bluetooth-controller) for details
- Updated all ESP-Hosted BT related examples to account for new BT Controller behaviour
## APIs added
- `esp_hosted_bt_controller_init`
- `esp_hosted_bt_controller_deinit`
- `esp_hosted_bt_controller_enable`
- `esp_hosted_bt_controller_disable`
- `esp_hosted_iface_mac_addr_set`
- `esp_hosted_iface_mac_addr_get`
- `esp_hosted_iface_mac_addr_len_get`
# $${\color{red} \text{2.5.1}}$$
## Bug Fixes
- Added dependency on `esp_driver_gpio`
# $${\color{red} \text{2.5.0}}$$
## Bug Fixes
- Remove dependency on deprecated `driver` component and added necessary dependencies instead
# $${\color{red} \text{2.4.3}}$$
## Features
- Add support for Wi-Fi Easy Connect (DPP)
- [Espressif documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_dpp.html) on Wi-Fi Easy Connect (DPP)
- [ESP-Hosted Enrollee Example](https://github.com/espressif/esp-hosted-mcu/tree/main/examples/host_wifi_easy_connect_dpp_enrollee) using DPP to securely onboard a ESP32P4 with C6 board to a network with the help of a QR code and an Android 10+ device
## APIs added
- `esp_supp_dpp_init`
- `esp_supp_dpp_deinit`
- `esp_supp_dpp_bootstrap_gen`
- `esp_supp_dpp_start_listen`
- `esp_supp_dpp_stop_listen`
# $${\color{red} \text{2.4.2}}$$
## Bug Fixes
- Fix ignored lwip hook header in slave example
# $${\color{red} \text{2.4.1}}$$
## Bug Fixes
- Reduced ESP32 bootloader size
# $${\color{red} \text{2.4.0}}$$
## Features
- Added support for Wi-Fi Enterprise
## APIs added
- `esp_wifi_sta_enterprise_enable`
- `esp_wifi_sta_enterprise_disable`
- `esp_eap_client_set_identity`
- `esp_eap_client_clear_identity`
- `esp_eap_client_set_username`
- `esp_eap_client_clear_username`
- `esp_eap_client_set_password`
- `esp_eap_client_clear_password`
- `esp_eap_client_set_new_password`
- `esp_eap_client_clear_new_password`
- `esp_eap_client_set_ca_cert`
- `esp_eap_client_clear_ca_cert`
- `esp_eap_client_set_certificate_and_key`
- `esp_eap_client_clear_certificate_and_key`
- `esp_eap_client_set_disable_time_check`
- `esp_eap_client_get_disable_time_check`
- `esp_eap_client_set_ttls_phase2_method`
- `esp_eap_client_set_suiteb_192bit_certification`
- `esp_eap_client_set_pac_file`
- `esp_eap_client_set_fast_params`
- `esp_eap_client_use_default_cert_bundle`
- `esp_wifi_set_okc_support`
- `esp_eap_client_set_domain_name`
- `esp_eap_client_set_eap_methods`
# $${\color{red} \text{2.3.3}}$$
## Features
- Added SDIO support for ESP32-C61
# $${\color{red} \text{2.3.2}}$$
## Features
- Add host example to showcase transport config before `esp_hosted_init()`
# $${\color{red} \text{2.3.1}}$$
## Bug Fixes
- Fixed a build break caused by refactoring
# $${\color{red} \text{2.3.0}}$$
## Features
- Refactored common and port specific code
# $${\color{red} \text{2.2.4}}$$
## Bug Fixes
- Fixed SPI Full Duplex startup sequence
- Fixed incorrect Handshake GPIO assignment for C5 on Module
- Added valid CPU frequencies in ITWT Example for H2
# $${\color{red} \text{2.2.3}}$$
## Bug Fixes
- Fixed itwt build break for IDF v5.3.1
# $${\color{red} \text{2.2.2}}$$
## Features
- Added support for Wi-Fi Power Save and ITWT
- Added ITWT example
- Updated copyright check to allow Unlicensed or CC0-1.0 files
## APIs added
- `esp_wifi_set_inactive_time()`
- `esp_wifi_get_inactive_time()`
- `esp_wifi_sta_twt_config()`
- `esp_wifi_sta_itwt_setup()`
- `esp_wifi_sta_itwt_teardown()`
- `esp_wifi_sta_itwt_suspend()`
- `esp_wifi_sta_itwt_get_flow_id_status()`
- `esp_wifi_sta_itwt_send_probe_req()`
- `esp_wifi_sta_itwt_set_target_wake_time_offset()`
# $${\color{red} \text{2.2.1}}$$
## Features
- Allow external code to override Hosted BT Tx function by making it a `weak` reference
# $${\color{red} \text{2.2.0}}$$
## Features
- Add support for fragmentation of packets from sdio host to slave
# $${\color{red} \text{2.1.11}}$$
## Bug Fixes
- Fixed SoftAP operation issues