wifi_provisioning: Add API to reset state if provisioning fails

pull/6904/head
Shubham Kulkarni 2021-05-28 15:52:25 +05:30 zatwierdzone przez bot
rodzic e005ec0899
commit 34bdbf9ee2
2 zmienionych plików z 44 dodań i 0 usunięć

Wyświetl plik

@ -563,6 +563,19 @@ esp_err_t wifi_prov_mgr_configure_sta(wifi_config_t *wifi_cfg);
* - ESP_FAIL : Failed to reset provisioning config
*/
esp_err_t wifi_prov_mgr_reset_provisioning(void);
/**
* @brief Reset internal state machine and clear provisioned credentials.
*
* This API can be used to restart provisioning in case invalid credentials are entered.
*
* @return
* - ESP_OK : Reset provisioning state machine successfully
* - ESP_FAIL : Failed to reset provisioning state machine
* - ESP_ERR_INVALID_STATE : Manager not initialized
*/
esp_err_t wifi_prov_mgr_reset_sm_state_on_failure(void);
#ifdef __cplusplus
}
#endif

Wyświetl plik

@ -1578,3 +1578,34 @@ esp_err_t wifi_prov_mgr_reset_provisioning(void)
return ret;
}
esp_err_t wifi_prov_mgr_reset_sm_state_on_failure(void)
{
if (!prov_ctx_lock) {
ESP_LOGE(TAG, "Provisioning manager not initialized");
return ESP_ERR_INVALID_STATE;
}
ACQUIRE_LOCK(prov_ctx_lock);
esp_err_t err = ESP_OK;
if (prov_ctx->prov_state != WIFI_PROV_STATE_FAIL) {
ESP_LOGE(TAG, "Trying reset when not in failure state. Current state: %d", prov_ctx->prov_state);
err = ESP_ERR_INVALID_STATE;
goto exit;
}
wifi_config_t wifi_cfg = {0};
err = esp_wifi_set_config(WIFI_IF_STA, &wifi_cfg);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to set wifi config, 0x%x", err);
goto exit;
}
prov_ctx->prov_state = WIFI_PROV_STATE_STARTED;
exit:
RELEASE_LOCK(prov_ctx_lock);
return err;
}