This migration guide is complementary to the @ref md_RELEASE_NOTES. It describes practical actions you must take to update your code to a newer version of the nRF5 SDK for Mesh.
@note Always refer to the migration guide from the latest documentation release on the @link_mesh_doclib, regardless of the versions you are migrating to and from.
Table of contents
- [Migration from v4.2.0 to v5.0.0](@ref md_doc_migration_4_2_0_to_5_0_0)
- [Recompiled bootloader binaries](@ref bootloader_binaries_recompiled_500)
- [New timer in Sensor Server API](@ref new_timer_sensor_server_api)
- [Revised entry ID constants](@ref revised_entry_id_start_end)
- [MemorySegment section renamed](@ref MemorySegment_renamed)
- [model_common functions replaced](@ref model_common_replace)
- [generic_ponoff_setup_server_status_publish removed](@ref ponoff_status_publish_removed)
- [Replay cache is now stored] (@ref replay_cache_stored)
- [Migration from v4.1.0 to v4.2.0](@ref md_doc_migration_4_1_0_to_4_2_0)
- [Recompiled bootloader binaries](@ref bootloader_binaries_recompiled)
- [Removed prebuilt sensor for LC example](@ref lc_example_sensor)
- [Updated nrfutil branch](@ref nrfutil_updated)
- [Migration from v4.0.0 to v4.1.0](@ref md_doc_migration_4_0_0_to_4_1_0)
- [Updated GNU ARM Embedded Toolchain required minimum version to 9-2019-q4-major](@ref arm_embedded_version_update)
- [UUID generation updated](@ref migration_400_uuid_update)
- [Migration from v3.2.0 to v4.0.0](@ref md_doc_migration_3_2_0_to_4_0_0)
- [Added Mesh configuration for DSM, net state and access layer](@ref mesh_config_for_dsm_and_access)
- [BEARER_EVENT_USE_SWI0 changed location](@ref BEARER_EVENT_USE_SWI0_location)
- [Migration from v3.1.0 to v3.2.0](@ref md_doc_migration_3_1_0_to_3_2_0)
- [Health Server subscription list addition](@ref health_server_subscription)
- [Freezing of access layer model configurations](@ref freezing_of_access_config)
- [AD Type filtering](@ref ad_type_filtering)
- [New nRF5 SDK version support](@ref new_nrf5_sdk_version_support)
- [Changes to Device State Manager API](@ref device_state_manager_api_changes)
- [Updated DFU](@ref dfu_updates)
- [Migration from v3.0.0 to v3.1.0](@ref md_doc_migration_3_0_0_to_3_1_0)
- [Example UUIDs updated](@ref migration_310_uuid_update)
- [PB-ADV bearer selection define change](@ref migration_310_pb-adv_change)
- [Error checking on OOB input data](@ref migration_310_oob_error_checking)
- [Generic Power OnOff API simplified](@ref migration_310_onoff_api)
- [Migration from v2.2.0 to v3.0.0](@ref md_doc_migration_2_2_0_to_3_0_0)
- [Migration from v2.0.1 to v2.2.0](@ref md_doc_migration_2_0_1_to_2_2_0)
- [Migration from v1.0.1 to v2.0.0](@ref md_doc_migration_1_0_1_to_2_0_0)
Read this migration guide together with the [nRF5 SDK for Mesh v5.0.0 release notes](@ref release_notes_500).
- The nRF5 SDK for Mesh bootloader binaries were recompiled in the latest version of the nRF5 SDK for Mesh.
- Make sure to use the latest version of the binaries.
- During DFU, the nRF5 SDK for Mesh bootloader should be updated first to get the new code.
- The @ref SENSOR_MODEL's Sensor Server API has been changed to support the enforcement of the status min interval.
The macro @ref APP_SENSOR_SERVER_DEF now requires an array of
app_timer_id_t
with a timer for each supported property in the application for handling the min interval timing. This is required in addition to the similar array needed for handling cadence timing in the Sensor Server API in v4.2.0. The new parameter for the macro is_min_interval_timer_ids
.
- For each Sensor Server defined, define an additional App Timer for each supported property
and supply an array of their
app_timer_id_ts
to @ref APP_SENSOR_SERVER_DEF (parameter_min_interval_timer_ids
).
- The entry ID constants ending with
ID_START
andID_END
in model_common.h have been revised to grant more space for model instances. This was done because @ref LIGHT_LC_MODELS and @ref LIGHT_CTL_MODELS required a lot more space for stored values when the @ref SCENE_MODELS were added.
- If you are using end applications based on nRF5 SDK for Mesh examples and you do not want to change the
device composition data, remove the scene model instantiation from the example
and restore the model entry IDs ending with
ID_START
andID_END
to values from the nRF5 SDK for Mesh v4.2.0.- If you do not restore the v4.2.0 values, the devices will unprovision themselves after a DFU upgrade.
- The
MemorySegment
section in the SES project files for the @ref md_examples_sdk_coexist_README has been renamed fromRAM
toRAM1
. This is done due to migration to the nRF5 SDK v17.0.2. See the @link_nRF5_SDK_release_notes for details. The SES project files for the coexistence examples have been updated.
- If you have been using the coexistence examples, make sure to rename
MemorySegment
accordingly.
- The
model_common_init
has been replaced by @ref model_config_file_init. - The
model_common_config_apply
has been replaced by @ref model_config_file_config_apply.
- Complete the following steps:
- Include model_config_file.h in files where the removed functions were used.
- Replace occurrences of the removed function names with the new functions names.
- Add
${MODEL_CONFIG_FILE_SOURCE_FILES}
toadd_executable(${target}
in the application CMakeLists.txt file.
generic_ponoff_setup_server_status_publish
was removed because the publication support was removed, as per @tagMeshMdlSp.
- Remove occurrences of this deprecated API from you application.
- As part of the fix for the previously known issue MBTLE-1975, a new mesh configuration file has been added. This file stores replay cache entries in the [default power-down strategy](@ref power_down_replay_protection_cache) based on @ref MESH_CONFIG_STRATEGY_ON_POWER_DOWN.
- If you want continuity of behavior with the previous versions of the nRF5 SDK for Mesh, set the [replay protection cache strategy](@ref power_down_replay_protection_cache) to @ref MESH_CONFIG_STRATEGY_NON_PERSISTENT in the application's nrf_mesh_config_app.h file.
Read this migration guide together with the [nRF5 SDK for Mesh v4.2.0 release notes](@ref release_notes_420).
- The behavior of the
mesh_config_clear()
was changed in nRF5 SDK for Mesh v4.2.0. It now cleans up all the files instead of cleaning individual entries. Due to this change, if the new v4.2.0 applications are making use of this function, they have new mesh configuration files present (such asMESH_OPT_MODEL_FILE_ID
), and the device configuration change is detected post-DFU, the use of this function during boot-up will cause an assertion.
- To mitigate this issue, in the new firmware using nRF5 SDK for Mesh v4.2.0,
when
NRF_ERROR_INVALID_DATA
is detected duringmesh_init()
, callmesh_config_clear()
once after theNRF_MESH_EVT_CONFIG_STABLE
event is received.
- The bootloader binaries were recompiled in the latest version of the nRF5 SDK for Mesh, for the first time since the recompilation for [nRF5 SDK for Mesh v3.1.0](@ref release_notes_310).
- Make sure to use the latest version of the binaries.
- During DFU, bootloader should be updated first to get the new code.
- With the changes to LC and sensor server examples in the nRF5 SDK for Mesh v4.2, the prebuilt sensor used for the LC example in the nRF5 SDK for Mesh v4.1 has been removed.
- You must now compile and use the sensor server example with the LC example.
- The
mesh_dfu
branch in thepc-nrfutil
GitHub repository has been updated.
- Use the newest version of this branch when performing DFU.
Read this migration guide together with the [nRF5 SDK for Mesh v4.1.0 release notes](@ref release_notes_410).
Updated GNU ARM Embedded Toolchain required minimum version to 9-2019-q4-major @anchor arm_embedded_version_update
- The minimum required version of this toolchain for building the nRF5 SDK for Mesh v4.1.0 and the examples included has been updated to 9-2019-q4-major.
- Ensure that the version of the GNU ARM Embedded Toolchain installed is at least 9-2019-q4-major. The installer can be downloaded from the @link_armnone page.
- Updated the
nrf_mesh_configure_device_uuid_reset()
API, so that the raw output is aligned with the format from the UUID version 4. This update changes the auto-generated UUID value for the device.
- If your systems rely on the old UUIDs, specify the old UUID in the @ref mesh_stack_init_params_t structure during the stack initialization before updating the firmware of the devices.
Read this migration guide together with the [nRF5 SDK for Mesh v4.0.0 release notes](@ref release_notes_400).
- The DSM and the access layer now use the Mesh configuration module for persistent storage. Moreover, the IV index and sequence number in the network state are now also stored using the module.
- Implemented backward compatibility for components that have been migrated onto the Mesh configuration module. It is still possible to provide the exact number of flash pages allocated for persistent parameters. This allows keeping persistent parameters in the same area as it was in the previous version, for DFU necessities. Otherwise, the Mesh configuration will calculate and allocate the persistent memory automatically.
- This means that your applications should no longer invoke any special API to store or restore parameters. The parameters will be stored or restored when they are changed via the appropriate API, for example @ref mesh_opt_core_tx_power_set() or mesh_opt_core_tx_power_get().
- After triggering the node reset, the Mesh stack will erase only the stack-related data stored in a flash. It will no longer erase all the data managed by the Mesh configuration module. Now, it is a responsibility of the application to erase application specific data.
- New projects:
- Do not define
ACCESS_FLASH_PAGE_COUNT
,DSM_FLASH_PAGE_COUNT
orNET_FLASH_PAGE_COUNT
in new projects, as Mesh configuration now takes care of computing the required page counts. - Monitor
CONFIG_SERVER_EVT_NODE_RESET
event in the user application and erase the desired application specific data before callingnode_reset()
API.
- Do not define
- Existing projects to be updated by DFU:
- Keep any definitions of
ACCESS_FLASH_PAGE_COUNT
,DSM_FLASH_PAGE_COUNT
andNET_FLASH_PAGE_COUNT
, as well as definitions ofACCESS_FLASH_AREA_LOCATION
,DSM_FLASH_AREA_LOCATION
andNET_FLASH_AREA_LOCATION
. This will cause the Mesh configuration backend to locate the pages according to the flash layout of the old persistence system. - Monitor
CONFIG_SERVER_EVT_NODE_RESET
event in the user application and erase the data specific to the application before callingmesh_stack_device_reset()
API.
- Keep any definitions of
- The @ref BEARER_EVENT_USE_SWI0 option is now located at
nrf_mesh_config_bearer.h
header file.
- Redefine @ref BEARER_EVENT_USE_SWI0 in your
nrf_mesh_config_app.h
to make the mesh stack use theSWI0
IRQ for post processing.
Read this migration guide together with the [nRF5 SDK for Mesh v3.2.0 release notes](@ref release_notes_320).
- To perform DFU update from the nRF5 SDK for Mesh v3.1.0 to the v3.2.0 or greater, you must first unprovision the node, and then carry out the DFU transfer. Otherwise, the node will always fall into assertion after DFU.
- Unprovision the node by executing Node Reset before performing DFU that updates the SDK version.
- The Health Server model now allocates a subscription list during the initialization procedure. Because of this change, an insufficient number of available subscription lists can cause assertions during the mesh stack initialization procedure.
- New projects:
- Ensure that a sufficient number of subscription lists is allocated for the models used by the
application and for the Health Server: update @ref ACCESS_SUBSCRIPTION_LIST_COUNT
in
nrf_mesh_config_app.h
.
- Ensure that a sufficient number of subscription lists is allocated for the models used by the
application and for the Health Server: update @ref ACCESS_SUBSCRIPTION_LIST_COUNT
in
- Existing projects to be updated by DFU:
- Ensure that a sufficient number of subscription lists is allocated for the models used by the
application and for the Health Server: update @ref ACCESS_SUBSCRIPTION_LIST_COUNT
in
nrf_mesh_config_app.h
.- After performing DFU, the node will boot up as an unprovisioned device due to changes in the access configuration data.
- Ensure that a sufficient number of subscription lists is allocated for the models used by the
application and for the Health Server: update @ref ACCESS_SUBSCRIPTION_LIST_COUNT
in
- After
access_flash_config_load()
API is called successfully, the configuration of the access layer will now be considered as frozen. Once frozen, it is not allowed to add new models or change the configurations of the model subscription list (allocation, de-allocation, or sharing). - Calls to
access_flash_config_store()
will now not store any access layer model configuration in non-volatile memory until the configuration of the access layer becomes frozen.
- Ensure that all required models are initialized within the
models_init_cb()
callback in the application. The mesh stack calls the callback beforeaccess_flash_config_load()
.
- All non-mesh packets are now filtered out by the AD type at the scanner level before they are processed.
- Make sure you call the @ref bearer_adtype_add function with the required AD Type if you want to receive non-mesh packets through the @ref nrf_mesh_rx_cb_set function.
- Added support for the nRF5 SDK v15.3.0, which requires a different
SDK_ROOT
path in SEGGER Embedded Studio.
- Make sure you set the correct
SDK_ROOT
path to the nRF5 SDK v15.3.0 location in SEGGER Embedded Studio. To set SDK_ROOT path, see the [First time setup](@ref how_to_build_segger_setup) page. - Make sure your GNU ARM Embedded Toolchain version is 7.3.1.
- The @ref dsm_address_is_rx function is now deprecated and has been replaced
by the
nrf_mesh_is_address_rx
function.
- Use the
nrf_mesh_is_address_rx
function instead of @ref dsm_address_is_rx if you need to check whether the device will process packets received on the given destination address.
- DFU has received updates and bugfixes in the nRF5 SDK for Mesh v3.2.0 that impact the upgrade from previous release versions.
- The DFU update from the SDK v3.1.0 to the SDK v3.2.0 or newer will require you to first unprovision the node (execute Node Reset), and then carry out the DFU transfer. Otherwise, the node will always fall into assertion after DFU.
Read this migration guide together with the [nRF5 SDK for Mesh v3.1.0 release notes](@ref release_notes_310).
Table of contents
- [Example UUIDs updated](@ref migration_310_uuid_update)
- [PB-ADV bearer selection define change](@ref migration_310_pb-adv_change)
- [Error checking on OOB input data](@ref migration_310_oob_error_checking)
- [Generic Power OnOff API simplified](@ref migration_310_onoff_api)
- Removed
mesh_app_uuid_gen()
API to prevent use of non RFC4122 compliant UUIDs. - Updated
nrf_mesh_configure_device_uuid_reset()
API to make generated UUID compliant with UUID version 4 as per RFC4122.
- If your systems rely on the old UUIDs, specify the old UUID in the @ref mesh_stack_init_params_t structure during stack initialization before updating the firmware of such devices.
- Use @ref mesh_app_uuid_print() API to print the UUIDs in a standard format. When printed as array of bytes, the UUID may not be understandable by systems that use the string representation of the UUID for parsing.
The MESH_PROVISIONEE_BEARER_ADV_ENABLED
define has been replaced by @ref MESH_FEATURE_PB_ADV_ENABLED.
Setting MESH_FEATURE_PB_ADV_ENABLED=1
(which replaces MESH_PROVISIONEE_BEARER_ADV_ENABLED=1
) will no longer cause compilation error.
Make sure that your code reflects this change to avoid errors.
The interface for providing provisioning authentication data @ref nrf_mesh_prov_auth_data_provide() will now do stricter error checking on OOB input data. This ensures that the inputs are better tested and sanitized.
Make sure that your usage of the API is still valid.
The API of Generic Power OnOff client initialization has been simplified. The @ref generic_ponoff_client_init function doesn't call @ref generic_onoff_client_init anymore.
Manually extend the Generic Power OnOff Client with the Generic OnOff model. To do this, call the @ref generic_onoff_client_init function and share subscription list between Generic OnOff and Generic Power OnOff clients by calling the @ref access_model_subscription_lists_share function.
Read this migration guide together with the [nRF5 SDK for Mesh v3.0.0 release notes](@ref release_notes_300).
Table of contents
- [Added and removed files](@ref migration_300_added_removed)
- [IRQ priority level change](@ref migration_300_irq_priority)
- [Stack separation on high frequency and low frequency time domains](@ref migration_300_stack_separation)
- [Initialization and start phase changes](@ref migration_300_initialization)
- [Only one segmented message from an element to a destination address at a time](@ref migration_300_segmented_messages)
- [Device compile time configuration changes](@ref migration_300_compile_time)
- [New provisioning parameter](@ref migration_300_provisioning)
The following files have been added in the v3.0.0 release:
- LPN feature:
mesh/core/src/core_tx_lpn.c
mesh/core/src/lpn.c
mesh/core/src/mesh_lpn_subman.c
- Core:
mesh/core/src/mesh_mem_stdlib.c
mesh/core/src/timeslot_timer.c
external/app_timer/app_timer_mesh.c
([details below](@ref migration_300_stack_separation))
- Common example files:
examples/common/src/app_level.c
examples/common/src/ble_softdevice_support.c
([details below](@ref migration_300_initialization))
The following files have been removed in the v3.0.0 release:
examples/common/src/mesh_softdevice_init.c
([details below](@ref migration_300_initialization))
Update your projects accordingly to include or remove these files.
The integration with the nRF5 SDK v15.2 caused the following changes:
- The function
softdevice_irq_priority_checker()
has been removed frommesh_app_utils.h
. - @ref NRF_MESH_IRQ_PRIORITY_LOWEST has been changed from 7 to 6, which corresponds to @link_app_irq_priority_low.
- The
nrf_sdh.c
replacement has been removed.
- Go back to using
nrf_sdh.c
in the nRF5 SDK, as the IRQ level fix was upstreamed. - Make sure that mesh API is called at the same IRQ priority level as it is specified in the configuration.
Stack separation on high frequency and low frequency time domains @anchor migration_300_stack_separation
Stack has been divided into two time frequency domains:
- High-frequency domain, which is based on the timeslot structure of Soft Device. Low layers of the stack (advertiser, scanner, bearer etc) are based in this domain to be able to fit their activities within the provided timeslot.
- Low frequency domain, which is based on app_timer functionality. app_timer is based on RTC with low frequency source clock (which works independently from MCU clock). All components above bearer are based in this domain. The reason for this change is that low-power nodes need to put the MCU to sleep for long periods of time between actions. The slower clock can then wake up the MCU right before it is needed.
Additionally, app_timer API can be used in an application as-is. However, the SDK app_timer abilities are not sufficient
for managing the stack functionality. Extended app_timer with modifications has been added in external/app_timer
.
Modified version will be compiled and linked to applications (based on stack build system) instead of SDK app_timer.
SDK app_timer API header file should be used as well.
The following define that turns on app_timer
in the building process must be added to app_config.h
to make these changes work:
#define APP_TIMER_ENABLED 1
In the initialization phase of the examples, the mesh_softdevice_init
module has been replaced with the @ref BLE_SOFTDEVICE_SUPPORT.
In the start phase of the examples, the execution_start()
function has been removed.
Use the function @ref ble_stack_init() to initialize the SoftDevice Handler and the BLE stack, and to register the Mesh handler for SoC events.
Make sure the function @ref mesh_stack_start() is called at the end of the start phase
(see start()
function in the Light Switch Server code as an example). After calling @ref mesh_stack_start(), all mesh API interaction
must happen at the IRQ priority level specified in the call to @ref mesh_stack_init(). Calling mesh functions at wrong IRQ priority levels
after enabling the stack can cause unpredictable behavior (see @ref md_doc_user_guide_mesh_interrupt_priorities for details).
Only one segmented message from an element to a destination address at a time @anchor migration_300_segmented_messages
The nRF Mesh SDK is now enforcing the @tagMeshSp rule that disallows multiple simulatneous segmented messages from a source address to the same destination.
This change means that models must wait until their previous segmented message is finished sending before they can send another. If multiple models on the same element have the same publish address, they have to coordinate their publishing as well.
If the application attempts to publish two simultaneous segmented messages with the same source
and destination, the second publish call gets rejected with error code NRF_ERROR_INVALID_STATE
.
Models that previously scheduled multiple segmented messages in the same context must instead subscribe to @ref NRF_MESH_EVT_TX_COMPLETE events or set up timers for sending to avoid the error code.
@note
This change only affects segmented messages, that is messages with @ref access_message_tx_t::force_segmented set to
true
or messages that are longer than @ref NRF_MESH_UNSEG_PAYLOAD_SIZE_MAX.
Unsegmented messages can be interleaved with both segmented and unsegmented messages of any source
and destination.
Compile time configuration for supported features of the device changed,
which makes DEVICE_FEATURES
, MESH_FEATURE_GATT
, GATT_PROXY
macros outdated.
Make sure you apply the following changes to your code:
- Use @ref MESH_FEATURE_PB_GATT_ENABLED macro instead of
MESH_FEATURE_GATT
. - Use @ref MESH_FEATURE_GATT_PROXY_ENABLED macro instead of
GATT_PROXY
. - Use @ref MESH_FEATURE_RELAY_ENABLED, @ref MESH_FEATURE_LPN_ENABLED and
@ref MESH_FEATURE_GATT_PROXY_ENABLED macros to enable or disable required feature
instead of
DEVICE_FEATURES
.
There is a new parameter attention_duration_s
for the @ref nrf_mesh_prov_provision() function in mesh/prov/api/nrf_mesh_prov.h
.
This parameter is required in the provisioning process.
Update all uses of the @ref nrf_mesh_prov_provision() function with the additional attention_duration_s
argument.
The following source files have been added in this release:
- mesh/core/src/mesh_config.c
- mesh/core/src/mesh_config_backend.c
- mesh/core/src/mesh_config_flashman_glue.c
- mesh/core/src/mesh_opt.c
- models/model_spec/commn/src/model_common.c
The following source files have been removed in this release:
- mesh/core/src/ticker.c
- Updated model directory structure:
- Foundation models have been moved to models/foundation:
- Configuration model moved from
models/config
tomodels/foundation/config
- Health model moved from
models/health
tomodels/foundation/health
- Configuration model moved from
- Generic models are present in models/model_spec:
- Common functionality used by the Bluetooth mesh models:
models/model_spec/common
- Generic Default Transition Time model:
models/model_spec/generic_dtt
- Generic Level model:
models/model_spec/generic_level
- Generic OnOff model:
models/model_spec/generic_onoff
- Common functionality used by the Bluetooth mesh models:
- Vendor-specific models have been moved to models/vendor:
- Simple OnOff model moved from
models/simple_on_off
tomodels/vendor/simple_on_off
- Simple OnOff model moved from
- Experimental models have been moved to models/experimental:
- Provisioning over models moved from
models/pb_remote
tomodels/experimental/pb_remote
- Provisioning over models moved from
- Foundation models have been moved to models/foundation:
- The
light_switch
examples andenocean
example have been updated to use Generic OnOff models.
::SIMPLE_ON_OFF_CLIENT_ACKED_TRANSACTION_TIMEOUT
macro definition added.
::PB_REMOTE_CLIENT_ACKED_TRANSACTION_TIMEOUT
macro definition added.
::PB_REMOTE_SERVER_ACKED_TRANSACTION_TIMEOUT
macro definition added.
::HEALTH_CLIENT_ACKED_TRANSACTION_TIMEOUT
macro definition added.
::CONFIG_CLIENT_ACKED_TRANSACTION_TIMEOUT
macro definition added.
As of v2.2.0, the nRF5 SDK for Mesh makes use of the nRF5 SDK's section variable module @link_section_vars.
The required changes for supporting section variables are already in place in the example applications, but any user applications carried over from the previous release might require modifications to work correctly, depending on the toolchain used:
The Segger Embedded Studio projects base their section placement on the bundled flash_placement.xml
file.
The example projects in version 2.2.0 contain updated flash_placement files. If you did not do any modifications
to this file in your migrated project, you can safely replace the existing flash_placement file with
the one in CMake/SES/flash_placement.xml.
If you modified the file, perform the migration manually by adding the following ProgramSection to the FLASH
MemorySegment:
<ProgramSection alignment="4" keep="Yes" load="Yes" name=".nrf_mesh_flash" inputsections="*(SORT(.nrf_mesh_flash.*))" address_symbol="__start_nrf_mesh_flash" end_symbol="__stop_nrf_mesh_flash"/>
and the following ProgramSection to the RAM
MemorySegment:
<ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_mesh_ram" inputsections="*(SORT(.nrf_mesh_ram.*))" address_symbol="__start_nrf_mesh_ram" end_symbol="__stop_nrf_mesh_ram"/>
Restart Segger Embedded Studio after saving your changes and clean the solution before rebuilding (Build->Clean Solution).
When building with GCC, the section variables must be registered in the application's linker script so that they end up in the right memory area.
All section variables used by mesh go into two new memory sections (one in RAM and one in flash). These memory sections must be added to the linker script.
The nrf_mesh_ram
-section must be added to the sections marked with INSERT AFTER .data
:
SECTIONS
{
. = ALIGN(4);
/* ...Any other sections */
.nrf_mesh_ram :
{
PROVIDE(__start_nrf_mesh_ram = .);
KEEP(*(SORT(.nrf_mesh_ram.*)))
PROVIDE(__stop_nrf_mesh_ram = .);
} > RAM
} INSERT AFTER .data
The nrf_mesh_flash
-section must be added to the sections marked with INSERT AFTER .text
:
SECTIONS
{
. = ALIGN(4);
/* ...Any other sections */
.nrf_mesh_flash :
{
PROVIDE(__start_nrf_mesh_flash = .);
KEEP(*(SORT(.nrf_mesh_flash.*)))
PROVIDE(__stop_nrf_mesh_flash = .);
} > FLASH
} INSERT AFTER .text
When building with ARMCC, no further action is required.
The mesh runtime options API (@ref NRF_MESH_OPT) has been deprecated in favor of @ref MESH_OPT. The new API uses the new mesh_config module to store options persistently, so once set, the options do not have to be reset for the lifetime of the device.
The following options have been migrated to the new API:
Old option | New option |
---|---|
NRF_MESH_OPT_PROV_ECDH_OFFLOADING |
@ref mesh_opt_prov_ecdh_offloading_set |
NRF_MESH_OPT_NET_RELAY_ENABLE |
@ref mesh_opt_core_adv_set |
NRF_MESH_OPT_NET_RELAY_RETRANSMIT_COUNT |
@ref mesh_opt_core_adv_set |
NRF_MESH_OPT_NET_RELAY_RETRANSMIT_INTERVAL_MS |
@ref mesh_opt_core_adv_set |
NRF_MESH_OPT_NET_RELAY_TX_POWER |
@ref mesh_opt_core_tx_power_set |
NRF_MESH_OPT_NET_NETWORK_TRANSMIT_COUNT |
@ref mesh_opt_core_adv_set |
NRF_MESH_OPT_NET_NETWORK_TRANSMIT_INTERVAL_MS |
@ref mesh_opt_core_adv_set |
NRF_MESH_OPT_NET_NETWORK_TX_POWER |
@ref mesh_opt_core_tx_power_set |
Note that the transport-layer options are still only present on the old nrf_mesh_opt API. They will be migrated in the next release.
This guide describes the migration process from nRF5 SDK for Mesh version 1.0.1 to version 2.0.0.
In v1.0.1, the nrf_mesh_sdk
and nrf_mesh_node_config
modules could both be used for initializing
a mesh device, and they had partly overlapping functionality. They have now been replaced by a
single set of non overlapping modules:
mesh_stack
: Functions for initializing and starting all mesh stack modules, including the foundation models.mesh_softdevice_init
: Function for initializing the SoftDevice.mesh_provisionee
: Simple provisionee support module containing the provisioning related parts of the oldnrf_mesh_node_config
, using PB-ADV and static OOB authentication. It is mainly intended to be used by the nRF5 SDK for Mesh examples, but it can also be used as a starting point for provisioning in a user application.
The initialization code of the examples has now been restructured into an initialization phase and a
start phase, following the same pattern as the nRF5 SDK examples. We strongly advise user
applications to do the same. We have also added an execution_start()
function to avoid the risk of
race conditions during the start phase.
Following the same pattern as the nRF5 SDK, weak implementations of app_error_fault_handler
(in examples/common/src/app_error_weak.c
) and mesh_assertion_handler
(in examples/common/src/assertion_handler_weak.c
) have been provided. Instead of installing error
handlers as callbacks, these functions are now used directly by the nRF5 SDK for Mesh error
handling. They can be overloaded by the user application if needed.
Files from the nRF5 SDK are no longer included as part of the nRF5 SDK for Mesh release. Instead, the user is supposed to download the nRF5 SDK separately and provide a link to the nRF5 SDK folder when building the mesh code. See [Retrieve nRF SDK](@ref how_to_build_nrf_sdk) for more details.
These are API changes that will break an existing application if ignored.
access_message_tx_t
has two new fields:force_segmented
andtransmic_size
.access_message_rx_t
now reports richer low-level metadata for incoming packets, replacingmeta_data.timestamp
andmeta_data.rssi
with a pointer to anrf_mesh_rx_metadata_t
structure.
access_reliable_status_t
: New enum valueACCESS_RELIABLE_TRANSFER_CANCELLED
.
dsm_beacon_secmat_get()
renamed todsm_beacon_info_get()
, and type of last parameter has changed fromnrf_mesh_beacon_secmat_t
tonrf_mesh_beacon_info_t
.
nrf_mesh_init_params_t
(now included inmesh_stack_init_params_t
):assertion_handler
field removed,p_uuid
field added.
nrf_mesh_sar_session_cancel_reason_t
(included innrf_mesh_evt_t
): New enum valueNRF_MESH_SAR_CANCEL_PEER_STARTED_ANOTHER_SESSION
.
nrf_mesh_prov_listen()
:bearer_type
parameter changed tobearer_types
, which is a bitfield for the supported bearers. That means that if multiple bearers are supported, you can listen for incoming provisioning requests on all of them at the same time.
nrf_mesh_prov_evt_complete_t
: Contains a pointer to anrf_mesh_prov_provisioning_data_t
structure now instead of a copy of the provisioning data.
config_client_event_type_t
: New enum valueCONFIG_CLIENT_EVENT_TYPE_CANCELLED
.config_client_composition_data_get()
: Parameterpage_number
added.
health_client_evt_type_t
: New enum valueHEALTH_CLIENT_EVT_TYPE_CANCELLED
.
simple_on_off_status_t
: New enum valueSIMPLE_ON_OFF_STATUS_CANCELLED
.
- File moved from the
mesh/app
folder to theexamples/templates
folder.
These changes are API additions that will not break an existing application if ignored.
dsm_appkey_handle_to_subnet_handle()
function added.
nrf_mesh_subnet_added()
function added.
nrf_mesh_evt_t
/nrf_mesh_evt_type_t
: New event typesNRF_MESH_EVT_NET_BEACON_RECEIVED
andNRF_MESH_EVT_FLASH_STABLE
.nrf_mesh_evt_iv_update_notification_t
:p_network_id
field added.nrf_mesh_evt_key_refresh_notification_t
:p_network_id
field added.
config_client_pending_msg_cancel()
function added.
health_client_pending_msg_cancel()
function added.
simple_on_off_client_t
: New fieldtimeout_cb
added.simple_on_off_client_pending_msg_cancel()
function added.
simple_on_off_server_status_publish()
function added.
access_model_publication_stop()
function added.access_model_publication_by_appkey_stop()
function added.