Mistake on this page? Email us

Device Management Client 4.11.0

Important note on testing before upgrading:

Before upgrading deployed devices to a new version of Device Management Client, you must test that you can:

  • Perform a firmware-over-the-air update of a device with the new firmware image.
  • Perform an additional firmware-over-the-air update on the device with the new firmware image to check that you can update the new firmware image.

Device Management Client example

  • Application restructuring:
    • M2MInterfaceFactory::create_resource() function used for creating object and resources.
    • Replaced the deprecated status APIs with the on_status_changed() API.
    • Removed the MCC_MEMORY flag.
    • Replaced the MCC_MINIMAL flag with the PDMC_EXAMPLE_MINIMAL flag.
  • Updated to Mbed OS 6.14.0.
  • Updated Mbed TLS to 2.27.0 in pal-platform.
  • Added a demonstration of FOTA component update. Placed component registration and callback examples in source/fota_platform_hooks_imp.cpp.
  • [Linux] Added demonstration of FOTA combined update. Placed subcomponent registration and callback examples in source/fota_platform_hooks_imp.cpp under the MBED_CLOUD_CLIENT_FOTA_SUB_COMPONENT_SUPPORT flag.

Factory Configurator Client example

  • Updated to Mbed OS 6.14.0.
  • Updated Mbed TLS to 2.27.0 in pal-platform.

Device Management Client

  • Removed content type ct= field from the register message payload.
  • Bootstrap LWM2M compliance:
    • Bootstrap message parsing extracts instance ID from Uri-Path or from payload.
    • Security instance IDs are no longer hardcoded but are in line with the bootstrap-server resource boolean value.
    • Extended DELETE to paths other than 0 and 0/0.
    • Updated to ignore and not fail when not supported optional resources are included in bootstrap PUT requests.
    • Bootstrap done is triggered on receiving ACK to separate CHANGED response to the bs finish POST request. Previously, boostrap done was relying only on ssl peer close notification.
    • Client has a new configuration flag MBED_CLIENT_DYNAMIC_OBSERVABLE, which controls APIs such as set_observable(). The purpose of these features is to control whether the resource can be observed from the cloud. When enabled, Client also appends the "obs" parameter to the resources as part of the registration message. If disabled, all resources are always observable, and you don't need to specify such capability separately. As part of improving LwM2M compliancy and to clean up the code base, this feature is wrapped behind this feature flag that is currently enabled by default. In the future, we plan to disable and eventually remove the feature completely.
  • Add support to collect and store trace output to NVM for later review.
    • You can enable this option by defining compile time macro MBED_CONF_MBED_CLIENT_DYNAMIC_LOGGING_BUFFER_SIZE. This defines the size for a RAM buffer. When the buffer is full or trace level trigger is found, the buffer content is stored to NVM.
    • When enabled, these resources are published, and you can use them to control logging:
      • 33456/0/1 Start log capture.
      • 33456/0/2 Stop log capture.
      • 33456/0/3 Read current logs from NVM.
      • 33456/0/4 Erase existing logs from NVM.
      • 33456/0/5 Trace level output. Accepted values are: CMD (0), ERROR (1), WARN (2), INFO (3), DEBUG(4).
      • 33456/0/6 Trace level trigger. Accepted values are: DISABLED(0), ERROR (1) and WARN (2). Default value is ERROR. If disabled, all trace lines defined by trace level are stored to NVM.
      • 33456/0/7 Size of the NVM in bytes.
      • 33456/0/8 Auto erase NVM when full, disabled by default.
      • 33456/0/9 Is capture currently enabled/disabled.
      • 33456/0/10 Size of unread logs in NVM.
      • 33456/0/12 Total size if logs in NVM.
    • The application can also start and stop capture using MbedCloudClient::set_dynamic_logging_state(bool state) API.
  • Extended the MbedCloudClient::setup() API to allow the application to trigger full registration.

Device Management Update Client

  • [Linux] Added support for FOTA combined update, which is a coordinated and simultaneous installation of multiple images on a device. The new MBED_CLOUD_CLIENT_FOTA_SUB_COMPONENT_SUPPORT macro enables this. To enable a combined update on a device, register a device component that consists of the relevant subcomponents that need to be updated together. FOTA_MAX_NUM_OF_SUB_COMPONENTS defines the maximum number of supported subcomponents.
  • Deprecated component update callback prototypes. Customers using Pelion Device Management Client 4.11 and higher should use the new component update callbacks.
    • Deprecated the verify-after-installation callback (fota_component_verify_install_handler_t). Use the fota_comp_verify_cb_t callback instead.
    • Deprecated the installation callback for non-Linux targets (fota_candidate_iterate_handler_t). Use the fota_comp_install_cb_t callback instead.
    • Deprecated the installation callback for Linux targets for component update (fota_app_on_install_candidate). For component update, use the fota_comp_install_cb_t callback. To update the main application, use fota_app_on_install_candidate.
    • Added the fota_comp_finalize_cb_t installation finalization callback for future use (not in use yet).

Platform Adaptation Layer (PAL)

[Linux] Enabled PAL_DNS_API_VERSION 3 by default for Linux configurations.

