RRLP-Messages
-- { RRLP-messages }

DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

--IMPORTS

--	MsrPosition-Req, MsrPosition-Rsp, AssistanceData,
--	ProtocolError

--FROM
--	RRLP-Components 
-- { RRLP-Components }
--;

--IMPORTS
--	Ext-GeographicalInformation
--FROM
--	MAP-LCS-DataTypes {
--	ccitt identified-organization (4) etsi (0) mobileDomain (0)
--	gsm-Network (1) modules (3) map-LCS-DataTypes (25) version5 (5)}

--	ExtensionContainer
--FROM MAP-ExtensionDataTypes {
--	ccitt identified-organization (4) etsi (0) mobileDomain (0)
--	gsm-Network (1) modules (3) map-ExtensionDataTypes (21) version4 (4)}
--	;
-- local import
-- maxExt-GeographicalInformation INTEGER ::= 20
-- Ext-GeographicalInformation ::= OCTET STRING (SIZE (1..20))
-- ExtensionContainer ::= OCTET STRING

--ExtensionContainer ::=    SEQUENCE {
--   privateExtensionList [0] IMPLICIT PrivateExtensionList OPTIONAL, 
--   pcsExtensions     [1] IMPLICIT PcsExtensions OPTIONAL, 
--   ... }

--PrivateExtensionList ::= SEQUENCE OF PrivateExtension

--PrivateExtension ::=  SEQUENCE {
--  extId      OBJECT IDENTIFIER,  MAP-EXTENSION .&extensionId
--  extType    ANY OPTIONAL  { @extId   }
--} 

--PcsExtensions ::= SEQUENCE {
--          ...
-- }


PDU ::= SEQUENCE {
	referenceNumber 	INTEGER (0..7),
	component 	RRLP-Component
}

RRLP-Component ::= CHOICE {
	msrPositionReq 		MsrPosition-Req,
	msrPositionRsp 		MsrPosition-Rsp,
	assistanceData 		AssistanceData,
	assistanceDataAck 	NULL,
	protocolError 	ProtocolError,
	...
}

--RRLP-Components
-- { RRLP-Components }
-- ETSI TS 144 031 V6.8.0
--DEFINITIONS AUTOMATIC TAGS ::=

--BEGIN

--IMPORTS

--	Ext-GeographicalInformation
--FROM
--	MAP-LCS-DataTypes {
--	ccitt identified-organization (4) etsi (0) mobileDomain (0)
--	gsm-Network (1) modules (3) map-LCS-DataTypes (25) version5 (5)}

--	ExtensionContainer
--FROM MAP-ExtensionDataTypes {
--	ccitt identified-organization (4) etsi (0) mobileDomain (0)
--	gsm-Network (1) modules (3) map-ExtensionDataTypes (21) version4 (4)}
--	;
-- Add here other ASN.1 definitions presented below
-- in chapters 4 and 5.

-- add this definition to RRLP-Components module
-- Measurement Position request component

MsrPosition-Req ::= SEQUENCE {
	positionInstruct 				PositionInstruct,
	referenceAssistData 			ReferenceAssistData OPTIONAL,
	msrAssistData 				MsrAssistData OPTIONAL,
	systemInfoAssistData 			SystemInfoAssistData OPTIONAL,
	gps-AssistData 				GPS-AssistData OPTIONAL,
	extensionContainer 			ExtensionContainer OPTIONAL,
	...,
-- Release 98 extension element
	rel98-MsrPosition-Req-extension 	Rel98-MsrPosition-Req-Extension OPTIONAL,
-- Release 5 extension element
	rel5-MsrPosition-Req-extension 	Rel5-MsrPosition-Req-Extension OPTIONAL
}

-- add this defintion to RRLP-Components module
-- Measurement Position response component

MsrPosition-Rsp ::= SEQUENCE {
	multipleSets 				MultipleSets OPTIONAL,
	referenceIdentity 			ReferenceIdentity OPTIONAL,
	otd-MeasureInfo 				OTD-MeasureInfo OPTIONAL,
	locationInfo 				LocationInfo OPTIONAL,
	gps-MeasureInfo 				GPS-MeasureInfo OPTIONAL,
	locationError 				LocationError OPTIONAL,
	extensionContainer 			ExtensionContainer OPTIONAL,
	...,
-- Release extension here
	rel-98-MsrPosition-Rsp-Extension	Rel-98-MsrPosition-Rsp-Extension OPTIONAL,
	rel-5-MsrPosition-Rsp-Extension	Rel-5-MsrPosition-Rsp-Extension OPTIONAL
-- rel-5-MsrPosition-Rsp-Extension and other possible future extensions
-- are the only information elements that may be included in the 2nd
-- MsrPosition-Rsp component when RRLP pseudo-segmentation is used
}

-- add this defintion to RRLP-Components module
-- Assistance Data component

AssistanceData ::= SEQUENCE {
	referenceAssistData 			ReferenceAssistData OPTIONAL,
	msrAssistData 				MsrAssistData OPTIONAL,
	systemInfoAssistData 			SystemInfoAssistData OPTIONAL,
	gps-AssistData 				GPS-AssistData OPTIONAL,
	moreAssDataToBeSent 			MoreAssDataToBeSent OPTIONAL, -- If not present, interpret as only
-- Assistance Data component used to
-- deliver entire set of assistance
-- data.
	extensionContainer 			ExtensionContainer OPTIONAL,
	...,
-- Release extension here
	rel98-AssistanceData-Extension 	Rel98-AssistanceData-Extension OPTIONAL,
	rel5-AssistanceData-Extension 	Rel5-AssistanceData-Extension OPTIONAL
}

