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>
817 lines
27 KiB
Markdown
817 lines
27 KiB
Markdown
# 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
|