Skip to content

Commit 4548886

Browse files
wqx6andy31415
authored andcommitted
ESP32: Disable unnecessary reconnection for ConnectNetwork command (#23251)
Co-authored-by: Andrei Litvin <andy314@gmail.com>
1 parent 496ddaa commit 4548886

File tree

1 file changed

+34
-22
lines changed

1 file changed

+34
-22
lines changed

src/platform/ESP32/NetworkCommissioningDriver.cpp

+34-22
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,25 @@ constexpr char kWiFiCredentialsKeyName[] = "wifi-pass";
3838
static uint8_t WiFiSSIDStr[DeviceLayer::Internal::kMaxWiFiSSIDLength];
3939
} // namespace
4040

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+
4160
CHIP_ERROR ESPWiFiDriver::Init(NetworkStatusChangeCallback * networkStatusChangeCallback)
4261
{
4362
CHIP_ERROR err;
@@ -203,21 +222,33 @@ void ESPWiFiDriver::OnConnectWiFiNetworkFailed(chip::System::Layer * aLayer, voi
203222

204223
void ESPWiFiDriver::ConnectNetwork(ByteSpan networkId, ConnectCallback * callback)
205224
{
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;
208228
const uint32_t secToMiliSec = 1000;
209229

210230
VerifyOrExit(NetworkMatch(mStagingNetwork, networkId), networkingStatus = Status::kNetworkIDNotFound);
211231
VerifyOrExit(mpConnectCallback == nullptr, networkingStatus = Status::kUnknownError);
212232
ChipLogProgress(NetworkProvisioning, "ESP NetworkCommissioningDelegate: SSID: %.*s", static_cast<int>(networkId.size()),
213233
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+
}
215245
err = ConnectWiFiNetwork(reinterpret_cast<const char *>(mStagingNetwork.ssid), mStagingNetwork.ssidLen,
216246
reinterpret_cast<const char *>(mStagingNetwork.credentials), mStagingNetwork.credentialsLen);
217247

218248
err = DeviceLayer::SystemLayer().StartTimer(
219249
static_cast<System::Clock::Timeout>(kWiFiConnectNetworkTimeoutSeconds * secToMiliSec), OnConnectWiFiNetworkFailed, NULL);
220250
mpConnectCallback = callback;
251+
221252
exit:
222253
if (err != CHIP_NO_ERROR)
223254
{
@@ -309,25 +340,6 @@ void ESPWiFiDriver::OnScanWiFiNetworkDone()
309340
}
310341
}
311342

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-
331343
void ESPWiFiDriver::OnNetworkStatusChange()
332344
{
333345
Network configuredNetwork;

0 commit comments

Comments
 (0)