Skip to content

Commit 4eeff9b

Browse files
committed
fix: Split provisioning into two parts for better synchronization
1 parent af84da6 commit 4eeff9b

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

Diff for: libraries/RainMaker/examples/RMakerSwitch/RMakerSwitch.ino

+6
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ void setup() {
9494

9595
RMaker.enableSystemService(SYSTEM_SERV_FLAGS_ALL, 2, 2, 2);
9696

97+
#if CONFIG_IDF_TARGET_ESP32S2
98+
WiFiProv.initProvision(NETWORK_PROV_SCHEME_SOFTAP, NETWORK_PROV_SCHEME_HANDLER_NONE);
99+
#else
100+
WiFiProv.initProvision(NETWORK_PROV_SCHEME_BLE, NETWORK_PROV_SCHEME_HANDLER_FREE_BTDM);
101+
#endif
102+
97103
RMaker.start();
98104

99105
WiFi.onEvent(sysProvEvent); // Will call sysProvEvent() from another thread.

Diff for: libraries/WiFiProv/src/WiFiProv.cpp

+18-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*
1+
/*
22
WiFiProv.cpp - WiFiProv class for provisioning
33
All rights reserved.
44
@@ -72,13 +72,11 @@ static void get_device_service_name(prov_scheme_t prov_scheme, char *service_nam
7272
#endif
7373
}
7474

75-
void WiFiProvClass ::beginProvision(
76-
prov_scheme_t prov_scheme, scheme_handler_t scheme_handler, network_prov_security_t security, const char *pop, const char *service_name,
77-
const char *service_key, uint8_t *uuid, bool reset_provisioned
78-
) {
79-
bool provisioned = false;
80-
static char service_name_temp[32];
81-
75+
void WiFiProvClass ::initProvision(prov_scheme_t prov_scheme, scheme_handler_t scheme_handler, bool reset_provisioned) {
76+
if (this->provInitDone) {
77+
log_i("provInit was already done!");
78+
return;
79+
}
8280
network_prov_mgr_config_t config;
8381
#if CONFIG_BLUEDROID_ENABLED
8482
if (prov_scheme == NETWORK_PROV_SCHEME_BLE) {
@@ -118,11 +116,22 @@ void WiFiProvClass ::beginProvision(
118116
if (reset_provisioned) {
119117
log_i("Resetting provisioned data.");
120118
network_prov_mgr_reset_wifi_provisioning();
121-
} else if (network_prov_mgr_is_wifi_provisioned(&provisioned) != ESP_OK) {
119+
} else if (network_prov_mgr_is_wifi_provisioned(&(this->provisioned)) != ESP_OK) {
122120
log_e("network_prov_mgr_is_wifi_provisioned failed!");
123121
network_prov_mgr_deinit();
124122
return;
125123
}
124+
this->provInitDone = true;
125+
}
126+
127+
void WiFiProvClass ::beginProvision(
128+
prov_scheme_t prov_scheme, scheme_handler_t scheme_handler, network_prov_security_t security, const char *pop, const char *service_name,
129+
const char *service_key, uint8_t *uuid, bool reset_provisioned
130+
) {
131+
if (!this->provInitDone) {
132+
WiFiProvClass ::initProvision( prov_scheme, scheme_handler, reset_provisioned);
133+
}
134+
static char service_name_temp[32];
126135
if (provisioned == false) {
127136
#if CONFIG_BLUEDROID_ENABLED
128137
if (prov_scheme == NETWORK_PROV_SCHEME_BLE) {

Diff for: libraries/WiFiProv/src/WiFiProv.h

+7
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,14 @@ typedef enum {
4747

4848
//Provisioning class
4949
class WiFiProvClass {
50+
private:
51+
bool provInitDone = false;
52+
bool provisioned = false;
5053
public:
54+
void initProvision(
55+
prov_scheme_t prov_scheme = NETWORK_PROV_SCHEME_SOFTAP, scheme_handler_t scheme_handler = NETWORK_PROV_SCHEME_HANDLER_NONE,
56+
bool reset_provisioned = false
57+
);
5158
void beginProvision(
5259
prov_scheme_t prov_scheme = NETWORK_PROV_SCHEME_SOFTAP, scheme_handler_t scheme_handler = NETWORK_PROV_SCHEME_HANDLER_NONE,
5360
network_prov_security_t security = NETWORK_PROV_SECURITY_1, const char *pop = "abcd1234", const char *service_name = NULL, const char *service_key = NULL,

0 commit comments

Comments
 (0)