-- This ASN.1 file contains RRLP definitions according to 3GPP TS 44.031 V5.12.0 (2005-01), 
-- as required by SUPL 1.0 OMA-TS-ULP-V1_0-20070615-A.

-- Imported components Ext-GeographicalInformation and Ext-GeographicalInformation have 
-- been added to this definition to simplify the compilation process. These have been 
-- exctracted from 3GPP TS 29.002 V6.8.0 (2004-12). I have compared to v3.e.0, and can
-- see no changes (although this is not the versions actually specified in RRLP doc, they
-- are just one revision later).



RRLP-Messages
-- { RRLP-messages }

DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

IMPORTS
	MsrPosition-Req, MsrPosition-Rsp, AssistanceData,
	ProtocolError
FROM
	RRLP-Components 	-- { RRLP-Components }
;

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

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

}

END


RRLP-Components
-- { RRLP-Components }

DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

-- commented out from original RRLP specification -----------------

--	Ext-GeographicalInformation
-- IMPORTS
-- 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
}


-- add these defintions to RRLP-Components module
-- Position instructions
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
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		NavigationModelRrlp		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
NavigationModelRrlp ::= 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)
}

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
}




-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-- The following components have been added to the RRLP spec, extracted from the 
-- specifications from which RRLP includes.


Ext-GeographicalInformation ::= OCTET STRING (SIZE (1..maxExt-GeographicalInformation))
	-- Refers to geographical Information defined in 3GPP TS 23.032.
	-- This is composed of 1 or more octets with an internal structure according to
	-- 3GPP TS 23.032
	-- Octet 1: Type of shape, only the following shapes in 3GPP TS 23.032 are allowed:
	--		(a) Ellipsoid point with uncertainty circle
	--		(b) Ellipsoid point with uncertainty ellipse
	--		(c) Ellipsoid point with altitude and uncertainty ellipsoid
	--		(d) Ellipsoid Arc
	--		(e) Ellipsoid Point
	-- Any other value in octet 1 shall be treated as invalid
	-- Octets 2 to 8 for case (a) – Ellipsoid point with uncertainty circle
	--		Degrees of Latitude				3 octets
	--		Degrees of Longitude				3 octets
	--		Uncertainty code				1 octet
	-- Octets 2 to 11 for case (b) – Ellipsoid point with uncertainty ellipse:
	--		Degrees of Latitude				3 octets
	--		Degrees of Longitude				3 octets
	--		Uncertainty semi-major axis				1 octet
	--		Uncertainty semi-minor axis				1 octet
	--		Angle of major axis				1 octet
	--		Confidence				1 octet
	-- Octets 2 to 14 for case (c) – Ellipsoid point with altitude and uncertainty ellipsoid
	--		Degrees of Latitude				3 octets
	--		Degrees of Longitude				3 octets
	--		Altitude				2 octets
	--		Uncertainty semi-major axis				1 octet
	--		Uncertainty semi-minor axis				1 octet
	--		Angle of major axis				1 octet
	--		Uncertainty altitude				1 octet
	--		Confidence				1 octet
	-- Octets 2 to 13 for case (d) – Ellipsoid Arc
	--		Degrees of Latitude				3 octets
	--		Degrees of Longitude				3 octets
	--		Inner radius				2 octets
	--		Uncertainty radius				1 octet
	--		Offset angle				1 octet
	--		Included angle				1 octet
	--		Confidence				1 octet
	-- Octets 2 to 7 for case (e) – Ellipsoid Point
	--		Degrees of Latitude				3 octets
	--		Degrees of Longitude				3 octets

	--
	-- An Ext-GeographicalInformation parameter comprising more than one octet and
	-- containing any other shape or an incorrect number of octets or coding according
	-- to 3GPP TS 23.032 shall be treated as invalid data by a receiver.
	--
	-- An Ext-GeographicalInformation parameter comprising one octet shall be discarded
	-- by the receiver if an Add-GeographicalInformation parameter is received 
	-- in the same message.
	--
	-- An Ext-GeographicalInformation parameter comprising one octet shall be treated as
	-- invalid data by the receiver if an Add-GeographicalInformation parameter is not
	-- received in the same message.

maxExt-GeographicalInformation  INTEGER ::= 20
	-- the maximum length allows for further shapes in 3GPP TS 23.032 to be included in later 
	-- versions of 3GPP TS 29.002

	


MAP-EXTENSION  ::= CLASS {
	&ExtensionType				OPTIONAL,
	&extensionId 	OBJECT IDENTIFIER }
	-- The length of the Object Identifier shall not exceed 16 octets and the
	-- number of components of the Object Identifier shall not exceed 16

-- data types

	


ExtensionContainer ::= SEQUENCE {
	privateExtensionList	[0]PrivateExtensionList	OPTIONAL, 
	pcs-Extensions	[1]PCS-Extensions	OPTIONAL,
	...}

SLR-ArgExtensionContainer ::= SEQUENCE {
	privateExtensionList	[0]PrivateExtensionList	OPTIONAL, 
	slr-Arg-PCS-Extensions	[1]SLR-Arg-PCS-Extensions	OPTIONAL,
	...}

PrivateExtensionList ::= SEQUENCE SIZE (1..maxNumOfPrivateExtensions) OF
				PrivateExtension

PrivateExtension ::= SEQUENCE {
	extId		MAP-EXTENSION.&extensionId
				({ExtensionSet}),
	extType		MAP-EXTENSION.&ExtensionType
				({ExtensionSet}{@extId})	OPTIONAL}

maxNumOfPrivateExtensions  INTEGER ::= 10

ExtensionSet		MAP-EXTENSION ::=
		{...
		 -- ExtensionSet is the set of all defined private extensions
	}
	-- Unsupported private extensions shall be discarded if received.

PCS-Extensions ::= SEQUENCE {
	...}

SLR-Arg-PCS-Extensions ::= SEQUENCE {
	...,
	na-ESRK-Request	[0]	NULL		OPTIONAL }




-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


END
