- Update mbed-cloud-client to version 4.13.2.
- Update
cURL
to version 8.5.0 (from 7.87.0). - Update
Dockerfile
base image to Ubuntu 22.04 (from Ubuntu 20.04). - Fixed numerous small spelling mistakes pointed by
misspell
. - Improve error logging in subdevice FOTA download case.
- Change subdevice FOTA download folder default from
.
to/tmp
.
- Update mbed-cloud-client to version 4.13.1.
- This disables Asynchronous DNS by default, as device fails to reconnect if some of the pods in the service are restarted.
- In such a scenario, the device needs to be restarted (or edge-core process need to be restarted).
- We highly recommend updating to this release, if you are using mbed-edge version 0.19.0, 0.19.1 or 0.20.0.
- Update
Mbed TLS
to version 2.28.2 (from 2.28.1), updated also GitHub domain from ArmMbed to Mbed-TLS. - Update
cURL
to version 7.87.0 (from 7.85.0). - Add function name to crypto API traces.
- Dependencies for edge-tool updated, misleading usage information removed.
- Izuma branding changes.
- Update Mbed TLS to version 2.28.1 from version 2.27.0. This closes security vulnerability CVE-2021-44732.
- Update curl to version 7.85.0 from version 7.76.0. This closes multiple security vulnerabilities, see curl releases.
- Functionality for Restore Factory Settings (RFS) via GPIO-hookups.
- New API for writing values in direct binary format without text conversions in-between.
- Remove embedded microprocessor targets from
pal-platform.json
. - Update
mbed-cloud-client
library to version 4.13.0. - Add CMake flagging
CUSTOM_PORT
, which allows you to use port443
as an alternative port with5684
.- If a socket error is encountered, the next try will be done with the original CoAP port
5684
. - After 2nd failure, we alternate back to the custom port.
- If a socket error is encountered, the next try will be done with the original CoAP port
- Implemented combined update callbacks for bootloader. This assumes that boot capsule update is implemented on the device.
- Updated to Pelion Device Management Client (PDMC) library version 4.11.1
- Updated to Mbed TLS version 2.27
- Updated parsec-se-driver version from 0.5.0 to 0.6.0 (in
lib/pal-platform.json
). - Ported subdevice FOTA support to be compatible with new FOTA framework library. This feature is no longer supported with UC Hub library.
- Implemented callbacks to support combined update feature of Device Management Update Client introduced in PDMC 4.11.0.
- Install edge_tool.py and cbor_converter.py scripts with
edge-tool/setup.py
. - Setting the default value of
MBED_CONF_MBED_CLIENT_MAX_RECONNECT_TIMEOUT
to 10 mins.
- Updated to Pelion Device Management Client (PDMC) library version 4.9.0.
- Deprecated
crypto_ecdh_key_agreement
JSON-RPC API for PSA configuration, due to psa_set_key_enrollment_algorithm() API deprecation in Mbed Crypto. - Updated parsec-se-driver version from 0.4.0 to 0.5.0 (in
lib/pal-platform.json
). - Updated libcurl version from 7.75 to 7.76 (in
lib/pal-platform.json
). - Mbed TLS updated from 2.22.0 to version 2.25.0.
- Removed the use of mbed-cloud-sdk from
edge-tool
as the sdk has been deprecated. - Added setup script to edge-tool.
- Updated to Pelion Device Management Client (PDMC) library version 4.8.0.
- Updated cryptography version from 2.3 to 3.3.2 in
/edge-tool
. - Added Dockerfile to build and run edge-core in Docker containers.
- Added
Makefile
andMakefile.test
shortcuts for various build and run configurations. - Added unit test cases, developed using CppUTest framework.
- Described edge-core CLI in
docopt
language in/edge-core/edge_core.docopt
and./cli_template.tmpl
. Addededge-core/gen_docopt.sh
script to generate the respective C file. - Added
cpputest
anddocopt.c
dependencies as git submodules.
- Added
fota
folder which defines thefota_install_callback
function for new fota framework library.
- Updated to Pelion Device Management Client (PDMC) library version 4.7.1.
- Allow LwM2M resources to be optionally named by Protocol Translators and Gateway Resource Managers.
- Updated the design of subdevice (devices behind the gateway) firmware update feature. Edge core will now parse and also validate the firmware update manifest intended for the subdevice. It will then forward the manifest's vendorID and classID to PT for validation before downloading the update image.
manifest_vendor_and_class
allows PT to receive the vendorID and classID provided in the update manifest.
- Update libcurl to version 7.75 (in
lib/pal-platform.json
) to fix multiple CVEs.- BDSA-2020-3058
- BDSA-2020-3694 (CVE-2020-8284)
- BDSA-2020-3697
- BDSA-2020-3711
- BDSA BDSA-2021-0018
- Update parsec-se-driver to version 0.4.0 (in
lib/pal-platform.json
). - Updated libwebsockets library to v3.1.
- When Edge communicates on behalf of multiple devices, there is an underlying limitation in the CoAP communication. This limitation effectively reduces the number of requests in flight to one. When there is very heavy communication, this introduces extra latency. An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- 200ms round trip time to Device Management.
- 10KB registration message.
- Underlying Device Management Client sends data in 1KB blocks and waits for an acknowledgement for each block. This equals 10 * 200ms = 2 seconds.
- During this time, Edge does not process other messages.
- If Edge passes a lot of notification updates to Device Management, the responsiveness to requests initiated by Device Management may be hindered.
- Mediated device lifetime tracking is not supported. Devices have the same lifetime as the Edge device. The default is one hour. The
#define
parameter used to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
. DELETE
(CoAP/LwM2M) operation not supported.- Devices moving between Edge instances have corner cases that are not supported. Deregister the devices from the current Edge instance before connecting to another Edge instance.
- Protocol translators (PT) should register endpoints with unique names. The names should be idempotent meaning that the name of the device remains same even when its re-onboarded or a new session is established with the device. One way to derive this name could be to use the device's mac address which is suppose to be unique.
- In scenarios where multiple protocol translators can derive the same name of 2 different physical or virtual devices then add an identifier to it in order to make it unique. For example, by adding a prefix or suffix based on the protocol translator name, which must be unique.
-
Migrated domains from ArmMbed to PelionIoT.
-
Updated to Pelion Device Management Client (PDMC) library version 4.7.0.
-
Updated Mbed TLS to version 2.22.0 in previous release.
-
Edge Core now supports the new Firmware-Over-the-Air (FOTA) Update Framework library introduced by Device Management Client 4.7.0.
- To enable the FOTA library, compile Edge Core with the CMake
-DFOTA_ENABLE=ON
and-DFIRMWARE_UPDATE=ON
flags. Otherwise, Edge Core compiles with Update client hub. - The FOTA Update Framework library does not support the Subdevice FOTA feature. To use this feature, compile Edge Core with Update client hub.
- By default, the FOTA Update Framework library is statically linked with
libcurl
version 7.72.0. To dynamically link the curl library provide CMake-DMBED_CLOUD_CLIENT_CURL_DYNAMIC_LINK=ON
flag. - The FOTA callback function is defined in
./fota
directory. This functions invokes a bash script, which the function expects to be located at/opt/pelion/fota_update_activate.sh
.
- To enable the FOTA library, compile Edge Core with the CMake
-
Validated the use of manifest-tool version 2.1.0 and updated the instructions in the Readme file to use the
manifest-dev-tool
tool to generate a developer update certificate.
- Added Gateway Resource Manager (GRM) JSON Remote Procedure Call (RPC) APIs. These APIS allow system management services on the gateway to register and add new LwM2M objects under gateway resources.
gw_resource_manager_register
to register a system management service.add_resource
to add an LwM2M object to the list of existing gateway resources.write_resource_value
to update resource values.write
allows the resource manager to react to messages sent by Edge. Currently, the gateway resource manager should react to write requests with anexecute
or awrite
operation.
- Removed the multi-instance LwM2M object with ID
/33457
. It reported the default capabilities of Edge such as terminal, logs, statistics and alerts but never managed those services. Maestro is responsible for the orchestration and configuration of the gateway services. It uses the JSON RPC APIs to register itself as a gateway resource manager and add an instance of LwM2M object with ID/33457
upon detecting gateway features such as terminal, logs, remote configuration and KaaS. - Removed the multi-instance LwM2M object with ID
/33457
. It reported the default capabilities of Edge such as terminal, logs, statistics and alerts but never managed those services. Maestro is responsible for the orchestration and configuration of the gateway services. It uses the JSON RPC APIs to register itself as a gateway resource manager and add an instance of LwM2M object with ID/33457
upon detecting gateway features such as terminal, logs, remote configuration and KaaS. - Removed the multi-instance LwM2M object with ID
/33457
. This object reported the default capabilities of Edge, such as terminal, logs, statistics and alerts, but never managed these services. Maestro manages the orchestration and configuration of the gateway services. Maestro uses the JSON RPC APIs to register itself as a gateway resource manager and add an instance of a LwM2M object with ID/33457
when it detects gateway features such as terminal, logs, remote configuration and Kubernetes as a Service (KaaS). - Added a JS example (
simple-grm-example.js
) in the mbed-edge-examples project to demonstrate how to use GRM feature. - Added support for Parsec. To compile Edge Core with Parsec, set the
-DPARSEC_TPM_SE_SUPPORT=ON
CMake flag. In this configuration, the secure connection with Pelion is established using a device bootstrap private key generated on the Trusted Platform Module (TPM). We have tested integration with:- IBM's Software TPM. To test Edge Core with the software TPM, follow the instructions provided by Parsec.
- Hardware TPM v2 of Dell Edge Gateway 3002.
- Added support for firmware update of devices behind the gateway managed by the Protocol Translators (PTs). PTs can use the new JSON RPC APIs to prompt Edge Core to download a firmware update image and provide the update status to Pelion Device Management.
download_asset
- The PT verifies the manifest received on LwM2M object10252
, and uses the JSON RPC APIs to prompt Edge Core to download the firmware image. After Edge Core downloads the image successfully, it responds with the file path of the image.subdevice_manifest_status
- The PT provides the status of the parsed manifest to Edge Core.
- Updated the C example (
pt-example
) in the mbed-edge-examples project to demonstrate the firmware update process for devices behind the gateway.
- When Edge communicates on behalf of multiple devices, there is an underlying limitation in the CoAP communication. This limitation effectively reduces the number of requests in flight to one. When there is very heavy communication, this introduces extra latency. An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- 200ms round trip time to Device Management.
- 10KB registration message.
- Underlying Device Management Client sends data in 1KB blocks and waits for an acknowledgement for each block. This equals 10 * 200ms = 2 seconds.
- During this time, Edge does not process other messages.
- If Edge passes a lot of notification updates to Device Management, the responsiveness to requests initiated by Device Management may be hindered.
- Protocol translators (PT) may cause side effects on devices connecting through another protocol translator. Edge Core identifies endpoint devices by their name. To prevent unknown behavior caused by clashing names, ensure the devices have unique names across the PTs. For example, add a prefix or suffix based on the protocol translator name, which must be unique.
DELETE
(CoAP/LwM2M) operation not supported.- Devices moving between Edge instances have corner cases that are not supported. Deregister the devices from the current Edge instance before connecting to another Edge instance.
- Mediated device lifetime tracking is not supported. Devices have the same lifetime as the Edge device. The default is one hour. The
#define
parameter used to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
.
- The default value of
max-age
is set to 60. This allows caching of the resource value in Pelion Device Management for up to 60 seconds. - Added a new gateway resource with LwM2M object ID
/33457
. The rich nodes can report the features supported on the platform. Users can enable, disable and remotely configure the feature. It statically reports terminal, logs, statistics and alerts.
- Pelion Device Management Client library updated to version 4.3.0.
- Mbed TLS updated to version 2.19.1.
- The WORKING directory of
PAL_FS_MOUNT_POINT_PRIMARY
is automatically replaced with BACKUP if it is corrupted.
- Pelion Device Management Client library updated to version 3.4.0.
- Mbed TLS updated to version 2.18.1.
- Changed Edge to use Device Management Client library default TLS configuration file instead of the TLS configuration file provided by Edge.
- Removed the now obsolete TLS configuration file (
/config/mbedtls_mbed_client_config.h
).
- Removed the now obsolete TLS configuration file (
- Added KCM certificate
GET
and KCM public keyGET
C APIs. - Updated Device Management Client to version 3.3.0.
- New KCM crypto JSON RPC APIs:
crypto_generate_random
API to generate a random buffer using KCM API.crypto_asymmetric_sign
API to perform asymmetric sign operation using KCM API.crypto_asymmetric_verify
API to perform asymmetric verify operation using KCM API.crypto_ecdh_key_agreement
API to perform ECDH key agreement using KCM API.
- New KCM crypto PT C APIs:
pt_crypto_generate_random
API to generate a random buffer using KCM API.pt_crypto_asymmetric_sign
API to perform asymmetric sign operation using KCM API.pt_crypto_asymmetric_verify
API to perform asymmetric verify operation using KCM API.pt_crypto_ecdh_key_agreement
API to perform ECDH key agreement operation using KCM API.
- Changed protocol translator client execute handling to send response through event. This allows sending an execute response payload by setting and writing the resource value inside the execute callback.
- Added new device certificate renewal PT C APIs to perform certificate renewal or certificate enrollment using CA in cloud:
pt_device_certificate_renew
API to initiate a certificate renewal or enrollment.pt_free_certificate_chain_context
API to free a certificate chain context passed to thept_device_certificate_renew_response_handler
.pt_device_certificate_renew_finish
API to finish a device certificate renewal or enrollment.pt_device_certificate_renew_response_handler
callback API prototype for handling the certificate renewal or enrollment result.pt_device_certificate_renew_request_handler
callback API prototype for handling the certificate renewal or enrollment request sent from the Cloud.
- Added NULL-checks for connection in various API calls. These prevent potential segfaults in situations where connection is missing.
- Fixed integer request ids in JSON RPC requests.
- Added handling for pending JSON RPC requests. Requests are cleaned with an error response if the client
doesn't respond within the maximum time limit. You can configure this timeout in
cmake/edge_configure.cmake
by modifying valuesSERVER_REQUEST_TIMEOUT_THRESHOLD_MS
for Edge Core andCLIENT_REQUEST_TIMEOUT_THRESHOLD_MS
for protocol translator C-API v2 client. The entity that made the request receives aPT_API_REQUEST_TIMEOUT
error response. - Added handling for pending JSON RPC requests in the case of disconnection. The entity that made the request receives a
PT_API_REMOTE_DISCONNECTED
error response. - Mbed TLS updated to version 2.17.0.
- Added certificate renewal JSON RPC and C-APIs.
- Added KCM certificate
get
and KCM public keyget
JSON RPC APIs. - Fixed the decoding buffer size in our Base64 library.
- Added test that client sets the disconnect callback in
pt_client_create
in the v2 API.
- Updated Mbed TLS to version 2.15.1.
- Added end-to-end support for asynchronous write operations (
OPERATION_WRITE
andOPERATION_EXECUTE
) from a web application to protocol translator managed endpoints.- This allows the web application to detect if the operation has succeeded or failed.
- CMake 3.5 is required
- Fixed an issue where a write value operation would allow creating more endpoints than the configured endpoint limit.
- Fixed a crash occurring when a write value operation is called while the protocol translator is disconnected.
- Updated Device Management Client to version 2.2.1
- Removed
Mbed
from documentation. - Removed obsolete injection of insecure RoT module in Edge Core build.
- Moved the
include/jsonrpc/jsonrpc.h
header underlib/jsonrpc/jsonrpc
. This header is internal. - Moved the
include/edge-rpc/rpc.h
header underedge-rpc/edge-rpc
. This header is internal. - Implemented sending the device unregistration message to Device Management backend. The unregistration relies on the lifetime expiration in the Device Management backend.
- Updated Device Management Client to version 2.1.1.
- Implemented Protocol Translator API v2.
- The old Protocol Translator API (v1) is still available.
- The v2 API has better thread safety than the v1 API.
ns_list.h
is not visible outside.- API uses a connection ID instead of a connection structure pointer.
- The v2 API optimizes the size of the payload in communication with Device Management Edge.
- Deprecated The Protocol Translator API v1. The API headers deprecated are under
include/pt-client
. - Removed Yocto toolchain and target. The build environments need to provide a correct toolchain and target.
- Fixed usage for
--cbor-conf
also when combined with--reset-storage
. - Fixed possible invalid pointer dereference when calling
pt_client_final_cleanup
afterpt_client_start
has returned. Migration note: Thept_client_final_cleanup
API functionality has been moved inside thept_client_start
function and thept_client_final_cleanup
function has been deprecated. Any call topt_client_final_cleanup
should be removed and thept-client/client.h
" include should be removed from the protocol translator as it is an internal header. - Fixed memory leak on
PUT
andWRITE
request handling. The payload pointer given from Cloud Client to Edge was never freed. The payload was copied for NUL-termination and the original pointer was not freed. - Added workaround for waiting Cloud Client threads to stop on Edge Core close. The underlying Cloud Client's EventOS event loop thread is not joined and occasionally it is reported as memory leak by Valgrind.
- Firmware update from
morty
version of Yocto tosumo
does not work and makes devices unusable. The differences in the device trees of the different versions cause problems when starting the kernel after the update. - When Edge communicates on behalf of multiple devices, there is an underlying limitation in the CoAP communication that effectively reduces the amount of requests in flight to be one. On very heavy communication cases, this introduces extra latency. An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Mbed Cloud of 200 ms.
- 10 KB registration message.
- Underlying Cloud Client sends data in 1 KB blocks and waits for acknowledgement for each block. This equals 10 * 200 ms = 2 seconds.
- During that time, other messages are not processed.
- If there are a lot of notification updates passed to Mbed Cloud from Mbed Edge, the responsiveness to requests initiated by Mbed Cloud may be hindered.
- Protocol translators may cause side effects on devices connecting through another protocol translator if both protocol translators use the same names for the devices because Edge Core identifies the endpoint devices by their name. There is limited checking on which protocol translator owns the endpoint device, and clashing names can cause unknown behavior. Ensure that devices have unique names across the protocol translators. For example, add a prefix or suffix based on the protocol translator name, which must be unique.
DELETE
(CoAP/LwM2M) operation not supported.- Devices moving between Edge instances have corner cases that are not supported. Deregister the devices from the current Edge instance before connecting to another Edge instance.
- Mediated device lifetime tracking is not supported. Devices have the same lifetime as the Edge device. Default is 1 hour. The
#define
used to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
.
- WISE-3160 content removed.
- Device Management Edge Local Management API introduced.
- New command line argument for Edge Core.
- It is now possible to control the log coloring using the
--color-log
argument. - Without the argument, a plain text log is produced.
- When giving the argument
--color-log
toedge-core
binary, an ANSI colored log is produced.
- It is now possible to control the log coloring using the
- Added support for setting user data to the
pt_device_t
structure. Seept_create_device_with_userdata
inpt_api.h.
- Removed the duplicate configuration file of Device Management Client.
mbed_client_user_config.h
removed.- Moved the TCP keepalive configuration to
mbed_cloud_client_user_config.h
.
- Renamed LoRa example to MQTT example.
- Updated the version of Yocto in the Raspberry Pi 3 reference implementation from
morty
tosumo
. - Updated Device Management Client to version 2.0.1.1.
- Added new fields
account-id
andlwm2m-server-uri
to Edge status REST API.
- Removed the protocol translator examples from the
edge-core
repository.- The examples are now in the Mbed Edge protocol translator examples repository.
- Added the
libevent_global_shutdown
function to the cleanup stage to prevent occasional memory leaks during shutdown. - Fixed issues in JSONRPC message handling on broken messages.
Firmware update from morty
version of Yocto to sumo
does not work and makes devices unusable. The differences in the device trees of different versions cause problems when starting the kernel after the update.
- Implemented fragmented JSONRPC message handling. There was no check if message was fragmented. Fragmentation happened when request payload was exceeding 2048 bytes.
- Added CBOR configuration file injection mechanism for
BYOC_MODE
. The configuration is injected with--cbor-conf
command line argument inedge-core
. - Moved
read_file.[c|h]
frompt-example
tocommon
. - Added Mbed Cloud developer credentials C source file conversion to CBOR support to
edge-tool
. - Updated Mbed Cloud Client to version 1.4.0
- Prevent enabling the developer update resources if the developer mode is not enabled
- Update Mbed Cloud Client to
1.3.3
. - Breaking change Revised the build system to support normal CMake cycle.
- Removed pre-generated
build
-directory. Normal out of tree builds are now supported. - Build helper script
build_mbed_edge.sh
removed. - Added
cmake
-directory for predefined CMake configurations. - Added
cmake/targets
-directory for predefined build targets. - Added
cmake/toolchains
-directory for predefined build toolchains.
- Removed pre-generated
- Breaking change Changed underlying communication channel between the Edge Core and protocol translators to use Unix domain socket instead of TCP socket.
- Breaking API change Removed host and port parameters from
pt_client_start()
function and replaced withsocket_path
. The underlying communication channel is changed to Unix domain socket. - Released JSONRPC API documentation for protocol translators to use. The new API is a JSONRPC 2.0 API and uses a websocket as transport.
- Added simple Javascript protocol translator example to
examples/simple-js-example
. - Added
jansson
andlibevent
to libraries. Removed runtime and compilation time dependency from environment and operating system. These are now built and linked into Mbed Edge binaries in the project. - Added
libwebsocket
andmbedtls
to libraries. These are now built and linked into Mbed Edge binaries in the project. - Removed
mbed_edge_config.h
fromWISE-3610-SDK
in favor of CMake configuration options. - Fixed the file path in the documentation for the
update_default_resources.c
. Correct folder for the file isconfig
. - Fix the version information printed by edge-core in product repository.
- WISE-3610 SDK 1.0.19e support.
- Improve performance when a lot of endpoints are used.
- Edge Core check the JSONRPC Protocol API version of Edge Client. If the version doesn't match the connection is closed.
- Implemented a common Trace API which all Edge components use.
- Removed
common/edge_common.[c|h]
. - Changed default for maximum number of registered endpoints limit. New default value is 500.
- Fixed a bug where Edge Core did't decrease the number of allocated endpoints if the Protocol API client was killed.
- Fixed leaks in edge-core shutdown.
- Fixed a bug where objects were added twice to Mbed Cloud Client.
- Fixed a bug when Edge Core could not start when the --reset-storage parameter was used.
- Fixed Edge Core to return
Edge Core is shutting down
instead ofInternal error
when Edge Core is closing - Fixed Edge Core to return
Invalid params
instead ofError
if deviceId is invalid. - Fixed Edge Core crash when it cannot allocate the http port.
- Fixed registration update behaviour to set the flag to false if resources were added or removed in correct order. The issue was that flag was set to false first and in a nested function call set back to true. This caused unnecessary empty registration updates to Mbed Cloud.
- Mbed Edge communicates on behalf of multiple devices. There is a underlying limitation
in the CoAP communication to effectively reduce the amount of requests in flight to
be one. On very heavy communication cases this will introduce extra latency.
An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Mbed Cloud of 200 ms.
- 10 KB registration message.
- Underlying Mbed Cloud Client will send data in 1 KB blocks and waits for acknowledgement for each block. This equals 10 * 200 ms = 2 seconds.
- During that time other messages are not processed.
- If there are lot of notification updates passed to Mbed Cloud from Mbed Edge the responsiveness to Mbed Cloud initated requests may be hindered.
- Protocol translators may cause side-effect on devices connecting through another protocol translator if both protocol translators use same names for the devices. There is limited checking on the actual protocol translator which owns the translated device specified by the name. Ensure that devices have unique names across the protocol translators, as an example add a prefix or suffix based on the protocol translator name which must be unique.
DELETE
(CoAP/LWM2M) operation not supported.- Devices moving between Mbed Edge instances have corner cases that are not supported. You should de-register the devices from the current Mbed Edge before connecting to an another Mbed Edge.
- Mediated device lifetime tracking not supported. Devices will have the same lifetime
as the Mbed Edge device. Default is 1 hour.
The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
. - Device unregistration to Mbed Cloud uses only the lifetame expiration mechanism.
- Updated Mbed Cloud Client version to 1.3.1.1. Which contains following fixes.
- Linux :RPi3 device gets stuck when rebooting the system after performing firmware update.
- Linux: Update client fix for handling callbacks properly.
- POST response handling to send the final response only once.
- WISE-3610 compilation warnings fixes.
- Doxygen documentation formatting fixes.
- Contribution instructions and pull request template added for GitHub community.
- Corrected registration update messages. They were always populated with the translated endpoints. This caused a full registration in the Mbed Cloud for the translated endpoints. The full registration deletes all subscriptions to the endpoints resources. The functionality is now registration update which refreshes only the translated device lifetime.
- Mbed Edge Yocto meta layer released.
- Mbed RaspberryPi3 Yocto meta layer released.
protocol_api.c
- fix misleading debug print -Create resource /d
was printed but actually we were doing a value update.- Documented the
lifetime
parameter inpt_create_device
ofpt-client
API to clearly mark the parameter to be reserved and unused. - Change default logging level to INFO.
See the release CR-0.4.2 known issue list.
- Ignore CoAP parse errors from mbed Cloud Client as they are non-critical.
- Added API's for setting execute and value update callbacks to edge resources.
- Changed byte order helper functions to use correct conversion functions in
pt-example/byte_order.c
. - Add separate configuration header for Mbed Client.
- Mbed Edge communicates on behalf of multiple devices. There is a underlying limitation
in the CoAP communication to effectively reduce the amount of requests in flight to
be one. On very heavy communication cases this will introduce extra latency.
An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Mbed Cloud of 200 ms.
- 10 KB registration message.
- Underlying Mbed Cloud Client will send data in 1 KB blocks and waits for acknowledgement for each block. This equals 10 * 200 ms = 2 seconds.
- During that time other messages are not processed.
- If there are lot of notification updates passed to Mbed Cloud from Mbed Edge the responsiveness to Mbed Cloud initated requests may be hindered.
- Binding Mbed Edge core to a already reserved port may cause core dump. This is known to happen on Yocto 2.2.x running on Raspberry Pi 3.
- Protocol translators may cause side-effect on devices connecting through another protocol translator if both protocol translators use same names for the devices. There is limited checking on the actual protocol translator which owns the translated device specified by the name. Ensure that devices have unique names across the protocol translators, as an example add a prefix or suffix based on the protocol translator name which must be unique.
DELETE
(CoAP/LWM2M) operation not supported.- Devices moving between Mbed Edge instances have corner cases that are not supported. You should de-register the devices from the current Mbed Edge before connecting to an another Mbed Edge.
- Mediated device lifetime tracking not supported. Devices will have the same lifetime
as the Mbed Edge device. Default is 1 hour.
The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
- Device unregistration to Mbed Cloud uses only expiration mechanism currently.
- Protocol translated device registration through Mbed Edge to Mbed Cloud initiates register update message to Mbed Cloud. Mbed Cloud handles the mediated device update as full registration. This causes current subscriptions to be dropped to for protocol translated resources. Application logic must listen to registration notifications and renew subscriptions.
- Add support for empty payload for POST requests from cloud to Edge endpoint.
- Backwards incompatible Root of Trust key derivation fix.
If the backwards compatibility is needed a define a compiler flag
PAL_DEVICE_KEY_DERIVATION_BACKWARD_COMPATIBILITY_CALC
to value of1
. - Update Mbed Cloud Client to
R1.3.0
release with the dependencies. It adds secure time support. - Added 3rd party contribution instructions.
- Added configuration samples and files required by the update feature to the WISE-3610
- Fixed the file path in the documentation for the
update_default_resources.c
. Correct folder for the file isedge-client
- Added configuration samples and files required by the update featur to the WISE-3610.
- Remove the define
MBED_CLOUD_CLIENT_CONFIG_DIR
. UsePAL_FS_MOUNT_POINT_PRIMARY
andPAL_FS_MOUNT_POINT_SECONDARY
instead. - Edge-core returns an error when trying to registerer a device which is already registered. This helps to prevent accidentially modifying the devices owned by another edge-core client process. This allows more CoAP messages to be stored for resending and duplicate detection.
- The
edge-tool
to include full message on errors. The Mbed Cloud SDK in some cases wraps the status codes to, e.g.404
to400
. - Added Software One Time Programmed (SOTP) security feature.
- Removed resource values from debug logs. Resource value can be pure binary data and can break log consumers. The value size is logged instead.
- License changed to Apache 2.0
- Changed the Edge Core resource value representation to
text-format
. This aligns the representation with Mbed Cloud Client and its expected format for resource level values. TLV is not yet supported. The values manipulated from the Mbed Cloud are intext-format
. See LWM2M technical specification for exact definition of the data types. The link between the Protocol Translator and Edge Core uses binary representation of the data. When protocol translator writes the data to Edge Core:- integer, time, float, boolean: network byte-order.
- string: utf-8.
- opaque: sequence of binary data.
- objlink: two 16 bit unsigned integers beside the other. When Edge Core writes the data to protocol translator:
- integer, time, float: network byte-order. The value is 64 bits.
- string: utf-8.
- opaque: sequence of binary data.
- objlink: two 16 bit unsigned integers beside the other.
- Added a helper tool
edge-tool
for observing, manipulating and filtering resources. - Added graceful shutdown support to Edge Core.
- Edge Core disconnects if client sends invalid JSON.
- Protocol API error codes are improved to be more consistent / descriptive.
- Added update client functionality
- Added maximum number of registered endpoints limit. Default value 1000.
- Added support to configure the network interface.
- Added version information to the status API
- Added support for Reset Factory Settings. Customers may implement their own implementation for RFS in
edge-core/edge_server_customer_code.c - Fixed issues found by Coverity analysis tool
- Protocol translator initiated value write and device_register methods improved on error situations. The first JSON error is returned and if JSON errors exist, it will not update.
- Cloud initiated value write made more robust regarding memory buffer handling.
- Breaking API change Removed all global connection variables to make protocol translator API usable from shared library. Causes all API related functions to expect
struct connection *connection
in the arguments. - Breaking API change The
pt_client_start
function has output reference parameterstruct connection *connection
added. Applications must provide this to protocol translator API functions as argument. This binds the calls to the specific Edge Core connection. - Breaking API change All protocol translator API functions expect
struct connection *connection
as first argument. - Breaking API change All protocol translator callback functions expect
struct connection *connection
as first argument. - Breaking API change Resource values are expected to be given in network byte-order format
for certain LWM2M value types:
- integer, time, float, boolean: network byte-order.
- Breaking API change Changed the return type of
pt_received_write_handler
fromvoid
toint
. It is now possible to return failure from the protocol translator implementation. - Breaking API change
pt_object_instance_add_resource
signature changed. The parameteruint8_t operations
removed. The function will create only a read-only resources to the passed object instance. - New API function Added function to support creating resources with callback.
The callback is the specified action to do for the resource on WRITE or EXECUTE operation.
The function name is
pt_object_instance_add_resource_with_callback
and has two differences in the signature over the read-only resource creation,uint8_t operations
andpt_resource_callback callback
function pointer. The signature of the resource callback istypedef void (*pt_resource_callback)(const pt_resource_opaque_t *resource, const uint8_t *value, const uint32_t size, void* userdata)
. - Added
parent
-field forpt_device_t
,pt_object_t
,pt_object_instance_t
andpt_resource_opaque_t
. - Added an optional helper API
pt-client/pt_device_object.h
for creation standard LWM2M device resource object/3
.
- Added defaults to command line arguments. Port and host arguments are optional.
Connects to
127.0.0.1:22223
by default. - Updated the protocol translator example:
- To use network byte-order for float temperatures.
- to use the changed API when adding resources to object instances.
- to use the resource callback directly on the resource.
- IPSO object example to create
/3
device object for the cpu temperature example device.
- Added defaults to command line arguments. Port and host arguments are optional.
Connects to
127.0.0.1:22223
by default. - Updated the LoRa protocol translator example to use the changed protocol translator API when adding resources to object instances.
- Fixed issues when message was written to client and response came back before the message went to request queue. The application were not able to match the response to any request. This also caused hidden memory leak, the messages were not removed because response was already handled.
- Updated the version of the factory configurator client
- Changed the _network_interface to a string in edge-client
- Removed invalid assert from pt_device_free
- Release README.md: client_wrapper dir changed to edge-client
- lorapt-example: mention the command-line parameters in README.md file
- All instances of "Mbed Cloud Edge" changed to "Mbed Edge".
- Mediated endpoints are can be observed directly.
- Added firmware update client to dependencies and build.
- The configuration file
mbed_cloud_edge_config.h
is renamed tombed_edge_config.h
. - Added type definition
protocol_translator_t
forstruct protocol_translator
- Splitted
misc_lib.[c|h]
into two reusable functions. Filecommon/integer_length.[c|h]
for calculating integer length as characters. Filecommon/default_message_id_generator.[c|h]
for default implementation of message id generator. - Default Mbed Cloud Client Configuration directory is changed from
./pal
to./mcc_config
. Please read the new instructions inREADME.md
. - Implemented
POST
andPUT
support from CoAP to mediated device resources. These are translated intoWRITE
andEXECUTE
operations on LWM2M resources.
- Introduced new callback (includes device_id) for device related operations
- Breaking API change
pt_client_start
signature changed. Removed individual callback function parameters and replaced it with aprotocol_translator_callbacks_t
struct to contain all needed callback functions. - Breaking API change Added a shutdown callback to
pt_client_start
callback structure. - Breaking API change Added
pt_
namespace to the callback function prototypes. - Breaking API change Added
void* userdata
for callback function prototypes. - Breaking API change Added
hostname
parameter topt_client_start
.
- Updated the example to use the changes in the API's.
- Protocol translator API moved to run in another thread instead of running in main thread.
- Devices are contained in list and are persistent during the process runtime.
- Removed JSON based example application configuration. The JSON file path parameter removed.
- Example application takes the protocol translator name as second parameter.
- Added CPU thermal zone thermometer IPSO objects if thermal zone with correct type is available.
- Example main thread now handles polling to CPU thermal zone for updating thermal zone thermometer IPSO object.
- Changed example client to use correct IPSO object id (5432 -> 3303) for the simulated thermometer object.
- Implemented resettable minimum and maximum resources for CPU thermometer object.
/3303/0/5601
IPSO object path for minimum measured temperature./3303/0/5602
IPSO object path for maximum measured temperature./3303/0/5605
IPSO object path for executable resource to reset minimum and maximum measured temperature.
- Updated the example to use the changes in the API's.
- Breaking API change The received write handler signature changed.
pt_received_write_handler
exposes the detailed argument list for handling writes and executes.
POST
(CoAP) /EXECUTE
(LWM2M) operation not supported for other than resources.PUT
(CoAP) /WRITE
(LWM2M) operation not supported for other than resources.DELETE
(CoAP/LWM2M) operation not supported.- Devices moving between Mbed Edge instances have corner cases that are not supported.
- Device unregistration to Mbed Cloud uses only expiration mechanism currently.
- Mbed Cloud Core does not have hook point to add Mbed Cloud Core specific objects with resources.
- Notifications from protocol translated resource value changes are currently forwarded only as Mbed Edge value changes and not as connected device value changes.
- Protocol translated device registration to Core initiates full registration message to Mbed Cloud. This causes current subscriptions to be dropped to for Mbed Edge and protocol translated resources. Application logic must listen to registration notifications and renew subscriptions.
- Registration update from Core to Mbed Cloud is not supported.
- Protocol translator device count resource type changed from
opaque
tointeger
. client-wrapper
renamed toedge-client
. All API level functions namespaced withedgeclient_
-prefix.- Registration and unregistration error handling added.
- Registration to Mbed Cloud is deferred if there is one already ongoing.
- Registration is prevented if Edge Core cannot bootstrap to Mbed Cloud.
- Show the Mbed Cloud Client error status in HTTP status API response.
- The Edge Core endpoint name and Mbed Cloud internal id added to HTTP status API response.
- Fixed deadlock when registering devices and unregistering devices simultaneously.
- Reduced excessive
info
-level logging. - Mbed Cloud Client is allocated dynamically, fixed random SIGSEGV on Edge Core start.
- Fixed Linux platform stability issues caused by known glibc bug (https://sourceware.org/bugzilla/show_bug.cgi?id=20116). It was manifested by timer implementation in PAL.
- Edge Core unregisters the devices from Mbed Cloud if it's interrupted using the signal SIGINT.
- Segmentation fault fixed from protocol translation API when connection cannot be established to Mbed Cloud Core.
- Added the external endpoint name and internal id to HTTP status API response.
- Breaking API change Refactored the API to be simpler and easier to use.
- Changed example client to use correct IPSO object id (5432 -> 3300) for the simulated thermometer object.
- Updated the example client to use refactored API.
- Added protocol translator example for WISE-3610 LoRa gateway. See
lorapt-example
directory.
POST
(CoAP) /EXECUTE
(LWM2M) operation not supported.DELETE
(CoAP/LWM2M) operation not supported.- Devices moving between Mbed Edge instances have corner cases that are not supported.
- Device unregistration to Mbed Cloud uses only expiration mechanism currently.
- Mbed Cloud Core does not have hook point to add Mbed Cloud Core specific objects with resources.
- Notifications from protocol translated resource value changes are currently forwarded only as Mbed Edge value changes and not as connected device value changes.
- Protocol translated device registration to Core initiates full registration message to Mbed Cloud. This causes current subscriptions to be dropped to for Mbed Edge and protocol translated resources. Application logic must listen to registration notifications and renew subscriptions.
- Registration update from Core to Mbed Cloud is not supported.
- Core to write Mbed Cloud Client errors as errors in log.
- Segmentation fault fixed when registering multiple resources to an object.
- See the list of CR-0.1.0-EA
- Mbed Edge Core registration as device to Mbed Cloud.
- Protocol translator registration support.
- Protocol translated device registration support.
- Protocol translated device value write support. It is possible to write values from protocol translated devices to Core and those values are available in Mbed Cloud.
GET
(CoAP) /READ
(LWM2M) support for Mbed Cloud Core and protocol translator mediated devices.PUT
(CoAP) /WRITE
(LWM2M) support for protocol translator mediated devices.- Subscriptions to Mbed Edge resources and protocol translated resources from Mbed Cloud.
- Status-interface shows other states than "connecting": "connected" when registered to cloud and "error" when encountering an error.
- Register protocol translator to Core.
- Register protocol translated device.
- Unregister protocol translated device.
- Write values of protocol translated devices to Core.
- Receive value writes to protocol translated devices from Core.
- Initial example implementation of simulated devices and protocol translator API use.
- Starting edge-core may crash in some certain timing situations with
SIGSEGV
. POST
(CoAP) /EXECUTE
(LWM2M) operation not supported.DELETE
(CoAP/LWM2M) operation not supported.- Devices moving between Mbed Edge instances have corner cases that are not supported.
- Device unregistration to Mbed Cloud uses only expiration mechanism currently.
- Mbed Cloud Core does not have hook point to add Mbed Cloud Core specific objects with resources.
- Notifications from protocol translated resource value changes are currently forwarded only as Mbed Edge value changes and not as connected device value changes.
- Protocol translated device registration to Core initiates full registration message to Mbed Cloud. This causes current subscriptions to be dropped to for Mbed Edge and protocol translated resources. Application logic must listen to registration notifications and renew subscriptions.
- Registration update from Core to Mbed Cloud is not supported.