Releases: golioth/golioth-firmware-sdk
Releases · golioth/golioth-firmware-sdk
v0.16.0
Breaking Changes:
- All asynchronous callbacks now have both a
status
member and acoap_rsp_code
member to replace theresponse
member. All of the same information remains accessible. Update callback functions to match the new declaration and change anyresponse->status
checks tostatus
. golioth_ota_download_component()
has a newuint32_t *next_block_idx
parameter. Use this to resume block download. Set toNULL
to use previous functionality in existing code.- The parameters for
ota_component_block_write_cb()
have changed to includeblock_buffer_len
for the actual length of data andnegotiated_block_size
to indicate the maximum block size (may be used along withblock_idx
to calculate a byte offset). golioth_ota_component->hash
is now stored as an array of bytes instead of as a hex string.
Highlights:
- Zephyr port updated to Zephyr v4.0
- NCS port updated to NCS v2.8
- Improved OTA stablility
Added:
- ESP-IDF: optional ipv6 support enabled by
CONFIG_LIBCOAP_ENABLE_IPV6_SUPPORT
- LightDB/OTA/RPC: log message when an error response is received from server
- CoAP: Server-negotiated block size for blockwise uploads
- CoAP: optionally call a
set_cb
callback at the end of a blockwise upload operation - OTA: ability to resume a component download
golioth_sys_sha256_*()
API for calculating OTA component hashCONFIG_GOLIOTH_OTA
to enable OTA component separately from fw_update component- Numerous hardware-in-the-loop (HIL) testing improvements for both code samples and integration tests
Changed:
- Certificates: Replace ISRG Root X2 CA certificate with Golioth Root X1 CA certificate.
- Zephyr: Samples: kconfig and devicetree settings common to an SoC moved from
boards
directory tosocs
directory.
Fixed:
- Zephyr: Golioth coap client log messages now honor changes to the logging level.
- Zephyr: Fixed off-by-one error in Golioth backend logging message length limit.
- Zephyr: Connection ID is now properly enabled by Kconfig setting.
- Zephyr: Run user callbacks when cancelling requests.
- Linux: Error checks and max PEM size for certificate_auth sample.
Removed:
- OTA compression was removed as the feature is currently unsupported on the servers side.
- Golioth Basics sample removed from Zephyr and ESP-IDF. Existing per-feature sample code for these platforms covers everything demonstrated in that sample.
Known Issues:
- [Zephyr only] examples won't build for esp32_devkitc_wrover with support for certificates due to bugs in Zephyr that prevent all RAM banks from being made available to the application.
v0.15.0
Highlights:
- Zephyr port updated to Zephyr v3.7
- NCS port updated to NCS v2.7
- ESP-IDF port updated to ESP-IDF v5.3
Added:
native_sim
platform support in Zephyr's twister execution of
fw_update
example
Changed:
- Use
VERSION
file to specify application version infw_update
example - Better error message on manifest decode error
- Updated libcoap version to v4.3.4a
- Merged
GOLIOTH_SAMPLE_{,PSK_}SETTINGS
Kconfig settings - Added
extern "C"
in headers for improved C++ compatibility
Fixed:
- CoAP keepalive behavior with Zephyr
- Memory leak by freeing post_block memory in
purge_request_mbox()
- Disabled FreeRTOS logging backend on client disconnect
- Stop client during client destroy in
golioth_client_destroy()
Known Issues:
- [Zephyr only] Espressif devices have a regression in Zephyr 3.7 that
frequently causes crashes during flash operations. We recommend remaining
on Zephyr 3.6 and Golioth Firmware SDK [0.14.0] until the issue is
is resolved. For more information see
zephyrproject-rtos/zephyr#77952 - [Zephyr only] Boards utilizing the ESP AT WiFi
driver,
such as the nRF52840 DK + ESP32, frequently fail to complete DTLS
handshakes when using certificate authentication due to an issue with
DTLS fragment handling when operating in passive mode, which is
required for DNS resolution in Zephyr 3.7. For more information see
zephyrproject-rtos/zephyr#77993
Workarounds:
- The MIMXRT1024-EVK received a new upstream Ethernet driver that was
found to have sporadic "Link Down/Up" events that cause a loss of
connectivity when downloading binaries during OTA Firmware Update. All
Zephyr examples in this release include an overlay file for this board
that reverts to the old driver.
v0.14.0
Highlights:
- Added blockwise uploads for streaming data to Pipelines
- Improved efficiency of blockwise operations
- Reduced log verbosity
Added:
- A new
golioth_stream_set_blockwise_sync()
API for uploading larger payloads to Pipelines. This is useful when the size of your payload exceeds the MTU of your underlying transport (typically 1024 bytes). - native_sim Zephyr target is now tested in CI
Changed:
- CoAP retransmissions are no longer reported individually. Instead, a count of the number of retransmissions in the last 10 seconds is reported. This reduces the chattiness of CoAP client logs.
- Blockwise transfers make more efficient use of semaphores and allocations, reducing CPU overhead, overall memory usage, and heap fragmentation.
- Blockwise upload user callbacks are now passed the size of the block, and should no longer rely on a hardcoded block size.
- Reduced log levels of some messages from INFO to DEBUG.
Fixed:
- Gracefully handle allocation errors during synchronous operations.
- Honor content-type in blockwise uploads
- Small typo in Kconfig help
Removed
- Removed BLE provisioning service from Golioth ESP-IDF examples. Users are free to copy this utility into their own repos and use it if they desire. This code is offered as-is and without warranty.
v0.13.1
Fixed:
- Infinite loop in OTA manifest observation retry logic that occurred
when retries were exhausted. - Documentation: update links to Stream service
Changed
- Registering an OTA manifest observation will be retried until
successful, with a delay that doubles after each unsuccessful attempt.
Use CONFIG_GOLIOTH_FW_OBSERVATION_RETRY_MAX_DELAY_MS to configure the
maximum delay (defaults to 5 minutes).
v0.13.0
Breaking Changes:
- Added content type parameter to golioth_lightdb_observe_async().
Previously this defaulted to JSON. Existing projects can add
GOLIOTH_CONTENT_TYPE_JSON as the third param of this API call to
replicate behavior prior to this change.
Highlights:
- Added the ability to cancel RPC and Settings observations
- Updated Stream example and documentation to show usage of Golioth's
Pipelines feature. - Exposed additional APIs for downloading OTA components.
- This can be used to implement more complex update scenarios in the user
application (i.e. outside of the SDK). - Note that users who choose to implement their own update logic will need to
manage applying the update and reporting state back to Golioth, tasks which
are handled by the built-in, but more limited, firmware update module in
the SDK.
- This can be used to implement more complex update scenarios in the user
Added:
- Stream example for ESP-IDF
- Stream service now accepts binary (OCTET_STREAM) data
- Log on failure to send settings response
- Add retry logic to firmware update block download
- Settings response length is now configurable
- New Blockwise Transfer module, for CoAP blockwise uploads and downloads
- Add support to the CoAP client for eager release of observations
- RPC: add ability to cancel observations
- Settings: add ability to cancel observations
- Added support for resolving IPv6 addresses on Thread networks
- Added
golioth_ota_download_component()
API to OTA service
Fixed:
- Fixed swapped sync/async messages in Stream example
- Stream example now works correctly with on-board temperature sensors
- Target version is now set when reporting OTA status to UPDATING
- Fixed memory leak when maxing out observations
- LightDB State gets of JSON objects would strip leading and trailing
curly brackets - Fixed potential buffer overflow during string copy
- Removed unused Kconfig symbols
Changed
- Kconfig: reorganized how Kconfig options are presented in the
menuconfig interface. - Use CBOR in Stream example instead of JSON
- Contribution and Style guides have been updated
v0.12.2
Removed:
- Removed automatic ESP-IDF logging - this will be reintroduced in a future
release with more configuration options.
Added:
- Improved "client not running" error logs with additional context
Fixed:
- Zephyr: Fix crash when repeatedly stopping and starting the client
- Zephyr: Fix up to 10 second delay when stopping client
- Zephyr: Fixed hang when attempting to stop an already stopped client
- Fixed dropped function call when
assert()
is disabled - Return error instead of crashing on NULL input
v0.12.1
Added:
- ESP-IDF: added ability to send native logging system messages to the
Golioth remote logging service.
Changed:
- OTA firmware update observation will retry multiple times when failing
to register. - Status added to the CoAP request struct for passing error codes.
Fixed:
- Zephyr: correctly handle the client connection stop command.
- Zephyr: reestablish observations after reconnect.
v0.12.0
Breaking Changes:
- Previously, it was possible to implicitly include default Kconfig
settings from the Zephyr examples into client applications. This was
unintentional and has been fixed. As a result, if your application was
relying on those defaults, you'll now need to set those Kconfig values
explicitly in your application.
Added:
- Add socket hello_nrf91_offload Zephyr example to demonstrate DTLS
sockets offload. - Zephyr: add rak5010_nrf52840 support to all examples
- ESP-IDF: add fw_update example to demonstrate OTA firmware update
- ESP-IDF: add settings example to demonstrate device settings service
Changed:
- Zephyr: example code now explicitly sources Kconfig.defconfig file to
select necessary Kconfig symbols from the example common files. - Zephyr: update runtime settings in examples to take effect without
needing a reboot - Update libcoap version to v4.3.4a
Fixed:
- Documentation updates
- Certificate Provisioning: Increase nRF52840 network buffers to avoid
failing handshakes
v0.11.1
Known Issues:
- Default Kconfig values may not propagate correctly if the Golioth SDK
is not listed first in the West manifest. To workaround this, ensure
that Golioth is listed first in your application's manifest.
Added:
- CONFIG_GOLIOTH_RPC_MAX_RESPONSE_LEN to control the size of the buffer
used to hold the RPC response
Changed:
- Improved how the Golioth Zephyr log backend handles network disconnects
to avoid interfering with the application's control of logging levels - Removed default dependency on floating point support
Fixed:
- Enable log shell commands in Zephyr Certificate Provisioning example
- Build error when compiling with NCS and without newlib
- Correctly handle TOO_MANY_REQUESTS responses from the server in NCS
Release 0.11.0
Highlights
- Zephyr port updated to Zephyr v3.6
- NCS port updated to NCS v2.5.2
- ESP-IDF port updated to ESP-IDF v5.2.1
- New examples for ESP-IDF
- Initial support for
native_sim
target in Zephyr
Added:
- New examples for ESP-IDF:
hello
,rpc
,lightdb state
- Additional hardware-in-the-loop integration tests
west patch
command for applying git patchesnative_sim
support (requires patches on top of Zephyr v3.6)- nRF91 LTE monitor log level is now configurable
- Zephyr console now returns an error when attempting to store a PSK-ID
or PSK that is too long
Changed:
- Improved NACK handling during initial connection
- OTA module now decodes all items in a manifest
- RPC returns
NOT_FOUND
instead ofUNKNOWN
when receiving an RPC
for an unregistered method - Improved and clarified documentation
- Improved and stablized HIL test infrastructure
- Documentation updated to reflect change from Device Name to Certificate
ID in device certificates
Removed:
- Individual type functions for Stream service
- Zephyr port no longer depends on
CONFIG_POSIX_API
Fixed:
- Fixed range checking for int type settings
- Fixed incorrect error code for receiving an unknown setting
- Fixed crash when disabling Zephyr log backend
- Fixed buffer allocation failures on nRF52840DK
- Fixed
free()
of unallocated buffer - Zephyr CoAP client was not notifying port layer of disconnections
- Some kconfig settings had no effect in the ESP-IDF port
- Some kconfig options could not be overriden in the Zephyr port