From 4eeff9bc57489f7c6b62c6152051426c015d3938 Mon Sep 17 00:00:00 2001 From: "kshitij.patil" Date: Tue, 3 Dec 2024 19:41:34 +0530 Subject: [PATCH 1/2] fix: Split provisioning into two parts for better synchronization --- .../examples/RMakerSwitch/RMakerSwitch.ino | 6 +++++ libraries/WiFiProv/src/WiFiProv.cpp | 27 ++++++++++++------- libraries/WiFiProv/src/WiFiProv.h | 7 +++++ 3 files changed, 31 insertions(+), 9 deletions(-) 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..fb67377a2ee 100644 --- a/libraries/WiFiProv/src/WiFiProv.cpp +++ b/libraries/WiFiProv/src/WiFiProv.cpp @@ -1,4 +1,4 @@ -/* + /* WiFiProv.cpp - WiFiProv class for provisioning All rights reserved. @@ -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..53af27f7c80 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, From 4ecfd35ec66cf1d9de2d728d0a092ef6deb4a39d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 13:52:12 +0000 Subject: [PATCH 2/2] ci(pre-commit): Apply automatic fixes --- libraries/WiFiProv/src/WiFiProv.cpp | 4 ++-- libraries/WiFiProv/src/WiFiProv.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/WiFiProv/src/WiFiProv.cpp b/libraries/WiFiProv/src/WiFiProv.cpp index fb67377a2ee..31337196b5f 100644 --- a/libraries/WiFiProv/src/WiFiProv.cpp +++ b/libraries/WiFiProv/src/WiFiProv.cpp @@ -1,4 +1,4 @@ - /* +/* WiFiProv.cpp - WiFiProv class for provisioning All rights reserved. @@ -129,7 +129,7 @@ void WiFiProvClass ::beginProvision( const char *service_key, uint8_t *uuid, bool reset_provisioned ) { if (!this->provInitDone) { - WiFiProvClass ::initProvision( prov_scheme, scheme_handler, reset_provisioned); + WiFiProvClass ::initProvision(prov_scheme, scheme_handler, reset_provisioned); } static char service_name_temp[32]; if (provisioned == false) { diff --git a/libraries/WiFiProv/src/WiFiProv.h b/libraries/WiFiProv/src/WiFiProv.h index 53af27f7c80..b660f8cf064 100644 --- a/libraries/WiFiProv/src/WiFiProv.h +++ b/libraries/WiFiProv/src/WiFiProv.h @@ -50,10 +50,10 @@ 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 + 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,