Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

manifest: Matter applications versioning by VERSION file implemented #13476

Merged
merged 1 commit into from
Jan 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions applications/matter_bridge/VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
VERSION_MAJOR = 2
VERSION_MINOR = 5
PATCHLEVEL = 99
VERSION_TWEAK = 0
EXTRAVERSION =
2 changes: 1 addition & 1 deletion applications/matter_weather_station/VERSION
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
VERSION_MAJOR = 2
VERSION_MINOR = 5
PATCHLEVEL = 0
PATCHLEVEL = 99
VERSION_TWEAK = 0
EXTRAVERSION =
1 change: 1 addition & 0 deletions doc/nrf/protocols/matter/end_product/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ Finally, we discuss topics related to Matter certification (:ref:`ug_matter_devi
bootloader
security
configuring_cd
versioning
last_fabric_removal_delegate
100 changes: 100 additions & 0 deletions doc/nrf/protocols/matter/end_product/versioning.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
.. _ug_versioning_in_matter:

Maintaining firmware version
############################

.. contents::
:local:
:depth: 2

To effectively deploy a Matter product, it is essential to implement application version management.
This versioning is crucial for managing firmware upgrades on devices.
It is also displayed within ecosystem applications, as provided by the Basic Information cluster.

There are two primary approaches for maintaining versioning:

* Utilizing a :file:`VERSION` file as detailed on the :ref:`app-version-details` page of the Zephyr Project documentation.
This method involves defining the version information in a specific file format.

* Implementing dedicated Kconfig configurations.
This approach uses Kconfig system configurations to set and manage the versioning details.

Choose the approach that best aligns with your project requirements and infrastructure.

.. note::
These approaches should not be used simultaneously.

Using :file:`VERSION` file
**************************

To implement versioning based on a :file:`VERSION` file, you must create a file named :file:`VERSION` within the application directory and ensure it contains the appropriate content:

.. code-block:: console

VERSION_MAJOR =
VERSION_MINOR =
PATCHLEVEL =
VERSION_TWEAK =

.. note::
You must assign a value to at least one of the variables.
If not, the :file:`VERSION` file will cause error.

For example:

.. code-block:: console

VERSION_MAJOR = 2
VERSION_MINOR = 5
PATCHLEVEL = 99
VERSION_TWEAK = 0

A :file:`VERSION` file is responsible for assigning values in the following format for:

* MCUboot version: ``MAJOR . MINOR . PATCHLEVEL + TWEAK``.
The above example would be formatted as ``2 . 5 . 99 + 0``.
* Matter OTA: in the 32-bit integer where each variable is 8 bits long.
The above example would be formatted as ``0x02056300``.

Using KConfig options
*********************

Depending on how you transfer the updated images to the device, you need to use different Kconfig options.

.. _ug_matter_dfu_ota:

Device Firmware Upgrade over Matter versioning
==============================================

When using DFU over Matter, you must edit the :file:`prj.conf` file in the application directory.
Add the following Kconfig options to change the version:

* :kconfig:option:`CONFIG_CHIP_DEVICE_SOFTWARE_VERSION` to set to the version number.
* :kconfig:option:`CONFIG_CHIP_DEVICE_SOFTWARE_VERSION_STRING` to set the version string.

Additionally, since Nordic chips use MCUboot Image Tool, you need to also edit the :kconfig:option:`CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION` Kconfig option, with a value in the following format: ``"MAJOR . MINOR . PATCHLEVEL . TWEAK"``.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more comment.. Here i do see " . (dot) TWEAK" but in below examples, i do see "+" sign. Maybe all is fine, but it might be confusing.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point, I didn't catch that


For example:

.. code-block:: console

CONFIG_CHIP_DEVICE_SOFTWARE_VERSION=33907456
CONFIG_CHIP_DEVICE_SOFTWARE_VERSION_STRING="2.5.99+0"
CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION="2.5.99+0"

Where ``33907456`` is 0x02056300, the hexadecimal versioning of 2.5.99.0.

.. _ug_matter_dfu_smp:

Device Firmware Upgrade over Bluetooth LE versioning
====================================================

For DFU over Bluetooth LE, you need to edit the :kconfig:option:`CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION` Kconfig option in the :file:`prj.conf` file in the application directory.
Set its value in the following format: ``"MAJOR . MINOR . PATCHLEVEL + TWEAK"``.

.. _ug_matter_dfu_performing:

Performing Device Firmware Upgrade
**********************************

After properly configuring the application version, you can perform device firmware upgrade as explained in :doc:`matter:nrfconnect_examples_software_update`.
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ Matter
* A Kconfig option for disabling or enabling :ref:`ug_matter_configuring_read_client`.
* Support for PSA Crypto API for devices that use Matter over Thread.
It is enabled by default and can be disabled by setting the :kconfig:option:`CONFIG_CHIP_CRYPTO_PSA` Kconfig option to ``n``.
* :file:`VERSION` file implementation to manage versioning for DFU over SMP as well as also Matter OTA.
Backward compatibility is maintained for users who use the :file:`prj.conf` file for versioning.
* Migration of the Device Attestation Certificate (DAC) private key from the factory data set to the PSA ITS secure storage.

The DAC private key can be removed from the factory data set after the migration.
Expand Down
5 changes: 5 additions & 0 deletions samples/matter/light_bulb/VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
VERSION_MAJOR = 2
VERSION_MINOR = 5
PATCHLEVEL = 99
VERSION_TWEAK = 0
EXTRAVERSION =
5 changes: 5 additions & 0 deletions samples/matter/light_switch/VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
VERSION_MAJOR = 2
VERSION_MINOR = 5
PATCHLEVEL = 99
VERSION_TWEAK = 0
EXTRAVERSION =
5 changes: 5 additions & 0 deletions samples/matter/lock/VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
VERSION_MAJOR = 2
VERSION_MINOR = 5
PATCHLEVEL = 99
VERSION_TWEAK = 0
EXTRAVERSION =
5 changes: 5 additions & 0 deletions samples/matter/template/VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
VERSION_MAJOR = 2
VERSION_MINOR = 5
PATCHLEVEL = 99
VERSION_TWEAK = 0
EXTRAVERSION =
5 changes: 5 additions & 0 deletions samples/matter/thermostat/VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
VERSION_MAJOR = 2
VERSION_MINOR = 5
PATCHLEVEL = 99
VERSION_TWEAK = 0
EXTRAVERSION =
5 changes: 5 additions & 0 deletions samples/matter/window_covering/VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
VERSION_MAJOR = 2
VERSION_MINOR = 5
PATCHLEVEL = 99
VERSION_TWEAK = 0
EXTRAVERSION =
Loading