Skip to content

Releases: golioth/golioth-firmware-sdk

v0.18.1

02 Jun 14:43
Compare
Choose a tag to compare

Fixed

  • OTA: Fixed a bug that could result in hung downloads during high
    traffic events.
  • Zephyr: Fixed a bug that prevented the keepalive timer from working,
    resulting in disconnects during periods of no traffic.

Added

  • Examples: Added an option to get credentials from the host
    environment when using Zephyr's native_sim platform.

v0.18.0

08 May 02:54
Compare
Choose a tag to compare

Breaking Changes

  • Zephyr: The default maximum path length for Golioth APIs has changed
    from 39 characters to 12 characters and the
    CONFIG_GOLIOTH_COAP_MAX_PATH_LEN symbol can no longer be changed by
    the user. Update this limit using the following Kconfig symbols
    supplied by Zephyr's CoAP library:
    CONFIG_COAP_EXTENDED_OPTIONS_LEN=y
    CONFIG_COAP_EXTENDED_OPTIONS_LEN_VALUE=39
    
  • OTA: golioth_ota_download_component is now non-blocking, and the
    function signature has changed to support two callbacks - one for
    reading blocks called 0 or more times, and one that is called exactly
    one time at the end of the download.

Removed

  • QEMU is no longer continually verified. Users should use native_sim
    for emulated testing.
  • i.MX RT1024 is no longer continually verified. It is replaced with
    the FRDM-RW612.
  • Zephyr: Hardcoded WiFi and TLS credentials are no longer supported.
    Users should use the provided shell functions to set WiFi and TLS
    credentials instead.

Changed

  • Zephyr support upgraded to v4.1.0
  • nRF Connect SDK support upgraded to v3.0.1
  • ESP-IDF support upgraded to v5.4.1
  • The FW Update rollback timer is now configurable, and the default is
    changed from 60 seconds to 300 seconds.

Added:

  • FW Update now checks if an artifact is already stored before
    initiating a download. This will prevent excessive network and flash
    operations in this case that an update cannot be applied.
  • Multipart API for blockwise uploads.
  • Continually verify on FRDM-RW612
  • Added an API for on-demand fetching of the OTA manifest
  • Support PSA crypto API
  • EXPERIMENTAL: Gateway service for proxying pouches to Golioth

Fixed

  • Zephyr: correctly detect path names that are longer than the maximum
    setting.
  • Various typos and formatting
  • Plugged a memory leak when using SHA256

v0.17.0

22 Jan 22:32
Compare
Choose a tag to compare

Highlights:

  • Added New Golioth Location Service
  • Improved OTA stability and robustness
  • ESP-IDF port updated to ESP-IDF v5.4
  • ModusToolbox port updated to ModusToolbox v3.3

Added:

  • New APIs for interacting with the Golioth Location service. Golioth
    Location can be used to resolve WiFi scan results and cellular tower
    information into approximate geolocation.
  • New Zephyr examples for the Golioth Location service.
  • fw_update: Resume downloads
  • fw_update: Retry downloads with backoff
  • fw_update: Add retries for reporting state

Changed:

  • Default PSK max length set to 32 to match mbedTLS defaults
  • Improved WiFi handling in samples
  • Improved handling of new OTA manifests when download is in progress

v0.16.0

25 Nov 20:26
Compare
Choose a tag to compare

Breaking Changes:

  • All asynchronous callbacks now have both a status member and a coap_rsp_code member to replace the response member. All of the same information remains accessible. Update callback functions to match the new declaration and change any response->status checks to status.
  • golioth_ota_download_component() has a new uint32_t *next_block_idx parameter. Use this to resume block download. Set to NULL to use previous functionality in existing code.
  • The parameters for ota_component_block_write_cb() have changed to include block_buffer_len for the actual length of data and negotiated_block_size to indicate the maximum block size (may be used along with block_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 hash
  • CONFIG_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 to socs 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

04 Sep 18:39
Compare
Choose a tag to compare

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 in fw_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

21 Jun 19:56
Compare
Choose a tag to compare

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

31 May 16:26
Compare
Choose a tag to compare

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

28 May 17:09
Compare
Choose a tag to compare

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.

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

03 May 03:30
Compare
Choose a tag to compare

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

22 Apr 18:10
Compare
Choose a tag to compare

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.