@@ -38,6 +38,25 @@ constexpr char kWiFiCredentialsKeyName[] = "wifi-pass";
38
38
static uint8_t WiFiSSIDStr[DeviceLayer::Internal::kMaxWiFiSSIDLength ];
39
39
} // namespace
40
40
41
+ CHIP_ERROR GetConfiguredNetwork (Network & network)
42
+ {
43
+ wifi_ap_record_t ap_info;
44
+ esp_err_t err;
45
+ err = esp_wifi_sta_get_ap_info (&ap_info);
46
+ if (err != ESP_OK)
47
+ {
48
+ return chip::DeviceLayer::Internal::ESP32Utils::MapError (err);
49
+ }
50
+ uint8_t length = strnlen (reinterpret_cast <const char *>(ap_info.ssid ), DeviceLayer::Internal::kMaxWiFiSSIDLength );
51
+ if (length > sizeof (network.networkID ))
52
+ {
53
+ return CHIP_ERROR_INTERNAL;
54
+ }
55
+ memcpy (network.networkID , ap_info.ssid , length);
56
+ network.networkIDLen = length;
57
+ return CHIP_NO_ERROR;
58
+ }
59
+
41
60
CHIP_ERROR ESPWiFiDriver::Init (NetworkStatusChangeCallback * networkStatusChangeCallback)
42
61
{
43
62
CHIP_ERROR err;
@@ -203,21 +222,33 @@ void ESPWiFiDriver::OnConnectWiFiNetworkFailed(chip::System::Layer * aLayer, voi
203
222
204
223
void ESPWiFiDriver::ConnectNetwork (ByteSpan networkId, ConnectCallback * callback)
205
224
{
206
- CHIP_ERROR err = CHIP_NO_ERROR;
207
- Status networkingStatus = Status::kSuccess ;
225
+ CHIP_ERROR err = CHIP_NO_ERROR;
226
+ Status networkingStatus = Status::kSuccess ;
227
+ Network configuredNetwork;
208
228
const uint32_t secToMiliSec = 1000 ;
209
229
210
230
VerifyOrExit (NetworkMatch (mStagingNetwork , networkId), networkingStatus = Status::kNetworkIDNotFound );
211
231
VerifyOrExit (mpConnectCallback == nullptr , networkingStatus = Status::kUnknownError );
212
232
ChipLogProgress (NetworkProvisioning, " ESP NetworkCommissioningDelegate: SSID: %.*s" , static_cast <int >(networkId.size ()),
213
233
networkId.data ());
214
-
234
+ if (CHIP_NO_ERROR == GetConfiguredNetwork (configuredNetwork))
235
+ {
236
+ if (NetworkMatch (mStagingNetwork , ByteSpan (configuredNetwork.networkID , configuredNetwork.networkIDLen )))
237
+ {
238
+ if (callback)
239
+ {
240
+ callback->OnResult (Status::kSuccess , CharSpan (), 0 );
241
+ }
242
+ return ;
243
+ }
244
+ }
215
245
err = ConnectWiFiNetwork (reinterpret_cast <const char *>(mStagingNetwork .ssid ), mStagingNetwork .ssidLen ,
216
246
reinterpret_cast <const char *>(mStagingNetwork .credentials ), mStagingNetwork .credentialsLen );
217
247
218
248
err = DeviceLayer::SystemLayer ().StartTimer (
219
249
static_cast <System::Clock::Timeout>(kWiFiConnectNetworkTimeoutSeconds * secToMiliSec), OnConnectWiFiNetworkFailed, NULL );
220
250
mpConnectCallback = callback;
251
+
221
252
exit :
222
253
if (err != CHIP_NO_ERROR)
223
254
{
@@ -309,25 +340,6 @@ void ESPWiFiDriver::OnScanWiFiNetworkDone()
309
340
}
310
341
}
311
342
312
- CHIP_ERROR GetConfiguredNetwork (Network & network)
313
- {
314
- wifi_ap_record_t ap_info;
315
- esp_err_t err;
316
- err = esp_wifi_sta_get_ap_info (&ap_info);
317
- if (err != ESP_OK)
318
- {
319
- return chip::DeviceLayer::Internal::ESP32Utils::MapError (err);
320
- }
321
- uint8_t length = strnlen (reinterpret_cast <const char *>(ap_info.ssid ), DeviceLayer::Internal::kMaxWiFiSSIDLength );
322
- if (length > sizeof (network.networkID ))
323
- {
324
- return CHIP_ERROR_INTERNAL;
325
- }
326
- memcpy (network.networkID , ap_info.ssid , length);
327
- network.networkIDLen = length;
328
- return CHIP_NO_ERROR;
329
- }
330
-
331
343
void ESPWiFiDriver::OnNetworkStatusChange ()
332
344
{
333
345
Network configuredNetwork;
0 commit comments