[nrfconnect] Updated nRF Connect SDK to 2.5.0 (#30118)

* [nrfconnect] Pushed downstream patches to align with v2.5.0

Pushed all downstream patches aligning nrfconnect platform
to the nRF Connect SDK 2.5.0 version:

* Added support for new Wi-Fi dongle board.

Added enabling Wi-Fi support in Matter if nRF7002 EB is selected
as a shield.

Signed-off-by: Kamil Kasperczyk <kamil.kasperczyk@nordicsemi.no>

* Turn off wpa_supplicant debug output.

This saves ~20kB of FLASH.

Signed-off-by: Marcin Kajor <marcin.kajor@nordicsemi.no>

* [nrfconnect] Enable zcbor explicitly for mcuboot

Mcuboot requires zcbor, so enable it explicitly, otherwise the build
fails with latest mcuboot.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>

* [nrfconnect] Align with the upstream net_if API change

net_if_ipv6_maddr_join() now requires to provide a net_if pointer.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>

* config: nrfconnect: Remove PSA_WANT default n setting

With PSA_WANT configurations being default n then these default values
are no longer needed for chip-module.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>

* [zephyr] Add config to enable watermarks support

Added a config to control enabling support for heap watermarks
within the Zephyr platform.

* Fixed Wi-Fi re-connection mechanism.

Do not force the Disconnect() if the wpa_supplicant
recovered the connection by itself.

Signed-off-by: Marcin Kajor <marcin.kajor@nordicsemi.no>

* Disabled BLE GATT caching

This commit disables BLE Gatt caching for nRF Connect SDK platform.

Signed-off-by: Duda, Łukasz <lukasz.duda@nordicsemi.no>

* Enabled erasing NVS as default method

This commit configures FW to erase flash pages occupied by non-volatile
storage when a factory reset is requested, instead of removing
Matter-related settings only.

Signed-off-by: Duda, Łukasz <lukasz.duda@nordicsemi.no>

* Disable shell for OpenThread and HWINFO module

This commit reduces the overall memory consumption by disabling the
OpenThread shell and HWInfo module.

Signed-off-by: Duda, Łukasz <lukasz.duda@nordicsemi.no>

* Align finding Python3 executable to NCS requirements.

We should try to find Python3 instead of Python within cmake
scripts.

* Enable Generating Onboarding Codes by default

This PR enables automatic generation of onboarding codes to the
build directory when Factory Data feature is enabled.

* Enable minimal configuration of Shell

Enable minimal shell configuration to save some ROM and RAM.

Signed-off-by: Łukasz Duda <lukasz.duda@nordicsemi.no>

* Fixed boot reason for nRF52

Recently the mechanism of nRF52 reboot type retention which is
used in Matter has been deprecated in Zephyr and can be only
bring back by a dedicated KConfig. Another solution (chosen) is
to explicitly store boot reason in the retention registers for
both nRF52 and nRF53.

Signed-off-by: Marcin Kajor <marcin.kajor@nordicsemi.no>

* Increased number of net sockets poll max

Increased CONFIG_NET_SOCKETS_POLL_MAX from 4 to 6, as otherwise
it resulted in bus fault during connection.

Signed-off-by: Kamil Kasperczyk <kamil.kasperczyk@nordicsemi.no>

* Remove recovery mechanism for Wi-Fi connection

Currently, the Wi-Fi driver supports the recovery mechanism and it
seems that it works properly so we can remove our recovery mechanism
when the connection is lost. Apart from losing the network,
we need to leave the recovery mechanism to work after the device's
reboot because we need to scan periodically to find a known network.

* Increase the maximum number of prefixes to match
the maximum number of IPv6 addresses per interface.

Zephyr ipv6_nbr implementation requires the given address
to have a matching prefix set on the interface. Otherwise,
the default router is used for sending neighbor advertisement
and as a result, in case there are multiple routers in the network,
the packet can be sent to the invalid interface (not the one which
issued neighbor solicitation).

Signed-off-by: Marcin Kajor <marcin.kajor@nordicsemi.no>

* [nrfconnect] Enable NVS lookup cache settings optimization

By default, use the lookup cache hash function optimized
for NVS used as the settings backend. This assumes that
a user application uses Zephyr settings API and does not
write to the NVS directly.

* Disable nRF70 driver logs verbosity by default.

This aims to keep memory footprint after this config is
enabled by default in NCS.

Signed-off-by: Marcin Kajor <marcin.kajor@nordicsemi.no>

* Disabled BLE 2M PHY due to interoperability issues

There were some interoperability issues discovered due to
BLE PHY dynamic changes from 1M to 2M. The 2M was disabled
to ensure the interoperability with some of the BT controllers.

Signed-off-by: Kamil Kasperczyk <kamil.kasperczyk@nordicsemi.no>

* Disabled Wi-Fi logs to save flash

Recently some new Wi-Fi logs were enabled by default.
These need to be disabled to decrease memory footprint.

Signed-off-by: Kamil Kasperczyk <kamil.kasperczyk@nordicsemi.no>

* [nrfconnect] Fixed door lock feature map

Door lock sample has incorrect feature map value, because it
is hardcoded in cpp file, instead of using the value generated
from the .zap file.

* [nrfconnect] Fixed window covering attributes default values

Implemented post cluster init callback to set null values to 0,
if any other value was not saved in NVS.

* [nrfconnect] Disabled BOOT BANNER for release configuration

* Align codebase with the new callback format

Align NCS codebase with the new struct mgmt_callback format.

* Restore IPC thread priority in Matter samples

We noticed that IPC priority on nRF5340 is not set by default.
We need to set it in DTS to be sure that the IPC thread does not
collide with other threads.

* Enable build with the factory data support.

This PR enables factory data generation and usage by default in
all NCS Matter samples.

* Fix missing mcumgr header

Header img_mgmt.h added to source file.

* Forced using minimal libc for mcuboot image

Minimal libc selection has to be forced for all Matter-related
mcuboot builds. Otherwise the picolib is enabled and image
size increases by several k, so it cannot fit in the dedicated
partition.

* Add bootutil for image definitions

Adds building bootutil, when DFU with MCUmgr is enabled, for
application image definitions.

* [zephyr] Track number of enqueued platform events

Add a new system statistic for tracking the number of
enqueued platform events and update it in Zephyr platform.

Signed-off-by: Damian Krolik <damian.krolik@nordicsemi.no>

* Optimize RAM usage

- Reduce number of network buffers and packets
This commit reduces the number of network buffers and packets used by
the nrfconnect platform.

- Add support for printing mbedTLS heap
This commit adds support for printing the peak usage of mbedTLS heap.

- Reduce number of Matter stack packet buffers
This commit reduced the number of available Matter's packet buffers to
8 which affects RAM usage.

- Introduce KConfig option to enable RAM profiling

This commit introduces the KConfig option that enables a set of
features useful for profiling the RAM memory.

- Disable SSL server support for Matter

This commit dissables unused support for SSL server.

- Reduce size of platform event queue

This commit overwrites the default size of platform event queue and
sets it to 64.

- Reduce mbedTLS heap and OpenThread stack sizes

This commit reduces the mbedTLs heap and OpenThread stack sizes when
Joiner role is enabled by not used (case of OT libraries).

- Reduce kernel heap size for Matter over Wi-Fi

This commit aligns the default heap size to the value used in the
Shell example.

- Optimize buffer usage of nRF700X driver for Matter

Matter device does not need to operate as high-performance STA, and so
this commit reduces the default number of buffers. As a result the heap
used by the supplicant may be significantly reduced.

- Added the missing conditions to HEAP configs.

Decrease stack sizes according to the peak results

Signed-off-by: Łukasz Duda <lukasz.duda@nordicsemi.no>
Signed-off-by: Arkadiusz Balys <arkadiusz.balys@nordicsemi.no>

* Increase stability of Wi-Fi LPM operations

This commit increases number of TX Tokens to the previous value of 10
to prevent RPU stalls.

Additionally it was observed that 500ms delay before executing factory
reset is too small for certain situations on Wi-Fi. This commit also
increases this delay to 1s.

Signed-off-by: Łukasz Duda <lukasz.duda@nordicsemi.no>

* [openthread] Aligned to CSL method API changes

With the most recent OpenThread version, the API for CSL methods
changed, so it had to be aligned in the Matter SDK.

Added alternative implementation depending on the OpenThread
API version.

* [nrfconnect] Updated nRF Connect SDK to 2.5.0

Updated nRF Connect SDK version to 2.5.0 and updated all docker
images version to the 24.

* Restyled by whitespace

* Restyled by clang-format

* [shell] Fixed wrong condition for mbedtls include

Changed if defined() to if statement to fix missing mbedtls
header file for platforms using CHIP_CRYPTO_MBEDTLS = false

* [nrfconnect] Disabled factory data for all clusters app

The default prj.conf build does not use partition layout with
factory data partition included, so the factory data support
has to be disabled.

* Addressed review comments

* Moved MINIMAL_LIBC config to mcuboot defaults
* Brought back setting lock feature map, but changed the value
from 0x101 to 0x181 (added COTA support)

Additionally fixed Zephyr unit tests:
* Changed main return type from void to main for Zephyr unit tests
runner.
* Added decreasing pool size conditionally to not affect tests
* Fixed exiting the tests to prevent abort.

---------

Signed-off-by: Łukasz Duda <lukasz.duda@nordicsemi.no>
Co-authored-by: Restyled.io <commits@restyled.io>
107 files changed
tree: e826a1e6087ba6fb1cfd1f84fb3d0d8f87ec6679
  1. .devcontainer/
  2. .githooks/
  3. .github/
  4. .vscode/
  5. build/
  6. build_overrides/
  7. config/
  8. credentials/
  9. data_model/
  10. docs/
  11. examples/
  12. integrations/
  13. scripts/
  14. src/
  15. third_party/
  16. zzz_generated/
  17. .clang-format
  18. .clang-tidy
  19. .default-version.min
  20. .dir-locals.el
  21. .editorconfig
  22. .flake8
  23. .gitattributes
  24. .gitignore
  25. .gitmodules
  26. .gn
  27. .isort.cfg
  28. .mergify.yml
  29. .prettierrc.json
  30. .pullapprove.yml
  31. .restyled.yaml
  32. .shellcheck_tree
  33. .spellcheck.yml
  34. BUILD.gn
  35. CODE_OF_CONDUCT.md
  36. CONTRIBUTING.md
  37. gn_build.sh
  38. kotlin-detect-config.yaml
  39. lgtm.yml
  40. LICENSE
  41. NOTICE
  42. README.md
  43. REVIEWERS.md
  44. SPECIFICATION_VERSION
README.md

Matter

Builds

Builds

Android Ameba ASR BouffaloLab Darwin TI CC26X2X7 TI CC32XX EFR32 ESP32 Infineon i.MX Linux K32W with SE051 Linux ARM Linux Standalone Linux Standalone Mbed OS MW320 nRF Connect SDK Open IoT SDK QPG STM32 Telink Tizen

Tests

Unit / Integration Tests Cirque QEMU

Tools

ZAP Templates

Documentation

Documentation Build

About

Matter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.

What is Matter?

Matter is a unified, open-source application-layer connectivity standard built to enable developers and device manufacturers to connect and build reliable, and secure ecosystems and increase compatibility among connected home devices. It is built with market-proven technologies using Internet Protocol (IP) and is compatible with Thread and Wi-Fi network transports. Matter was developed by a Working Group within the Connectivity Standards Alliance (Alliance). This Working Group develops and promotes the adoption of the Matter standard, a royalty-free connectivity standard to increase compatibility among smart home products, with security as a fundamental design tenet. The vision that led major industry players to come together to build Matter is that smart connectivity should be simple, reliable, and interoperable.

Matter simplifies development for manufacturers and increases compatibility for consumers.

The standard was built around a shared belief that smart home devices should be secure, reliable, and seamless to use. By building upon Internet Protocol (IP), Matter enables communication across smart home devices, mobile apps, and cloud services and defines a specific set of IP-based networking technologies for device certification.

The Matter specification details everything necessary to implement a Matter application and transport layer stack. It is intended to be used by implementers as a complete specification.

The Alliance officially opened the Matter Working Group on January 17, 2020, and the specification is available for adoption now.

Visit buildwithmatter.com to learn more and read the latest news and updates about the project.

Project Overview

Development Goals

Matter is developed with the following goals and principles in mind:

Unifying: Matter is built with and on top of market-tested, existing technologies.

Interoperable: The specification permits communication between any Matter-certified device, subject to users’ permission.

Secure: The specification leverages modern security practices and protocols.

User Control: The end user controls authorization for interaction with devices.

Federated: No single entity serves as a throttle or a single point of failure for root of trust.

Robust: The set of protocols specifies a complete lifecycle of a device — starting with the seamless out-of-box experience, through operational protocols, to device and system management specifications required for proper function in the presence of change.

Low Overhead: The protocols are practically implementable on low compute-resource devices, such as MCUs.

Pervasive: The protocols are broadly deployable and accessible, by leveraging IP and being implementable on low-capability devices.

Ecosystem-Flexible: The protocol is flexible enough to accommodate deployment in ecosystems with differing policies.

Easy to Use: The protocol provides smooth, cohesive, integrated provisioning and out-of-box experience.

Open: The Project’s design and technical processes are open and transparent to the general public, including non-members wherever possible.

Architecture Overview

Matter aims to build a universal IPv6-based communication protocol for smart home devices. The protocol defines the application layer that will be deployed on devices and the different link layers to help maintain interoperability. The following diagram illustrates the normal operational mode of the stack: Matter Architecture Overview

The architecture is divided into layers to help separate the different responsibilities and introduce a good level of encapsulation among the various pieces of the protocol stack. The vast majority of interactions flow through the stack captured in the following Figure:

Matter Stack Architecture

  1. Application: High-order business logic of a device. For example, an application that is focused on lighting might contain logic to handle turning on/off the bulb as well as its color characteristics.
  1. Data Model: The data layer corresponds to the data and verb elements that help support the functionality of the application. The Application operates on these data structures when there is an intent to interact with the device.
  1. Interaction Model: The Interaction Model layer defines a set of interactions that can be performed between a client and server device. For example, reading or writing attributes on a server device would correspond to application behavior on the device. These interactions operate on the elements defined at the data model layer.
  1. Action Framing: Once an action is constructed using the Interaction Model, it is serialized into a prescribed packed binary format to encode for network transmission.
  1. Security: An encoded action frame is then sent down to the Security Layer to encrypt and sign the payload to ensure that data is secured and authenticated by both sender and receiver of a packet.

  2. Message Framing & Routing: With an interaction encrypted and signed, the Message Layer constructs the payload format with required and optional header fields; which specify the message's properties and some routing information.

  1. IP Framing & Transport Management: After the final payload has been constructed, it is sent to the underlying transport protocol for IP management of the data.

Current Status of Matter

Matter’s design and technical processes are intended to be open and transparent to the general public, including to Working Group non-members wherever possible. The availability of this GitHub repository and its source code under an Apache v2 license is an important and demonstrable step to achieving this commitment. Matter endeavors to bring together the best aspects of market-tested technologies and redeploy them as a unified and cohesive whole-system solution. The overall goal of this approach is to bring the benefits of Matter to consumers and manufacturers as quickly as possible. As a result, what you observe in this repository is an implementation-first approach to the technical specification, vetting integrations in practice. The Matter repository is growing and evolving to implement the overall architecture. The repository currently contains the security foundations, message framing and dispatch, and an implementation of the interaction model and data model. The code examples show simple interactions, and are supported on multiple transports -- Wi-Fi and Thread -- starting with resource-constrained (i.e., memory, processing) silicon platforms to help ensure Matter’s scalability.

How to Contribute

We welcome your contributions to Matter. Read our contribution guidelines here.

Building and Developing in Matter

Instructions about how to build Matter can be found here .

Directory Structure

The Matter repository is structured as follows:

File/FolderContent
buildBuild system support content and built output directories
build_overridesBuild system parameter customization for different platforms
configProject configurations
credentialsDevelopment and test credentials
docsDocumentation, including guides. Visit the Matter SDK documentation page to read it.
examplesExample firmware applications that demonstrate use of Matter
integrations3rd Party integrations
scriptsScripts needed to work with the Matter repository
srcImplementation of Matter
third_party3rd party code used by Matter
zzz_generatedzap generated template code - Revolving around cluster information
BUILD.gnBuild file for the gn build system
CODE_OF_CONDUCT.mdCode of conduct for Matter and contribution to it
CONTRIBUTING.mdGuidelines for contributing to Matter
LICENSEMatter license file
REVIEWERS.mdPR reviewers
gn_build.shBuild script for specific projects such as Android, EFR32, etc.
README.mdThis File

License

Matter is released under the Apache 2.0 license.