SUPL Application Request Processor

Introduction

The Secure User Plane (SUPL) is an example of an application request processor (ARP) provided by Broadcom. The SUPL processor implements the functionality needed to implement standards complaint user plane assisted GPS. The SUPL protocol bearer is a TCP connection. The customer is responsible for providing the TCP communication facility which interfaces to the GLCT via the HAL.

Relationship of SUPL ARP to GLCT

The SUPL ARP is an application request processor registered to the GLCT. It receives events of the type GLCTEV_PAL_NRM_NET_DATA. The SUPL implementation consists of a library of functions that implement the calls made by the GLCT to the ARP including GlArpSuplCreate(), GlArpSuplSetCfgValue(), GlArpSuplStart(), GlArpSuplEvents().

Network Communications

The application communicates network events to the SUPL processor by sending the GLCT events of type GLCTEV_PAL_NRM_NET_DATA. These events communicate SUPL related activity such as the establishment or dropping of a connection, the receipt of incoming messages, or the response to a request for platform location ID information.

These various events are distinguished by an event code. The various code are defined by GLARP_SUPL_EVENT:

  • GLARP_SUPL_TCP_EST indicates a TCP connection was established
  • GLARP_SUPL_TCP_DROP indicates a TCP connection was dropped
  • GLARP_SUPL_PDU indicates a payload data unit (SUPL message) was received from the network
  • GLARP_SUPL_SET_LOC_ID indicates location ID information is being supplied in response to a request from the SUPL ARP
  • GLARP_SUPL_ACCEPT indicates the platform has accepted a SUPL request
  • GLARP_SUPL_DENY indicates the platform has denied a SUPL request

The SUPL processor communicates back to the network by calling functions to request a connection, tear down a connection, or send data. To facilitate these operations the HAL includes implementations for the functions GpsHalSuplReqConnection(), GpsHalSuplWrite(), GpsHalSuplEndConnection().

Notification

In SUPL the terminal is expected to notify users about positioning activity and request permission to proceed. To implement this the HAL needs to include an implementation for GpsHalSuplNotificationVerificarionReq(). The verification is communicated back by sending the GLCT an event of type GLCTEV_PAL_NRM_NET_DATA with the event type set to GLARP_SUPL_ACCEPT or GLARP_SUPL_DENY.

Obtaining Location ID

To fulfill the SUPL protocol the SUPL processor needs to obtain location ID information from the platform. The processor requests this information by calling GpsHalSuplReqLocationId(). The HAL should supply an implementation for this function that obtains the cell ID. The cell ID information, once available, is provided by sending the GLCT an event of type GLCTEV_PAL_NRM_NET_DATA with the event type set to GLARP_SUPL_SET_LOC_ID.

SUPL Network Initiated (NI) Call Flow

The diagram below indicates the interactions between GLCT and platform for a representative SUPL call flow.

msc_inline_mscgraph_9

SUPL SET Initiated MS-BASED (SI) Call Flow

The diagram below indicates the interactions between request from the APP, APP ARP, GLCT, SUPL ARP, SUPL Stack and platform for a representative SUPL call flow.

msc_inline_mscgraph_10

SUPL Network Initiated (NI) Call Flow from Location application prospective

The diagram below indicates the interactions between GPS task and location application.

msc_inline_mscgraph_11

Appendix. A: SUPL ASN.1 Decoder

Broadcom GPS solution also provides Windows-based SUPL ASN.1 decoder tool. This tool enables the user to view the actual data used in a SUPL session. Please ask for the permission to download "SuplDecode_Customer" software in CSP site.

You can get the ASN.1 data string used in SUPL protocol from the GLLOG of the GPS run such as this.

SUPL_I: API: glsupl_Connect(1)
SUPL_D: GlSupl10StateWait4ConnectionAndVerification: OnConnected(1)
SUPL_I: GlSupl10StateWait4ConnectionAndVerification::Check(), C:O,L:O,V:N,P:F,A:O
SUPL_D: GlSupl10StateWait4ConnectionAndVerification: EXIT
SUPL_D: GlSupl10StateWait4_SUPL_POS   : ENTRY
SUPL_I: CB: glcb_supl_Write(44) (SUPLPOSINIT)
SUPL_N:  SUPL_POSINIT
SUPL_D: BIN: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SUPL_D: BIN: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SUPL_D: BIN: XXXXXXXX
SUPL_D: Arming UT2(10000)