-- add this defintion to RRLP-Components module
-- Protocol Error component
	ProtocolError ::= SEQUENCE {
	errorCause 					ErrorCodes,
	extensionContainer 			ExtensionContainer OPTIONAL,
	...,
-- Release extensions here
	rel-5-ProtocolError-Extension 	Rel-5-ProtocolError-Extension OPTIONAL
}

PositionInstruct ::= SEQUENCE {
-- Method type
	methodType				MethodType,
	positionMethod			PositionMethod,
	measureResponseTime		MeasureResponseTime,
	useMultipleSets			UseMultipleSets,
	environmentCharacter	EnvironmentCharacter OPTIONAL
}

--
MethodType ::= CHOICE {
	msAssisted				AccuracyOpt, -- accuracy is optional
	msBased					Accuracy, -- accuracy is mandatory
	msBasedPref				Accuracy, -- accuracy is mandatory
	msAssistedPref			Accuracy -- accuracy is mandatory
}

-- Accuracy of the location estimation
AccuracyOpt ::= SEQUENCE {
	accuracy				Accuracy OPTIONAL
}

-- The values of this field are defined in 3GPP TS 23.032 (Uncertainty code)
Accuracy ::= INTEGER (0..127)

-- Position Method
PositionMethod ::= ENUMERATED {
	eotd (0),
	gps (1),
	gpsOrEOTD (2)
}

-- Measurement request response time
MeasureResponseTime ::= INTEGER (0..7)

-- useMultiple Sets, FFS!
UseMultipleSets ::= ENUMERATED {
	multipleSets (0), -- multiple sets are allowed
	oneSet (1) -- sending of multiple is not allowed
}

-- Environment characterization
EnvironmentCharacter ::= ENUMERATED {
	badArea (0), -- bad urban or suburban, heavy multipath and NLOS
	notBadArea (1), -- light multipath and NLOS
	mixedArea (2), -- not defined or mixed environment
	...
}
-- E-OTD reference BTS for Assitance data IE
ReferenceAssistData ::= SEQUENCE {
	bcchCarrier				BCCHCarrier, -- BCCH carrier
	bsic					BSIC, -- BSIC
	timeSlotScheme			TimeSlotScheme, -- Timeslot scheme
	btsPosition				BTSPosition OPTIONAL
}

-- ellipsoid point and
-- ellipsoid point with altitude and uncertainty ellipsoid shapes are supported
BTSPosition ::= Ext-GeographicalInformation

-- RF channel number of BCCH
BCCHCarrier ::= INTEGER (0..1023)

-- Base station Identity Code
BSIC ::= INTEGER (0..63)

-- Timeslot scheme
TimeSlotScheme ::= ENUMERATED {
	equalLength (0),
	variousLength (1)
}

-- Time slot (modulo)
ModuloTimeSlot ::= INTEGER (0..3)

-- E-OTD measurement assistance data IE
-- The total number of neighbors in this element (MsrAssistData)
-- and in SystemInfoAssistData element (presented neighbors
-- can be at a maximum 15!)
MsrAssistData ::= SEQUENCE {
	msrAssistList SeqOfMsrAssistBTS
}

SeqOfMsrAssistBTS ::= SEQUENCE (SIZE(1..15)) OF MsrAssistBTS

MsrAssistBTS ::= SEQUENCE {
	bcchCarrier				BCCHCarrier, -- BCCH carrier
	bsic					BSIC, -- BSIC
	multiFrameOffset		MultiFrameOffset, -- multiframe offset
	timeSlotScheme			TimeSlotScheme, -- Timeslot scheme
	roughRTD				RoughRTD, -- rough RTD value
-- Location Calculation	Assistance data is moved here
	calcAssistanceBTS		CalcAssistanceBTS OPTIONAL
}
-- Multiframe offset
MultiFrameOffset ::= INTEGER (0..51)
-- The Multiframe Offset value 51 shall not be encoded by the transmitting entity and
-- shall be treated by the receiving entity as 0.
-- Rough RTD value between one base station and reference BTS

RoughRTD ::= INTEGER (0..1250)
-- The RoughRTD value 1250 shall not be encoded by the transmitting entity and shall
-- be treated by the receiving entity as 0.
-- E-OTD Measurement assistance data for system information List IE
-- The total number of base stations in this element (SystemInfoAssistData
-- presented neighbors) and in MsrAssistData element can be at a maximum 15.

SystemInfoAssistData ::= SEQUENCE {
	systemInfoAssistList		SeqOfSystemInfoAssistBTS
}

SeqOfSystemInfoAssistBTS::= SEQUENCE (SIZE(1..32)) OF SystemInfoAssistBTS
-- whether n.th is present or not ?

SystemInfoAssistBTS ::= CHOICE {
	notPresent		NULL,
	present			AssistBTSData
}

-- Actual assistance data for system information base station
AssistBTSData ::= SEQUENCE {
	bsic						BSIC, -- BSIC
	multiFrameOffset			MultiFrameOffset, -- multiframe offset
	timeSlotScheme				TimeSlotScheme, -- Timeslot scheme
	roughRTD					RoughRTD, -- rough RTD value
-- Location Calculation Assistance data
	calcAssistanceBTS			CalcAssistanceBTS OPTIONAL
}

-- E-OTD Location calculation assistance data,
-- CalcAssistanceBTS element is optional not subfields
CalcAssistanceBTS ::= SEQUENCE {
	fineRTD						FineRTD, -- fine RTD value between base stations
	referenceWGS84				ReferenceWGS84 -- reference coordinates
}

