[nrfconnect] Added support all-clusters-app (#15407)

* [all-clusters-app] Added support for nrfconnect platform.

Signed-off-by: markaj-nordic <marcin.kajor@nordicsemi.no>

* Restyled by prettier-markdown

* Restyled by prettier-yaml

* [all-clusters-app-nrf] Fixed the initialization steps.

Signed-off-by: markaj-nordic <marcin.kajor@nordicsemi.no>

Co-authored-by: Restyled.io <commits@restyled.io>
diff --git a/.github/workflows/examples-nrfconnect.yaml b/.github/workflows/examples-nrfconnect.yaml
index 104b298..596aa13 100644
--- a/.github/workflows/examples-nrfconnect.yaml
+++ b/.github/workflows/examples-nrfconnect.yaml
@@ -144,6 +144,14 @@
                     nrfconnect nrf52840dk_nrf52840 pump-controller-app \
                     examples/pump-controller-app/nrfconnect/build/zephyr/zephyr.elf \
                     /tmp/bloat_reports/
+            - name: Build example nRF Connect SDK All Clusters App on nRF52840 DK
+              timeout-minutes: 10
+              run: |
+                  scripts/examples/nrfconnect_example.sh all-clusters-app nrf52840dk_nrf52840
+                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
+                    nrfconnect nrf52840dk_nrf52840 all-clusters-app \
+                    examples/all-clusters-app/nrfconnect/build/zephyr/zephyr.elf \
+                    /tmp/bloat_reports/
             - name: Run unit tests for Zephyr native_posix_64 platform
               timeout-minutes: 10
               run: |
diff --git a/examples/all-clusters-app/nrfconnect/CMakeLists.txt b/examples/all-clusters-app/nrfconnect/CMakeLists.txt
new file mode 100644
index 0000000..6b826df
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/CMakeLists.txt
@@ -0,0 +1,84 @@
+#
+#    Copyright (c) 2022 Project CHIP Authors
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+cmake_minimum_required(VERSION 3.13.1)
+
+get_filename_component(CHIP_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/third_party/connectedhomeip REALPATH)
+get_filename_component(NLIO_ROOT ${CHIP_ROOT}/third_party/nlio/repo/include REALPATH)
+get_filename_component(NRFCONNECT_COMMON ${CHIP_ROOT}/examples/platform/nrfconnect REALPATH)
+get_filename_component(GEN_DIR ${CHIP_ROOT}/zzz_generated/ REALPATH)
+get_filename_component(ALL_CLUSTERS_COMMON_DIR ${CHIP_ROOT}/examples/all-clusters-app/all-clusters-common REALPATH)
+
+include(${CHIP_ROOT}/config/nrfconnect/app/check-nrfconnect-version.cmake)
+
+# Load NCS/Zephyr build system
+set(CONF_FILE ${CHIP_ROOT}/config/nrfconnect/app/sample-defaults.conf prj.conf)
+
+if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/boards/${BOARD}.conf)
+  list(APPEND CONF_FILE boards/${BOARD}.conf)
+endif()
+
+option(BUILD_WITH_DFU "Build target with Device Firmware Upgrade support" OFF)
+if(BUILD_WITH_DFU)
+    list(INSERT OVERLAY_CONFIG 0 ${CHIP_ROOT}/config/nrfconnect/app/overlay-mcuboot_qspi_nor_support.conf)
+    # Enable Matter OTA Requestor
+    list(INSERT OVERLAY_CONFIG 0 ${CHIP_ROOT}/config/nrfconnect/app/overlay-ota_requestor.conf)
+    if(BOARD STREQUAL "nrf5340dk_nrf5340_cpuapp")
+        set(mcuboot_OVERLAY_CONFIG ${CMAKE_CURRENT_SOURCE_DIR}/configuration/mcuboot_multi_image_dfu.conf CACHE INTERNAL "")
+    else()
+        set(mcuboot_OVERLAY_CONFIG ${CMAKE_CURRENT_SOURCE_DIR}/configuration/mcuboot_single_image_dfu.conf CACHE INTERNAL "")
+    endif()
+    set(PM_STATIC_YML_FILE ${CMAKE_CURRENT_SOURCE_DIR}/configuration/${BOARD}/pm_static.yml)
+endif()
+
+list(APPEND ZEPHYR_EXTRA_MODULES ${CHIP_ROOT}/config/nrfconnect/chip-module)
+find_package(Zephyr HINTS $ENV{ZEPHYR_BASE})
+
+# -Wmaybe-uninitialized has too many false positives, including on std::optional
+# and chip::Optional.  Make it nonfatal.
+#
+# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80635
+target_compile_options(app PRIVATE -Werror -Wno-error=maybe-uninitialized)
+
+project(chip-nrfconnect-all-clusters-app-example)
+
+include(${CHIP_ROOT}/config/nrfconnect/app/enable-gnu-std.cmake)
+include(${CHIP_ROOT}/config/nrfconnect/app/flashing.cmake)
+include(${CHIP_ROOT}/src/app/chip_data_model.cmake)
+
+target_include_directories(app PRIVATE
+                           main/include
+                           ${ALL_CLUSTERS_COMMON_DIR}/include
+                           ${GEN_DIR}/app-common
+                           ${GEN_DIR}/all-clusters-app
+                           ${NLIO_ROOT}
+                           ${NRFCONNECT_COMMON}/util/include)
+
+target_sources(app PRIVATE
+               main/AppTask.cpp
+               main/main.cpp
+               ${ALL_CLUSTERS_COMMON_DIR}/src/static-supported-modes-manager.cpp
+               ${ALL_CLUSTERS_COMMON_DIR}/src/bridged-actions-stub.cpp
+               ${GEN_DIR}/all-clusters-app/zap-generated/callback-stub.cpp
+               ${GEN_DIR}/all-clusters-app/zap-generated/IMClusterCommandHandler.cpp
+               ${NRFCONNECT_COMMON}/util/LEDWidget.cpp
+               ${CHIP_ROOT}/src/app/clusters/ota-requestor/OTARequestor.cpp
+               ${CHIP_ROOT}/src/app/clusters/ota-requestor/BDXDownloader.cpp)
+
+
+chip_configure_data_model(app
+    INCLUDE_SERVER
+    ZAP_FILE ${ALL_CLUSTERS_COMMON_DIR}/all-clusters-app.zap
+)
diff --git a/examples/all-clusters-app/nrfconnect/Kconfig b/examples/all-clusters-app/nrfconnect/Kconfig
new file mode 100644
index 0000000..4d6115b
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/Kconfig
@@ -0,0 +1,25 @@
+#
+#    Copyright (c) 2022 Project CHIP Authors
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+mainmenu "Matter nRF Connect All Clusters Example Application"
+
+config STATE_LEDS
+	bool "Use LEDs to indicate the device state"
+	default y
+	help
+	  Use LEDs to render the current state of the device such as the progress of commissioning of
+	  the device into a network or the factory reset initiation.
+
+source "Kconfig.zephyr"
diff --git a/examples/all-clusters-app/nrfconnect/README.md b/examples/all-clusters-app/nrfconnect/README.md
new file mode 100644
index 0000000..2f99482
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/README.md
@@ -0,0 +1,411 @@
+# Matter nRF Connect All Clusters Example Application
+
+The nRF All Clusters Example Application implements various ZCL clusters
+populated on three endpoints. You can use this example as a reference for
+creating your own application.
+
+<p align="center">
+  <img src="../../platform/nrfconnect/doc/images/Logo_RGB_H-small.png" alt="Nordic Semiconductor logo"/>
+  <img src="../../platform/nrfconnect/doc/images/nRF52840-DK-small.png" alt="nRF52840 DK">
+</p>
+
+The example is based on
+[Matter](https://github.com/project-chip/connectedhomeip) and Nordic
+Semiconductor's nRF Connect SDK, and was created to facilitate testing and
+certification of a Matter device communicating over a low-power, 802.15.4 Thread
+network.
+
+The example behaves as a Matter accessory, that is a device that can be paired
+into an existing Matter network and can be controlled by this network.
+
+<hr>
+
+-   [Overview](#overview)
+    -   [Bluetooth LE advertising](#bluetooth-le-advertising)
+    -   [Bluetooth LE rendezvous](#bluetooth-le-rendezvous)
+-   [Requirements](#requirements)
+    -   [Supported devices](#supported_devices)
+-   [Device UI](#device-ui)
+-   [Setting up the environment](#setting-up-the-environment)
+    -   [Using Docker container for setup](#using-docker-container-for-setup)
+    -   [Using native shell for setup](#using-native-shell-for-setup)
+-   [Building](#building)
+    -   [Removing build artifacts](#removing-build-artifacts)
+    -   [Building with release configuration](#building-with-release-configuration)
+    -   [Building with low-power configuration](#building-with-low-power-configuration)
+    -   [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+-   [Configuring the example](#configuring-the-example)
+-   [Flashing and debugging](#flashing-and-debugging)
+-   [Testing the example](#testing-the-example)
+    -   [Testing using CHIPTool](#testing-using-chiptool)
+
+<hr>
+
+<a name="overview"></a>
+
+## Overview
+
+This example is running on the nRF Connect platform, which is based on Nordic
+Semiconductor's
+[nRF Connect SDK](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/index.html)
+and [Zephyr RTOS](https://zephyrproject.org/). Visit Matter's
+[nRF Connect platform overview](../../../docs/guides/nrfconnect_platform_overview.md)
+to read more about the platform structure and dependencies.
+
+The Matter device that runs the all clusters application is controlled by the
+Matter controller device over the Thread protocol. By default, the Matter device
+has Thread disabled, and it should be paired with Matter controller and get
+configuration from it. Some actions required before establishing full
+communication are described below.
+
+### Bluetooth LE advertising
+
+In this example, to commission the device onto a Matter network, it must be
+discoverable over Bluetooth LE. For security reasons, you must start Bluetooth
+LE advertising manually after powering up the device by pressing **Button 4**.
+
+### Bluetooth LE rendezvous
+
+In this example, the commissioning procedure is done over Bluetooth LE between a
+Matter device and the Matter controller, where the controller has the
+commissioner role.
+
+To start the rendezvous, the controller must get the commissioning information
+from the Matter device. The data payload is encoded within a QR code, printed to
+the UART console.
+
+#### Thread provisioning
+
+Last part of the rendezvous procedure, the provisioning operation involves
+sending the Thread network credentials from the Matter controller to the Matter
+device. As a result, device is able to join the Thread network and communicate
+with other Thread devices in the network.
+
+<hr>
+
+<a name="requirements"></a>
+
+## Requirements
+
+The application requires a specific revision of the nRF Connect SDK to work
+correctly. See [Setting up the environment](#setting-up-the-environment) for
+more information.
+
+<a name="supported_devices"></a>
+
+### Supported devices
+
+The example supports building and running on the following devices:
+
+| Hardware platform                                                                         | Build target               | Platform image                                                                                                                                   |
+| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
+| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk_nrf52840`      | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
+| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK)   | `nrf5340dk_nrf5340_cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details>    |
+
+<hr>
+
+<a name="device-ui"></a>
+
+## Device UI
+
+This section lists the User Interface elements that you can use to control and
+monitor the state of the device. These correspond to PCB components on the
+platform image.
+
+**LED 1** shows the overall state of the device and its connectivity. The
+following states are possible:
+
+-   _Short Flash On (50 ms on/950 ms off)_ &mdash; The device is in the
+    unprovisioned (unpaired) state and is waiting for a commissioning
+    application to connect.
+
+-   _Rapid Even Flashing (100 ms on/100 ms off)_ &mdash; The device is in the
+    unprovisioned state and a commissioning application is connected through
+    Bluetooth LE.
+
+-   _Short Flash Off (950ms on/50ms off)_ &mdash; The device is fully
+    provisioned, but does not yet have full Thread network or service
+    connectivity.
+
+-   _Solid On_ &mdash; The device is fully provisioned and has full Thread
+    network and service connectivity.
+
+**Button 1** can be used for the following purposes:
+
+-   _Pressed for 6 s_ &mdash; Initiates the factory reset of the device.
+    Releasing the button within the 6-second window cancels the factory reset
+    procedure. **LEDs 1-4** blink in unison when the factory reset procedure is
+    initiated.
+
+**Button 4** &mdash; Pressing the button once starts Bluetooth LE advertising
+for the predefined period of time (15 minutes by default).
+
+**SEGGER J-Link USB port** can be used to get logs from the device or
+communicate with it using the
+[command line interface](../../../docs/guides/nrfconnect_examples_cli.md).
+
+<hr>
+
+## Setting up the environment
+
+Before building the example, check out the Matter repository and sync submodules
+using the following command:
+
+        $ git submodule update --init
+
+The example requires a specific revision of the nRF Connect SDK. You can either
+install it along with the related tools directly on your system or use a Docker
+image that has the tools pre-installed.
+
+If you are a macOS user, you won't be able to use the Docker container to flash
+the application onto a Nordic development kit due to
+[certain limitations of Docker for macOS](https://docs.docker.com/docker-for-mac/faqs/#can-i-pass-through-a-usb-device-to-a-container).
+Use the [native shell](#using-native-shell) for building instead.
+
+### Using Docker container for setup
+
+To use the Docker container for setup, complete the following steps:
+
+1.  If you do not have the nRF Connect SDK installed yet, create a directory for
+    it by running the following command:
+
+        $ mkdir ~/nrfconnect
+
+2.  Download the latest version of the nRF Connect SDK Docker image by running
+    the following command:
+
+        $ docker pull nordicsemi/nrfconnect-chip
+
+3.  Start Docker with the downloaded image by running the following command,
+    customized to your needs as described below:
+
+         $ docker run --rm -it -e RUNAS=$(id -u) -v ~/nrfconnect:/var/ncs -v ~/connectedhomeip:/var/chip \
+             -v /dev/bus/usb:/dev/bus/usb --device-cgroup-rule "c 189:* rmw" nordicsemi/nrfconnect-chip
+
+    In this command:
+
+    -   _~/nrfconnect_ can be replaced with an absolute path to the nRF Connect
+        SDK source directory.
+    -   _~/connectedhomeip_ must be replaced with an absolute path to the CHIP
+        source directory.
+    -   _-v /dev/bus/usb:/dev/bus/usb --device-cgroup-rule "c 189:_ rmw"\*
+        parameters can be omitted if you are not planning to flash the example
+        onto hardware. These parameters give the container access to USB devices
+        connected to your computer such as the nRF52840 DK.
+    -   _--rm_ can be omitted if you do not want the container to be
+        auto-removed when you exit the container shell session.
+    -   _-e RUNAS=\$(id -u)_ is needed to start the container session as the
+        current user instead of root.
+
+4.  Update the nRF Connect SDK to the most recent supported revision, by running
+    the following command:
+
+         $ cd /var/chip
+         $ python3 scripts/setup/nrfconnect/update_ncs.py --update
+
+Now you can proceed with the [Building](#building) instruction.
+
+### Using native shell for setup
+
+To use the native shell for setup, complete the following steps:
+
+1.  Download and install the following additional software:
+
+    -   [nRF Command Line Tools](https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Command-Line-Tools)
+    -   [GN meta-build system](https://gn.googlesource.com/gn/)
+
+2.  If you do not have the nRF Connect SDK installed, follow the
+    [guide](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/gs_assistant.html#)
+    in the nRF Connect SDK documentation to install the latest stable nRF
+    Connect SDK version. Since command-line tools will be used for building the
+    example, installing SEGGER Embedded Studio is not required.
+
+    If you have the SDK already installed, continue to the next step and update
+    the nRF Connect SDK after initializing environment variables.
+
+3.  Initialize environment variables referred to by the CHIP and the nRF Connect
+    SDK build scripts. Replace _nrfconnect-dir_ with the path to your nRF
+    Connect SDK installation directory, and _toolchain-dir_ with the path to GNU
+    Arm Embedded Toolchain.
+
+         $ source nrfconnect-dir/zephyr/zephyr-env.sh
+         $ export ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
+         $ export GNUARMEMB_TOOLCHAIN_PATH=toolchain-dir
+
+4.  Update the nRF Connect SDK to the most recent supported revision by running
+    the following command (replace _matter-dir_ with the path to Matter
+    repository directory):
+
+         $ cd matter-dir
+         $ python3 scripts/setup/nrfconnect/update_ncs.py --update
+
+Now you can proceed with the [Building](#building) instruction.
+
+<hr>
+
+<a name="building"></a>
+
+## Building
+
+Complete the following steps, regardless of the method used for setting up the
+environment:
+
+1.  Navigate to the example's directory:
+
+        $ cd examples/all-clusters-app/nrfconnect
+
+2.  Run the following command to build the example, with _build-target_ replaced
+    with the build target name of the Nordic Semiconductor's kit you own, for
+    example `nrf52840dk_nrf52840`:
+
+         $ west build -b build-target
+
+    You only need to specify the build target on the first build. See
+    [Requirements](#requirements) for the build target names of compatible kits.
+
+The output `zephyr.hex` file will be available in the `build/zephyr/` directory.
+
+### Removing build artifacts
+
+If you're planning to build the example for a different kit or make changes to
+the configuration, remove all build artifacts before building. To do so, use the
+following command:
+
+    $ rm -r build
+
+### Building with release configuration
+
+To build the example with release configuration that disables the diagnostic
+features like logs and command-line interface, run the following command:
+
+    $ west build -b build-target -- -DOVERLAY_CONFIG=third_party/connectedhomeip/config/nrfconnect/app/release.conf
+
+Remember to replace _build-target_ with the build target name of the Nordic
+Semiconductor's kit you own.
+
+### Building with low-power configuration
+
+You can build the example using the low-power configuration, which enables
+Thread's Sleepy End Device mode and disables debug features, such as the UART
+console or the **LED 1** usage.
+
+To build for the low-power configuration, run the following command with
+_build-target_ replaced with the build target name of the Nordic Semiconductor's
+kit you own (for example `nrf52840dk_nrf52840`):
+
+    $ west build -b build-target -- -DOVERLAY_CONFIG=overlay-low_power.conf
+
+For example, use the following command for `nrf52840dk_nrf52840`:
+
+    $ west build -b nrf52840dk_nrf52840 -- -DOVERLAY_CONFIG=overlay-low_power.conf
+
+### Building with Device Firmware Upgrade support
+
+Support for DFU using Matter OTA is disabled by default.
+
+To build the example with configuration that supports DFU, run the following
+command with _build-target_ replaced with the build target name of the Nordic
+Semiconductor kit you are using (for example `nrf52840dk_nrf52840`):
+
+    $ west build -b build-target -- -DBUILD_WITH_DFU=1
+
+> **Note**:
+>
+> There are two types of Device Firmware Upgrade modes: single-image DFU and
+> multi-image DFU. Single-image mode supports upgrading only one firmware image,
+> the application image, and should be used for single-core nRF52840 DK devices.
+> Multi-image mode allows to upgrade more firmware images and is suitable for
+> upgrading the application core and network core firmware in two-core nRF5340
+> DK devices.
+>
+> Currently the multi-image mode is not available for the Matter OTA DFU.
+
+#### Changing Device Firmware Upgrade configuration
+
+To change the default DFU configuration, edit the following overlay files
+corresponding to the selected configuration:
+
+-   `overlay-mcuboot_qspi_nor_support.conf` - general file enabling MCUboot and
+    QSPI NOR support, used by all DFU configurations
+-   `overlay-ota_requestor.conf` - file enabling Matter OTA Requestor support.
+
+The files are located in the `config/nrfconnect/app` directory. You can also
+define the desired options in your example's `prj.conf` file.
+
+#### Changing bootloader configuration
+
+To change the default MCUboot configuration, edit the
+`mcuboot_single_image_dfu.conf` or `mcuboot_multi_image_dfu.conf` overlay files
+depending on whether the build target device supports multi-image DFU (nRF5340
+DK) or single-image DFU (nRF52840 DK). The files are located in the
+`configuration` directory.
+
+#### Changing flash memory settings
+
+In the default configuration, the MCUboot uses the
+[Partition Manager](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/scripts/partition_manager/partition_manager.html#partition-manager)
+to configure flash partitions used for the bootloader application image slot
+purposes. You can change these settings by defining
+[static partitions](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/scripts/partition_manager/partition_manager.html#ug-pm-static).
+This example uses this option to define using an external flash.
+
+To modify the flash settings of your board (that is, your _build-target_, for
+example `nrf52840dk_nrf52840`), edit the `pm_static.yml` file located in the
+`configuration/build-target/` directory.
+
+<hr>
+
+<a name="configuring"></a>
+
+## Configuring the example
+
+The Zephyr ecosystem is based on Kconfig files and the settings can be modified
+using the menuconfig utility.
+
+To open the menuconfig utility, run the following command from the example
+directory:
+
+    $ west build -b build-target -t menuconfig
+
+Remember to replace _build-target_ with the build target name of the Nordic
+Semiconductor's kit you own.
+
+Changes done with menuconfig will be lost if the `build` directory is deleted.
+To make them persistent, save the configuration options in the `prj.conf` file.
+For more information, see the
+[Configuring nRF Connect SDK examples](../../../docs/guides/nrfconnect_examples_configuration.md)
+page.
+
+<hr>
+
+<a name="flashing"></a>
+
+## Flashing and debugging
+
+To flash the application to the device, use the west tool and run the following
+command from the example directory:
+
+        $ west flash --erase
+
+If you have multiple development kits connected, west will prompt you to pick
+the correct one.
+
+To debug the application on target, run the following command from the example
+directory:
+
+        $ west debug
+
+<hr>
+
+## Testing the example
+
+Check the [CLI tutorial](../../../docs/guides/nrfconnect_examples_cli.md) to
+learn how to use command-line interface of the application.
+
+### Testing using CHIPTool
+
+Read the
+[Android commissioning guide](../../../docs/guides/nrfconnect_android_commissioning.md)
+to see how to use [CHIPTool](../../../src/android/CHIPTool/README.md) for
+Android smartphones to commission and control the application within a
+Matter-enabled Thread network.
diff --git a/examples/all-clusters-app/nrfconnect/boards/nrf52840dk_nrf52840.conf b/examples/all-clusters-app/nrfconnect/boards/nrf52840dk_nrf52840.conf
new file mode 100644
index 0000000..fb419f0
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/boards/nrf52840dk_nrf52840.conf
@@ -0,0 +1,17 @@
+#
+#    Copyright (c) 2022 Project CHIP Authors
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+
+CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
diff --git a/examples/all-clusters-app/nrfconnect/boards/nrf52840dk_nrf52840.overlay b/examples/all-clusters-app/nrfconnect/boards/nrf52840dk_nrf52840.overlay
new file mode 100644
index 0000000..04253ef
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/boards/nrf52840dk_nrf52840.overlay
@@ -0,0 +1,57 @@
+/*
+ *    Copyright (c) 2022 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/ {
+	chosen {
+		nordic,pm-ext-flash = &mx25r64;
+	};
+
+	/*
+	* In some default configurations within the nRF Connect SDK,
+	* e.g. on nRF52840, the chosen zephyr,entropy node is &cryptocell.
+	* This devicetree overlay ensures that default is overridden wherever it
+	* is set, as this application uses the RNG node for entropy exclusively.
+	*/
+	chosen {
+		zephyr,entropy = &rng;
+	};
+};
+
+/* Disable unused peripherals to reduce power consumption */
+&adc {
+	status = "disabled";
+};
+&uart1 {
+	status = "disabled";
+};
+&gpio1 {
+	status = "disabled";
+};
+&i2c0 {
+	status = "disabled";
+};
+&pwm0 {
+	status = "disabled";
+};
+&spi1 {
+	status = "disabled";
+};
+&spi3 {
+	status = "disabled";
+};
+&usbd {
+	status = "disabled";
+};
diff --git a/examples/all-clusters-app/nrfconnect/boards/nrf5340dk_nrf5340_cpuapp.conf b/examples/all-clusters-app/nrfconnect/boards/nrf5340dk_nrf5340_cpuapp.conf
new file mode 100644
index 0000000..ce2e61e
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/boards/nrf5340dk_nrf5340_cpuapp.conf
@@ -0,0 +1,17 @@
+#
+#    Copyright (c) 2022 Project CHIP Authors
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+
+CONFIG_XOROSHIRO_RANDOM_GENERATOR=y
diff --git a/examples/all-clusters-app/nrfconnect/boards/nrf5340dk_nrf5340_cpuapp.overlay b/examples/all-clusters-app/nrfconnect/boards/nrf5340dk_nrf5340_cpuapp.overlay
new file mode 100644
index 0000000..5be8b8f
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/boards/nrf5340dk_nrf5340_cpuapp.overlay
@@ -0,0 +1,86 @@
+/*
+ *    Copyright (c) 2022 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/ {
+	chosen {
+		nordic,pm-ext-flash = &mx25r64;
+	};
+
+	soc {
+		/* Add a flash controller which has the compatible
+		 * 'zephyr,sim-flash'. This will ensure that the flash
+		 * simulator can use it. None of the other properties in this
+		 * node is used for anything.
+		 */
+		nordic_ram_flash_controller: nordic_ram-flash-controller@0 {
+			compatible = "zephyr,sim-flash";
+			reg = <0x00000000 DT_SIZE_K(40)>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			erase-value = <0xff>;
+			label = "nordic_ram_flash_flash_controller";
+
+			/* This node label must match that used in the flash
+			 * simulator.
+			 */
+			flash_sim0: flash_sim@0 {
+				status = "okay";
+				compatible = "soc-nv-flash";
+				label = "simulated_flash";
+				erase-block-size = <4096>;
+				write-block-size = <4>;
+				reg = <0x00000000 DT_SIZE_K(256)>;
+
+				partitions {
+					compatible = "fixed-partitions";
+					#address-cells = <1>;
+					#size-cells = <1>;
+
+					/* This partition must be defined for
+					 * MCUboot to find the partition ID
+					 * of the primary slot for image 1,
+					 * which is stored in this partition.
+					 */
+					slot2_partition: partition@0 {
+						label = "image-2";
+						reg = <0x00000000 0x00000A000>;
+					};
+				};
+			};
+		};
+	};
+
+};
+
+/* Disable unused peripherals to reduce power consumption */
+&adc {
+	status = "disabled";
+};
+&gpio1 {
+	status = "disabled";
+};
+&i2c1 {
+	status = "disabled";
+};
+&pwm0 {
+	status = "disabled";
+};
+&spi2 {
+	status = "disabled";
+};
+&usbd {
+	status = "disabled";
+};
diff --git a/examples/all-clusters-app/nrfconnect/child_image/multiprotocol_rpmsg.conf b/examples/all-clusters-app/nrfconnect/child_image/multiprotocol_rpmsg.conf
new file mode 100644
index 0000000..b22013c
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/child_image/multiprotocol_rpmsg.conf
@@ -0,0 +1,22 @@
+#
+#   Copyright (c) 2022 Project CHIP Authors
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+
+CONFIG_BT_PERIPHERAL=y
+CONFIG_BT_CENTRAL=n
+CONFIG_BT_MAX_CONN=1
+CONFIG_BT_BUF_ACL_RX_SIZE=502
+CONFIG_BT_BUF_ACL_TX_SIZE=251
+CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
diff --git a/examples/all-clusters-app/nrfconnect/configuration/mcuboot_multi_image_dfu.conf b/examples/all-clusters-app/nrfconnect/configuration/mcuboot_multi_image_dfu.conf
new file mode 100644
index 0000000..ccc6943
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/configuration/mcuboot_multi_image_dfu.conf
@@ -0,0 +1,52 @@
+#
+#   Copyright (c) 2021 Project CHIP Authors
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+
+# QSPI configuration
+CONFIG_NORDIC_QSPI_NOR=y
+CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
+CONFIG_NORDIC_QSPI_NOR_STACK_WRITE_BUFFER_SIZE=16
+
+CONFIG_BOOT_MAX_IMG_SECTORS=256
+
+# The following configurations are required to support simultaneous multi image update
+CONFIG_PCD_APP=y
+CONFIG_UPDATEABLE_IMAGE_NUMBER=2
+CONFIG_BOOT_UPGRADE_ONLY=y
+# The network core cannot access external flash directly. The flash simulator must be used to
+# provide a memory region that is used to forward the new firmware to the network core.
+CONFIG_FLASH_SIMULATOR=y
+CONFIG_FLASH_SIMULATOR_DOUBLE_WRITES=y
+CONFIG_FLASH_SIMULATOR_STATS=n
+
+# Enable custom command to erase settings partition.
+CONFIG_ENABLE_MGMT_PERUSER=y
+CONFIG_BOOT_MGMT_CUSTOM_STORAGE_ERASE=y
+
+# bootloader size optimization
+CONFIG_LOG=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE_HANDLER=n
+CONFIG_BOOT_BANNER=n
+CONFIG_TIMESLICING=n
+CONFIG_RESET_ON_FATAL_ERROR=n
+CONFIG_MULTITHREADING=n
+CONFIG_TICKLESS_KERNEL=n
+CONFIG_TIMEOUT_64BIT=n
+CONFIG_USE_SEGGER_RTT=n
+CONFIG_GPIO=n
+CONFIG_NRF_ENABLE_ICACHE=n
diff --git a/examples/all-clusters-app/nrfconnect/configuration/mcuboot_single_image_dfu.conf b/examples/all-clusters-app/nrfconnect/configuration/mcuboot_single_image_dfu.conf
new file mode 100644
index 0000000..807ba68
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/configuration/mcuboot_single_image_dfu.conf
@@ -0,0 +1,38 @@
+#
+#   Copyright (c) 2021 Project CHIP Authors
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+
+# QSPI configuration
+CONFIG_NORDIC_QSPI_NOR=y
+CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
+CONFIG_NORDIC_QSPI_NOR_STACK_WRITE_BUFFER_SIZE=16
+
+CONFIG_BOOT_MAX_IMG_SECTORS=256
+
+# bootloader size optimization
+CONFIG_LOG=n
+CONFIG_CONSOLE=n
+CONFIG_SERIAL=n
+CONFIG_UART_CONSOLE=n
+CONFIG_CONSOLE_HANDLER=n
+CONFIG_BOOT_BANNER=n
+CONFIG_TIMESLICING=n
+CONFIG_RESET_ON_FATAL_ERROR=n
+CONFIG_MULTITHREADING=n
+CONFIG_TICKLESS_KERNEL=n
+CONFIG_TIMEOUT_64BIT=n
+CONFIG_USE_SEGGER_RTT=n
+CONFIG_GPIO=n
+CONFIG_NRF_ENABLE_ICACHE=n
diff --git a/examples/all-clusters-app/nrfconnect/configuration/nrf52840dk_nrf52840/pm_static.yml b/examples/all-clusters-app/nrfconnect/configuration/nrf52840dk_nrf52840/pm_static.yml
new file mode 100644
index 0000000..9c26550
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/configuration/nrf52840dk_nrf52840/pm_static.yml
@@ -0,0 +1,38 @@
+mcuboot:
+    address: 0x0
+    size: 0x7000
+    region: flash_primary
+mcuboot_pad:
+    address: 0x7000
+    size: 0x200
+app:
+    address: 0x7200
+    size: 0xf0e00
+mcuboot_primary:
+    orig_span: &id001
+        - mcuboot_pad
+        - app
+    span: *id001
+    address: 0x7000
+    size: 0xf1000
+    region: flash_primary
+mcuboot_primary_app:
+    orig_span: &id002
+        - app
+    span: *id002
+    address: 0x7200
+    size: 0xf0e00
+settings_storage:
+    address: 0xf8000
+    size: 0x8000
+    region: flash_primary
+mcuboot_secondary:
+    address: 0x0
+    size: 0xf1000
+    device: MX25R64
+    region: external_flash
+external_flash:
+    address: 0xf1000
+    size: 0x70f000
+    device: MX25R64
+    region: external_flash
diff --git a/examples/all-clusters-app/nrfconnect/configuration/nrf5340dk_nrf5340_cpuapp/pm_static.yml b/examples/all-clusters-app/nrfconnect/configuration/nrf5340dk_nrf5340_cpuapp/pm_static.yml
new file mode 100644
index 0000000..9f9f677
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/configuration/nrf5340dk_nrf5340_cpuapp/pm_static.yml
@@ -0,0 +1,52 @@
+mcuboot:
+    address: 0x0
+    size: 0xC000
+    region: flash_primary
+mcuboot_pad:
+    address: 0xC000
+    size: 0x200
+app:
+    address: 0xC200
+    size: 0xebe00
+mcuboot_primary:
+    orig_span: &id001
+        - mcuboot_pad
+        - app
+    span: *id001
+    address: 0xC000
+    size: 0xec000
+    region: flash_primary
+mcuboot_primary_app:
+    orig_span: &id002
+        - app
+    span: *id002
+    address: 0xC200
+    size: 0xebe00
+settings_storage:
+    address: 0xf8000
+    size: 0x8000
+    region: flash_primary
+mcuboot_primary_1:
+    address: 0x0
+    size: 0x40000
+    device: flash_ctrl
+    region: ram_flash
+mcuboot_secondary:
+    address: 0x0
+    size: 0xec000
+    device: MX25R64
+    region: external_flash
+mcuboot_secondary_1:
+    address: 0xec000
+    size: 0x40000
+    device: MX25R64
+    region: external_flash
+external_flash:
+    address: 0x12C000
+    size: 0x6D4000
+    device: MX25R64
+    region: external_flash
+pcd_sram:
+    address: 0x20000000
+    size: 0x2000
+    region: sram_primary
diff --git a/examples/all-clusters-app/nrfconnect/main/AppTask.cpp b/examples/all-clusters-app/nrfconnect/main/AppTask.cpp
new file mode 100644
index 0000000..48a3dc1
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/main/AppTask.cpp
@@ -0,0 +1,404 @@
+/*
+ *    Copyright (c) 2022 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#include "AppTask.h"
+#include "AppConfig.h"
+#include "AppEvent.h"
+#include "Utils.h"
+
+#include <app/server/OnboardingCodesUtil.h>
+#include <app/server/Server.h>
+
+#include <app-common/zap-generated/attribute-id.h>
+#include <app-common/zap-generated/attribute-type.h>
+#include <app-common/zap-generated/cluster-id.h>
+#include <app/util/attribute-storage.h>
+
+#include <credentials/DeviceAttestationCredsProvider.h>
+#include <credentials/examples/DeviceAttestationCredsExample.h>
+
+#include <dk_buttons_and_leds.h>
+#include <logging/log.h>
+#include <zephyr.h>
+
+#define FACTORY_RESET_TRIGGER_TIMEOUT 3000
+#define FACTORY_RESET_CANCEL_WINDOW_TIMEOUT 3000
+#define APP_EVENT_QUEUE_SIZE 10
+#define BUTTON_PUSH_EVENT 1
+#define BUTTON_RELEASE_EVENT 0
+
+LOG_MODULE_DECLARE(app);
+K_MSGQ_DEFINE(sAppEventQueue, sizeof(AppEvent), APP_EVENT_QUEUE_SIZE, alignof(AppEvent));
+
+static LEDWidget sStatusLED;
+static UnusedLedsWrapper<3> sUnusedLeds{ { DK_LED2, DK_LED3, DK_LED4 } };
+static k_timer sFunctionTimer;
+
+namespace LedConsts {
+constexpr uint32_t kBlinkRate_ms{ 500 };
+namespace StatusLed {
+namespace Unprovisioned {
+constexpr uint32_t kOn_ms{ 100 };
+constexpr uint32_t kOff_ms{ kOn_ms };
+} // namespace Unprovisioned
+namespace Provisioned {
+constexpr uint32_t kOn_ms{ 50 };
+constexpr uint32_t kOff_ms{ 950 };
+} // namespace Provisioned
+
+} // namespace StatusLed
+} // namespace LedConsts
+
+using namespace ::chip::Credentials;
+using namespace ::chip::DeviceLayer;
+
+CHIP_ERROR AppTask::Init()
+{
+    // Initialize CHIP stack
+    LOG_INF("Init CHIP stack");
+
+    CHIP_ERROR err = chip::Platform::MemoryInit();
+    if (err != CHIP_NO_ERROR)
+    {
+        LOG_ERR("Platform::MemoryInit() failed");
+        return err;
+    }
+
+    err = PlatformMgr().InitChipStack();
+    if (err != CHIP_NO_ERROR)
+    {
+        LOG_ERR("PlatformMgr().InitChipStack() failed");
+        return err;
+    }
+
+    err = ThreadStackMgr().InitThreadStack();
+    if (err != CHIP_NO_ERROR)
+    {
+        LOG_ERR("ThreadStackMgr().InitThreadStack() failed");
+        return err;
+    }
+
+#ifdef CONFIG_OPENTHREAD_MTD_SED
+    err = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_SleepyEndDevice);
+#else
+    err = ConnectivityMgr().SetThreadDeviceType(ConnectivityManager::kThreadDeviceType_MinimalEndDevice);
+#endif
+    if (err != CHIP_NO_ERROR)
+    {
+        LOG_ERR("ConnectivityMgr().SetThreadDeviceType() failed");
+        return err;
+    }
+
+    // Initialize LEDs
+    LEDWidget::InitGpio();
+    LEDWidget::SetStateUpdateCallback(LEDStateUpdateHandler);
+
+    sStatusLED.Init(SYSTEM_STATE_LED);
+
+    UpdateStatusLED();
+
+    // Initialize buttons
+    auto ret = dk_buttons_init(ButtonEventHandler);
+    if (ret)
+    {
+        LOG_ERR("dk_buttons_init() failed");
+        return chip::System::MapErrorZephyr(ret);
+    }
+
+    // Initialize timer user data
+    k_timer_init(&sFunctionTimer, &AppTask::TimerEventHandler, nullptr);
+    k_timer_user_data_set(&sFunctionTimer, this);
+
+    // Initialize CHIP server
+    SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider());
+    ReturnErrorOnFailure(chip::Server::GetInstance().Init());
+    ConfigurationMgr().LogDeviceConfig();
+    PrintOnboardingCodes(chip::RendezvousInformationFlag(chip::RendezvousInformationFlag::kBLE));
+    InitOTARequestor();
+
+    // Add CHIP event handler and start CHIP thread.
+    // Note that all the initialization code should happen prior to this point to avoid data races
+    // between the main and the CHIP threads
+    PlatformMgr().AddEventHandler(ChipEventHandler, 0);
+    err = PlatformMgr().StartEventLoopTask();
+    if (err != CHIP_NO_ERROR)
+    {
+        LOG_ERR("PlatformMgr().StartEventLoopTask() failed");
+    }
+
+    return err;
+}
+
+void AppTask::InitOTARequestor()
+{
+#if CONFIG_CHIP_OTA_REQUESTOR
+    mOTAImageProcessor.SetOTADownloader(&mBDXDownloader);
+    mBDXDownloader.SetImageProcessorDelegate(&mOTAImageProcessor);
+    mOTARequestorDriver.Init(&mOTARequestor, &mOTAImageProcessor);
+    mOTARequestor.Init(&chip::Server::GetInstance(), &mOTARequestorDriver, &mBDXDownloader);
+    chip::SetRequestorInstance(&mOTARequestor);
+#endif
+}
+
+CHIP_ERROR AppTask::StartApp()
+{
+    ReturnErrorOnFailure(Init());
+
+    AppEvent event{};
+
+    while (true)
+    {
+        k_msgq_get(&sAppEventQueue, &event, K_FOREVER);
+        DispatchEvent(&event);
+    }
+
+    return CHIP_NO_ERROR;
+}
+
+void AppTask::ButtonEventHandler(uint32_t aButtonState, uint32_t aHasChanged)
+{
+    AppEvent event;
+    event.Type = AppEvent::Type::Button;
+
+    if (FUNCTION_BUTTON_MASK & aHasChanged)
+    {
+        event.ButtonEvent.PinNo  = FUNCTION_BUTTON;
+        event.ButtonEvent.Action = (FUNCTION_BUTTON_MASK & aButtonState) ? BUTTON_PUSH_EVENT : BUTTON_RELEASE_EVENT;
+        event.Handler            = FunctionHandler;
+        PostEvent(&event);
+    }
+
+    if (BLE_ADVERTISEMENT_START_BUTTON_MASK & aButtonState & aHasChanged)
+    {
+        event.ButtonEvent.PinNo  = BLE_ADVERTISEMENT_START_BUTTON;
+        event.ButtonEvent.Action = BUTTON_PUSH_EVENT;
+        event.Handler            = StartBLEAdvertisementHandler;
+        PostEvent(&event);
+    }
+}
+
+void AppTask::TimerEventHandler(k_timer * aTimer)
+{
+    if (!aTimer)
+        return;
+
+    AppEvent event;
+    event.Type               = AppEvent::Type::Timer;
+    event.TimerEvent.Context = k_timer_user_data_get(aTimer);
+    event.Handler            = FunctionTimerEventHandler;
+    PostEvent(&event);
+}
+
+void AppTask::FunctionTimerEventHandler(AppEvent * aEvent)
+{
+    if (!aEvent)
+        return;
+    if (aEvent->Type != AppEvent::Type::Timer)
+        return;
+
+    // If we reached here, the button was held past FACTORY_RESET_TRIGGER_TIMEOUT, initiate factory reset
+    if (Instance().mFunctionTimerActive && Instance().mMode == OperatingMode::Normal)
+    {
+        LOG_INF("Factory Reset Triggered. Release button within %ums to cancel.", FACTORY_RESET_TRIGGER_TIMEOUT);
+
+        // Start timer for FACTORY_RESET_CANCEL_WINDOW_TIMEOUT to allow user to cancel, if required.
+        StartTimer(FACTORY_RESET_CANCEL_WINDOW_TIMEOUT);
+        Instance().mMode = OperatingMode::FactoryReset;
+
+#ifdef CONFIG_STATE_LEDS
+        // Turn off all LEDs before starting blink to make sure blink is co-ordinated.
+        sStatusLED.Set(false);
+        sUnusedLeds.Set(false);
+
+        sStatusLED.Blink(LedConsts::kBlinkRate_ms);
+        sUnusedLeds.Blink(LedConsts::kBlinkRate_ms);
+#endif
+    }
+    else if (Instance().mFunctionTimerActive && Instance().mMode == OperatingMode::FactoryReset)
+    {
+        // Actually trigger Factory Reset
+        Instance().mMode = OperatingMode::Normal;
+        ConfigurationMgr().InitiateFactoryReset();
+    }
+}
+
+void AppTask::FunctionHandler(AppEvent * aEvent)
+{
+    if (!aEvent)
+        return;
+    if (aEvent->ButtonEvent.PinNo != FUNCTION_BUTTON)
+        return;
+
+    // To initiate factory reset: press the FUNCTION_BUTTON for FACTORY_RESET_TRIGGER_TIMEOUT + FACTORY_RESET_CANCEL_WINDOW_TIMEOUT
+    // All LEDs start blinking after FACTORY_RESET_TRIGGER_TIMEOUT to signal factory reset has been initiated.
+    // To cancel factory reset: release the FUNCTION_BUTTON once all LEDs start blinking within the
+    // FACTORY_RESET_CANCEL_WINDOW_TIMEOUT
+    if (aEvent->ButtonEvent.Action == BUTTON_PUSH_EVENT)
+    {
+        if (!Instance().mFunctionTimerActive && Instance().mMode == OperatingMode::Normal)
+        {
+            StartTimer(FACTORY_RESET_TRIGGER_TIMEOUT);
+        }
+    }
+    else
+    {
+        if (Instance().mFunctionTimerActive && Instance().mMode == OperatingMode::FactoryReset)
+        {
+            sUnusedLeds.Set(false);
+
+            UpdateStatusLED();
+            CancelTimer();
+
+            // Change the function to none selected since factory reset has been canceled.
+            Instance().mMode = OperatingMode::Normal;
+
+            LOG_INF("Factory Reset has been Canceled");
+        }
+        else if (Instance().mFunctionTimerActive)
+        {
+            CancelTimer();
+            Instance().mMode = OperatingMode::Normal;
+        }
+    }
+}
+
+void AppTask::StartBLEAdvertisementHandler(AppEvent * aEvent)
+{
+    if (!aEvent)
+        return;
+    if (aEvent->ButtonEvent.PinNo != BLE_ADVERTISEMENT_START_BUTTON)
+        return;
+
+    // Don't allow on starting Matter service BLE advertising after Thread provisioning.
+    if (ConnectivityMgr().IsThreadProvisioned())
+    {
+        LOG_INF("Matter service BLE advertising not started - device is commissioned to a Thread network.");
+        return;
+    }
+
+    if (ConnectivityMgr().IsBLEAdvertisingEnabled())
+    {
+        LOG_INF("BLE advertising is already enabled");
+        return;
+    }
+
+    if (chip::Server::GetInstance().GetCommissioningWindowManager().OpenBasicCommissioningWindow() != CHIP_NO_ERROR)
+    {
+        LOG_ERR("OpenBasicCommissioningWindow() failed");
+    }
+}
+
+void AppTask::UpdateLedStateEventHandler(AppEvent * aEvent)
+{
+    if (!aEvent)
+        return;
+    if (aEvent->Type == AppEvent::Type::UpdateLedState)
+    {
+        aEvent->UpdateLedStateEvent.LedWidget->UpdateState();
+    }
+}
+
+void AppTask::LEDStateUpdateHandler(LEDWidget & aLedWidget)
+{
+    AppEvent event;
+    event.Type                          = AppEvent::Type::UpdateLedState;
+    event.Handler                       = UpdateLedStateEventHandler;
+    event.UpdateLedStateEvent.LedWidget = &aLedWidget;
+    PostEvent(&event);
+}
+
+void AppTask::UpdateStatusLED()
+{
+#ifdef CONFIG_STATE_LEDS
+    /* Update the status LED.
+     *
+     * If thread and service provisioned, keep the LED On constantly.
+     *
+     * If the system has ble connection(s) uptill the stage above, THEN blink the LED at an even
+     * rate of 100ms.
+     *
+     * Otherwise, blink the LED On for a very short time. */
+    if (Instance().mIsThreadProvisioned && Instance().mIsThreadEnabled)
+    {
+        sStatusLED.Set(true);
+    }
+    else if (Instance().mHaveBLEConnections)
+    {
+        sStatusLED.Blink(LedConsts::StatusLed::Unprovisioned::kOn_ms, LedConsts::StatusLed::Unprovisioned::kOff_ms);
+    }
+    else
+    {
+        sStatusLED.Blink(LedConsts::StatusLed::Provisioned::kOn_ms, LedConsts::StatusLed::Provisioned::kOff_ms);
+    }
+#endif
+}
+
+void AppTask::ChipEventHandler(const ChipDeviceEvent * aEvent, intptr_t /* aArg */)
+{
+    if (!aEvent)
+        return;
+    switch (aEvent->Type)
+    {
+    case DeviceEventType::kCHIPoBLEAdvertisingChange:
+        Instance().mHaveBLEConnections = ConnectivityMgr().NumBLEConnections() != 0;
+        UpdateStatusLED();
+        break;
+    case DeviceEventType::kThreadStateChange:
+        Instance().mIsThreadProvisioned = ConnectivityMgr().IsThreadProvisioned();
+        Instance().mIsThreadEnabled     = ConnectivityMgr().IsThreadEnabled();
+        UpdateStatusLED();
+        break;
+    default:
+        break;
+    }
+}
+
+void AppTask::CancelTimer()
+{
+    k_timer_stop(&sFunctionTimer);
+    Instance().mFunctionTimerActive = false;
+}
+
+void AppTask::StartTimer(uint32_t aTimeoutInMs)
+{
+    k_timer_start(&sFunctionTimer, K_MSEC(aTimeoutInMs), K_NO_WAIT);
+    Instance().mFunctionTimerActive = true;
+}
+
+void AppTask::PostEvent(AppEvent * aEvent)
+{
+    if (!aEvent)
+        return;
+    if (k_msgq_put(&sAppEventQueue, aEvent, K_NO_WAIT))
+    {
+        LOG_INF("Failed to post event to app task event queue");
+    }
+}
+
+void AppTask::DispatchEvent(AppEvent * aEvent)
+{
+    if (!aEvent)
+        return;
+    if (aEvent->Handler)
+    {
+        aEvent->Handler(aEvent);
+    }
+    else
+    {
+        LOG_INF("Event received with no handler. Dropping event.");
+    }
+}
diff --git a/examples/all-clusters-app/nrfconnect/main/include/AppConfig.h b/examples/all-clusters-app/nrfconnect/main/include/AppConfig.h
new file mode 100644
index 0000000..01465d3
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/main/include/AppConfig.h
@@ -0,0 +1,27 @@
+/*
+ *    Copyright (c) 2022 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#pragma once
+
+// ---- All Clusters Application example config ----
+
+#define FUNCTION_BUTTON DK_BTN1
+#define FUNCTION_BUTTON_MASK DK_BTN1_MSK
+#define BLE_ADVERTISEMENT_START_BUTTON DK_BTN4
+#define BLE_ADVERTISEMENT_START_BUTTON_MASK DK_BTN4_MSK
+
+#define SYSTEM_STATE_LED DK_LED1
diff --git a/examples/all-clusters-app/nrfconnect/main/include/AppEvent.h b/examples/all-clusters-app/nrfconnect/main/include/AppEvent.h
new file mode 100644
index 0000000..f6cac85
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/main/include/AppEvent.h
@@ -0,0 +1,56 @@
+/*
+ *    Copyright (c) 2022 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#pragma once
+
+#include <cstdint>
+
+class LEDWidget;
+
+struct AppEvent
+{
+    using EventHandler = void (*)(AppEvent *);
+
+    enum class Type : uint8_t
+    {
+        None,
+        Button,
+        Timer,
+        UpdateLedState,
+    };
+
+    Type Type{ Type::None };
+
+    union
+    {
+        struct
+        {
+            uint8_t PinNo;
+            uint8_t Action;
+        } ButtonEvent;
+        struct
+        {
+            void * Context;
+        } TimerEvent;
+        struct
+        {
+            LEDWidget * LedWidget;
+        } UpdateLedStateEvent;
+    };
+
+    EventHandler Handler;
+};
diff --git a/examples/all-clusters-app/nrfconnect/main/include/AppTask.h b/examples/all-clusters-app/nrfconnect/main/include/AppTask.h
new file mode 100644
index 0000000..3f8b5b8
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/main/include/AppTask.h
@@ -0,0 +1,81 @@
+/*
+ *    Copyright (c) 2022 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#pragma once
+
+#include <platform/CHIPDeviceLayer.h>
+
+#if CONFIG_CHIP_OTA_REQUESTOR
+#include <app/clusters/ota-requestor/BDXDownloader.h>
+#include <app/clusters/ota-requestor/OTARequestor.h>
+#include <platform/GenericOTARequestorDriver.h>
+#include <platform/nrfconnect/OTAImageProcessorImpl.h>
+#endif
+
+struct k_timer;
+class AppEvent;
+class LEDWidget;
+
+class AppTask
+{
+public:
+    static AppTask & Instance(void)
+    {
+        static AppTask sAppTask;
+        return sAppTask;
+    };
+    CHIP_ERROR StartApp();
+
+private:
+    enum class OperatingMode : uint8_t
+    {
+        Normal,
+        FactoryReset,
+        Invalid
+    };
+
+    CHIP_ERROR Init();
+    void DispatchEvent(AppEvent * aEvent);
+    void InitOTARequestor();
+
+    // statics needed to interact with zephyr C API
+    static void CancelTimer(void);
+    static void StartTimer(uint32_t aTimeoutInMs);
+    static void FunctionTimerEventHandler(AppEvent * aEvent);
+    static void FunctionHandler(AppEvent * aEvent);
+    static void ButtonEventHandler(uint32_t aButtonsState, uint32_t aHasChanged);
+    static void TimerEventHandler(k_timer * aTimer);
+    static void PostEvent(AppEvent * aEvent);
+    static void UpdateStatusLED();
+    static void LEDStateUpdateHandler(LEDWidget & aLedWidget);
+    static void UpdateLedStateEventHandler(AppEvent * aEvent);
+    static void StartBLEAdvertisementHandler(AppEvent * aEvent);
+    static void ChipEventHandler(const chip::DeviceLayer::ChipDeviceEvent * aEvent, intptr_t aArg);
+
+    OperatingMode mMode{ OperatingMode::Normal };
+    bool mFunctionTimerActive{ false };
+    bool mIsThreadProvisioned{ false };
+    bool mIsThreadEnabled{ false };
+    bool mHaveBLEConnections{ false };
+
+#if CONFIG_CHIP_OTA_REQUESTOR
+    chip::DeviceLayer::GenericOTARequestorDriver mOTARequestorDriver;
+    chip::DeviceLayer::OTAImageProcessorImpl mOTAImageProcessor;
+    chip::BDXDownloader mBDXDownloader;
+    chip::OTARequestor mOTARequestor;
+#endif
+};
diff --git a/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h b/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h
new file mode 100644
index 0000000..4900072
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/main/include/CHIPProjectConfig.h
@@ -0,0 +1,33 @@
+/*
+ *    Copyright (c) 2022 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+/**
+ *    @file
+ *          Example project configuration file for CHIP.
+ *
+ *          This is a place to put application or project-specific overrides
+ *          to the default configuration values for general CHIP features.
+ *
+ */
+
+#pragma once
+
+// Use a default pairing code if one hasn't been provisioned in flash.
+#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE 20202021
+#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR 0xF00
+
+#define CHIP_DEVICE_CONFIG_SED_SLOW_POLLING_INTERVAL 2000_ms32
diff --git a/examples/all-clusters-app/nrfconnect/main/include/Utils.h b/examples/all-clusters-app/nrfconnect/main/include/Utils.h
new file mode 100644
index 0000000..fe02c3a
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/main/include/Utils.h
@@ -0,0 +1,56 @@
+/*
+ *    Copyright (c) 2022 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#include "LEDWidget.h"
+
+#include <array>
+
+// A lightweight wrrapper for unused LEDs
+template <uint8_t size>
+class UnusedLedsWrapper
+{
+public:
+    using Gpio = uint32_t;
+    using Leds = std::array<std::pair<Gpio, LEDWidget>, size>;
+
+    explicit UnusedLedsWrapper(std::array<Gpio, size> aLeds)
+    {
+        auto idx{ 0 };
+        for (const auto & led : aLeds)
+            mLeds[idx++] = std::make_pair(led, LEDWidget());
+        Init();
+    }
+    void Set(bool aState)
+    {
+        for (auto & led : mLeds)
+            led.second.Set(aState);
+    }
+    void Blink(uint32_t aRate)
+    {
+        for (auto & led : mLeds)
+            led.second.Blink(aRate);
+    }
+
+private:
+    void Init()
+    {
+        LEDWidget::InitGpio();
+        for (auto & led : mLeds)
+            led.second.Init(led.first);
+    }
+    Leds mLeds;
+};
diff --git a/examples/all-clusters-app/nrfconnect/main/main.cpp b/examples/all-clusters-app/nrfconnect/main/main.cpp
new file mode 100644
index 0000000..3e3f506
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/main/main.cpp
@@ -0,0 +1,32 @@
+/*
+ *    Copyright (c) 2022 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#include "AppTask.h"
+
+#include <logging/log.h>
+
+LOG_MODULE_REGISTER(app);
+
+using namespace ::chip;
+
+int main()
+{
+    CHIP_ERROR err = AppTask::Instance().StartApp();
+
+    LOG_ERR("Exited with code %" CHIP_ERROR_FORMAT, err.Format());
+    return err == CHIP_NO_ERROR ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/examples/all-clusters-app/nrfconnect/overlay-low_power.conf b/examples/all-clusters-app/nrfconnect/overlay-low_power.conf
new file mode 100644
index 0000000..c962425
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/overlay-low_power.conf
@@ -0,0 +1,30 @@
+#
+#    Copyright (c) 2022 Project CHIP Authors
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+
+# Enable MTD Sleepy End Device
+CONFIG_CHIP_ENABLE_SLEEPY_END_DEVICE_SUPPORT=y
+
+# Disable UART console
+CONFIG_SHELL=n
+CONFIG_LOG=n
+CONFIG_UART_CONSOLE=n
+CONFIG_SERIAL=n
+
+# Suspend devices when the CPU goes to sleep
+CONFIG_PM_DEVICE=y
+
+# Disable auxiliary state LEDs
+CONFIG_STATE_LEDS=n
diff --git a/examples/all-clusters-app/nrfconnect/prj.conf b/examples/all-clusters-app/nrfconnect/prj.conf
new file mode 100644
index 0000000..d3ba4fa
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/prj.conf
@@ -0,0 +1,41 @@
+#
+#    Copyright (c) 2022 Project CHIP Authors
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+
+# This sample uses sample-defaults.conf to set options common for all
+# samples. This file should contain only options specific for this sample
+# or overrides of default values.
+
+# Add support for LEDs and buttons on Nordic development kits
+CONFIG_DK_LIBRARY=y
+
+# Default OpenThread network settings
+CONFIG_OPENTHREAD_PANID=4660
+CONFIG_OPENTHREAD_CHANNEL=15
+CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread"
+CONFIG_OPENTHREAD_XPANID="11:11:11:11:22:22:22:22"
+
+# Bluetooth overrides
+CONFIG_BT_DEVICE_NAME="AllClusters"
+
+# Additional configs for debbugging experience.
+CONFIG_THREAD_NAME=y
+CONFIG_MPU_STACK_GUARD=y
+
+# CHIP configuration
+CONFIG_CHIP_PROJECT_CONFIG="main/include/CHIPProjectConfig.h"
+
+# CHIP PID: 32769 == 0x8001 (all-clusters-app)
+CONFIG_CHIP_DEVICE_PRODUCT_ID=32769
diff --git a/examples/all-clusters-app/nrfconnect/third_party/connectedhomeip b/examples/all-clusters-app/nrfconnect/third_party/connectedhomeip
new file mode 120000
index 0000000..c866b86
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/third_party/connectedhomeip
@@ -0,0 +1 @@
+../../../..
\ No newline at end of file