The string of "XXX...XXX" should be a data hex string. (We masked it with X here)

Execute "SuplDecode35.exe" from the unzipped folder. The binary will print out the usage of the program.

SuplDecode Utility ver. 3.5
Copyright (c) 2009 by Broadcom, Inc. All Rights Reserved.

Interactive mode
q  - for exit
s  - switch to SUPL 1.0.0 (default)
r  - for decoding RRLP
rd - for decoding RRC DL_DCCH
ru - for decoding RRC UL_DCCH
rr - for decoding RRC MeasuredResult
re - for decoding RRC MeasuredEvent
rs - for decoding RRC Status
ps - for decoding GAD Position
g  - for decoding GSM 7-bit String
hk - for key HMAC
h  - for SUPLINIT
Enter OMA-SULP-V100 PDU (as hex text)

The program will wait for the input of the hex data. Please copy and paste above target data string into the console and press enter.

The result data will be printed out in the console.

SUPL10.length = 44
SUPL10.version.maj = 1
SUPL10.version.min = 0
SUPL10.version.servind = 0
SUPL10.sessionID.m.setSessionIDPresent = 1
SUPL10.sessionID.m.slpSessionIDPresent = 1
SUPL10.sessionID.setSessionID.sessionId = 1
SUPL10.sessionID.setSessionID.setId.t = 4
SUPL10.sessionID.setSessionID.setId.u.imsi.numocts = 8
...
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.posTechnology.agpsSETassisted = TRUE
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.posTechnology.agpsSETBased = TRUE 
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.posTechnology.autonomousGPS = TRUE
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.posTechnology.aFLT = FALSE
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.posTechnology.eCID = FALSE
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.posTechnology.eOTD = FALSE
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.posTechnology.oTDOA = FALSE
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.prefMethod = SUPL10_noPreference
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.posProtocol.tia801 = FALSE
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.posProtocol.rrlp = TRUE
SUPL10.message.u.msSUPLPOSINIT.sETCapabilities.posProtocol.rrc = FALSE
SUPL10.message.u.msSUPLPOSINIT.requestedAssistData.m.navigationModelDataPresent = 0
SUPL10.message.u.msSUPLPOSINIT.requestedAssistData.almanacRequested = FALSE
SUPL10.message.u.msSUPLPOSINIT.requestedAssistData.utcModelRequested = FALSE
SUPL10.message.u.msSUPLPOSINIT.requestedAssistData.ionosphericModelRequested = FALSE
SUPL10.message.u.msSUPLPOSINIT.requestedAssistData.dgpsCorrectionsRequested = FALSE
SUPL10.message.u.msSUPLPOSINIT.requestedAssistData.referenceLocationRequested = FALSE
SUPL10.message.u.msSUPLPOSINIT.requestedAssistData.referenceTimeRequested = TRUE 
SUPL10.message.u.msSUPLPOSINIT.requestedAssistData.acquisitionAssistanceRequested = TRUE
SUPL10.message.u.msSUPLPOSINIT.requestedAssistData.realTimeIntegrityRequested = FALSE
SUPL10.message.u.msSUPLPOSINIT.requestedAssistData.navigationModelRequested = FALSE
SUPL10.message.u.msSUPLPOSINIT.locationId.cellInfo.t = 2
SUPL10.message.u.msSUPLPOSINIT.locationId.cellInfo.u.wcdmaCell.m.frequencyInfoPresent = 0
SUPL10.message.u.msSUPLPOSINIT.locationId.cellInfo.u.wcdmaCell.m.primaryScramblingCodePresent = 0
SUPL10.message.u.msSUPLPOSINIT.locationId.cellInfo.u.wcdmaCell.m.measuredResultsListPresent = 0
...
SUPL10.message.u.msSUPLPOSINIT.locationId.status = SUPL10_current
SUPL10.message.u.msSUPLPOSINIT.ver.numbits = 64
SUPL10.message.u.msSUPLPOSINIT.ver.data =
...
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines