Skip to content

Commit f2c9ad9

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

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

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

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

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

97+
WiFiProv.initProvision(NETWORK_PROV_SCHEME_BLE, NETWORK_PROV_SCHEME_HANDLER_FREE_BTDM);
98+
9799
RMaker.start();
98100

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

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

+19-7
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,14 @@ 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];
75+
bool provInitDone = false;
76+
bool provisioned = false;
8177

78+
void WiFiProvClass ::initProvision(prov_scheme_t prov_scheme, scheme_handler_t scheme_handler, bool reset_provisioned) {
79+
if (provInitDone) {
80+
log_i("provInit was already done!");
81+
return;
82+
}
8283
network_prov_mgr_config_t config;
8384
#if CONFIG_BLUEDROID_ENABLED
8485
if (prov_scheme == NETWORK_PROV_SCHEME_BLE) {
@@ -123,6 +124,17 @@ void WiFiProvClass ::beginProvision(
123124
network_prov_mgr_deinit();
124125
return;
125126
}
127+
provInitDone = true;
128+
}
129+
130+
void WiFiProvClass ::beginProvision(
131+
prov_scheme_t prov_scheme, scheme_handler_t scheme_handler, network_prov_security_t security, const char *pop, const char *service_name,
132+
const char *service_key, uint8_t *uuid, bool reset_provisioned
133+
) {
134+
if (!provInitDone) {
135+
WiFiProvClass ::initProvision( prov_scheme, scheme_handler, reset_provisioned);
136+
}
137+
static char service_name_temp[32];
126138
if (provisioned == false) {
127139
#if CONFIG_BLUEDROID_ENABLED
128140
if (prov_scheme == NETWORK_PROV_SCHEME_BLE) {

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

+4
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ typedef enum {
4848
//Provisioning class
4949
class WiFiProvClass {
5050
public:
51+
void initProvision(
52+
prov_scheme_t prov_scheme = NETWORK_PROV_SCHEME_SOFTAP, scheme_handler_t scheme_handler = NETWORK_PROV_SCHEME_HANDLER_NONE,
53+
bool reset_provisioned = false
54+
);
5155
void beginProvision(
5256
prov_scheme_t prov_scheme = NETWORK_PROV_SCHEME_SOFTAP, scheme_handler_t scheme_handler = NETWORK_PROV_SCHEME_HANDLER_NONE,
5357
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)