-- Coordinates of neighbour BTS, WGS-84 ellipsoid
ReferenceWGS84 ::= SEQUENCE {
	relativeNorth				RelDistance, -- relative distance (south negative)
	relativeEast				RelDistance, -- relative distance (west negative)
-- Relative Altitude is not always known
	relativeAlt					RelativeAlt OPTIONAL -- relative altitude
}

-- Fine RTD value between this BTS and the reference BTS
FineRTD ::= INTEGER (0..255)

-- Relative north/east distance
RelDistance ::= INTEGER (-200000..200000)

-- Relative altitude

RelativeAlt ::= INTEGER (-4000..4000)
-- Measure position response IEs
-- Reference Identity
-- Multiple sets

MultipleSets ::= SEQUENCE {
	-- number of reference sets
	nbrOfSets INTEGER (2..3),
	-- This field actually tells the number of reference BTSs
	nbrOfReferenceBTSs INTEGER (1..3),
	-- This field is conditional and included optionally only if
	-- nbrOfSets is 3 and number of reference BTSs is 2.
	referenceRelation			ReferenceRelation OPTIONAL
}

-- Relation between refence BTSs and sets
ReferenceRelation ::= ENUMERATED {
	secondBTSThirdSet (0), -- 1st BTS related to 1st and 2nd sets
	secondBTSSecondSet (1), -- 1st BTS related to 1st and 3rd sets
	firstBTSFirstSet (2) -- 1st BTS related to 1st set
}

-- Reference BTS Identity, this element contains number of
-- BTSs told nbrOfReferenceBTSs field in Multiple sets element)

ReferenceIdentity ::= SEQUENCE {
	-- Reference BTS list
	refBTSList					SeqOfReferenceIdentityType
}
SeqOfReferenceIdentityType ::= SEQUENCE (SIZE(1..3)) OF ReferenceIdentityType

-- Cell identity
ReferenceIdentityType ::= CHOICE {
	bsicAndCarrier				BSICAndCarrier, -- BSIC and Carrier
	ci							CellID, -- Cell ID, LAC not needed
	requestIndex				RequestIndex, -- Index to Requested Neighbor List
	systemInfoIndex				SystemInfoIndex, -- Index to System info list, this type of ref. identity
	-- shall not be used by the MS unless it has received
	-- the SystemInfoAssistData from the SMLC for this cell.
	ciAndLAC					CellIDAndLAC -- CI and LAC
}

BSICAndCarrier ::= SEQUENCE {
	carrier			BCCHCarrier,
	bsic			BSIC
}

RequestIndex ::= INTEGER (1..16)

SystemInfoIndex ::= INTEGER (1..32)

CellIDAndLAC ::= SEQUENCE {
	referenceLAC				LAC, -- Location area code
	referenceCI					CellID -- Cell identity
}

CellID ::= INTEGER (0..65535)

LAC ::= INTEGER (0..65535)

-- OTD-MeasureInfo

OTD-MeasureInfo ::= SEQUENCE {
	-- Measurement info elements, OTD-MsrElement is repeated number of times
	-- told in nbrOfReferenceBTSs in MultipleSets, default value is 1
	otdMsrFirstSets				OTD-MsrElementFirst,
	-- if more than one sets are present this element is repeated
	-- NumberOfSets - 1 (-1 = first set)
	otdMsrRestSets				SeqOfOTD-MsrElementRest OPTIONAL
}

SeqOfOTD-MsrElementRest ::= SEQUENCE (SIZE(1..2)) OF OTD-MsrElementRest

-- OTD measurent information for 1 set
OTD-MsrElementFirst ::= SEQUENCE {
	refFrameNumber INTEGER (0..42431), -- Frame number modulo 42432
	referenceTimeSlot			ModuloTimeSlot,
	toaMeasurementsOfRef		TOA-MeasurementsOfRef OPTIONAL,
	stdResolution				StdResolution,
	taCorrection INTEGER (0..960) OPTIONAL, -- TA correction
-- measured neighbors in OTD measurements
	otd-FirstSetMsrs			SeqOfOTD-FirstSetMsrs OPTIONAL
}

SeqOfOTD-FirstSetMsrs ::= SEQUENCE (SIZE(1..10)) OF OTD-FirstSetMsrs

-- OTD measurent information 2 and 3 sets if exist
OTD-MsrElementRest ::= SEQUENCE {
	refFrameNumber 				INTEGER (0..42431), -- Frame number modulo 42432
	referenceTimeSlot 			ModuloTimeSlot,
	toaMeasurementsOfRef 			TOA-MeasurementsOfRef OPTIONAL,
	stdResolution 				StdResolution,
	taCorrection 				INTEGER (0..960) OPTIONAL, -- TA correction
	-- measured neighbors in OTD measurements
	otd-MsrsOfOtherSets 			SeqOfOTD-MsrsOfOtherSets OPTIONAL
}

SeqOfOTD-MsrsOfOtherSets ::= SEQUENCE (SIZE(1..10)) OF OTD-MsrsOfOtherSets

-- Standard deviation of the TOA measurements from the reference BTS
TOA-MeasurementsOfRef ::= SEQUENCE {
	refQuality 			RefQuality,
	numOfMeasurements 	NumOfMeasurements
}

RefQuality ::= INTEGER (0..31) -- St Dev of TOA of reference as defined in annex

NumOfMeasurements ::= INTEGER (0..7) -- No. of measurements for RefQuality as defined in annex

StdResolution ::= INTEGER (0..3) -- Values of resolution are defined in annex

