From beede86e6c97dc5c07042150b81f869158abd30d Mon Sep 17 00:00:00 2001 From: Terence Hampson Date: Mon, 24 Apr 2023 20:32:18 +0000 Subject: [PATCH 1/2] Fix Disconnect RPC for ESP 32 --- examples/platform/esp32/Rpc.cpp | 10 +++++++--- src/platform/ESP32/ConnectivityManagerImpl_WiFi.cpp | 6 ++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/examples/platform/esp32/Rpc.cpp b/examples/platform/esp32/Rpc.cpp index 3d865ed13bdc7a..f8b7ff408cc33d 100644 --- a/examples/platform/esp32/Rpc.cpp +++ b/examples/platform/esp32/Rpc.cpp @@ -204,8 +204,11 @@ class Esp32WiFi final : public WiFi size_t password_size = std::min(sizeof(password) - 1, static_cast(request.secret.size)); memcpy(password, request.secret.bytes, password_size); password[password_size] = '\0'; - if (chip::DeviceLayer::NetworkCommissioning::ESPWiFiDriver::GetInstance().ConnectWiFiNetwork( - ssid, strlen(ssid), password, strlen(password)) != CHIP_NO_ERROR) + chip::DeviceLayer::PlatformMgr().LockChipStack(); + CHIP_ERROR error = chip::DeviceLayer::NetworkCommissioning::ESPWiFiDriver::GetInstance().ConnectWiFiNetwork( + ssid, strlen(ssid), password, strlen(password)); + chip::DeviceLayer::PlatformMgr().UnlockChipStack(); + if (error != CHIP_NO_ERROR) { return pw::Status::Internal(); } @@ -214,8 +217,9 @@ class Esp32WiFi final : public WiFi pw::Status Disconnect(const pw_protobuf_Empty & request, pw_protobuf_Empty & response) override { + chip::DeviceLayer::PlatformMgr().LockChipStack(); chip::DeviceLayer::ConnectivityMgr().ClearWiFiStationProvision(); - chip::DeviceLayer::ConnectivityMgr().SetWiFiStationMode(chip::DeviceLayer::ConnectivityManager::kWiFiStationMode_Disabled); + chip::DeviceLayer::PlatformMgr().UnlockChipStack(); return pw::OkStatus(); } diff --git a/src/platform/ESP32/ConnectivityManagerImpl_WiFi.cpp b/src/platform/ESP32/ConnectivityManagerImpl_WiFi.cpp index 4c962d24a5e5b0..48251a27129962 100644 --- a/src/platform/ESP32/ConnectivityManagerImpl_WiFi.cpp +++ b/src/platform/ESP32/ConnectivityManagerImpl_WiFi.cpp @@ -105,6 +105,12 @@ void ConnectivityManagerImpl::_ClearWiFiStationProvision(void) { if (mWiFiStationMode != kWiFiStationMode_ApplicationControlled) { + CHIP_ERROR error = chip::DeviceLayer::Internal::ESP32Utils::ClearWiFiStationProvision(); + if (error != CHIP_NO_ERROR) + { + ChipLogError(DeviceLayer, "ClearWiFiStationProvision failed: %s", chip::ErrorStr(error)); + return; + } DeviceLayer::SystemLayer().ScheduleWork(DriveStationState, NULL); #if CHIP_DEVICE_CONFIG_ENABLE_WIFI_AP DeviceLayer::SystemLayer().ScheduleWork(DriveAPState, NULL); From a77e49ad5d2db90b60a329f946c7b0927eec3502 Mon Sep 17 00:00:00 2001 From: Terence Hampson Date: Mon, 24 Apr 2023 20:43:23 +0000 Subject: [PATCH 2/2] Restyle --- examples/platform/esp32/Rpc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/platform/esp32/Rpc.cpp b/examples/platform/esp32/Rpc.cpp index f8b7ff408cc33d..1ad91dddef4253 100644 --- a/examples/platform/esp32/Rpc.cpp +++ b/examples/platform/esp32/Rpc.cpp @@ -206,7 +206,7 @@ class Esp32WiFi final : public WiFi password[password_size] = '\0'; chip::DeviceLayer::PlatformMgr().LockChipStack(); CHIP_ERROR error = chip::DeviceLayer::NetworkCommissioning::ESPWiFiDriver::GetInstance().ConnectWiFiNetwork( - ssid, strlen(ssid), password, strlen(password)); + ssid, strlen(ssid), password, strlen(password)); chip::DeviceLayer::PlatformMgr().UnlockChipStack(); if (error != CHIP_NO_ERROR) {