From 52eb820c57a7b30c4ca4bfd42ecb2a2c8a0f61f7 Mon Sep 17 00:00:00 2001
From: jmartinez-silabs <67972863+jmartinez-silabs@users.noreply.github.com>
Date: Thu, 29 Sep 2022 10:04:06 -0400
Subject: [PATCH] Open basic commissioning window on pb0 press and release
 (#22940)

---
 examples/platform/efr32/BaseApplication.cpp | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/examples/platform/efr32/BaseApplication.cpp b/examples/platform/efr32/BaseApplication.cpp
index 3f8f584d87fe77..517f53de08a04d 100644
--- a/examples/platform/efr32/BaseApplication.cpp
+++ b/examples/platform/efr32/BaseApplication.cpp
@@ -414,7 +414,8 @@ void BaseApplication::ButtonHandler(AppEvent * aEvent)
     }
     else
     {
-        // If the button was released before factory reset got initiated, start BLE advertissement in fast mode
+        // If the button was released before factory reset got initiated, open the commissioning window and start BLE advertissement
+        // in fast mode
         if (mFunctionTimerActive && mFunction == kFunction_StartBleAdv)
         {
             CancelFunctionTimer();
@@ -431,9 +432,14 @@ void BaseApplication::ButtonHandler(AppEvent * aEvent)
             if (!ConnectivityMgr().IsThreadProvisioned())
 #endif /* !SL_WIFI */
             {
-                // Enable BLE advertisements
-                ConnectivityMgr().SetBLEAdvertisingEnabled(true);
-                ConnectivityMgr().SetBLEAdvertisingMode(ConnectivityMgr().kFastAdvertising);
+                // Open Basic CommissioningWindow. Will start BLE advertisements
+                chip::DeviceLayer::PlatformMgr().LockChipStack();
+                CHIP_ERROR err = chip::Server::GetInstance().GetCommissioningWindowManager().OpenBasicCommissioningWindow();
+                chip::DeviceLayer::PlatformMgr().UnlockChipStack();
+                if (err != CHIP_NO_ERROR)
+                {
+                    EFR32_LOG("Failed to open the Basic Commissioning Window");
+                }
             }
             else { EFR32_LOG("Network is already provisioned, Ble advertissement not enabled"); }
         }