RRLP-Components
-- { RRLP-Components }

-- SPDX-License-Identifier: BSD-1-Clause
-- SPDX-FileCopyrightText: (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.

DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

--IMPORTS
--    Ext-GeographicalInformation , VelocityEstimate
--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)}
--;

VelocityEstimate ::= INTEGER
ExtensionContainer ::= INTEGER

-- 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
    -- Release 7 extension element
-- rel7-MsrPosition-Req-extension            Rel7-MsrPosition-Req-Extension            OPTIONAL
}


-- add this definition 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
--        rel-7-MsrPosition-Rsp-Extension         Rel-7-MsrPosition-Rsp-Extension        OPTIONAL
}


-- add this definition 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
-- rel7-AssistanceData-Extension Rel7-AssistanceData-Extension OPTIONAL
}


-- add this definition 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 definitions 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, 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 reference 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),
    ...,
    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 occurring 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 Expected 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 extensions 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
-- SeqOf GANSSTimeModel ::= SEQUENCE (SIZE(1..7)) OF GANSSTimeModelElement
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 according 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 according 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 according 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
}


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

END