OTD-FirstSetMsrs ::= OTD-MeasurementWithID

-- Neighbour info in OTD measurements 0-10 times in TD measurement info
OTD-MsrsOfOtherSets ::= CHOICE {
	identityNotPresent 			OTD-Measurement,
	identityPresent 				OTD-MeasurementWithID
}

-- For this OTD measurement identity is same as the identity of BTS
-- in the first set with same sequence number
OTD-Measurement ::= SEQUENCE {
	nborTimeSlot 		ModuloTimeSlot,
	eotdQuality 		EOTDQuality,
	otdValue 			OTDValue
}

-- This measurement contains the BTS identity and measurement
OTD-MeasurementWithID ::=SEQUENCE {
	neighborIdentity 			NeighborIdentity,
	nborTimeSlot 			ModuloTimeSlot,
	eotdQuality 			EOTDQuality,
	otdValue 				OTDValue
}

EOTDQuality ::= SEQUENCE {
	nbrOfMeasurements 		INTEGER (0..7),
	stdOfEOTD INTEGER 		(0..31)
}

NeighborIdentity ::= CHOICE {
	bsicAndCarrier 			BSICAndCarrier, -- BSIC and Carrier
	ci 					CellID, -- Cell ID, LAC not needed
	multiFrameCarrier 		MultiFrameCarrier, -- MultiFrameOffest and BSIC
	requestIndex			RequestIndex, -- Index to Requested Neighbor List
	systemInfoIndex 			SystemInfoIndex, -- Index to System info list, this type of neighbour
	-- identity shall not be used by the MS unless it has
	-- received the SystemInfoAssistData from the SMLC for
	-- this cell.
	ciAndLAC 				CellIDAndLAC -- CI and LAC
}

-- Multiframe and carrier
MultiFrameCarrier ::= SEQUENCE {
	bcchCarrier 			BCCHCarrier,
	multiFrameOffset 			MultiFrameOffset
}

-- OTD measurement value for neighbour
OTDValue ::= INTEGER (0..39999)

-- Location information IE
LocationInfo ::= SEQUENCE {
	refFrame 			INTEGER (0..65535), -- Reference Frame number
	-- If refFrame is within (42432..65535), it shall be ignored by the receiver
	-- in that case the MS should provide GPS TOW if available
	gpsTOW 			INTEGER (0..14399999) OPTIONAL, -- GPS TOW
	fixType 			FixType,
	-- Note that applicable range for refFrame is 0 - 42431
	-- Possible shapes carried in posEstimate are
	-- ellipsoid point,
	-- ellipsoid point with uncertainty circle
	-- ellipsoid point with uncertainty ellipse
	-- ellipsoid point with altitude and uncertainty ellipsoid
	posEstimate 		Ext-GeographicalInformation
}

FixType ::= INTEGER {
	twoDFix (0),
	threeDFix (1)
} (0..1)

-- GPS-Measurement information
GPS-MeasureInfo ::= SEQUENCE {
	-- Measurement info elements
	-- user has to make sure that in this element is number of elements
	-- defined in reference BTS identity
	gpsMsrSetList 		SeqOfGPS-MsrSetElement
}

SeqOfGPS-MsrSetElement ::= SEQUENCE (SIZE(1..3)) OF GPS-MsrSetElement

-- OTD measurent information 1-3 times in message
GPS-MsrSetElement ::= SEQUENCE {
	refFrame 				INTEGER (0..65535) OPTIONAL, -- Reference Frame number
	gpsTOW 				GPSTOW24b,
						 -- GPS TOW
	-- Note that applicable range for refFrame is 0 - 42431
	--N_SAT can be read from number of elements of gps-msrList
	gps-msrList SeqOfGPS-MsrElement
}

-- 24 bit presentation for GPSTOW
GPSTOW24b ::= INTEGER (0..14399999)

-- measured elements in measurement parameters field
SeqOfGPS-MsrElement ::= SEQUENCE (SIZE(1..16)) OF GPS-MsrElement

GPS-MsrElement ::= SEQUENCE {
	satelliteID 		SatelliteID, -- Satellite identifier
	cNo 				INTEGER (0..63), -- carrier noise ratio
	doppler 			INTEGER (-32768..32767), -- doppler, mulltiply by 0.2
	wholeChips 			INTEGER (0..1022), -- whole value of the code phase measurement
	fracChips 			INTEGER (0..1024), -- fractional value of the code phase measurement
	-- a value of 1024 shall not be encoded by the sender
	-- the receiver shall consider a value of 1024 to be
	-- invalid data
	mpathIndic 			MpathIndic, -- multipath indicator
	pseuRangeRMSErr 		INTEGER (0..63) -- index
}

-- Multipath indicator
MpathIndic ::= ENUMERATED {
	notMeasured (0),
	low (1),
	medium (2),
	high (3)
}

-- Location error IE
LocationError ::= SEQUENCE {
	locErrorReason 			LocErrorReason,
	additionalAssistanceData 	AdditionalAssistanceData OPTIONAL,
	...
}

LocErrorReason ::= ENUMERATED {
	unDefined (0),
	notEnoughBTSs (1),
	notEnoughSats (2),
	eotdLocCalAssDataMissing (3),
	eotdAssDataMissing (4),
	gpsLocCalAssDataMissing (5),
	gpsAssDataMissing (6),
	methodNotSupported (7),
	notProcessed (8),
	refBTSForGPSNotServingBTS (9),
	refBTSForEOTDNotServingBTS (10),
	...
}