Known issues

  • The earlier revisions of LPCXpresso 546XX have a different QSPI chip than some of the later revisions. The application needs to specify the chip at compile time. Select the correct QSPI chip in the board configuration file (define_NXP_LPC54628.txt). This depends on the board revision.
  • [PAL tests] PAL file system and PAL update tests currently support external SD card storage. Future releases will add support for other storage types.
  • [PAL tests] PAL TLS test (TCPHandshakeWhileCertVerify_threads) isn't working on Mbed OS 5.13.0.

Mbed OS

We recommend you read the Mbed OS release notes for known issues and their latest status.

  • PSA is in preview level and as such isn't ready for production yet.
    • You can't update the precompiled PSA binary through firmware update. You can only update the application, itself.
    • K64F:
      • You can use the board in PSA mode (without real hardware PSA implementation).
      • The configuration file that allows this is placed under the configs-psa folder in the example.
      • The PSA mode adds RAM consumption (static +3.5KB) and flash/ROM consumption (+18.5KB).
      • Arm and Partners are optimizing the solution in future releases.


  • Firmware update installation of very large images on Raspberry Pi3B or Pi3B+ may result in a mmc0 timeout failure. This is a generic Raspberry Pi3 issue. See RPI issue #2392.
  • Firmware update from one Linux distribution version to another doesn't work. For example, firmware update from Yocto distribution Morty to Rocko is not currently possible because of Linux version-dependent files (device tree) in the BOOT partition. Therefore, you must update within one major version of a distribution.
  • glibc versions 2.23 and 2.24 have a bug in thread creation. It can cause random crashes with Linux. If possible, update glibc to version 2.25 (or later). See sourceware issue 20116 for details. We have implemented a workaround for this issue to decrease its likelihood. This issue may still occur under certain circumstances.
  • The Device Management Client application must run as root to have access rights to perform the firmware update. A more secure implementation will come later.
  • Yocto distribution has only been tested in developer certificate mode.
  • The Yocto distribution used doesn't yet support Raspberry Pi4.

Device Management Client Third Party IP report

Device Management Client uses some third-party IP (TPIP) components. This table lists the TPIP and sources:

Original License Description
bsdfiff BSD 2 Clause Diff algorithm used for delta update image generation.
LZ4 BSD 2 Clause (lz4.c and lz4.h under /lib in LZ4) Compression algorithm used for compressing delta update images.
TinyCBOR MIT Factory configurator client (FCC) uses TinyCBOR, which is a constrained node implementation of CBOR in C, with slight modifications. The code is at mbed-cloud-client/tinycbor and in a standalone repository in GitHub.
Unity MIT Platform Adaptation Layer (PAL) tests use Unity framework from ThrowTheSwitch. The code is at mbed-cloud-client/mbed-client-pal/Test/Unity.


Additional TPIP for NXP SDK:

Original License Description
Amazon FreeRTOS kernel v10.2 MIT FreeRTOS kernel from Amazon.
lwIP Modified BSD Lightweight IP stack.
Platform support files BSD 3 Clause Platform specific files in platform/NXP.
LPC54608J512 Linker script BSD 3 Clause Linker script for GNU C.
LPC54xxx generated configuration files BSD 3 Clause Board-support specific generated files in pal-platform/SDK/LPCXpresso54628/generated.
LPC54xxx board support software Copyright NXP Board support software for LPC5400-series - we don't provide this; you must download this with MCUXpresso SDK Builder yourself.
MIMXRT106XXX Linker script BSD 3 Clause Linker script for GNU C.
EVK-MIMXRT1060 generated configuration files BSD 3 Clause Board-support specific generated files in pal-platform/SDK/EVK-MIMXRT1060/generated.
EVK-MIMXRT1060 board support software Copyright NXP Board support software for EVK-MIMXRT1060 - we don't provide this; you must download this with MCUXpresso SDK Builder yourself.

Keil SDK

Original License Description
Platform support files BSD 3 Clause Platform-specific files in platform/KEIL.
Platform adaptation layer files MIT Platform adaptation layer files in Source/Port/Reference-Impl/OS_Specific/RTX_MW.

Renesas SDK

Additional TPIP for Renesas SDK (FSP):

Original License Description
Amazon FreeRTOS kernel v10.3 MIT FreeRTOS kernel from Amazon.
Renesas Flexible Software Package (FSP) v1.0.0 Copyright (c) Renesas Board support package for RA6M3 boards. Running pal-platform.py will git clone this repository to your work area under pal-platform/SDK/Renesas_EK_RA6M3/fsp.
Renesas e2studio generated configuration files Copyright (c) Renesas Renesas e2studio generates a number of files, available in pal-platform/SDK/Renesas_EK_RA6M3/e2studio_gen.
lwIP Modified BSD Lightweight IP stack.
Platform support files BSD 3 Clause Platform specific files in platform/Renesas_EK_RA6M3.
Platform adaptation layer files MIT Platform adaptation layer files in Source/Port/Reference-Impl/OS_Specific/Renesas_EK_RA6M3.

Secure Device Access (SDA)

If you enable Secure Device Access (SDA), you will use some additional TPIP:

Original License Description
cose-c BSD 3 Clause IETF Concise Binary Object Representation (CBOR) Encoded Message Syntax (COSE) - a copy of this library is located under mbed-cloud-client/tree/master/secure-device-access-client/cose-c.

Mbed OS

You also get more TPIP with the Mbed OS release, itself. See its LICENSE.md file for details.