← All projects P-02

SUPL library for GNSS assistance data

A SUPL client library in C that fetches A-GNSS assistance data (GPS and Galileo) over a cellular link, sized to fit a Cortex-M4 running FreeRTOS.

  1. 1Device: the SUPL client library runs on a Cortex-M4 under FreeRTOS, next to the GNSS receiver.
  2. 2NB-IoT network: carries the SUPL session between the device and the server.
  3. 3SUPL location server: provides assistance data (reference time and position, ionosphere, almanac, ephemeris) inside RRLP messages.
  4. 4GNSS satellites: with assistance data, the receiver finds them and computes a fix much faster, using less energy.
Fig. 1Simplified 3D view, not to scale in detail. Drag to rotate, scroll to zoom.
Category
IoT & GNSS
Organization
Ubiscale
Period
2021 – 2022
Technologies
C, Cortex-M4, FreeRTOS, SUPL 2.0 / RRLP, ASN.1 UPER (asn1c), A-GNSS (GPS, Galileo), NB-IoT

Context

Without prior data, a standalone GNSS receiver has to decode orbital data broadcast by the satellites at only 50 bit/s before its first fix: about 30 seconds at best in open sky, several minutes with a weak signal, and up to 12.5 minutes when the full almanac is missing. With SUPL, the device downloads this data (reference time and position, ionosphere model, almanac, ephemeris) from a location server over the cellular network, here NB-IoT, and gets a fix much faster and with less energy. The library was meant to be integrated into the software of a GNSS-enabled IoT chip, so it had to run on a microcontroller with very little memory, next to an RTOS.

My role

Main developer of the library, as part of my apprenticeship: software architecture, C API with callbacks, SUPL state machine (SUPL START, RESPONSE, POS INIT, POS, END), message encoder and decoder built on asn1c-generated UPER code, and conversion of the RRLP payload into A-GNSS data. Ported it to FreeRTOS and tested it on a Cortex-M4 board. Wrote the architecture document and the reference guide, and provided on-site integration support for a tier-1 semiconductor customer.

© 2026 Simon Lemoigne