-- exception handling:
-- an unrecognized value shall be treated the same as value 0
-- defines additional assistance data needed for any new location attempt
-- MS shall retain any assistance data already received
AdditionalAssistanceData ::= SEQUENCE {
	gpsAssistanceData 	GPSAssistanceData OPTIONAL,
	extensionContainer 	ExtensionContainer OPTIONAL,
...
}

GPSAssistanceData ::= OCTET STRING (SIZE (1..maxGPSAssistanceData))
-- GPSAssistanceData has identical structure and encoding to octets 3 to n of the
-- GPS Assistance Data IE in 3GPP TS 49.031
maxGPSAssistanceData INTEGER ::= 40
-- Protocol Error Causes
ErrorCodes ::= ENUMERATED {
	unDefined (0),
	missingComponet (1),
	incorrectData (2),
	missingIEorComponentElement (3),
	messageTooShort (4),
	unknowReferenceNumber (5),
	...
}

-- exception handling:
-- an unrecognized value shall be treated the same as value 0
-- GPS assistance data IE
GPS-AssistData ::= SEQUENCE {
	controlHeader 	ControlHeader
}

-- More Assistance Data To Be Sent IE
-- More Assistance Data Components On the Way indication for delivery of an entire set of assistance
-- data in multiple Assistance Data components.
MoreAssDataToBeSent ::= ENUMERATED {
	noMoreMessages (0), -- This is the only or last Assistance Data message used to deliver
	-- the entire set of assistance data.
	moreMessagesOnTheWay (1) -- The SMLC will send more Assistance Data messages or a final RRLP
	-- Measure Position Request message to deliver the
	-- the entire set of assistance data.
}

-- Control header of the GPS assistance data
ControlHeader ::= SEQUENCE {
	-- Field type Present information
	referenceTime 			ReferenceTime OPTIONAL,
	refLocation 			RefLocation OPTIONAL,
	dgpsCorrections 			DGPSCorrections OPTIONAL,	
	navigationModel 			NavigationModel OPTIONAL,
	ionosphericModel 			IonosphericModel OPTIONAL,
	utcModel 				UTCModel OPTIONAL,
	almanac 				Almanac OPTIONAL,
	acquisAssist 			AcquisAssist OPTIONAL,
	realTimeIntegrity 		SeqOf-BadSatelliteSet OPTIONAL
}

ReferenceTime ::= SEQUENCE {
	gpsTime 				GPSTime,
	gsmTime 				GSMTime OPTIONAL,
	gpsTowAssist 			GPSTOWAssist OPTIONAL
}

-- GPS Time includes week number and time-of-week (TOW)
GPSTime ::= SEQUENCE {
	gpsTOW23b 			GPSTOW23b,
	gpsWeek 			GPSWeek
}

-- GPSTOW, range 0-604799.92, resolution 0.08 sec, 23-bit presentation
GPSTOW23b ::= INTEGER (0..7559999)

-- GPS week number
GPSWeek ::= INTEGER (0..1023)
-- GPSTOWAssist consists of TLM message, Anti-spoof flag, Alert flag, and 2 reserved bits in TLM Word
-- for each visible satellite.
-- N_SAT can be read from number of elements in GPSTOWAssist

GPSTOWAssist ::= SEQUENCE (SIZE(1..12)) OF GPSTOWAssistElement

GPSTOWAssistElement ::= SEQUENCE {
	satelliteID 			SatelliteID,
	tlmWord 				TLMWord,
	antiSpoof 				AntiSpoofFlag,
	alert 				AlertFlag,
	tlmRsvdBits 			TLMReservedBits
}

-- TLM Word, 14 bits
TLMWord ::= INTEGER (0..16383)

-- Anti-Spoof flag
AntiSpoofFlag ::= INTEGER (0..1)

-- Alert flag
AlertFlag ::= INTEGER (0..1)

-- Reserved bits in TLM word, MSB occurs earlier in TLM Word transmitted by satellite
TLMReservedBits ::= INTEGER (0..3)

GSMTime ::= SEQUENCE {
	bcchCarrier 			BCCHCarrier, -- BCCH carrier
	bsic 					BSIC, -- BSIC
	frameNumber 			FrameNumber,
	timeSlot 				TimeSlot,
	bitNumber 				BitNumber
}

-- Frame number
FrameNumber ::= INTEGER (0..2097151)

-- Time slot number
TimeSlot ::= INTEGER (0..7)

-- Bit number
BitNumber ::= INTEGER (0..156)

-- Reference Location IE
RefLocation ::= SEQUENCE {
	threeDLocation 			Ext-GeographicalInformation
}

-- DGPS Corrections IE
DGPSCorrections ::= SEQUENCE {
	gpsTOW 				INTEGER (0..604799), -- DGPS reference time
	status 				INTEGER (0..7),
-- N_SAT can be read from number of elements of satList
	satList 				SeqOfSatElement
}
SeqOfSatElement ::= SEQUENCE (SIZE (1..16)) OF SatElement

-- number of correction for satellites
SatElement ::= SEQUENCE {
	satelliteID 			SatelliteID,
--- Sequence number for ephemeris
	iode 					INTEGER (0..239),
-- User Differential Range Error
	udre 					INTEGER (0..3),
-- Pseudo Range Correction, range is
-- -655.04 - +655.04,
	pseudoRangeCor 			INTEGER (-2047..2047),
-- Pseudo Range Rate Correction, range is
-- -4.064 - +4.064,
	rangeRateCor 			INTEGER (-127..127),
-- Delta Pseudo Range Correction 2
	deltaPseudoRangeCor2 		INTEGER (-127..127), -- This IE shall be ignored by the receiver and
-- set to zero by the sender
-- Delta Pseudo Range Correction 2
	deltaRangeRateCor2 		INTEGER (-7..7), -- This IE shall be ignored by the receiver and
-- set to zero by the sender
-- Delta Pseudo Range Correction 3
	deltaPseudoRangeCor3 		INTEGER (-127..127), -- This IE shall be ignored by the receiver and
-- set to zero by the sender
-- Delta Pseudo Range Correction 3
	deltaRangeRateCor3 		INTEGER (-7..7) -- This IE shall be ignored by the receiver and
-- set to zero by the sender
}

