Golioth Firmware SDK v0.17.0

Yesterday, we released v0.17.0 of the Golioth Firmware SDK. This release introduces support for the Golioth Location service in the SDK. We’ve also improved the stability and robustness of FW updates, and added support for the latest versions of development platforms from our silicon partners.

For the full set of changes in the release, see the changelog.

Golioth Location

Golioth Location is a network positioning service that allows devices to determine their location without the use of dedicated GNSS hardware, using nearby WiFi access points or cellular towers. The SDK now provides access to this service using the same simple C APIs that our users have come to expect from Golioth. Users first build a location request, then send it to Golioth and receive an approximate location.

Building the location request starts by calling golioth_location_init(). Then, WiFi SSIDs and cell towers are added to the request using golioth_location_wifi_append() and golioth_location_cellular_append(), respectively. Location requests can contain either just WiFi SSIDs, just cell towers, or a combination of the two. When including both WiFi SSIDs and cell towers in the same location request, the user must add all of one type and then all of the other. After all of the network information is added, finish building the request by calling golioth_location_finish(). At this point, the user can send the request to Golioth using golioth_location_get_sync(). The response contains the approximate location and an accuracy estimate:

struct golioth_location_rsp
{
    /** Latitudinal position in nanodegrees (0 to +-180E9) */
    int64_t latitude;
    /** Longitudinal position in nanodegrees (0 to +-180E9) */
    int64_t longitude;

    /** Accuracy in meters */
    int64_t accuracy;
};

We have a new example for Zephyr that demonstrates the expected usage of this API, as well as how to gather WiFi scan results and cell tower information.

Golioth Location remains in private access; customers on the Teams or Enterprise tiers can request access using this form.

Firmware Update Improvements

We’ve made several changes to improve the robustness of the firmware update module against error conditions and corner cases. In the last release, we introduced resumable downloads into the OTA service. Now, the firmware update module leverages that capability to automatically resume interrupted downloads, instead of restarting them. This will improve performance and resource usage in degraded network conditions. We’ve also added automatic retries (with backoff) to firmware update downloads to further protect against issues during updates. We’ve improved how the SDK responds to new OTA releases that roll out while a device is already downloading a previous release. And finally, we’ve made the reporting of OTA states more robust, making the recently launched OTA event log even more useful in the Golioth Console.

Updated Platform Support

We’re committed to the cross-platform nature of our SDK. We’ve updated our support for ESP-IDF to v5.4 and ModusToolbox to v3.3.

Sam Friedman
Sam Friedman
Sam leads Firmware Engineering at Golioth. Previously, Sam has built and shipped consumer electronics and IoT devices used by millions around the world.

Post Comments

Notable Replies

  1. Avatar for rajeev rajeev says:

    Hello team Golioth,

    I would appreciate it if the readme or the documentation could be updated for installing Golioth to the existing Zephyr West project and to Nordic’s nRF Connect SDK.

    Currently, the installation steps for the above are hidden here golioth-firmware-sdk/examples /zephyr/. It would make life easier if this could be brought on the main SDK readme page.

    In addition, currently, this givesan error in NCS:

    west init -m https://github.com/golioth/golioth-firmware-sdk.git --mr v0.17.0 --mf west-ncs.yml
    west update
    cd modules/lib/golioth-firmware-sdk && git submodule update --init --recursive
    
    FATAL ERROR: already initialized in /opt/nordic/ncs/v2.9.0, aborting.
    Note:
        In your environment, ZEPHYR_BASE is set to:
        /opt/nordic/ncs/v2.9.0/zephyr
    
        This forces west to search for a workspace there.
        Try unsetting ZEPHYR_BASE and re-running this command.
    

    and only updating the entry to the west.yml file and then calling west update works unless I am missing something here.

    Thanks

  2. Avatar for marko marko says:

    Hey @rajeev,

    Because the SDK supports multiple ports, including one for Zephyr RTOS, the decision was made to keep the main README uncluttered by placing the relevant documentation in the examples folder for each port. However, I agree that this approach makes it somewhat challenging to find within the repository.

    The error you are experiencing is due to the west initialization conflict. The error means west is already initialized in /opt/nordic/ncs/v2.9.0, and west does not allow re-initializing in an already initialized workspace.
    This means you cannot use the west init -m https://github.com/golioth/golioth-firmware-sdk.git --mr v0.17.0 --mf west-zephyr.yml command in an already initialized west directory.

    In order to add the Firmware SDK to an existing Zephyr West project, add the following entry to the west.yml file of an existing west based project by placing the golioth entry first in the file:

    # Golioth repository.
    - name: golioth
      path: modules/lib/golioth-firmware-sdk
      revision: v0.17.0
      url: https://github.com/golioth/golioth-firmware-sdk.git
      submodules: true
    

    and clone all repositories by running west update.

  3. Avatar for rajeev rajeev says:

    Thanks Marko for the feedback.
    Yes, using the west project update method, I was able to install the SDK.

    Cheers

Continue the discussion at forum.golioth.io

Participants

Avatar for marko Avatar for sam Avatar for rajeev

Comments are closed.

More from this author

Related posts

spot_img

Latest posts

Manufacturing A Mini-fleet: Provisioning And Updating 10 Thingy91’s

Golioth demonstrates one approach to provisioning IoT devices during manufacturing. Learn some of the challenges you will face with flashing test firmware, generating and passing x.509 certificates to the devices, and using OTA to load final production firmware.

Golioth Can Now Run Entirely on Qualcomm Modems

Today marks the first implementation of running the entire Golioth firmware stack on a modem processor. This dramatically reduces resource consumption on the external MCU processor, and makes it easier to add Golioth to any hardware or platform.

Enhanced IoT Dashboards with Golioth, InfluxDB, and Grafana

We co-hosted a webinar with InfluxDB demonstrating how Golioth Pipelines make it simple to stream data from a microcontroller with environmental sensors directly into...

Want to stay up to date with the latest news?

We would love to hear from you! Please fill in your details and we will stay in touch. It's that simple!