Switching from Cell ID to Terminal-Assisted Positioning

How to get an assisted GPS terminal-assisted position when the network positioning preference is SUPL.

SUPL (Secure User Plane Location) enables a device to communicate with a SUPL server over an IP connection. A client application requests a position from the network using SUPL. To receive the position the client must be able to connect to the Location subsystem. The client must then select the Network Proxy PSY (NPP) module as its source. The NPP module must be configured to use the SUPL PSY.

While the SUPL PSY module can use cell-based positioning, enhanced cell-based positioning and AGPS terminal-assisted positioning, the SUPL Network Server may optionally use AGPS terminal-assisted positioning, though this is not usually advised.

With AGPS terminal-assisted positioning the client application therefore requests a position from the network using an AGPS Terminal. The steps below describe the process.

  1. The client must open a connection to the server by calling RPositionServer::Connect().
  2. The client must then open RPositioner by calling RPositioner::Open() and specify the UID of the Network Proxy PSY.
  3. The client application sends a location request to the Location subsystem by calling RPositioner::NotifyPositionUpdate().
  4. The Location subsystem forwards the location request to the SUPL Protocol module by calling CLbsNetworkProtocolBase::RequestNetworkLocation(). (In the default configuration SUPL is used for cell-based positioning).
  5. The SUPL protocol module communicates with an external SUPL server, which decides to use terminal-assisted GPS positioning instead of cell-based positioning.
  6. The SUPL Protocol Module requests a measurement update from the Location subsystem by calling MLbsNetworkProtocolObserver::ProcessLocationRequest().
  7. The Location subsystem requests a measurement update from the AGPS module by calling CLbsLocationSourceGpsBase::RequestLocationUpdate().
  8. The AGPS module produces a position update by calling MLbsLocationSourceGpsObserver::UpdateLocation().
  9. The Location subsystem forwards the measurement update to the network by calling CLbsNetworkProtocolBase::ProcessLocationUpdate().
  10. The measurement is sent to the SUPL server, which calculates and returns the position.
  11. The SUPL Protocol module returns the cell-based position by calling MLbsNetworkProtocolObserver::ProcessLocationUpdate().
  12. The Location subsystem completes the client request.
SUPL has enabled the client application to receive the AGPS terminal-assisted position from the network.