SatelliteID ::= INTEGER (0..63) -- identifies satellite

-- Navigation Model IE
NavigationModel ::= SEQUENCE {
	navModelList 			SeqOfNavModelElement
}

-- navigation model satellite list
SeqOfNavModelElement ::= SEQUENCE (SIZE(1..16)) OF NavModelElement

NavModelElement ::= SEQUENCE {
	satelliteID 			SatelliteID,
	satStatus 				SatStatus -- satellite status
}

-- the Status of the navigation model
SatStatus ::= CHOICE {
-- New satellite, new Navigation Model
	newSatelliteAndModelUC 		UncompressedEphemeris,
-- Existing satellite, Existing Navigation Model
	oldSatelliteAndModel 		NULL,
-- Existing satellite, new Navigation Model
	newNaviModelUC 			UncompressedEphemeris,
	...
}

-- Uncompressed satellite emhemeris and clock corrections
UncompressedEphemeris ::= SEQUENCE {
	ephemCodeOnL2 			INTEGER (0..3),
	ephemURA 				INTEGER (0..15),
	ephemSVhealth 			INTEGER (0..63),
	ephemIODC 				INTEGER (0..1023),
	ephemL2Pflag 			INTEGER (0..1),
	ephemSF1Rsvd 			EphemerisSubframe1Reserved,
	ephemTgd 				INTEGER (-128..127),
	ephemToc 				INTEGER (0..37799),
	ephemAF2 				INTEGER (-128..127),
	ephemAF1 				INTEGER (-32768..32767),
	ephemAF0 				INTEGER (-2097152..2097151),
	ephemCrs 				INTEGER (-32768..32767),
	ephemDeltaN 			INTEGER (-32768..32767),
	ephemM0 				INTEGER (-2147483648..2147483647),
	ephemCuc 				INTEGER (-32768..32767),
	ephemE 				INTEGER (0..4294967295),
	ephemCus 				INTEGER (-32768..32767),
	ephemAPowerHalf 			INTEGER (0..4294967295),
	ephemToe 				INTEGER (0..37799),
	ephemFitFlag 			INTEGER (0..1),
	ephemAODA 				INTEGER (0..31),
	ephemCic 				INTEGER (-32768..32767),
	ephemOmegaA0 			INTEGER (-2147483648..2147483647),
	ephemCis 				INTEGER (-32768..32767),
	ephemI0 				INTEGER (-2147483648..2147483647),
	ephemCrc 				INTEGER (-32768..32767),
	ephemW 				INTEGER (-2147483648..2147483647),
	ephemOmegaADot 			INTEGER (-8388608..8388607),
	ephemIDot 				INTEGER (-8192..8191)
}

-- Reserved bits in subframe 1 of navigation message
EphemerisSubframe1Reserved ::= SEQUENCE {
	reserved1 				INTEGER (0..8388607), -- 23-bit field
	reserved2 				INTEGER (0..16777215), -- 24-bit field
	reserved3 				INTEGER (0..16777215), -- 24-bit field
	reserved4 				INTEGER (0..65535) -- 16-bit field
}

-- Ionospheric Model IE
IonosphericModel ::= SEQUENCE {
	alfa0 				INTEGER (-128..127),
	alfa1 				INTEGER (-128..127),
	alfa2 				INTEGER (-128..127),
	alfa3 				INTEGER (-128..127),
	beta0 				INTEGER (-128..127),
	beta1 				INTEGER (-128..127),
	beta2 				INTEGER (-128..127),
	beta3 				INTEGER (-128..127)
}

-- Universal Time Coordinate Model
UTCModel ::= SEQUENCE {
	utcA1 				INTEGER (-8388608..8388607),
	utcA0 				INTEGER (-2147483648..2147483647),
	utcTot 				INTEGER (0..255),
	utcWNt 				INTEGER (0..255),
	utcDeltaTls 			INTEGER (-128..127),
	utcWNlsf 				INTEGER (0..255),
	utcDN 				INTEGER (-128..127),
	utcDeltaTlsf 			INTEGER (-128..127)
}

-- Almanac, Long term model
-- NOTE: These are parameters are subset of the ephemeris
-- NOTE: But with reduced resolution and accuracy
Almanac ::= SEQUENCE {
	alamanacWNa 			INTEGER (0..255), -- Once per message
-- navigation model satellite list.
-- The size of almanacList is actually Nums_Sats_Total field
	almanacList 			SeqOfAlmanacElement
}

SeqOfAlmanacElement ::= SEQUENCE (SIZE(1..64)) OF AlmanacElement

-- Almanac info once per satellite
AlmanacElement ::= SEQUENCE {
	satelliteID 			SatelliteID,
	almanacE 				INTEGER (0..65535),
	alamanacToa 			INTEGER (0..255),
	almanacKsii 			INTEGER (-32768..32767),
	almanacOmegaDot 			INTEGER (-32768..32767),
	almanacSVhealth 			INTEGER (0..255),
	almanacAPowerHalf 		INTEGER (0..16777215),
	almanacOmega0 			INTEGER (-8388608..8388607),
	almanacW 				INTEGER (-8388608..8388607),
	almanacM0 				INTEGER (-8388608..8388607),
	almanacAF0 				INTEGER (-1024..1023),
	almanacAF1 				INTEGER (-1024..1023)
}

