Import code to generate RRLP ephemeris data from u-blox GPS receiver

taken from http://www.246tnt.com/files/rrlp-20091101.tar.bz2
diff --git a/rrlp-ephemeris/asn1/RRLP-Components.asn b/rrlp-ephemeris/asn1/RRLP-Components.asn
new file mode 100644
index 0000000..3bade6a
--- /dev/null
+++ b/rrlp-ephemeris/asn1/RRLP-Components.asn
@@ -0,0 +1,1488 @@
+-- RRLP-Components.asn
+-- $Id$
+-- Taken from 3GPP TS 44.031 V7.4.0 (2007-03)
+-- http://www.3gpp.org/ftp/Specs/archive/44_series/44.031/44031-740.zip/44031-740.doc
+--
+-- 4 Components
+-- 5 Elements of Components
+--
+
+RRLP-Components
+-- { RRLP-Components }
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+	Ext-GeographicalInformation, VelocityEstimate
+FROM
+	MAP-LCS-DataTypes {
+	itu-t identified-organization (4) etsi (0) mobileDomain (0)
+	gsm-Network (1) modules (3) map-LCS-DataTypes (25) version11 (11)}
+
+	ExtensionContainer
+FROM MAP-ExtensionDataTypes {
+	itu-t identified-organization (4) etsi (0) mobileDomain (0)
+	gsm-Network (1) modules (3) map-ExtensionDataTypes (21) version11 (11)}
+;
+
+
+-- Add here other ASN.1 definitions presented below
+-- in chapters 4 and 5.
+
+-- 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,
+	-- Release 7 extension element
+rel7-MsrPosition-Req-extension			Rel7-MsrPosition-Req-Extension			OPTIONAL
+}
+
+-- 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
+	rel-7-MsrPosition-Rsp-Extension
+							Rel-7-MsrPosition-Rsp-Extension		OPTIONAL
+}
+
+-- 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,
+ rel7-AssistanceData-Extension Rel7-AssistanceData-Extension OPTIONAL	
+}
+
+-- Protocol Error component
+ProtocolError ::= SEQUENCE {
+	errorCause				ErrorCodes,	
+	extensionContainer		ExtensionContainer		OPTIONAL,
+	...,
+	-- Release extensions here
+	rel-5-ProtocolError-Extension Rel-5-ProtocolError-Extension		OPTIONAL
+}
+
+-- 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, 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	LACID,				-- Location area code
+	referenceCI		CellID				-- Cell identity
+}
+CellID ::= INTEGER (0..65535)
+LACID ::= 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),
+	...,
+	notEnoughGANSSSats (11),	
+ ganssAssDataMissing (12),
+	refBTSForGANSSNotServingBTS (13)
+}
+
+-- 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,
+	...,
+	ganssAssistanceData GANSSAssistanceData 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
+
+GANSSAssistanceData ::= OCTET STRING (SIZE (1..maxGANSSAssistanceData))
+-- GANSSAssistanceData has identical structure and encoding to octets 3 to n of the
+-- GANSS Assistance Data IE in 3GPP TS 49.031
+
+maxGANSSAssistanceData	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
+}
+
+-- Release 7 Extensions here
+
+Rel7-MsrPosition-Req-Extension ::= SEQUENCE {
+velocityRequested		 NULL		 OPTIONAL,
+ ganssPositionMethod GANSSPositioningMethod OPTIONAL,
+ ganss-AssistData GANSS-AssistData OPTIONAL,
+ ganssCarrierPhaseMeasurementRequest NULL OPTIONAL,
+ ganssTODGSMTimeAssociationMeasurementRequest NULL OPTIONAL,
+requiredResponseTime	RequiredResponseTime	OPTIONAL,
+	...
+	-- Further Release 7 extentions here
+}
+
+-- additional satellite systems may be added in future versions of the protocol
+GANSSPositioningMethod ::= BIT STRING {
+	gps (0),
+	galileo (1)} (SIZE (2..16))
+
+GANSS-AssistData ::= SEQUENCE {
+	ganss-controlHeader	GANSS-ControlHeader
+}
+
+GANSS-ControlHeader ::= SEQUENCE {
+ ganssCommonAssistData GANSSCommonAssistData OPTIONAL,
+ ganssGenericAssistDataList SeqOfGANSSGenericAssistDataElement OPTIONAL
+}
+
+-- GANSS Common Assistance Data Elements
+GANSSCommonAssistData ::= SEQUENCE {
+	ganssReferenceTime		 GANSSReferenceTime		 OPTIONAL,
+	ganssRefLocation			GANSSRefLocation		 OPTIONAL,
+	ganssIonosphericModel		GANSSIonosphericModel	 OPTIONAL,
+	...
+}
+
+-- List of GANSS Generic Assistance Data Elements, up to 8 GANSS
+SeqOfGANSSGenericAssistDataElement ::= SEQUENCE (SIZE (1..8)) OF GANSSGenericAssistDataElement
+
+-- GANSS Generic Assistance Data Elements
+GANSSGenericAssistDataElement ::= SEQUENCE {
+ ganssID INTEGER (0..7) OPTIONAL, -- Coding according to Annex
+ ganssTimeModel SeqOfGANSSTimeModel OPTIONAL,
+	ganssDiffCorrections		 GANSSDiffCorrections	 OPTIONAL,
+	ganssNavigationModel		 GANSSNavModel OPTIONAL,
+	ganssRealTimeIntegrity	 GANSSRealTimeIntegrity	 OPTIONAL,
+	ganssDataBitAssist			 GANSSDataBitAssist		 OPTIONAL,
+	ganssRefMeasurementAssist	 GANSSRefMeasurementAssist OPTIONAL,
+ ganssAlmanacModel GANSSAlmanacModel OPTIONAL,
+ ganssUTCModel GANSSUTCModel OPTIONAL,
+	...
+}
+
+-- GANSS COMMON ASSISTANCE DATA ELEMENTS
+
+-- GANSS Reference Time IE
+GANSSReferenceTime ::= SEQUENCE {
+	ganssRefTimeInfo			 GANSSRefTimeInfo,
+	ganssTOD-GSMTimeAssociation GANSSTOD-GSMTimeAssociation OPTIONAL
+}
+
+-- GANSS Reference Time includes GANSS TOD, GANSS Day, uncertainty
+GANSSRefTimeInfo ::= SEQUENCE {
+	ganssDay			 INTEGER(0 .. 8191) OPTIONAL,
+ ganssTOD GANSSTOD,
+	ganssTODUncertainty	 GANSSTODUncertainty OPTIONAL,
+ ganssTimeID INTEGER (0 .. 7) OPTIONAL
+}
+
+-- GANSS TOD integer seconds
+GANSSTOD ::= INTEGER (0 .. 86399)
+
+-- GANSS TOD uncertainty
+GANSSTODUncertainty ::= INTEGER (0 .. 127) -- Coding according to Annex
+
+-- GANSS TOD-GSM Time association 
+GANSSTOD-GSMTimeAssociation ::= SEQUENCE {
+	bcchCarrier		BCCHCarrier,	-- BCCH carrier
+	bsic			BSIC,			-- BSIC
+	frameNumber		FrameNumber,
+	timeSlot		TimeSlot,
+	bitNumber		BitNumber,
+ frameDrift FrameDrift OPTIONAL
+}
+
+-- Frame drift
+FrameDrift ::= INTEGER(-64 .. 63)
+
+-- GANSS Reference Location IE
+GANSSRefLocation ::= SEQUENCE {
+	threeDLocation			Ext-GeographicalInformation
+}
+
+-- GANSS Ionospheric Model IE
+-- GANSS Ionospheric Model consists of NeQuick model parameters and storm flags
+
+GANSSIonosphericModel ::= SEQUENCE {
+ ganssIonoModel GANSSIonosphereModel,
+ ganssIonoStormFlags GANSSIonoStormFlags OPTIONAL,
+ ...
+}
+
+-- GANSS ionosphere model. Coding according to Annex 
+GANSSIonosphereModel ::= SEQUENCE {
+ ai0 INTEGER (0 .. 4095),
+ ai1 INTEGER (0 .. 4095),
+ ai2 INTEGER (0 .. 4095)
+}
+
+-- GANSS ionosphere storm flags
+GANSSIonoStormFlags ::= SEQUENCE {
+	ionoStormFlag1	INTEGER (0 .. 1),
+	ionoStormFlag2	INTEGER (0 .. 1),
+	ionoStormFlag3	INTEGER (0 .. 1),
+	ionoStormFlag4	INTEGER (0 .. 1),
+	ionoStormFlag5	INTEGER (0 .. 1)
+}
+
+-- GANSS GENERIC ASSISTANCE DATA ELEMENTS
+
+-- GANSS Time Model IE consists of time offset and first and second order parameters to relate GNSS
+-- specific system time to selected time reference
+SeqOfGANSSTimeModel ::= SEQUENCE (SIZE(1..7)) OF GANSSTimeModelElement
+
+GANSSTimeModelElement ::= SEQUENCE {
+	ganssTimeModelRefTime		INTEGER(0 .. 65535),
+	tA0		 TA0,
+	tA1		 TA1 OPTIONAL,
+	tA2		 TA2 OPTIONAL,
+ gnssTOID INTEGER (0 .. 7),
+ weekNumber INTEGER (0 .. 8191) OPTIONAL 
+}
+
+-- GANSS time model parameter A0
+TA0 ::= INTEGER (-2147483648 .. 2147483647)
+
+-- GANSS time model parameter A1
+TA1 ::= INTEGER (-8388608 .. 8388607)
+
+-- GANSS time model parameter A2
+TA2 ::= INTEGER (-64 .. 63)
+
+-- DGANSS Corrections IE
+GANSSDiffCorrections ::= SEQUENCE {
+	dganssRefTime		INTEGER (0 .. 119),	 -- DGANSS reference time
+
+	-- N_SGN_TYPE can be read from number of elements of sgnTypeList
+	sgnTypeList		 SeqOfSgnTypeElement
+}
+
+SeqOfSgnTypeElement ::= SEQUENCE (SIZE (1..3)) OF SgnTypeElement -- max three signals per GNSS
+
+-- DGANSS signal type element, once per GNSS signal type included in DGANSS
+SgnTypeElement ::= SEQUENCE {
+	ganssSignalID		 GANSSSignalID OPTIONAL, -- signal type identity
+ ganssStatusHealth INTEGER (0 .. 7),
+	-- N_SGN can be read from number of elements of dganssSgnList
+ dganssSgnList SeqOfDGANSSSgnElement
+}
+
+GANSSSignalID ::= INTEGER (0 .. 3)	-- Coding according to Annex
+SeqOfDGANSSSgnElement ::= SEQUENCE (SIZE (1..16)) OF DGANSSSgnElement
+
+-- number of correction for signals
+DGANSSSgnElement ::= SEQUENCE {
+	svID		 SVID, -- Satellite identity
+
+--- Sequence number for GANSS Navigation Model that matches the DGANSS correction set
+	iod 			INTEGER (0 .. 1023),
+
+	-- 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)
+}
+
+SVID ::= INTEGER (0 .. 63)	-- Coding according to Annex
+
+-- GANSS Navigation Model IE
+GANSSNavModel ::= SEQUENCE {
+ nonBroadcastIndFlag INTEGER (0 .. 1),
+ toeMSB INTEGER (0 .. 31) OPTIONAL, -- 5 MSB of toe and toc 
+ eMSB INTEGER (0 .. 127) OPTIONAL,
+ sqrtAMBS INTEGER (0 .. 63) OPTIONAL,
+	ganssSatelliteList SeqOfGANSSSatelliteElement
+}
+
+SeqOfGANSSSatelliteElement ::= SEQUENCE (SIZE(1..32)) OF GANSSSatelliteElement
+
+GANSSSatelliteElement ::= SEQUENCE {
+	svID SVID,
+ svHealth INTEGER (-7 .. 13), -- Coding according to Annex
+ iod INTEGER (0 .. 1023), -- Coding according to Annex
+ ganssClockModel GANSSClockModel, 
+ ganssOrbitModel GANSSOrbitModel, 
+ ...
+}
+
+-- GANSS orbit model for the GNSS satellite according to the choice
+GANSSOrbitModel ::= CHOICE {
+	keplerianSet	 NavModel-KeplerianSet,	
+ ...
+}
+
+-- Navigation model in Keplerian parameters
+NavModel-KeplerianSet ::= SEQUENCE {
+ keplerToeLSB INTEGER (0 .. 511), -- 9LSB are given in GANSSNavigationModel
+	keplerW			 INTEGER (-2147483648..2147483647),
+	keplerDeltaN	 INTEGER (-32768..32767),
+	keplerM0		 INTEGER (-2147483648..2147483647),
+	keplerOmegaDot	 INTEGER (-8388608..8388607),
+	keplerELSB 	 INTEGER (0..33554431),
+	keplerIDot		 INTEGER (-8192..8191),
+	keplerAPowerHalfLSB INTEGER (0.. 67108863),
+	keplerI0		 INTEGER (-2147483648..2147483647),
+	keplerOmega0 INTEGER (-2147483648..2147483647),
+	keplerCrs		 INTEGER (-32768..32767),
+	keplerCis		 INTEGER (-32768..32767),
+	keplerCus		 INTEGER (-32768..32767),
+	keplerCrc		 INTEGER (-32768..32767),
+	keplerCic		 INTEGER (-32768..32767),
+	keplerCuc		 INTEGER (-32768..32767)
+}
+
+-- GANSS clock model for the GNSS satellite according to the choice
+GANSSClockModel ::= CHOICE {
+	standardClockModelList	 SeqOfStandardClockModelElement,	
+ ...
+}
+
+SeqOfStandardClockModelElement ::= SEQUENCE (SIZE(1..2)) OF StandardClockModelElement
+
+StandardClockModelElement ::= SEQUENCE {
+ stanClockTocLSB INTEGER (0 .. 511), -- 9LSB of time of clock
+ stanClockAF2 INTEGER (-2048 .. 2047), 
+ stanClockAF1 INTEGER (-131072 .. 131071), 
+ stanClockAF0 INTEGER (-134217728 .. 134217727),
+ stanClockTgd INTEGER (-512 .. 511) OPTIONAL,
+ stanModelID INTEGER (0 .. 1) OPTIONAL,
+ ...
+} 
+
+-- GANSS Real-Time Integrity IE
+GANSSRealTimeIntegrity ::= SEQUENCE {
+ -- list of bad signals
+ -- NBS can be read from number of elements in SeqOf-BadSignalSet
+ ganssBadSignalList SeqOfBadSignalElement
+}
+
+SeqOfBadSignalElement ::= SEQUENCE (SIZE(1..16)) OF BadSignalElement
+
+BadSignalElement ::= SEQUENCE {
+ badSVID SVID, -- Coding according to Annex
+ badSignalID INTEGER (0 .. 3) OPTIONAL -- Coding according to Annex
+}
+
+
+-- GANSS Data Bit Assistance IE
+GANSSDataBitAssist ::= SEQUENCE {
+ ganssTOD INTEGER (0 .. 59),
+ svID SVID,
+ ganssDataTypeID INTEGER (0 .. 2), -- Coding according to Annex
+ -- list of navigation data bits
+ -- N_BIT can be read from number of elements in SeqOf-DataBits
+ ganssDataBits SeqOf-GANSSDataBits
+}
+
+SeqOf-GANSSDataBits ::= SEQUENCE (SIZE(1 .. 1024)) OF GANSSDataBit
+GANSSDataBit ::= INTEGER(0 .. 1)
+
+-- GANSS Reference Measurement Assistance IE
+-- Code and Doppler assistance from the network. 
+GANSSRefMeasurementAssist ::= SEQUENCE {
+ ganssSignalID INTEGER (0 .. 3) OPTIONAL, -- Coding according to Annex
+ ganssRefMeasAssitList SeqOfGANSSRefMeasurementElement
+}
+
+SeqOfGANSSRefMeasurementElement ::= SEQUENCE (SIZE(1 .. 16)) OF GANSSRefMeasurementElement
+
+GANSSRefMeasurementElement ::= SEQUENCE {
+ svID SVID,
+	-- Doppler 0th order term,
+	-- -1024 m/s to 1023.5 m/s with 0.5 m/s resolution)
+	doppler0				INTEGER (-2048 .. 2047),	-- Coding according to Annex
+	additionalDoppler		AdditionalDopplerFields	 OPTIONAL,
+	codePhase				INTEGER (0 .. 1022),	 -- Code Phase in ms
+	intCodePhase			INTEGER (0 .. 127),	 -- Integer Code Phase in ms
+	codePhaseSearchWindow	INTEGER (0 .. 31),	 -- Code Phase Search Window, see Annex
+	additionalAngle			AddionalAngleFields		 OPTIONAL,
+ ...
+}
+
+AdditionalDopplerFields ::= SEQUENCE {
+	-- Doppler 1st order term, -0.2 - +0.1 m/s2
+	doppler1				INTEGER (0..63),
+	dopplerUncertainty		INTEGER (0..4)
+}
+
+-- GANSS Almanac Model IE
+GANSSAlmanacModel ::= SEQUENCE {
+ weekNumber INTEGER (0 .. 255),
+ svIDMask SVIDMASK,
+ toa INTEGER (0 .. 255) OPTIONAL,
+ ioda INTEGER (0 .. 3) OPTIONAL,
+ ganssAlmanacList SeqOfGANSSAlmanacElement
+}
+
+-- SV ID Mask, LSB for ID 1 and MSB for ID 36
+SVIDMASK ::= BIT STRING (SIZE (1..36))
+
+SeqOfGANSSAlmanacElement ::= SEQUENCE (SIZE(1 .. 36)) OF GANSSAlmanacElement
+
+-- GANSS Almanac Model 
+GANSSAlmanacElement ::= CHOICE {
+	keplerianAlmanacSet	 Almanac-KeplerianSet,	
+ ...
+}
+
+-- Almanac parameters according to Keplerian parameters
+Almanac-KeplerianSet ::= SEQUENCE {
+ 	kepAlmanacE			 INTEGER (0 .. 2047),
+	kepAlmanacDeltaI		INTEGER (-1024 .. 1023),
+	kepAlmanacOmegaDot		INTEGER (-1024 .. 1023),
+ kepSVHealth INTEGER (0 .. 15), -- Coding according to Annex
+	kepAlmanacAPowerHalf	INTEGER (-65536 .. 65535),
+	kepAlmanacOmega0		INTEGER (-32768 .. 32767),
+	kepAlmanacW			 INTEGER (-32768 .. 32767),
+	kepAlmanacM0			INTEGER (-32768 .. 32767),
+	kepAlmanacAF0			INTEGER (-8192 .. 8191),
+	kepAlmanacAF1			INTEGER (-1024..1023)
+}
+
+-- GANSS Universal Time Coordinate Model
+GANSSUTCModel ::= SEQUENCE {
+	ganssUtcA1			INTEGER (-8388608..8388607),
+	ganssUtcA0			INTEGER (-2147483648..2147483647),
+	ganssUtcTot			INTEGER (0..255),
+	ganssUtcWNt			INTEGER (0..255),
+	ganssUtcDeltaTls	INTEGER (-128..127),
+	ganssUtcWNlsf		INTEGER (0..255),
+	ganssUtcDN			INTEGER (-128..127),
+	ganssUtcDeltaTlsf	INTEGER (-128..127)
+}
+
+--Required Measurement Request Response Time, range is 1 to 128 seconds. 
+RequiredResponseTime ::= INTEGER  (1..128)
+
+Rel-7-MsrPosition-Rsp-Extension ::= SEQUENCE {
+
+	velEstimate 	VelocityEstimate OPTIONAL,
+ -- Horizontal Velocity
+ -- Horizontal with Vertical Velocity
+ -- Horizontal Velocity with Uncertainty
+ -- Horizontal with Vertical Velocity and Uncertainty
+ ganssLocationInfo GANSSLocationInfo OPTIONAL,
+ ganssMeasureInfo GANSSMeasureInfo OPTIONAL,
+	...
+-- Further Release 7 extensions here
+}
+
+-- GANSS Location Information contains location estimate, time stamp with uncertainty 
+-- and optionally Reference Frame field
+GANSSLocationInfo ::= SEQUENCE {
+ referenceFrame ReferenceFrame OPTIONAL, -- Reference Frame Number
+ ganssTODm GANSSTODm OPTIONAL, -- GNSS TOD modulo
+ ganssTODFrac INTEGER (0 .. 16384) OPTIONAL, -- Coding according to Annex
+	ganssTODUncertainty GANSSTODUncertainty OPTIONAL, -- Coding according to Annex
+ ganssTimeID INTEGER (0 .. 3) OPTIONAL, -- Coding according to Annex
+	fixType			 FixType,
+ posData PositionData,
+ stationaryIndication INTEGER(0 .. 1) OPTIONAL, -- '0' if moving or motion not known 
+	-- 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,
+ ...
+}
+
+PositionData ::= BIT STRING {
+ e-otd(0),
+	gps (1),
+	galileo (2) } (SIZE (3..16))
+
+
+-- GANSS TOD modulo 1 hour
+GANSSTODm ::= INTEGER (0 .. 3599999)
+
+ReferenceFrame ::= SEQUENCE {
+ referenceFN INTEGER (0 .. 65535),
+	-- Note that applicable range for referenceFN is 0 - 42431
+ referenceFNMSB INTEGER (0 .. 63) OPTIONAL -- MSB of Reference Frame Number
+}
+
+
+
+-- GANSS Measurement Information 
+GANSSMeasureInfo ::= SEQUENCE {
+	-- Measurement info elements
+	-- user has to make sure that in this element is number of elements
+	-- defined in reference BTS identity
+ ganssMsrSetList SeqOfGANSS-MsrSetElement
+}
+SeqOfGANSS-MsrSetElement ::= SEQUENCE (SIZE(1..3)) OF GANSS-MsrSetElement
+
+-- GANSS measurement information 1-3 times in a message
+GANSS-MsrSetElement ::= SEQUENCE {
+ referenceFrame ReferenceFrame OPTIONAL, -- Reference Frame Number
+ ganssTODm GANSSTODm OPTIONAL, -- GANSS TOD modulo
+ deltaGNASSTOD INTEGER (0 .. 127) OPTIONAL,
+	ganssTODUncertainty GANSSTODUncertainty OPTIONAL, -- Coding accoring to Annex
+
+ --N_SGN_TYPE can be read from number of elements of SeqOfGANSS-SgnTypeElement
+ ganss-SgnTypeList SeqOfGANSS-SgnTypeElement
+}
+
+-- Measurements can be returned up to 6 different signal types 
+SeqOfGANSS-SgnTypeElement ::= SEQUENCE (SIZE(1..6)) OF GANSS-SgnTypeElement
+
+GANSS-SgnTypeElement ::= SEQUENCE {
+	ganssSignalID		INTEGER (0 .. 15), -- Coding accroding to Annex
+ --N_SGN can be read from number of elements of SeqOfGANSS-SgnElement
+ ganss-SgnList SeqOfGANSS-SgnElement
+}
+
+-- Measurements can be returned up to 16 per signal types 
+SeqOfGANSS-SgnElement ::= SEQUENCE (SIZE(1..16)) OF GANSS-SgnElement
+
+
+GANSS-SgnElement ::= SEQUENCE {
+ svID SVID,
+ cNo INTEGER (0 .. 63),
+ mpathDet MpathIndic, -- Coding according to Annex
+ carrierQualityInd INTEGER (0 .. 3) OPTIONAL, -- Coding according to Annex
+ codePhase INTEGER (0 .. 2097151),
+ integerCodePhase INTEGER (0 .. 63) OPTIONAL,
+ codePhaseRMSError INTEGER (0..63), -- Coding accoring to Annex
+ doppler INTEGER (-32768 .. 32767) OPTIONAL,
+ adr INTEGER (0 .. 33554431) OPTIONAL
+}
+
+Rel7-AssistanceData-Extension ::= SEQUENCE {
+ ganss-AssistData GANSS-AssistData OPTIONAL,
+ ganssCarrierPhaseMeasurementRequest NULL OPTIONAL,
+ ganssTODGSMTimeAssociationMeasurementRequest NULL OPTIONAL,
+	...
+-- Possibly more extensions for Release 7 here
+}
+
+END