diff --git a/libraries/RainMaker/examples/RMakerSwitch/RMakerSwitch.ino b/libraries/RainMaker/examples/RMakerSwitch/RMakerSwitch.ino index 9c65881889d..21fe9cb064b 100644 --- a/libraries/RainMaker/examples/RMakerSwitch/RMakerSwitch.ino +++ b/libraries/RainMaker/examples/RMakerSwitch/RMakerSwitch.ino @@ -94,6 +94,12 @@ void setup() { RMaker.enableSystemService(SYSTEM_SERV_FLAGS_ALL, 2, 2, 2); +#if CONFIG_IDF_TARGET_ESP32S2 + WiFiProv.initProvision(NETWORK_PROV_SCHEME_SOFTAP, NETWORK_PROV_SCHEME_HANDLER_NONE); +#else + WiFiProv.initProvision(NETWORK_PROV_SCHEME_BLE, NETWORK_PROV_SCHEME_HANDLER_FREE_BTDM); +#endif + RMaker.start(); WiFi.onEvent(sysProvEvent); // Will call sysProvEvent() from another thread. diff --git a/libraries/WiFiProv/src/WiFiProv.cpp b/libraries/WiFiProv/src/WiFiProv.cpp index 55fbd473f88..31337196b5f 100644 --- a/libraries/WiFiProv/src/WiFiProv.cpp +++ b/libraries/WiFiProv/src/WiFiProv.cpp @@ -72,13 +72,11 @@ static void get_device_service_name(prov_scheme_t prov_scheme, char *service_nam #endif } -void WiFiProvClass ::beginProvision( - prov_scheme_t prov_scheme, scheme_handler_t scheme_handler, network_prov_security_t security, const char *pop, const char *service_name, - const char *service_key, uint8_t *uuid, bool reset_provisioned -) { - bool provisioned = false; - static char service_name_temp[32]; - +void WiFiProvClass ::initProvision(prov_scheme_t prov_scheme, scheme_handler_t scheme_handler, bool reset_provisioned) { + if (this->provInitDone) { + log_i("provInit was already done!"); + return; + } network_prov_mgr_config_t config; #if CONFIG_BLUEDROID_ENABLED if (prov_scheme == NETWORK_PROV_SCHEME_BLE) { @@ -118,11 +116,22 @@ void WiFiProvClass ::beginProvision( if (reset_provisioned) { log_i("Resetting provisioned data."); network_prov_mgr_reset_wifi_provisioning(); - } else if (network_prov_mgr_is_wifi_provisioned(&provisioned) != ESP_OK) { + } else if (network_prov_mgr_is_wifi_provisioned(&(this->provisioned)) != ESP_OK) { log_e("network_prov_mgr_is_wifi_provisioned failed!"); network_prov_mgr_deinit(); return; } + this->provInitDone = true; +} + +void WiFiProvClass ::beginProvision( + prov_scheme_t prov_scheme, scheme_handler_t scheme_handler, network_prov_security_t security, const char *pop, const char *service_name, + const char *service_key, uint8_t *uuid, bool reset_provisioned +) { + if (!this->provInitDone) { + WiFiProvClass ::initProvision(prov_scheme, scheme_handler, reset_provisioned); + } + static char service_name_temp[32]; if (provisioned == false) { #if CONFIG_BLUEDROID_ENABLED if (prov_scheme == NETWORK_PROV_SCHEME_BLE) { diff --git a/libraries/WiFiProv/src/WiFiProv.h b/libraries/WiFiProv/src/WiFiProv.h index a4a3397ed06..b660f8cf064 100644 --- a/libraries/WiFiProv/src/WiFiProv.h +++ b/libraries/WiFiProv/src/WiFiProv.h @@ -47,7 +47,14 @@ typedef enum { //Provisioning class class WiFiProvClass { +private: + bool provInitDone = false; + bool provisioned = false; + public: + void initProvision( + prov_scheme_t prov_scheme = NETWORK_PROV_SCHEME_SOFTAP, scheme_handler_t scheme_handler = NETWORK_PROV_SCHEME_HANDLER_NONE, bool reset_provisioned = false + ); void beginProvision( prov_scheme_t prov_scheme = NETWORK_PROV_SCHEME_SOFTAP, scheme_handler_t scheme_handler = NETWORK_PROV_SCHEME_HANDLER_NONE, network_prov_security_t security = NETWORK_PROV_SECURITY_1, const char *pop = "abcd1234", const char *service_name = NULL, const char *service_key = NULL,