-- Acquisition Assistance
AcquisAssist ::= SEQUENCE {
-- Number of Satellites can be read from acquistList
	timeRelation 			TimeRelation,
-- Acquisition assistance list
-- The size of Number of Satellites is actually Number of Satellites field
	acquisList 				SeqOfAcquisElement
}

SeqOfAcquisElement ::= SEQUENCE (SIZE(1..16)) OF AcquisElement

-- the relationship between GPS time and air-interface timing
TimeRelation ::= SEQUENCE {
--
	gpsTOW 				GPSTOW23b, -- 23b presentation
	gsmTime 				GSMTime OPTIONAL
}

-- data occuring per number of satellites
AcquisElement ::= SEQUENCE {
	svid 					SatelliteID,
-- Doppler 0th order term,
-- -5120.0 - 5117.5 Hz (= -2048 - 2047 with 2.5 Hz resolution)
	doppler0 				INTEGER (-2048..2047),
	addionalDoppler 			AddionalDopplerFields OPTIONAL,
	codePhase 				INTEGER (0..1022), -- Code Phase
	intCodePhase 			INTEGER (0..19), -- Integer Code Phase
	gpsBitNumber 			INTEGER (0..3), -- GPS bit number
	codePhaseSearchWindow 		INTEGER (0..15), -- Code Phase Search Window
	addionalAngle 			AddionalAngleFields OPTIONAL
}

AddionalDopplerFields ::= SEQUENCE {
-- Doppler 1st order term, -1.0 - +0.5 Hz/sec
-- (= -42 + (0 to 63) with 1/42 Hz/sec. resolution)
	doppler1 				INTEGER (0..63),
	dopplerUncertainty 		INTEGER (0..7)
-- a sender shall not encode any DopplerUncertainty value in the range 5 to 7
-- a receiver shall ignore any value between 5 and 7.
}

AddionalAngleFields ::= SEQUENCE {
-- azimuth angle, 0 - 348.75 deg (= 0 - 31 with 11.25 deg resolution)
	azimuth 				INTEGER (0..31),
-- elevation angle, 0 - 78.75 deg (= 0 - 7 with 11.25 deg resolution)
	elevation 				INTEGER (0..7)
}

-- Real-Time Integrity
-- number of bad satellites can be read from this element
SeqOf-BadSatelliteSet ::= SEQUENCE (SIZE(1..16)) OF SatelliteID

-- Extension Elements
-- Release 98 Extensions here
Rel98-MsrPosition-Req-Extension ::= SEQUENCE {
	rel98-Ext-ExpOTD 					Rel98-Ext-ExpOTD OPTIONAL, -- ExpectedOTD extension
	...,
	gpsTimeAssistanceMeasurementRequest 	NULL OPTIONAL,
	gpsReferenceTimeUncertainty 			GPSReferenceTimeUncertainty OPTIONAL
-- Further R98 extensions here
}

Rel98-AssistanceData-Extension ::= SEQUENCE {
	rel98-Ext-ExpOTD 					Rel98-Ext-ExpOTD OPTIONAL, -- ExpectedOTD extension
	...,
	gpsTimeAssistanceMeasurementRequest 	NULL OPTIONAL,
	gpsReferenceTimeUncertainty 			GPSReferenceTimeUncertainty OPTIONAL
-- Further R98 extensions here

}
-- Release 98 ExpOTD extension
Rel98-Ext-ExpOTD ::= SEQUENCE {
-- If MsrAssistBTS is included in message, msrAssistData-R98-ExpOTD shall be included.
	msrAssistData-R98-ExpOTD 			MsrAssistData-R98-ExpOTD OPTIONAL,
-- If SystemInfoAssistaData is included in message, systemInfoAssistData-R98-ExpOTD shall be
-- included.
	systemInfoAssistData-R98-ExpOTD 		SystemInfoAssistData-R98-ExpOTD OPTIONAL
}

-- MsrAssistData R98 extension
MsrAssistData-R98-ExpOTD ::= SEQUENCE {
	msrAssistList-R98-ExpOTD 			SeqOfMsrAssistBTS-R98-ExpOTD
}

-- Indexes in SeqOfMsrAssistBTS-R98-ExpOTD refer to SeqOfMsrAssistBTS
-- If the index exceeds the SegOfMsrAssistBTS range or if there is other
-- inconsistencies between the BTS indices, the MS shall apply protocol
-- error cause incorrectData
SeqOfMsrAssistBTS-R98-ExpOTD ::= SEQUENCE (SIZE(1..15)) OF MsrAssistBTS-R98-ExpOTD

-- This element completes MsrAssistBTS IE
MsrAssistBTS-R98-ExpOTD ::= SEQUENCE {
	expectedOTD 					ExpectedOTD,
	expOTDUncertainty 				ExpOTDUncertainty
}

-- SystemInfoAssistData R98 extension
SystemInfoAssistData-R98-ExpOTD ::= SEQUENCE {
	systemInfoAssistListR98-ExpOTD 		SeqOfSystemInfoAssistBTS-R98-ExpOTD
}

-- SeqOfSystemInfoAssistBTS-R98-ExpOTD index refer to SeqOfSystemInfoAssistBTS
-- If the index exceeds the SegOfSystemInfoAssistBTS range or if there is other
-- inconsistencies between the BTS indices, the MS shall apply protocol
-- error cause incorrectData

