mbed-os-5.14.0
We are pleased to announce that the Mbed OS 5.14.0 release is now available.
Summary
This release continues to improve and stabilize Mbed OS. We added a static mode for the event queue, which doesn't require using dynamic memory. This aligns the event queue's memory usage with other parts of the system, including RTOS. You can still use dynamic memory, but if you are worried about memory fragmentation or know your memory requirements upfront you can only rely on static memory. We updated the version of C++ standard to C++14, to leverage modern features of the language. We implemented multiple changes to our connectivity, including PPP support for the Nanostack and enterprise security for WiFi. A big item that we started working on is splitting our public interfaces from the internal code; the work for the OS core is done, and we'll continue this work in future releases for other parts of the system. It will add clarity and help our users use only public and stable APIs. We introduced a minimal version of the standard library printf family calls, which addresses most of the common use cases in a fraction of the memory footprint. We continued to update our PSA support to track the upstream development in PSA and Trusted Firmware. We doubled our effort in tracking and fixing Coverity warnings, reducing the number by 50%.
Compatibility
This release is compatible with Device Management Client 4.0.0
Migration Guide
This section lists changes that may require your attention.
Update Mbed OS for PSA Crypto API 1.0b3
Background
Mbed Crypto is our implementation of the PSA Crypto APIs. We shipped an implementations of prerelease versions of the PSA Crypto API in Mbed OS 5.11, 5.12, and 5.13, with a warning in the documentation that these APIs were subject to change and that we did not intend to maintain backwards compatibility with them. The PSA Crypto API has continued to develop and change over the past few months and a number of breaking changes have been made since the pre-release version we based our Mbed Crypto implementation on.
What is being broken?
The PSA Crypto APIs in Mbed OS as shipped in Mbed OS 5.13 are breaking.
PSA Crypto API 1.0b3 API breaking changes, addressed in Mbed OS 5.14 (see #11315)
- Use key attributes structures for key creation
- Make generating or importing a key also allocate the key
- Update key derivation functions to accept chunked inputs
- Update key agreement API
- Align PSA Crypto error codes with other PSA error codes
- Rename functions for consistency with each other and the rest of PSA
- Be consistent in use of stdint types
Expected PSA Crypto API 1.0 API breaking changes, to be addressed in the next Mbed OS release
- None
Why is it being broken?
Mbed Crypto needs to track the upstream PSA Crypto API as maintained by ATG in order to pass ATG's PSA Compliance Kit tests. The PSA Crypto API was not yet finalized in Mbed OS 5.13 and continues to evolve. We shipped an implementation in Mbed OS 5.13 to enable other teams working on Mbed OS to develop their services a top APIs that should be mostly similar to the final APIs, rather than save up all the integration pain for a later Mbed OS release when the APIs are finalized.
Analysis of impact on users
There should be no surprises to users based on our statements of PSA API instability. We've worked with Mbed TLS, Pelion Client, Storage (ITS), SPM, and Attestation teams to ensure the message of API instability was understood and to coordinate our changes to the API. There are potentially other users of the PSA Crypto API, and our documentation states the stability level of the API for these users.
Alternatives
We could continue to provide the version of the PSA Crypto API shipped with Mbed OS 5.13, but to save flash size and reduce the maintenance burden of maintaining an API we clearly communicated we'd be breaking in the next release, this was deemed not worth the cost.
Mitigation and migration path for users
Users must update to use the new version of the API.
Renaming of key pair names
Replace KEY_PAIR
in names that would have used KEYPAIR
in the previous API version. For example, PSA_KEY_TYPE_ECC_KEY_PAIR
replaces PSA_KEY_TYPE_ECC_KEYPAIR
.
Using persistent keys
Use psa_open_key()
to open a persistent key. Previously, volatile keys could also be opened. With PSA Crypto API 1.0b3, keys are implicitly opened for you upon import, generation, or derivation.
psa_status_t psa_open_key(psa_key_id_t id,
psa_key_handle_t *handle);
Only persistent keys can be opened, so there is no need to pass the lifetime anymore.
It is no longer necessary to call psa_create_key()
to make a key persistent. A key is persistent if it is created with a lifetime other than PSA_KEY_LIFETIME_VOLATILE
. As part of key creation, use psa_set_key_id()
to set both the key's persistent identifier and to set the lifetime to persistent and then call the key creation routine: like psa_generate_key() or psa_import_key()
Old | New |
---|---|
psa_open_key() |
Only use for opening previously created persistent keys |
psa_create_key() |
psa_set_key_id() Keys with IDs are made persistent implicitly upon creation |
Allocating keys
Key creation will implicitly allocate resources as necessary, so psa_allocate_key()
has been removed from the API and is no longer needed.
Old | New |
---|---|
psa_allocate_key() |
Not necessary. Delete calls to psa_allocate_key() . |
Importing keys
Previously, you had create a policy structure and pass many function arguments to communicate the properties you wanted the imported key to have. Now, you describe them entirely within the attributes structure, passing only the attributes and data to psa_import_key()
.
Old | New |
---|---|
psa_key_policy_init() |
psa_key_attributes_init() |
psa_key_policy_set_usage() |
psa_set_key_usage_flags() , psa_set_key_algorithm() |
Pass key type to psa_import_key() |
psa_set_key_type() |
psa_set_key_policy() |
Pass the attributes to psa_import_key() |
psa_import_key() |
psa_import_key() |
Generating keys
Previously, you had create a policy structure and pass many function arguments to communicate the properties you wanted the imported key to have. Now, you describe them entirely within the attributes structure, passing only the attributes and data to psa_generate_key()
.
Old | New |
---|---|
psa_key_policy_init() |
psa_key_attributes_init() |
psa_key_policy_set_usage() |
psa_set_key_usage_flags() , psa_set_key_algorithm() |
Pass key type to psa_import_key() |
psa_set_key_type() |
psa_set_key_policy() |
Pass the attributes to psa_import_key() |
psa_generate_key() |
psa_generate_key() |
Reading key policy or information
What used to be two functions with many parameters each is now one function that returns the attributes in one structure, in the same format you'd use to create new keys.
Old | New |
---|---|
psa_get_key_policy() , psa_get_key_information() |
psa_get_key_attributes() |
Deriving keys
The previous "generator" class of functions has been renamed to "key_derivation". The psa_crypto_generator_t
structure was previously used to derive keys. Use of the psa_key_derivation_operation_t
structure replaces psa_crypto_generator_t
for deriving keys.
Old | New |
---|---|
psa_crypto_generator_t |
psa_key_derivation_operation_t |
psa_generator_abort() |
psa_key_derivation_abort() |
psa_get_generator_capacity() |
psa_key_derivation_get_capacity() |
Function parameter | psa_key_derivation_set_capacity() |
psa_generator_read() |
psa_key_derivation_output_bytes() |
Use of generator with PSA_ALG_SELECT_RAW |
psa_raw_key_agreement() |
psa_key_derivation() |
Deriving keys now uses key derivation objects and consists of multiple parts. See the getting started guide for details. |
Key agreement
Old | New |
---|---|
psa_key_agreement() |
psa_key_derivation_setup() , psa_key_derivation_key_agreement() , psa_key_derivation_output_key() |
Hashing
Note: Not yet implemented
The PSA Crypto API 1.0b3 adds a few new functions to help with hashing. Specifically, functions to perform one-shot computation or comparison of hashes.
Old | New |
---|---|
Many hash function calls | psa_hash_compute() |
Many hash function calls | psa_hash_compare() |
Computing or verifying a MAC
Note: Not yet implemented
The PSA Crypto API 1.0b3 adds a few new functions to help with working with MACs. Specifically, functions to perform one-shot computation or comparison of MACs.
Old | New |
---|---|
Many MAC function calls | psa_mac_compute() |
Many MAC function calls | psa_mac_verify() |
Symmetric cryptography
Note: Not yet implemented
The PSA Crypto API 1.0b3 adds a few new functions to help with working with symmetric ciphers. Specifically, functions to perform one-shot encryption or decryption. The types used by psa_cipher_generate_iv()
, psa_cipher_set_iv()
, and psa_cipher_update()
have changed from unsigned char
to uint8_t
.
Old | New |
---|---|
Many cipher function calls | psa_cipher_encrypt() |
Many cipher function calls | psa_cipher_decrypt() |
Authenticated encryption
Note: Not yet implemented
The PSA Crypto API 1.0b3 introduces multi-part authenticated encryption functions. The original one-shot AEAD functions still remain and aren't being replaced.
New functions for multipart AEAD
- psa_aead_operation_init()
- psa_aead_encrypt_setup()
- psa_aead_decrypt_setup()
- psa_aead_generate_nonce()
- psa_aead_set_nonce()
- psa_aead_set_lengths()
- psa_aead_update_ad()
- psa_aead_update()
- psa_aead_finish()
- psa_aead_verify()
- psa_aead_abort()
Mbed Crypto entropy injection
Use of uint8_t
replaces unsigned char
in mbedtls_psa_inject_entropy()
. The macro MBEDTLS_PSA_INJECT_ENTROPY
replaces MBEDTLS_PSA_ENTROPY_INJECTION
.
Netsocket: Change DNS retry and total attempt counts
DNS lookup is done for each of five predefined servers twice. This change affects the previous DNS lookup functionality only when it's expected that DNS is made three times on the very first DNS server.
Although that's unlikely needed, the previous functionality can be restored reverting the changes to DNS configuration.
uVision export: Handle more C++ language standards
- Mbed OS now uses C++11 language and C++14 library constructs, so requires the C++ compiler to be set to C++14 standard or later. Custom build profiles that select C++98 or C++11 are no longer supported. (ARMC5 should work in its C++11 mode, as C++14 library replacements are provided in-tree, but ARMC5 is not officially supported).
- uVision export now requires MDK 5.28a or later, as
-std=gnu++14
mode cannot be selected in earlier versions. In Mbed OS 5.13, the Vision exporter was selecting-std=gnu++11
, but this is no longer sufficient.
Cellular: moved string_to_pdp_type from AT_CellularContext to Cellular
Moved string_to_pdp_type from AT_CellularContext to CellularUtil. string_to_pdp_type is a common method for AT and other layers. Without moving there will be duplicate methods.
Feature public headers
This will break user code that was using an internal API using a prefixed path, for example #include "foo/bar.h"
instead of #include "bar.h"
.
Port the cryptocell 310 cmac driver
This is a target update, adding hw accelerated CMAC, however, it can also be considered as a breaking change, as it removes support for key sizes other than 128 bit keys, and removes support for DES CMAC.
Port CC 310 sha 512 driver
SHA384 is not supported, returning MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED
Port aes cc310 driver
This is a target update, adding hw accelerated AES, however, it can also be considered as a breaking change, as it removes support for AES other than 128 bit keys.
Sleep rework, RTOS API for bare metal, wait deprecations
- Subset of RTOS API now available in bare metal builds
- Full power save functionality now available in bare metal builds via RTOS API
- Consistent sleep vs wait API naming - wait() and wait_ms() deprecated
Migration notes
- Use of
wait
andwait_ms
should be reviewed to check whether sleeping is appropriate or not in the context the call occurs - if so, change toThisThread::sleep_for
/thread_sleep_for
, else change towait_us
.
Update to Mbed TLS 2.19.1
The Mbed TLS key export feature's export keys callback, new in Mbed TLS 2.19.0, now requires use of const
on its hello.random buffers (7th and 8th parameters). This is an API change.
f_export_keys_ext
in ssl.h now has signature:
int (*f_export_keys_ext)( void *, const unsigned char *,
const unsigned char *, size_t, size_t, size_t,
const unsigned char[32], const unsigned char[32],
mbedtls_tls_prf_types );
Convert TZ target name 'NPSA' to test spec platform name
Define naming rule for TrustZone targets: 'PLATFORM'_['NPSA_']'S'/'NS', where:
- 'PLATFORM' for test spec platform name, which is registered in platform database of mbed-os-tools.
- 'NPSA' for non-PSA targets. Defaults to PSA target if absent.
- 'S'/'NS' for secure/non-secure targets.
M2351: Enhance secure/non-secure image build flow for non-PSA target
Changes for NuMaker-PFM-M2351:
- Change target name to NU_PFM_M2351_NPSA_S for non-PSA secure target and and NU_PFM_M2351_NPSA_NS for non-PSA non-secure target. Original target name NUMAKER_PFM_M2351 is recycled.
- Combine secure image and non-secure image into one in non-secure target post-build. With this, user just needs to flash the combined image instead of flash secure image and then non-secure image separately.
- To drop pre-built secure image in mbed-os tree and provide custom one, add the line '"target.extra_labels_remove": ["NU_PREBUILD_SECURE"]' into 'mbed_app.json' instead of via .mbedignnore.
What's new
add queue static allocation support
Adds UserAllocatedEvent API to provide mechanism for event posting and dispatching without utilization of queue internal memory.
Nanostack release for mbed OS 5.14
This release contains updates for the Mesh protocols:
- Stability improvements and bug fixes to Wi-SUN.
- Enabled Nanostack PPP protocol support.
This version of Wi-SUN stack is inter-operable only with itself (development work still on-going).
Wi-SUN protocol is tested using functional protocol testing suites.
Wi-SUN non-functional testing is performed using more than 100 devices connected to single Wi-SUN network.
Thread stack is verified using protocol testing suite that includes certification test suite
Sys timer should let deep sleep happen
When next SysTimer wake-up is scheduler far enough, always consider
that deep sleep may be entered and program an early wake-up.
So that even if deep sleep is only allowed some time later, it can be
entered. If not doing this, then the deep sleep would be prevented by
SysTimer itself and may not be entered at all.
This has been proved to happen in a simple blinly example.
Add a gpio pinmap
Add a weak gpio_pinmap()
, that every target has to override, to provide a set of pins for GPIO testing.
Add Atomic template
- Added
Atomic<T>
template to make atomics easier in C++.
PSA storage: Conform to "PSA 1.0.0" spec release
PSA Storage: Add the integrity only and no replay protection flags.
Changed EventQueue::cancel to return boolean value
EventQueue::cancel now returns the boolean value to indicate whether the cancel was successful or not.
Cellular: add method to set authentication type to CellularContext
Add new method virtual void set_authentication_type(AuthenticationType type) to CellularContext so application can set the correct authentication type.
Add C++11/14 support utility file
- Various modern C++ forward-compatibility helpers have been added in
mbed_cxxsupport.h
to assist with C++11 and later code, including supporting ARM C 5 as much as possible.
Adding stmod_cellular component
This library allows enabling the cellular module that is connected to the STMOD+ connector of the board.
Currently supported cellular modules are Quectel UG96 and BG96 expansion boards that are included in [p-l496g-cell01] (https://www.st.com/en/evaluation-tools/p-l496g-cell01.html) and [p-l496g-cell02.] (https://www.st.com/en/evaluation-tools/p-l496g-cell02.html) packs.
The STMOD+ Connector specification can be found [here] (https://www.st.com/content/ccc/resource/technical/document/technical_note/group0/04/7f/90/c1/ad/54/46/1f/DM00323609/files/DM00323609.pdf/jcr:content/translations/en.DM00323609.pdf).
BLE: allow overriding event signal
This makes no change to existing code and users. Only affects future porters.
Add minimal printf
To replace the standard implementation of the printf functions with the ones from the minimal-printf library, the custom minimal-printf
profile should be used when compiling with mbed-cli. For example:
$ mbed compile -t <toolchain> -m <target> --profile release --profile minimal-printf
Add <mstd_xxx> C++ headers
- A set of C++11/14 library support headers have been included in
platform/cxxsupport
. These include standard-C++-like APIs, egmstd::atomic
in<mstd_atomic>
, to improve on implementations provided with toolchains. Seeplatform/cxxsupport/README.md
for more information.
Created PPP interface and PPP service classes to netsocket
Add Cellular PPP connection support to Nanostack. Support is made by creating a common PPP service class that both lwIP and Nanostack can use for cellular connectivity.
Affected components are lwIP and Nanostack on board IP stacks, new netsocket PPP interface and PPP service class. Cellular network interface, cellular classes and "nsapi_ppp.h" interface are not modified. No changes are required from the users of the Cellular network interface to continue using the lwIP as the default IP stack.
To use the Nanostack IP stack with the Cellular network interface instead of the lwIP stack, cellular application configuration must be modified in following way:
Set the default stack to nanostack
"nsapi.default-stack": "NANOSTACK"
Configure PPP to IPv6 only mode (Nanostack does not support IPv4)
"ppp.ipv4-enabled": false, "ppp.ipv6-enabled": true,
mbed-mesh-api: Add new API for Wi-SUN configuration
Add new APIs to Wi-SUN network certificate handling and network configuration. This includes:
- network name
- regulatory domain, operating mode and operating class
- setting own and trusted certificate
- removing own and trusted certificates
Optimize debug profile flags for size
Changed the Debug compiler profile to favor size optimization over speed optimization.
Enterprise security support
Add NSAPI_SECURITY_WPA2_ENT type to nsapi_security enum.
- Phrase helps to connect to an 802.1X capable network.
- Phrase conforms to WPA2-AES and WPA-TKIP with enterprise security.
Add a gpio-irq pinmap
Add a weak gpio_irq_pinmap()
, that every target has to override, to provide a set of pins for GPIO IRQ testing.
AT_CellularSMS: allow configuring SMS encoding (7-bit/8-bit) at initialization
AT_CellularSMS::initialize
takes an additional encoding parameter that defaults to 7-bit (behavior of existing code does not change, one needs to opt-in to send 8-bit SMS)
Change default optimisation level to O1 when exporting to uVision
Default uVision optimisation level changed to O1. It matches the debug profile.
Known Issues
We publish Mbed OS as a collection of modules on GitHub. Issues are raised in the specific repositories and then tracked internally. The purpose of this section is to provide a single view of the outstanding key issues that have not been addressed for this release. As such, it is a filtered and reviewed list based on priority and potential effect. Each item summarizes the problem and includes any known workarounds, along with a link to the GitHub issue (if applicable). We welcome any comments or proposed solutions.
For more information about an issue, contact us on the forum.
TLS: IP addresses in the X.509 certificate subjectAltNames
- Description: Parsing IP addresses in the X.509 certificate subjectAltNames is not supported yet. In certificate chains relying on IP addresses in subjectAltNames a
BADCERT_CN_MISMATCH
error is returned. - Workaround: merge branch https://github.com/ARMmbed/mbedtls/tree/iotssl-602-san-ip into your copy of Mbed TLS before building the application. It is still in EXPERIMENTAL stage, use it on your own responsibility!
- Reported Issue: Issue reported by a customer in email.
- Priority: MAJOR
TLS: Mismatch of root CA and issuer of CRL not caught
- Description: The
x509_crt_verifycrl()
function ignores the CRL, when the CRL has an issuer different from the subject of root CA certificate. - Workaround: Make sure that the issuer of the CRL and the root CA certificate's subject are the same before passing them to
x509_crt_verifycrl()
. - Reported Issue: Reported by a partner.
- Priority: MAJOR
TLS: Self Test Failure with Some Hardware Accelerators
- Description: Most HW acceleration engines (if not all) require the parameters to be from contiguous memory.
All the self tests use test vectors that are defined in the .bss section, which means these are not contiguous. This causes the self test to possibly fail, when implementing HW accelerated engines. - Workaround: There are no known workarounds.
- Reported Issue: Reported by the development team.
- Priority: MAJOR
TLS: Hardware-accelerated hash creates CBC padding oracle in TLS
- Description: The current countermeasures against CBC padding oracle attacks in Mbed TLS call a low level internal API. The implementation of this API might not be possible with the hardware accelerator API and even if it is, the timing might still have detectable differences. The lower level API is called out of sequence and accelerators that are not aware of this might crash.
- Workaround: Keep
MBEDTLS_SSL_ENCRYPT_THEN_MAC
enabled inmbedtls/config.h
and enable the Encrypt-then-MAC extension (RFC7366) on the peers side. - Reported Issue: Reported by the development team.
- Priority: MAJOR
Tools: Error when running mbed test --compile/run list
- Description: The error, "pkg_resources.DistributionNotFound: The 'mbed-ls==1.*,>=1.5.1' distribution was not found and is required by icetea, mbed-flasher" is observed when running the command "mbed test -m K64F -t ARM --icetea --compile-list -vv".
- Workaround: None
- Reported Issues: #8064
- Priority: Major
Platform: Realtek RTL8195AM does not define flash algorithms for uvision
- Description: No flashing support in uvision for Realtek RTL8195AM
- Workaround: Use drag-n-drop programming
- Reported Issue: #4651
- Priority: Minor
Platform: Realtek RTL8195AM - CMSIS-RTOS error: ISR Queue overflow
- Description: Realtek RTL8195AM does not maintain a long running connection to Mbed device connector. The error manifests as an ISR Queue overflow.
- Workaround: None
- Reported Issue: #5640
- Priority: Major
NVStore and TDBStore objects can collide in internal flash
- Description: NVStore and TDBStore are classes implementing storage solutions. By default they will allocate the last two sectors in internal flash.
If both are used, a runtime error will happen. NVStore is deprecated, and TDBStore should be used instead. - Workaround: Use TDBStore instead of NVStore.
- Priority: Minor
Cordio Link Layer: GAP Advertising parameters need to be set before advertising data is set
- Description: This issue only affects users of the Cordio Link Layer. If this ordering is not respected, GAP advertising data will not be set correctly.
- Workaround: If using the BLE API, apply changes from #10772. If using the Cordio Host Stack API, make sure Advertising parameters are set before advertising data is set when using the Cordio Link Layer.
- Reported Issue: IOTPAN-486
- Priority: Major
NRF52480: baremetal build fails due to cryptocell dependency
- Description: The baremetal build on NRF52480 fails because the CryptoCell depends on Mbed TLS. Mbed TLS is not present in baremetal builds.
- Workaround: Remove CRYPTOCELL310 feature via your application's target config.
- Reported Issue: #11428
- Priority: Major
Cellular stack receives corrupted data when there is a thread frequently calls wait()
- Description: The low-power ticker of certain targets has been seen to sometimes cause interrupt latency problems, leading to symptoms such as loss of serial data.
- Workaround: To work around this direct use of LowPowerTicker etc classes can be replaced by Ticker etc. The RTOS itself will be using the low-power ticker if MBED_TICKLESS is set for the target and target.tickless-from-us-ticker is false. Undefining MBED_TICKLESS or setting target.tickless-from-us-ticker to true will stop the RTOS from using the low-power ticker.
- Reported Issue: https://jira.arm.com/browse/IOTCORE-1352 (Internal)
- Priority: Major
Enabling MBED_SLEEP_TRACING_ENABLED crashes the system on STM boards
- Description: MBED_SLEEP_TRACING_ENABLED is disabled by default. Enabling it on STM boards can cause the system to crash.
- Workaround: Do not enable it on STM boards
- Reported Issue: #11497
- Priority: Major
Test Report
Overview
Numbers of improvements around testing had been made into product by mbed-5.14.0 release:
• Introduced FPGA test shield along with new peripheral test suites for Silicon Partners
• Reduced Coverity defects numbers by ~50%
• Merged Greentea test coverage and Unittest coverage, overall test code coverage reached ~61%
• Reduce CI testing time PR test (~2 hrs), Branch test (~4 hrs), nightly test (~8 hrs)
• Tracking down night test failures, fixed most of failures and keep the unfixed defect managed
Release automated CI test
Apart from regular Pull Request test and Nightly test, We also have Branch test executed on Mbed OS 5.14.0-RC3
Tests run on CI:
- Compilation tests: ARM , GCC_ARM, IAR
- Unittest Test matrix : Test Results (all passed)
- GreenTea test matrix : Test Results (mostly passed)
- Exporter test:
- Cloud Client test:
With the above Greentea test failures: we identified the following failure reasons:
- DISCO_L475VG_IOT01A failed on network-wifi tests ---- We believe this is a false positive, nightly tests on the same target(but different RaaS) are passed, the target on This RaaS will need RF-boxes
- UBLOX_EVK_ODIN_W2 failed on network-wifi tests ---- Tracked by defect IOTPART-8659, waiting partner’s input for fixing
- GR_LYCHEE failed on platform and rtos tests ---- Test code issue, fixed on master #11417, but not pulled in to 5.14 RC
- LPC55S69 failed on storage devicekey and KVStore tests ---- Tracked by defect IOTSTOR-925 , under investigation by mbed teams
- UBLOX_C030_U201 failed on netsocket tests ---- Tracked by defect ONME-4400, under investigation by mbed teams
- UBLOX_C030_U201 failed on LP_ticker tests ---- Tracked by defect IOTHAL-528, not a regression, under investigation by mbed teams
Greentea test result matrix
Test Numbers:
- Greentea test numbers increased from 1281 to 1454
- New FPGA shield tests been add to Mbed OS
- Integration tests for storage and connectivity has been added to Mbed OS
- More event queue greentea tests has been added
- More mbed platform tests has been added
- Unittest numbers increased from 582 to 624
- New event queue unit tests has been added
- More cellular unit test has been added
- New watchdog unit test has been added
Targets Coverage
In Mbed OS 5.14, compilation test targets scope has not changed, remains all Mbed OS enabled targets.
As of the time mbed-os 5.14.0 release, we run greentea test on 13 targets:
- DISCO_F746NG
- DISCO_L457VG_IOT01A
- GR_LYCHEE
- K64F
- LPC55S69
- NUCLEO_F207ZG
- NUCLEO_F303RE
- NUCLEO_F411RE
- NUCLEO_F429ZI
- NUCLEO_F746ZG
- NUCLEO_L073RZ
- UBLOX_C030_U201
- UBLOX_EVK_ODIN_W2
Coverity
- During the 5.14 time frame we started to focus on stabilizing and fixing the Coverity static analysis issues
- We started with 145 total issues in the Coverity.
- Now we have reduced the number to 73 ( 89 - 16 False Positive ) that is decrease of around 50%.
Code Coverage
Test Code Coverage has been tracked and information is published on COVERALLS
- Over the period of mbed-OS 5.13 to 5.14, the coverage numbers increased from ~36% to ~61%
- Part of the coverage increase is due to changes in how we run some of the tests, that allow us to measure the coverage including:
- Converting some tests to greentea.
- Merging unittest coverage with greentea test coverage.
- Some of the Mbed OS modules are being tested outside of the main Mbed OS CI, this coverage data is not yet merged into the overall coverage (mbedtls, nanostack, FPGA shield etc.).
- Because of the reasons above, the ~61% coverage number is not an absolute reflection of real code coverage.
- We will continue working to bring missing coverage info into the overall coverage number, including FPGA HW coverage.
Memory Monitoring
- NXP Enabled TICKLESS mode by default on K64F and other targets added ~2200 bytes ROM and ~200 bytes RAM PR#10796
- Enabled async serial with DMA on K64F/K66F added about 200 bytes ROM and 400 bytes RAM PR#11443
- Minimal printf feature is not enabled by default, so we didn’t see any memory savings
Release OOB manual test
- Release manual OOB test been carried out against 5.14.0 RC1/RC2/RC3
- OOB focused on out-of-box experience with official mbed OS examples
- More than 10 issues been identified, blocking and critical issues been resolved.
Contents
Ports for Upcoming Targets
11122
Support Nuvoton's new target NUMAKER_IOT_M263A
Fixes and Changes
11402
STM32L4 USB device
11400
nsapi_dns: cleanup dns queue when running out or memory
11391
EvenQueue: fix template functions passing UserAllocatedEvent<...> as argument.
11370
Driver Updates + ARMC6 driver support + WIFI fixes
11369
Specify QSPI frequency for more Cypress targets
11367
Cypress 5.14 rollup
11359
Update mbed-coap to version 5.1.0
11356
Fix WHD link state change event handling
11355
Initial support for Serial Flash on PSoC Devices
11354
Update linker scripts based on latest PDL 1.3
11353
Add reserved resources metadata to Cypress BSPs
11349
TDBStore bugfix: won't rely on flash erase value to detect is a sector erased
11348
Mutex: _count incrementation brought back
11345
Fix bare-metal configuration to support Pelion Device Management Client
11344
S2-LP: Sync with development repository
11343
ESP8266: Support power pin in custom wiring
11342
add queue static allocation support
11339
mbed-os/LwIP changes and fixes in auto-IP for Bonjour Conformance Test
11337
Updating SDP-K1 PinNames.h.
11335
Nanostack release for mbed OS 5.14
11334
I2 c sequential communication rework
11326
Update PDL for Cypress Targets
11324
PSOC6: Update CSP to latest
11322
Updated the LWIP buffer pool size for PSoC6
11319
Update WHD to 1.30.0
11315
Update Mbed OS for PSA Crypto API 1.0b3
11309
MCUXpresso Kinetis SPI drive: Add a delay between CS assertion and first sclk edge
11306
At handler improvements
11304
RSSI getter fixed for ESP8266
11303
NUCLEO_H743ZI2 : increase system clock from 400 MHz to 480 MHz
11302
Enable json overriding ESP8266 default baud rate
11301
STM32L4+ : increase system clock from 80 MHz to 120 MHz
11298
Explicitly set rbp_internal_size for TARGET_PSOC6
11296
Fix missing offset in TBStore read from flash
11294
KL43Z: Enable FALSHIAP storage
11293
K82F: Add USBDEVICE support
11291
Stm32 ospi qspi fallback support
11290
MX25LM51245G QSPI test config file
11289
Replace TEST_ASSERT_INT_WITHIN usage in netsocket tests
11276
Add integration tests
11275
Enable building feature storage with a bare metal profile
11272
mbed fault handler: fix mbed_fault_context parameter
11269
storage: fix potential memory corruption and check return values
11266
ADC internal temperature support and EMAC header fix
11265
Add <mstd_tuple> and ARMC5
11249
Make AT_CellularSMS::list_messages support index 0 in SMS inbox
11248
Allow ATHandler::read_int to return 0 successfully
11247
AT_CellularSMS: set "international" flag in PDU when applicable
11246
Cellular: Fix BG96 AT driver for IPv6
11245
AT_CellularSMS: allow configuring SMS encoding (7-bit/8-bit) at initialization
11244
Netsocket: Change DNS retry and total attempt counts
11239
crypto: Copy legacy crypto from Mbed Crypto
11236
Force inline Timer::attach() to get rid of floating-point instructions
11235
minimal-printf should not bypass the retargetting code
11225
Vision export: Handle more C++ language standards
11224
Coverity issues fixed
11220
Fix cellular dns test with IAR compiled binary
11213
Moved partial profile to a subdirectory
11212
Change default optimisation level to O1 when exporting to uVision
11211
Review follow-up mstd fixes
11208
Atomics: GCC fix for M23 (again)
11201
Cellular: Fixed improper AT handler setup through virtual calls in co
11200
Cellular: moved string_to_pdp_type from AT_CellularContext to Cellula
11191
Cellular: move RAT reading to better support ublox custom boards
11190
Cellular: failure when deleting created context is not considered error
11185
Move rtos & platform TARGET directories to source
11181
mbed-mesh-api: Add new API for Wi-SUN configuration
11154
Cellular API shutdown to stop state machine
11152
Nuvoton: Fix FPGA CI test failing
11149
Cellular: Remove unnecessary local variables
11148
Cellular: Fix SIM pin enter command
11145
Implement queue.count()
11142
Relocate USB target specific code to root targets
directory
11136
USBDevice: Avoid forcing end device to be derived from USBDevice class
11126
Optimize debug profile flags for size
11122
Support Nuvoton's new target NUMAKER_IOT_M263A
11119
Riot Micro cellular device
11104
Enterprise security support
11099
Update EP_AGORA target pinout
11084
NVStore.cpp (and KVStore) - run-time failure handling missing
11082
Cellular: Add BG96 AT driver with DNS support
11076
ARMC5 extensions
11074
Add a gpio-irq pinmap
11073
Feature public headers
11072
STM32L4: update drivers version to CUBE V1.14.0
11070
IAR: Suppress "exceptions are disabled" warning
11067
Add Unittest equeue tests
11058
BLE: allow overriding event signal
11053
Add Mbed bootloader support to CY8CKIT_062_WIFI_BT and CY8CPROTO_062_4343W
11051
Add minimal printf
11050
DISCO_L4R9I new target
11039
Add <mstd_xxx> C++ headers
11038
Extend the GPIO HAL API tests
11019
Nuvoton: Modify wait ns(...) to provide more accurate implementation
11018
PSOC6_SB: initial integration of Cypress Secure Boot target CY8CPROTO_064_SB
11009
FPGA SPI: remove 4 and 12 bits size support
10980
LwIP: make TCPIP_THREAD_PRIO configurable
10974
Created PPP interface and PPP service classes to netsocket
10971
Nanostack: sync libservice with changes in master copy
10947
Port the cryptocell 310 cmac driver
10921
STMOD_CELLULAR: readme file additional information
10919
AT Cellular Network: mutex lock issue
10913
Port CC 310 sha 512 driver
10907
Port aes cc310 driver
10900
Armcc5 compilation fixes
10895
Reduce Event.h and EventQueue.h using C++11
10885
Reduce Callback.h using C++11
10877
Cellular: Ublox cellular context activation updated for C030_R412M
10868
Add C++11/14 support utility file
10866
Adding stmod_cellular component
10847
PSA storage: Conform to "PSA 1.0.0" spec release
10841
TARGET_STM: Add DEVICE_SPI_COUNT to use SPIs without interference
10837
Toolchain attributes - use C++11/C11
10829
PSA: TFM import
10821
Cellular: Refactor APN db implementation to reduce memory usage
10813
Make ARMC5 and IAR develop profile also size optimized
10792
Fix: Allow target size restriction for LPC55S69
10750
Changed EventQueue::cancel to return boolean value
10741
M2351: Override wait_ns to provide more accurate implementation
10711
Add i2cee-driver to components
10703
Cellular: Removed boilerplate code
10699
MbedCRC: make buffers const void *
10694
Cellular: add method to set authentication type to CellularContext
10683
Export wait_ns to be overridable
10660
Add SCLK and SIN stats to SPIMasterTester
10659
Replace uses of ArrayView with mbed::Span
10644
Add a gpio pinmap
10274
Add Atomic template
10104
Sleep rework, RTOS API for bare metal, wait deprecations
11467
Convert TZ target name to test spec platform name
11450
Minimal-printf: Set default configurations to false
11441
Organize source files and add Doxygen labels
11435
Update to Mbed TLS 2.19.0 and Mbed Crypto 2.0.0
11419
Adds missing include required by fixed-width format specifiers
11418
NRF52: fix config
11412
Kinetis update to fix tickless
11410
Mesh API, Wi-SUN: Initialize Wi-SUN settings with values from json
11385
Fix problem with low level lp_ticker STM wrapper
11376
Update PDL documentation and metadata
11526
Fix added to unlock AT handler mutex
11522
Sys timer should let deep sleep happen
11521
Bux fix: Context can be cleared using CGDCONT after sim ready state
11493
Update to Mbed TLS 2.19.1
11487
Convert TZ target name 'NPSA' to test spec platform name
11484
Delaying message id random initialization to later stage.
11479
no-systick targets: fix systick irq handler setup
11423
Nanostack release for mbedos 5 14
11288
M2351: Enhance secure/non-secure image build flow for non-PSA target
Using this release
You can fetch this release from the mbed-os GitHub repository, using the tag "mbed-os-5.14.0".
If you need any help with this release please visit our support page, which provides reference links and details of our support channels.