The SUPL / 3GPP LPP client is the public part of Ericsson’s pre-commercial 5G positioning work that I authored and have owned from the start. It is a C++ toolkit rather than a one-purpose demo: its libraries and examples make it possible to build a client that connects to a SUPL location server, requests assistance data through 3GPP LPP, and passes useful correction data on to a GNSS receiver.
The engineering problem
Precise GNSS is a chain, not a single protocol. A network has to provide the right assistance data; a client has to express the request and handle the LPP response; and a receiver has to receive corrections in a format it understands. The difficult work is at those interfaces—where ASN.1 messages, a user-plane location session, correction formats, serial receiver protocols, and real embedded hardware meet.
What the public toolkit contains
- A 3GPP LPP client library for SUPL-server communication and assistance-data retrieval.
- Message converters for LPP to RTCM and SPARTN, including LPP SSR to OSR RTCM conversion.
- Example client and NTRIP applications that demonstrate end-to-end integration and GNSS receiver communication.
- A CMake/Ninja build, tests, fuzzing targets for receiver and correction-data parsers, and optional static-analysis tooling.
My role
I was the primary author. I designed and implemented the LPP request/provide flow and the correction-data converters used across the positioning product line, and built the cross-compilation and deployment path for Raspberry Pi and BeagleBone targets. The work has also meant validating the path against commercial receivers, including Trimble and u-blox, rather than stopping at a protocol trace.
The source is public in Ericsson’s GitHub organisation. The public repository is the best place to inspect its current API, examples, build, tests, and tooling.