Skip to content

Commit 93772ec

Browse files
authored
Merge pull request #643 from shahpiyushv/bugfix/network-prov-ctrl
network_provisioning: Fix prov-ctrl reset handler to return success (IEC-458)
2 parents fb6abe8 + 28573a6 commit 93772ec

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

network_provisioning/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
# 1.2.1 (15-Dec-2025)
2+
3+
- Fix prov-ctrl reset handler to return success when device is already in provisioning mode
4+
- If firmware has already called `network_prov_mgr_reset_wifi_sm_state_on_failure()` or
5+
`network_prov_mgr_reset_thread_sm_state_on_failure()`, the device state is already reset
6+
to provisioning mode. The prov-ctrl handler now returns success in this case instead of
7+
an invalid state error, allowing phone apps to successfully reset even if firmware has
8+
already performed the reset operation.
9+
110
# 07-October-2025
211

312
- Use managed cJSON component for IDF v6.0 and above

network_provisioning/idf_component.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: "1.2.0"
1+
version: "1.2.1"
22
description: Network provisioning component for Wi-Fi or Thread devices
33
url: https://github.com/espressif/idf-extra-components/tree/master/network_provisioning
44
dependencies:

network_provisioning/src/manager.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2350,6 +2350,13 @@ esp_err_t network_prov_mgr_reset_wifi_sm_state_on_failure(void)
23502350
ACQUIRE_LOCK(prov_ctx_lock);
23512351

23522352
esp_err_t err = ESP_OK;
2353+
/* If already in STARTED state, reset has already been performed (e.g., by firmware).
2354+
* Return success as the device is effectively already reset and in provisioning mode. */
2355+
if (prov_ctx->prov_state == NETWORK_PROV_STATE_STARTED) {
2356+
ESP_LOGD(TAG, "Reset already performed, device already in provisioning mode");
2357+
goto exit;
2358+
}
2359+
23532360
if (prov_ctx->prov_state != NETWORK_PROV_STATE_FAIL) {
23542361
ESP_LOGE(TAG, "Trying reset when not in failure state. Current state: %d", prov_ctx->prov_state);
23552362
err = ESP_ERR_INVALID_STATE;
@@ -2448,6 +2455,13 @@ esp_err_t network_prov_mgr_reset_thread_sm_state_on_failure(void)
24482455
otInstance *instance = esp_openthread_get_instance();
24492456

24502457
esp_openthread_lock_acquire(portMAX_DELAY);
2458+
/* If already in STARTED state, reset has already been performed (e.g., by firmware).
2459+
* Return success as the device is effectively already reset and in provisioning mode. */
2460+
if (prov_ctx->prov_state == NETWORK_PROV_STATE_STARTED) {
2461+
ESP_LOGD(TAG, "Reset already performed, device already in provisioning mode");
2462+
goto exit;
2463+
}
2464+
24512465
if (prov_ctx->prov_state != NETWORK_PROV_STATE_FAIL) {
24522466
ESP_LOGE(TAG, "Trying reset when not in failure state. Current state: %d", prov_ctx->prov_state);
24532467
err = ESP_ERR_INVALID_STATE;

0 commit comments

Comments
 (0)