SeqOfSystemInfoAssistBTS-R98-ExpOTD ::= SEQUENCE (SIZE(1..32)) OF SystemInfoAssistBTS-R98-ExpOTD

-- whether n.th is present or not ?
SystemInfoAssistBTS-R98-ExpOTD ::= CHOICE {
	notPresent 						NULL,
	present 						AssistBTSData-R98-ExpOTD
}

-- This element completes AssistBTSData IE
AssistBTSData-R98-ExpOTD ::= SEQUENCE {
	expectedOTD 					ExpectedOTD,
	expOTDuncertainty 				ExpOTDUncertainty -- Uncertainty of expected OTD
}

-- Expected OTD value between nbor base station and reference BTS
-- at MS's current estimated location.
ExpectedOTD ::= INTEGER (0..1250)

-- The ExpectedOTD value 1250 shall not be encoded by the transmitting entity and
-- shall be treated by the receiving entity as 0.
-- Uncertainty of Exptected OTD in bits
ExpOTDUncertainty ::= INTEGER(0..7)

-- Release 98 extensions
GPSReferenceTimeUncertainty ::= INTEGER (0 .. 127) -- Coding according to Annex

GPSTimeAssistanceMeasurements ::= SEQUENCE {
	referenceFrameMSB 				INTEGER (0 .. 63), -- MSB of frame number
	gpsTowSubms 					INTEGER (0 .. 9999) OPTIONAL, -- in units of 100ns, for MS based AGPS
	deltaTow 						INTEGER (0 .. 127) OPTIONAL, -- for MS assisted AGPS
	gpsReferenceTimeUncertainty 			GPSReferenceTimeUncertainty OPTIONAL
}

Rel-98-MsrPosition-Rsp-Extension ::= SEQUENCE {
-- First extension to Release 98
	rel-98-Ext-MeasureInfo SEQUENCE {
		otd-MeasureInfo-R98-Ext 		OTD-MeasureInfo-R98-Ext OPTIONAL
	},
	...,
	timeAssistanceMeasurements 			GPSTimeAssistanceMeasurements OPTIONAL
-- Further R98 extensions here
}

-- This is an addition to OTD-MeasureInfo element defined in original message,
-- If OTD-MeasureInfo is absent, or if one or more OTD-MsrElementRest are present
-- OTD-MeasureInfo-R98-Ext shall be absent.
-- OTD-MeasureInfo-R98-Ext
OTD-MeasureInfo-R98-Ext ::= SEQUENCE {
-- Measurement info elements
	otdMsrFirstSets-R98-Ext 			OTD-MsrElementFirst-R98-Ext
}

-- OTD measurement information Ext for the first set only
OTD-MsrElementFirst-R98-Ext ::= SEQUENCE {
-- additional measured neighbors in OTD measurements
	otd-FirstSetMsrs-R98-Ext 			SeqOfOTD-FirstSetMsrs-R98-Ext OPTIONAL
}

SeqOfOTD-FirstSetMsrs-R98-Ext ::= SEQUENCE (SIZE(1..5)) OF OTD-FirstSetMsrs

Rel-5-MsrPosition-Rsp-Extension ::= SEQUENCE {
	extended-reference 				Extended-reference OPTIONAL,
-- The extended-reference shall be included by the MS if and only if previously
-- received from the SMLC in a Measure Position Request. When included, the value sent
-- by the MS shall equal the value received from the SMLC.
-- extension to Release 5, for RRLP pseudo-segmentation here
	otd-MeasureInfo-5-Ext 				OTD-MeasureInfo-5-Ext OPTIONAL,
	ulPseudoSegInd 					UlPseudoSegInd OPTIONAL, -- Included when uplink RRLP
-- Pseudo-segmentation is used, not included when no uplink pseudo-segmentation is used
	...
-- Possibly more extensions for Release 5 here later
}

Extended-reference ::= SEQUENCE {
	smlc-code 						INTEGER (0..63),
	transaction-ID 					INTEGER (0..262143)
}

OTD-MeasureInfo-5-Ext ::= SeqOfOTD-MsrElementRest
-- if more than one measurement sets are present this element is repeated
-- NumberOfSets - 1 (-1 = first set) combined in OTD-MeasureInfo-5-Ext and
-- OTD-MeasureInfo (e.g. if NumberOfSets is 3, then one otdMsrRestSets may
-- be sent in OTD-MeasureInfo-5-Ext and one in OTD-MeasureInfo)
-- First part of Uplink RRLP Pseudo-segmentation indication, possibly more may be defined
-- in the future for segmentation with more than two segments.
UlPseudoSegInd ::= ENUMERATED {
	firstOfMany (0),
	secondOfMany(1)
}

Rel5-MsrPosition-Req-Extension ::= SEQUENCE {
	extended-reference 				Extended-reference,
	...
-- Possibly more extensions for Release 5 here later
}

Rel5-AssistanceData-Extension ::= SEQUENCE {
	extended-reference 				Extended-reference,
	...
-- Possibly more extensions for Release 5 here later
}

Rel-5-ProtocolError-Extension::= SEQUENCE {
	extended-reference 				Extended-reference OPTIONAL,
-- The extended-reference shall be included by the MS if and only if previously
-- received from the SMLC.
-- When included, the value sent by the MS shall equal the value received from the SMLC.
	...
-- Possibly more extensions for Release 5 here later
}

Ext-GeographicalInformation ::= OCTET STRING (SIZE (1..20))
ExtensionContainer ::= OCTET STRING

END