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.
- 1Device: the SUPL client library runs on a Cortex-M4 under FreeRTOS, next to the GNSS receiver.
- 2NB-IoT network: carries the SUPL session between the device and the server.
- 3SUPL location server: provides assistance data (reference time and position, ionosphere, almanac, ephemeris) inside RRLP messages.
- 4GNSS satellites: with assistance data, the receiver finds them and computes a fix much faster, using less energy.
- 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.