Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 59d51de

Browse files
Merge pull request #10677 from kvp1703/fix/wifi_provision
fix: Split provisioning into two parts for better synchronization
2 parents d55160c + 4ecfd35 commit 59d51de

File tree

3 files changed

+30
-8
lines changed

3 files changed

+30
-8
lines changed

‎libraries/RainMaker/examples/RMakerSwitch/RMakerSwitch.ino‎

Lines changed: 6 additions & 0 deletions
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.

‎libraries/WiFiProv/src/WiFiProv.cpp‎

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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) {

‎libraries/WiFiProv/src/WiFiProv.h‎

Lines changed: 7 additions & 0 deletions
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;
53+
5054
public:
55+
void initProvision(
56+
prov_scheme_t prov_scheme = NETWORK_PROV_SCHEME_SOFTAP, scheme_handler_t scheme_handler = NETWORK_PROV_SCHEME_HANDLER_NONE, 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)

AltStyle によって変換されたページ (->オリジナル) /