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.
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().
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:
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().
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.
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.
The diagram below indicates the interactions between GLCT and platform for a representative SUPL 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.
The diagram below indicates the interactions between GPS task and location application.
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 = ...