diff options
author | João Valverde <joao.valverde@tecnico.ulisboa.pt> | 2016-03-09 03:17:51 +0000 |
---|---|---|
committer | João Valverde <j@v6e.pt> | 2016-03-13 21:30:24 +0000 |
commit | 54a520d4a1151c68d0b4e5f09a8d82466fa499f3 (patch) | |
tree | 7aacae160382098ce651ac862a5dfd5de4beff94 /epan/dissectors/asn1/lpp | |
parent | c1f3c935bdd33090c87f0d2f84842ce9729b747a (diff) |
Move /asn1 to /epan/dissectors
Change-Id: I1208fe3c2ba428995526f561e8f792b8d871e9a9
Reviewed-on: https://code.wireshark.org/review/14388
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Reviewed-by: João Valverde <j@v6e.pt>
Diffstat (limited to 'epan/dissectors/asn1/lpp')
-rw-r--r-- | epan/dissectors/asn1/lpp/CMakeLists.txt | 52 | ||||
-rw-r--r-- | epan/dissectors/asn1/lpp/LPP.asn | 2519 | ||||
-rw-r--r-- | epan/dissectors/asn1/lpp/Makefile.am | 23 | ||||
-rw-r--r-- | epan/dissectors/asn1/lpp/Makefile.common | 44 | ||||
-rw-r--r-- | epan/dissectors/asn1/lpp/Makefile.nmake | 26 | ||||
-rw-r--r-- | epan/dissectors/asn1/lpp/lpp.cnf | 1809 | ||||
-rw-r--r-- | epan/dissectors/asn1/lpp/packet-lpp-template.c | 1726 | ||||
-rw-r--r-- | epan/dissectors/asn1/lpp/packet-lpp-template.h | 32 |
8 files changed, 6231 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/lpp/CMakeLists.txt b/epan/dissectors/asn1/lpp/CMakeLists.txt new file mode 100644 index 0000000000..d8299430b6 --- /dev/null +++ b/epan/dissectors/asn1/lpp/CMakeLists.txt @@ -0,0 +1,52 @@ +# CMakeLists.txt +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +set( PROTOCOL_NAME lpp ) + +set( PROTO_OPT ) + +set( EXPORT_FILES + ${PROTOCOL_NAME}-exp.cnf +) + +set( EXT_ASN_FILE_LIST +) + +set( ASN_FILE_LIST + LPP.asn +) + +set( EXTRA_DIST + ${ASN_FILE_LIST} + packet-${PROTOCOL_NAME}-template.c + packet-${PROTOCOL_NAME}-template.h + ${PROTOCOL_NAME}.cnf +) + +set( SRC_FILES + ${EXTRA_DIST} + ${EXT_ASN_FILE_LIST} +) + +set( A2W_FLAGS ) + +ASN2WRS() + diff --git a/epan/dissectors/asn1/lpp/LPP.asn b/epan/dissectors/asn1/lpp/LPP.asn new file mode 100644 index 0000000000..52467aec50 --- /dev/null +++ b/epan/dissectors/asn1/lpp/LPP.asn @@ -0,0 +1,2519 @@ +-- 3GPP TS 36.355 V13.0.0 (2015-12) +-- + +LPP-PDU-Definitions { +itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) +eps-Access (21) modules (3) lpp (7) version1 (1) lpp-PDU-Definitions (1) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + + +LPP-Message ::= SEQUENCE { + transactionID LPP-TransactionID OPTIONAL, -- Need ON + endTransaction BOOLEAN, + sequenceNumber SequenceNumber OPTIONAL, -- Need ON + acknowledgement Acknowledgement OPTIONAL, -- Need ON + lpp-MessageBody LPP-MessageBody OPTIONAL -- Need ON +} + +SequenceNumber ::= INTEGER (0..255) + +Acknowledgement ::= SEQUENCE { + ackRequested BOOLEAN, + ackIndicator SequenceNumber OPTIONAL +} + + +LPP-MessageBody ::= CHOICE { + c1 CHOICE { + requestCapabilities RequestCapabilities, + provideCapabilities ProvideCapabilities, + requestAssistanceData RequestAssistanceData, + provideAssistanceData ProvideAssistanceData, + requestLocationInformation RequestLocationInformation, + provideLocationInformation ProvideLocationInformation, + abort Abort, + error Error, + spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL, spare0 NULL + }, + messageClassExtension SEQUENCE {} +} + + +LPP-TransactionID ::= SEQUENCE { + initiator Initiator, + transactionNumber TransactionNumber, + ... +} + +Initiator ::= ENUMERATED { + locationServer, + targetDevice, + ... +} + +TransactionNumber ::= INTEGER (0..255) + + +RequestCapabilities ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + requestCapabilities-r9 RequestCapabilities-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RequestCapabilities-r9-IEs ::= SEQUENCE { + commonIEsRequestCapabilities CommonIEsRequestCapabilities OPTIONAL, -- Need ON + a-gnss-RequestCapabilities A-GNSS-RequestCapabilities OPTIONAL, -- Need ON + otdoa-RequestCapabilities OTDOA-RequestCapabilities OPTIONAL, -- Need ON + ecid-RequestCapabilities ECID-RequestCapabilities OPTIONAL, -- Need ON + epdu-RequestCapabilities EPDU-Sequence OPTIONAL, -- Need ON + ..., + [[ sensor-RequestCapabilities-r13 Sensor-RequestCapabilities-r13 OPTIONAL, -- Need ON + tbs-RequestCapabilities-r13 TBS-RequestCapabilities-r13 OPTIONAL, -- Need ON + wlan-RequestCapabilities-r13 WLAN-RequestCapabilities-r13 OPTIONAL, -- Need ON + bt-RequestCapabilities-r13 BT-RequestCapabilities-r13 OPTIONAL -- Need ON + ]] + +} + + +ProvideCapabilities ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + provideCapabilities-r9 ProvideCapabilities-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ProvideCapabilities-r9-IEs ::= SEQUENCE { + commonIEsProvideCapabilities CommonIEsProvideCapabilities OPTIONAL, + a-gnss-ProvideCapabilities A-GNSS-ProvideCapabilities OPTIONAL, + otdoa-ProvideCapabilities OTDOA-ProvideCapabilities OPTIONAL, + ecid-ProvideCapabilities ECID-ProvideCapabilities OPTIONAL, + epdu-ProvideCapabilities EPDU-Sequence OPTIONAL, + ..., + [[ sensor-ProvideCapabilities-r13 Sensor-ProvideCapabilities-r13 OPTIONAL, + tbs-ProvideCapabilities-r13 TBS-ProvideCapabilities-r13 OPTIONAL, + wlan-ProvideCapabilities-r13 WLAN-ProvideCapabilities-r13 OPTIONAL, + bt-ProvideCapabilities-r13 BT-ProvideCapabilities-r13 OPTIONAL + ]] +} + + +RequestAssistanceData ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + requestAssistanceData-r9 RequestAssistanceData-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RequestAssistanceData-r9-IEs ::= SEQUENCE { + commonIEsRequestAssistanceData CommonIEsRequestAssistanceData OPTIONAL, + a-gnss-RequestAssistanceData A-GNSS-RequestAssistanceData OPTIONAL, + otdoa-RequestAssistanceData OTDOA-RequestAssistanceData OPTIONAL, + epdu-RequestAssistanceData EPDU-Sequence OPTIONAL, + ... +} + + +ProvideAssistanceData ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + provideAssistanceData-r9 ProvideAssistanceData-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ProvideAssistanceData-r9-IEs ::= SEQUENCE { + commonIEsProvideAssistanceData CommonIEsProvideAssistanceData OPTIONAL, -- Need ON + a-gnss-ProvideAssistanceData A-GNSS-ProvideAssistanceData OPTIONAL, -- Need ON + otdoa-ProvideAssistanceData OTDOA-ProvideAssistanceData OPTIONAL, -- Need ON + epdu-Provide-Assistance-Data EPDU-Sequence OPTIONAL, -- Need ON + ... +} + + +RequestLocationInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + requestLocationInformation-r9 RequestLocationInformation-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RequestLocationInformation-r9-IEs ::= SEQUENCE { + commonIEsRequestLocationInformation + CommonIEsRequestLocationInformation OPTIONAL, -- Need ON + a-gnss-RequestLocationInformation A-GNSS-RequestLocationInformation OPTIONAL, -- Need ON + otdoa-RequestLocationInformation OTDOA-RequestLocationInformation OPTIONAL, -- Need ON + ecid-RequestLocationInformation ECID-RequestLocationInformation OPTIONAL, -- Need ON + epdu-RequestLocationInformation EPDU-Sequence OPTIONAL, -- Need ON + ..., + [[ + sensor-RequestLocationInformation-r13 + Sensor-RequestLocationInformation-r13 + OPTIONAL, -- Need ON + tbs-RequestLocationInformation-r13 TBS-RequestLocationInformation-r13 OPTIONAL, -- Need ON + wlan-RequestLocationInformation-r13 WLAN-RequestLocationInformation-r13 OPTIONAL, -- Need ON + bt-RequestLocationInformation-r13 BT-RequestLocationInformation-r13 OPTIONAL -- Need ON + ]] + +} + + +ProvideLocationInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + provideLocationInformation-r9 ProvideLocationInformation-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ProvideLocationInformation-r9-IEs ::= SEQUENCE { + commonIEsProvideLocationInformation + CommonIEsProvideLocationInformation OPTIONAL, + a-gnss-ProvideLocationInformation A-GNSS-ProvideLocationInformation OPTIONAL, + otdoa-ProvideLocationInformation OTDOA-ProvideLocationInformation OPTIONAL, + ecid-ProvideLocationInformation ECID-ProvideLocationInformation OPTIONAL, + epdu-ProvideLocationInformation EPDU-Sequence OPTIONAL, + ..., + [[ + sensor-ProvideLocationInformation-r13 + Sensor-ProvideLocationInformation-r13 + OPTIONAL, + tbs-ProvideLocationInformation-r13 TBS-ProvideLocationInformation-r13 OPTIONAL, + wlan-ProvideLocationInformation-r13 WLAN-ProvideLocationInformation-r13 OPTIONAL, + bt-ProvideLocationInformation-r13 BT-ProvideLocationInformation-r13 OPTIONAL + ]] + +} + + +Abort ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + abort-r9 Abort-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +Abort-r9-IEs ::= SEQUENCE { + commonIEsAbort CommonIEsAbort OPTIONAL, -- Need ON + ..., + epdu-Abort EPDU-Sequence OPTIONAL -- Need ON +} + + +Error ::= CHOICE { + error-r9 Error-r9-IEs, + criticalExtensionsFuture SEQUENCE {} +} + +Error-r9-IEs ::= SEQUENCE { + commonIEsError CommonIEsError OPTIONAL, -- Need ON + ..., + epdu-Error EPDU-Sequence OPTIONAL -- Need ON +} + + +AccessTypes ::= SEQUENCE { + accessTypes BIT STRING { eutra (0), + utra (1), + gsm (2) } (SIZE (1..8)), + ... +} + + +ARFCN-ValueEUTRA ::= INTEGER (0..maxEARFCN) + +ARFCN-ValueEUTRA-v9a0 ::= INTEGER (maxEARFCN-Plus1..maxEARFCN2) + +maxEARFCN INTEGER ::= 65535 -- Maximum value of EUTRA carrier frequency + +maxEARFCN-Plus1 INTEGER ::= 65536 -- Lowest value extended EARFCN range + +maxEARFCN2 INTEGER ::= 262143 -- Highest value extended EARFCN range + + +ARFCN-ValueUTRA ::= INTEGER (0..16383) + + +CellGlobalIdEUTRA-AndUTRA ::= SEQUENCE { + plmn-Identity SEQUENCE { + mcc SEQUENCE (SIZE (3)) OF INTEGER (0..9), + mnc SEQUENCE (SIZE (2..3)) OF INTEGER (0..9) + }, + cellIdentity CHOICE { + eutra BIT STRING (SIZE (28)), + utra BIT STRING (SIZE (32)) + }, + ... +} + + +CellGlobalIdGERAN ::= SEQUENCE { + plmn-Identity SEQUENCE { + mcc SEQUENCE (SIZE (3)) OF INTEGER (0..9), + mnc SEQUENCE (SIZE (2..3)) OF INTEGER (0..9) + }, + locationAreaCode BIT STRING (SIZE (16)), + cellIdentity BIT STRING (SIZE (16)), + ... +} + + +ECGI ::= SEQUENCE { + mcc SEQUENCE (SIZE (3)) OF INTEGER (0..9), + mnc SEQUENCE (SIZE (2..3)) OF INTEGER (0..9), + cellidentity BIT STRING (SIZE (28)) +} + + +Ellipsoid-Point ::= SEQUENCE { + latitudeSign ENUMERATED {north, south}, + degreesLatitude INTEGER (0..8388607), -- 23 bit field + degreesLongitude INTEGER (-8388608..8388607) -- 24 bit field +} + + +Ellipsoid-PointWithUncertaintyCircle ::= SEQUENCE { + latitudeSign ENUMERATED {north, south}, + degreesLatitude INTEGER (0..8388607), -- 23 bit field + degreesLongitude INTEGER (-8388608..8388607), -- 24 bit field + uncertainty INTEGER (0..127) +} + + +EllipsoidPointWithUncertaintyEllipse ::= SEQUENCE { + latitudeSign ENUMERATED {north, south}, + degreesLatitude INTEGER (0..8388607), -- 23 bit field + degreesLongitude INTEGER (-8388608..8388607), -- 24 bit field + uncertaintySemiMajor INTEGER (0..127), + uncertaintySemiMinor INTEGER (0..127), + orientationMajorAxis INTEGER (0..179), + confidence INTEGER (0..100) +} + + +EllipsoidPointWithAltitude ::= SEQUENCE { + latitudeSign ENUMERATED {north, south}, + degreesLatitude INTEGER (0..8388607), -- 23 bit field + degreesLongitude INTEGER (-8388608..8388607), -- 24 bit field + altitudeDirection ENUMERATED {height, depth}, + altitude INTEGER (0..32767) -- 15 bit field +} + + +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid ::= SEQUENCE { + latitudeSign ENUMERATED {north, south}, + degreesLatitude INTEGER (0..8388607), -- 23 bit field + degreesLongitude INTEGER (-8388608..8388607), -- 24 bit field + altitudeDirection ENUMERATED {height, depth}, + altitude INTEGER (0..32767), -- 15 bit field + uncertaintySemiMajor INTEGER (0..127), + uncertaintySemiMinor INTEGER (0..127), + orientationMajorAxis INTEGER (0..179), + uncertaintyAltitude INTEGER (0..127), + confidence INTEGER (0..100) +} + + +EllipsoidArc ::= SEQUENCE { + latitudeSign ENUMERATED {north, south}, + degreesLatitude INTEGER (0..8388607), -- 23 bit field + degreesLongitude INTEGER (-8388608..8388607), -- 24 bit field + innerRadius INTEGER (0..65535), -- 16 bit field, + uncertaintyRadius INTEGER (0..127), + offsetAngle INTEGER (0..179), + includedAngle INTEGER (0..179), + confidence INTEGER (0..100) +} + + +EPDU-Sequence ::= SEQUENCE (SIZE (1..maxEPDU)) OF EPDU + +maxEPDU INTEGER ::= 16 + +EPDU ::= SEQUENCE { + ePDU-Identifier EPDU-Identifier, + ePDU-Body EPDU-Body +} + +EPDU-Identifier ::= SEQUENCE { + ePDU-ID EPDU-ID, + ePDU-Name EPDU-Name OPTIONAL, + ... +} + +EPDU-ID ::= INTEGER (1..256) + +EPDU-Name ::= VisibleString (SIZE (1..32)) + +EPDU-Body ::= OCTET STRING + + +HorizontalVelocity ::= SEQUENCE { + bearing INTEGER(0..359), + horizontalSpeed INTEGER(0..2047) +} + + +HorizontalWithVerticalVelocity ::= SEQUENCE { + bearing INTEGER(0..359), + horizontalSpeed INTEGER(0..2047), + verticalDirection ENUMERATED{upward, downward}, + verticalSpeed INTEGER(0..255) +} + + +HorizontalVelocityWithUncertainty ::= SEQUENCE { + bearing INTEGER(0..359), + horizontalSpeed INTEGER(0..2047), + uncertaintySpeed INTEGER(0..255) +} + + +HorizontalWithVerticalVelocityAndUncertainty ::= SEQUENCE { + bearing INTEGER(0..359), + horizontalSpeed INTEGER(0..2047), + verticalDirection ENUMERATED{upward, downward}, + verticalSpeed INTEGER(0..255), + horizontalUncertaintySpeed INTEGER(0..255), + verticalUncertaintySpeed INTEGER(0..255) +} + + +LocationCoordinateTypes ::= SEQUENCE { + ellipsoidPoint BOOLEAN, + ellipsoidPointWithUncertaintyCircle BOOLEAN, + ellipsoidPointWithUncertaintyEllipse BOOLEAN, + polygon BOOLEAN, + ellipsoidPointWithAltitude BOOLEAN, + ellipsoidPointWithAltitudeAndUncertaintyEllipsoid BOOLEAN, + ellipsoidArc BOOLEAN, + ... +} + + +Polygon ::= SEQUENCE (SIZE (3..15)) OF PolygonPoints + +PolygonPoints ::= SEQUENCE { + latitudeSign ENUMERATED {north, south}, + degreesLatitude INTEGER (0..8388607), -- 23 bit field + degreesLongitude INTEGER (-8388608..8388607) -- 24 bit field +} + + +PositioningModes ::= SEQUENCE { + posModes BIT STRING { standalone (0), + ue-based (1), + ue-assisted (2) } (SIZE (1..8)), + ... +} + + +VelocityTypes ::= SEQUENCE { + horizontalVelocity BOOLEAN, + horizontalWithVerticalVelocity BOOLEAN, + horizontalVelocityWithUncertainty BOOLEAN, + horizontalWithVerticalVelocityAndUncertainty BOOLEAN, + ... +} + + +CommonIEsRequestCapabilities ::= SEQUENCE { + ... +} + + +CommonIEsProvideCapabilities ::= SEQUENCE { + ... +} + + +CommonIEsRequestAssistanceData ::= SEQUENCE { + primaryCellID ECGI OPTIONAL, -- Cond EUTRA + ... +} + + +CommonIEsProvideAssistanceData ::= SEQUENCE { + ... +} + + +CommonIEsRequestLocationInformation ::= SEQUENCE { + locationInformationType LocationInformationType, + triggeredReporting TriggeredReportingCriteria OPTIONAL, -- Cond ECID + periodicalReporting PeriodicalReportingCriteria OPTIONAL, -- Need ON + additionalInformation AdditionalInformation OPTIONAL, -- Need ON + qos QoS OPTIONAL, -- Need ON + environment Environment OPTIONAL, -- Need ON + locationCoordinateTypes LocationCoordinateTypes OPTIONAL, -- Need ON + velocityTypes VelocityTypes OPTIONAL, -- Need ON + ... +} + +LocationInformationType ::= ENUMERATED { + locationEstimateRequired, + locationMeasurementsRequired, + locationEstimatePreferred, + locationMeasurementsPreferred, + ... +} + +PeriodicalReportingCriteria ::= SEQUENCE { + reportingAmount ENUMERATED { + ra1, ra2, ra4, ra8, ra16, ra32, + ra64, ra-Infinity + } DEFAULT ra-Infinity, + reportingInterval ENUMERATED { + noPeriodicalReporting, ri0-25, + ri0-5, ri1, ri2, ri4, ri8, ri16, ri32, ri64 + } +} + +TriggeredReportingCriteria ::= SEQUENCE { + cellChange BOOLEAN, + reportingDuration ReportingDuration, + ... +} + +ReportingDuration ::= INTEGER (0..255) + +AdditionalInformation ::= ENUMERATED { + onlyReturnInformationRequested, + mayReturnAditionalInformation, + ... +} + +QoS ::= SEQUENCE { + horizontalAccuracy HorizontalAccuracy OPTIONAL, -- Need ON + verticalCoordinateRequest BOOLEAN, + verticalAccuracy VerticalAccuracy OPTIONAL, -- Need ON + responseTime ResponseTime OPTIONAL, -- Need ON + velocityRequest BOOLEAN, + ... +} + +HorizontalAccuracy ::= SEQUENCE { + accuracy INTEGER(0..127), + confidence INTEGER(0..100), + ... +} + +VerticalAccuracy ::= SEQUENCE { + accuracy INTEGER(0..127), + confidence INTEGER(0..100), + ... +} + +ResponseTime ::= SEQUENCE { + time INTEGER (1..128), + ..., + [[ responseTimeEarlyFix-r12 INTEGER (1..128) OPTIONAL -- Need ON + ]] +} + +Environment ::= ENUMERATED { + badArea, + notBadArea, + mixedArea, + ... +} + + +CommonIEsProvideLocationInformation ::= SEQUENCE { + locationEstimate LocationCoordinates OPTIONAL, + velocityEstimate Velocity OPTIONAL, + locationError LocationError OPTIONAL, + ..., + [[ earlyFixReport-r12 EarlyFixReport-r12 OPTIONAL + ]], + [[ locationSource-r13 LocationSource-r13 OPTIONAL, + locationTimestamp-r13 UTCTime OPTIONAL + ]] +} + +LocationCoordinates ::= CHOICE { + ellipsoidPoint Ellipsoid-Point, + ellipsoidPointWithUncertaintyCircle Ellipsoid-PointWithUncertaintyCircle, + ellipsoidPointWithUncertaintyEllipse EllipsoidPointWithUncertaintyEllipse, + polygon Polygon, + ellipsoidPointWithAltitude EllipsoidPointWithAltitude, + ellipsoidPointWithAltitudeAndUncertaintyEllipsoid + EllipsoidPointWithAltitudeAndUncertaintyEllipsoid, + ellipsoidArc EllipsoidArc, + ... +} + +Velocity ::= CHOICE { + horizontalVelocity HorizontalVelocity, + horizontalWithVerticalVelocity HorizontalWithVerticalVelocity, + horizontalVelocityWithUncertainty HorizontalVelocityWithUncertainty, + horizontalWithVerticalVelocityAndUncertainty + HorizontalWithVerticalVelocityAndUncertainty, + ... +} + +LocationError ::= SEQUENCE { + locationfailurecause LocationFailureCause, + ... +} + +LocationFailureCause ::= ENUMERATED { + undefined, + requestedMethodNotSupported, + positionMethodFailure, + periodicLocationMeasurementsNotAvailable, + ... +} + +EarlyFixReport-r12 ::= ENUMERATED { + noMoreMessages, + moreMessagesOnTheWay +} + +LocationSource-r13 ::= BIT STRING { a-gnss (0), + wlan (1), + bt (2), + tbs (3), + sensor (4) } (SIZE(1..16)) + + +CommonIEsAbort ::= SEQUENCE { + abortCause ENUMERATED { + undefined, + stopPeriodicReporting, + targetDeviceAbort, + networkAbort, + ... + } +} + + +CommonIEsError ::= SEQUENCE { + errorCause ENUMERATED { + undefined, + lppMessageHeaderError, + lppMessageBodyError, + epduError, + incorrectDataValue, + ... + } +} + + +OTDOA-ProvideAssistanceData ::= SEQUENCE { + otdoa-ReferenceCellInfo OTDOA-ReferenceCellInfo OPTIONAL, -- Need ON + otdoa-NeighbourCellInfo OTDOA-NeighbourCellInfoList OPTIONAL, -- Need ON + otdoa-Error OTDOA-Error OPTIONAL, -- Need ON + ... +} + + +OTDOA-ReferenceCellInfo ::= SEQUENCE { + physCellId INTEGER (0..503), + cellGlobalId ECGI OPTIONAL, -- Need ON + earfcnRef ARFCN-ValueEUTRA OPTIONAL, -- Cond NotSameAsServ0 + antennaPortConfig ENUMERATED {ports1-or-2, ports4, ... } + OPTIONAL, -- Cond NotSameAsServ1 + cpLength ENUMERATED { normal, extended, ... }, + prsInfo PRS-Info OPTIONAL, -- Cond PRS + ..., + [[ earfcnRef-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond NotSameAsServ2 + ]] +} + + +PRS-Info ::= SEQUENCE { + prs-Bandwidth ENUMERATED { n6, n15, n25, n50, n75, n100, ... }, + prs-ConfigurationIndex INTEGER (0..4095), + numDL-Frames ENUMERATED {sf-1, sf-2, sf-4, sf-6, ...}, + ..., + prs-MutingInfo-r9 CHOICE { + po2-r9 BIT STRING (SIZE(2)), + po4-r9 BIT STRING (SIZE(4)), + po8-r9 BIT STRING (SIZE(8)), + po16-r9 BIT STRING (SIZE(16)), + ... + } OPTIONAL -- Need OP +} + + +OTDOA-NeighbourCellInfoList ::= SEQUENCE (SIZE (1..maxFreqLayers)) OF OTDOA-NeighbourFreqInfo +OTDOA-NeighbourFreqInfo ::= SEQUENCE (SIZE (1..24)) OF OTDOA-NeighbourCellInfoElement + +OTDOA-NeighbourCellInfoElement ::= SEQUENCE { + physCellId INTEGER (0..503), + cellGlobalId ECGI OPTIONAL, -- Need ON + earfcn ARFCN-ValueEUTRA OPTIONAL, -- Cond NotSameAsRef0 + cpLength ENUMERATED {normal, extended, ...} + OPTIONAL, -- Cond NotSameAsRef1 + prsInfo PRS-Info OPTIONAL, -- Cond NotSameAsRef2 + antennaPortConfig ENUMERATED {ports-1-or-2, ports-4, ...} + OPTIONAL, -- Cond NotsameAsRef3 + slotNumberOffset INTEGER (0..19) OPTIONAL, -- Cond NotSameAsRef4 + prs-SubframeOffset INTEGER (0..1279) OPTIONAL, -- Cond InterFreq + expectedRSTD INTEGER (0..16383), + expectedRSTD-Uncertainty INTEGER (0..1023), + ..., + [[ earfcn-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond NotSameAsRef5 + ]] +} + +maxFreqLayers INTEGER ::= 3 + + +OTDOA-RequestAssistanceData ::= SEQUENCE { + physCellId INTEGER (0..503), + ... +} + + +OTDOA-ProvideLocationInformation ::= SEQUENCE { + otdoaSignalMeasurementInformation OTDOA-SignalMeasurementInformation OPTIONAL, + otdoa-Error OTDOA-Error OPTIONAL, + ... +} + + +OTDOA-SignalMeasurementInformation ::= SEQUENCE { + systemFrameNumber BIT STRING (SIZE (10)), + physCellIdRef INTEGER (0..503), + cellGlobalIdRef ECGI OPTIONAL, + earfcnRef ARFCN-ValueEUTRA OPTIONAL, -- Cond NotSameAsRef0 + referenceQuality OTDOA-MeasQuality OPTIONAL, + neighbourMeasurementList NeighbourMeasurementList, + ..., + [[ earfcnRef-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond NotSameAsRef1 + ]] +} + +NeighbourMeasurementList ::= SEQUENCE (SIZE(1..24)) OF NeighbourMeasurementElement + +NeighbourMeasurementElement ::= SEQUENCE { + physCellIdNeighbour INTEGER (0..503), + cellGlobalIdNeighbour ECGI OPTIONAL, + earfcnNeighbour ARFCN-ValueEUTRA OPTIONAL, -- Cond NotSameAsRef2 + rstd INTEGER (0..12711), + rstd-Quality OTDOA-MeasQuality, + ..., + [[ earfcnNeighbour-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond NotSameAsRef3 + ]] +} + + +OTDOA-MeasQuality ::= SEQUENCE { + error-Resolution BIT STRING (SIZE (2)), + error-Value BIT STRING (SIZE (5)), + error-NumSamples BIT STRING (SIZE (3)) OPTIONAL, + ... +} + + +OTDOA-RequestLocationInformation ::= SEQUENCE { + assistanceAvailability BOOLEAN, + ... +} + + +OTDOA-ProvideCapabilities ::= SEQUENCE { + otdoa-Mode BIT STRING { ue-assisted (0) } (SIZE (1..8)), + ..., + supportedBandListEUTRA SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA OPTIONAL, + supportedBandListEUTRA-v9a0 SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v9a0 + OPTIONAL, + interFreqRSTDmeasurement-r10 ENUMERATED { supported } OPTIONAL, + additionalNeighbourCellInfoList-r10 ENUMERATED { supported } OPTIONAL +} + +maxBands INTEGER ::= 64 + +SupportedBandEUTRA ::= SEQUENCE { + bandEUTRA INTEGER (1..maxFBI) +} + +SupportedBandEUTRA-v9a0 ::= SEQUENCE { + bandEUTRA-v9a0 INTEGER (maxFBI-Plus1..maxFBI2) OPTIONAL +} + +maxFBI INTEGER ::= 64 -- Maximum value of frequency band indicator +maxFBI-Plus1 INTEGER ::= 65 -- lowest value extended FBI range +maxFBI2 INTEGER ::= 256 -- highest value extended FBI range + + +OTDOA-RequestCapabilities ::= SEQUENCE { + ... +} + + +OTDOA-Error ::= CHOICE { + locationServerErrorCauses OTDOA-LocationServerErrorCauses, + targetDeviceErrorCauses OTDOA-TargetDeviceErrorCauses, + ... +} + + +OTDOA-LocationServerErrorCauses ::= SEQUENCE { + cause ENUMERATED { undefined, + assistanceDataNotSupportedByServer, + assistanceDataSupportedButCurrentlyNotAvailableByServer, + ... + }, + ... +} + + +OTDOA-TargetDeviceErrorCauses ::= SEQUENCE { + cause ENUMERATED { undefined, + assistance-data-missing, + unableToMeasureReferenceCell, + unableToMeasureAnyNeighbourCell, + attemptedButUnableToMeasureSomeNeighbourCells, + ... + }, + ... +} + + +A-GNSS-ProvideAssistanceData ::= SEQUENCE { + gnss-CommonAssistData GNSS-CommonAssistData OPTIONAL, -- Need ON + gnss-GenericAssistData GNSS-GenericAssistData OPTIONAL, -- Need ON + gnss-Error A-GNSS-Error OPTIONAL, -- Need ON + ... +} + + +GNSS-CommonAssistData ::= SEQUENCE { + gnss-ReferenceTime GNSS-ReferenceTime OPTIONAL, -- Need ON + gnss-ReferenceLocation GNSS-ReferenceLocation OPTIONAL, -- Need ON + gnss-IonosphericModel GNSS-IonosphericModel OPTIONAL, -- Need ON + gnss-EarthOrientationParameters GNSS-EarthOrientationParameters OPTIONAL, -- Need ON + ... +} + + +GNSS-GenericAssistData ::= SEQUENCE (SIZE (1..16)) OF GNSS-GenericAssistDataElement + +GNSS-GenericAssistDataElement ::= SEQUENCE { + gnss-ID GNSS-ID, + sbas-ID SBAS-ID OPTIONAL, -- Cond GNSS-ID-SBAS + gnss-TimeModels GNSS-TimeModelList OPTIONAL, -- Need ON + gnss-DifferentialCorrections GNSS-DifferentialCorrections OPTIONAL, -- Need ON + gnss-NavigationModel GNSS-NavigationModel OPTIONAL, -- Need ON + gnss-RealTimeIntegrity GNSS-RealTimeIntegrity OPTIONAL, -- Need ON + gnss-DataBitAssistance GNSS-DataBitAssistance OPTIONAL, -- Need ON + gnss-AcquisitionAssistance GNSS-AcquisitionAssistance OPTIONAL, -- Need ON + gnss-Almanac GNSS-Almanac OPTIONAL, -- Need ON + gnss-UTC-Model GNSS-UTC-Model OPTIONAL, -- Need ON + gnss-AuxiliaryInformation GNSS-AuxiliaryInformation OPTIONAL, -- Need ON + ..., + [[ + bds-DifferentialCorrections-r12 + BDS-DifferentialCorrections-r12 OPTIONAL, -- Cond GNSS-ID-BDS + bds-GridModel-r12 BDS-GridModelParameter-r12 OPTIONAL -- Cond GNSS-ID-BDS + ]] +} + + +GNSS-ReferenceTime ::= SEQUENCE { + gnss-SystemTime GNSS-SystemTime, + referenceTimeUnc INTEGER (0..127) OPTIONAL, -- Cond noFTA + gnss-ReferenceTimeForCells SEQUENCE (SIZE (1..16)) OF + GNSS-ReferenceTimeForOneCell OPTIONAL, -- Need ON + ... +} + +GNSS-ReferenceTimeForOneCell ::= SEQUENCE { + networkTime NetworkTime, + referenceTimeUnc INTEGER (0..127), + bsAlign ENUMERATED {true} OPTIONAL, + ... +} + + +GNSS-SystemTime ::= SEQUENCE { + gnss-TimeID GNSS-ID, + gnss-DayNumber INTEGER (0..32767), + gnss-TimeOfDay INTEGER (0..86399), + gnss-TimeOfDayFrac-msec INTEGER (0..999) OPTIONAL, -- Need ON + notificationOfLeapSecond BIT STRING (SIZE(2)) OPTIONAL, -- Cond gnss-TimeID-glonass + gps-TOW-Assist GPS-TOW-Assist OPTIONAL, -- Cond gnss-TimeID-gps + ... +} + + +GPS-TOW-Assist ::= SEQUENCE (SIZE(1..64)) OF GPS-TOW-AssistElement + +GPS-TOW-AssistElement ::= SEQUENCE { + satelliteID INTEGER (1..64), + tlmWord INTEGER (0..16383), + antiSpoof INTEGER (0..1), + alert INTEGER (0..1), + tlmRsvdBits INTEGER (0..3), + ... +} + + +NetworkTime ::= SEQUENCE { + secondsFromFrameStructureStart INTEGER(0..12533), + fractionalSecondsFromFrameStructureStart INTEGER(0..3999999), + frameDrift INTEGER (-64..63) OPTIONAL, -- Cond GNSSsynch + cellID CHOICE { + eUTRA SEQUENCE { + physCellId INTEGER (0..503), + cellGlobalIdEUTRA CellGlobalIdEUTRA-AndUTRA OPTIONAL, -- Need ON + earfcn ARFCN-ValueEUTRA, + ..., + [[ earfcn-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond EARFCN-max + ]] + }, + uTRA SEQUENCE { + mode CHOICE { + fdd SEQUENCE { + primary-CPICH-Info INTEGER (0..511), + ... + }, + tdd SEQUENCE { + cellParameters INTEGER (0..127), + ... + } + }, + cellGlobalIdUTRA CellGlobalIdEUTRA-AndUTRA OPTIONAL, -- Need ON + uarfcn ARFCN-ValueUTRA, + ... + }, + gSM SEQUENCE { + bcchCarrier INTEGER (0..1023), + bsic INTEGER (0..63), + cellGlobalIdGERAN CellGlobalIdGERAN OPTIONAL, -- Need ON + ... + }, + ... + }, + ... +} + + +GNSS-ReferenceLocation ::= SEQUENCE { + threeDlocation EllipsoidPointWithAltitudeAndUncertaintyEllipsoid, + ... +} + + +GNSS-IonosphericModel ::= SEQUENCE { + klobucharModel KlobucharModelParameter OPTIONAL, -- Need ON + neQuickModel NeQuickModelParameter OPTIONAL, -- Need ON + ... +} + + +KlobucharModelParameter ::= SEQUENCE { + dataID BIT STRING (SIZE (2)), + 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), + ... +} + + +NeQuickModelParameter ::= SEQUENCE { + ai0 INTEGER (0..2047), + ai1 INTEGER (-1024..1023), + ai2 INTEGER (-8192..8191), + ionoStormFlag1 INTEGER (0..1) OPTIONAL, -- Need OP + ionoStormFlag2 INTEGER (0..1) OPTIONAL, -- Need OP + ionoStormFlag3 INTEGER (0..1) OPTIONAL, -- Need OP + ionoStormFlag4 INTEGER (0..1) OPTIONAL, -- Need OP + ionoStormFlag5 INTEGER (0..1) OPTIONAL, -- Need OP + ... +} + + +GNSS-EarthOrientationParameters ::= SEQUENCE { + teop INTEGER (0..65535), + pmX INTEGER (-1048576..1048575), + pmXdot INTEGER (-16384..16383), + pmY INTEGER (-1048576..1048575), + pmYdot INTEGER (-16384..16383), + deltaUT1 INTEGER (-1073741824..1073741823), + deltaUT1dot INTEGER (-262144..262143), + ... +} + + +GNSS-TimeModelList ::= SEQUENCE (SIZE (1..15)) OF GNSS-TimeModelElement + +GNSS-TimeModelElement ::= SEQUENCE { + gnss-TimeModelRefTime INTEGER (0..65535), + tA0 INTEGER (-67108864..67108863), + tA1 INTEGER (-4096..4095) OPTIONAL, -- Need ON + tA2 INTEGER (-64..63) OPTIONAL, -- Need ON + gnss-TO-ID INTEGER (1..15), + weekNumber INTEGER (0..8191) OPTIONAL, -- Need ON + deltaT INTEGER (-128..127) OPTIONAL, -- Need ON + ... +} + + +GNSS-DifferentialCorrections ::= SEQUENCE { + dgnss-RefTime INTEGER (0..3599), + dgnss-SgnTypeList DGNSS-SgnTypeList, + ... +} + +DGNSS-SgnTypeList ::= SEQUENCE (SIZE (1..3)) OF DGNSS-SgnTypeElement + +DGNSS-SgnTypeElement ::= SEQUENCE { + gnss-SignalID GNSS-SignalID, + gnss-StatusHealth INTEGER (0..7), + dgnss-SatList DGNSS-SatList, + ... +} + +DGNSS-SatList ::= SEQUENCE (SIZE (1..64)) OF DGNSS-CorrectionsElement + +DGNSS-CorrectionsElement ::= SEQUENCE { + svID SV-ID, + iod BIT STRING (SIZE(11)), + udre INTEGER (0..3), + pseudoRangeCor INTEGER (-2047..2047), + rangeRateCor INTEGER (-127..127), + udreGrowthRate INTEGER (0..7) OPTIONAL, -- Need ON + udreValidityTime INTEGER (0..7) OPTIONAL, -- Need ON + ... +} + + +GNSS-NavigationModel ::= SEQUENCE { + nonBroadcastIndFlag INTEGER (0..1), + gnss-SatelliteList GNSS-NavModelSatelliteList, + ... +} + +GNSS-NavModelSatelliteList ::= SEQUENCE (SIZE(1..64)) OF GNSS-NavModelSatelliteElement + +GNSS-NavModelSatelliteElement ::= SEQUENCE { + svID SV-ID, + svHealth BIT STRING (SIZE(8)), + iod BIT STRING (SIZE(11)), + gnss-ClockModel GNSS-ClockModel, + gnss-OrbitModel GNSS-OrbitModel, + ..., + [[ svHealthExt-v1240 BIT STRING (SIZE(4)) OPTIONAL -- Need ON + ]] +} + +GNSS-ClockModel ::= CHOICE { + standardClockModelList StandardClockModelList, -- Model-1 + nav-ClockModel NAV-ClockModel, -- Model-2 + cnav-ClockModel CNAV-ClockModel, -- Model-3 + glonass-ClockModel GLONASS-ClockModel, -- Model-4 + sbas-ClockModel SBAS-ClockModel, -- Model-5 + ..., + bds-ClockModel-r12 BDS-ClockModel-r12 -- Model-6 +} + +GNSS-OrbitModel ::= CHOICE { + keplerianSet NavModelKeplerianSet, -- Model-1 + nav-KeplerianSet NavModelNAV-KeplerianSet, -- Model-2 + cnav-KeplerianSet NavModelCNAV-KeplerianSet, -- Model-3 + glonass-ECEF NavModel-GLONASS-ECEF, -- Model-4 + sbas-ECEF NavModel-SBAS-ECEF, -- Model-5 + ..., + bds-KeplerianSet-r12 NavModel-BDS-KeplerianSet-r12 -- Model-6 +} + + +StandardClockModelList ::= SEQUENCE (SIZE(1..2)) OF StandardClockModelElement + +StandardClockModelElement ::= SEQUENCE { + stanClockToc INTEGER (0..16383), + stanClockAF2 INTEGER (-32..31), + stanClockAF1 INTEGER (-1048576..1048575), + stanClockAF0 INTEGER (-1073741824..1073741823), + stanClockTgd INTEGER (-512..511) OPTIONAL, -- Need ON + sisa INTEGER (0..255), + stanModelID INTEGER (0..1) OPTIONAL, -- Need ON + ... +} + + +NAV-ClockModel ::= SEQUENCE { + navToc INTEGER (0..37799), + navaf2 INTEGER (-128..127), + navaf1 INTEGER (-32768..32767), + navaf0 INTEGER (-2097152..2097151), + navTgd INTEGER (-128..127), + ... +} + + +CNAV-ClockModel ::= SEQUENCE { + cnavToc INTEGER (0..2015), + cnavTop INTEGER (0..2015), + cnavURA0 INTEGER (-16..15), + cnavURA1 INTEGER (0..7), + cnavURA2 INTEGER (0..7), + cnavAf2 INTEGER (-512..511), + cnavAf1 INTEGER (-524288..524287), + cnavAf0 INTEGER (-33554432..33554431), + cnavTgd INTEGER (-4096..4095), + cnavISCl1cp INTEGER (-4096..4095) OPTIONAL, -- Need ON + cnavISCl1cd INTEGER (-4096..4095) OPTIONAL, -- Need ON + cnavISCl1ca INTEGER (-4096..4095) OPTIONAL, -- Need ON + cnavISCl2c INTEGER (-4096..4095) OPTIONAL, -- Need ON + cnavISCl5i5 INTEGER (-4096..4095) OPTIONAL, -- Need ON + cnavISCl5q5 INTEGER (-4096..4095) OPTIONAL, -- Need ON + ... +} + + +GLONASS-ClockModel ::= SEQUENCE { + gloTau INTEGER (-2097152..2097151), + gloGamma INTEGER (-1024..1023), + gloDeltaTau INTEGER (-16..15) OPTIONAL, -- Need ON + ... +} + + +SBAS-ClockModel ::= SEQUENCE { + sbasTo INTEGER (0..5399), + sbasAgfo INTEGER (-2048..2047), + sbasAgf1 INTEGER (-128..127), + ... +} + + +BDS-ClockModel-r12 ::= SEQUENCE { + bdsAODC-r12 INTEGER (0..31), + bdsToc-r12 INTEGER (0..131071), + bdsA0-r12 INTEGER (-8388608..8388607), + bdsA1-r12 INTEGER (-2097152..2097151), + bdsA2-r12 INTEGER (-1024..1023), + bdsTgd1-r12 INTEGER (-512..511), + ... +} + + +NavModelKeplerianSet ::= SEQUENCE { + keplerToe INTEGER (0 .. 16383), + keplerW INTEGER (-2147483648..2147483647), + keplerDeltaN INTEGER (-32768..32767), + keplerM0 INTEGER (-2147483648..2147483647), + keplerOmegaDot INTEGER (-8388608.. 8388607), + keplerE INTEGER (0..4294967295), + keplerIDot INTEGER (-8192..8191), + keplerAPowerHalf INTEGER (0.. 4294967295), + 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), + ... +} + + +NavModelNAV-KeplerianSet ::= SEQUENCE { + navURA INTEGER (0..15), + navFitFlag INTEGER (0..1), + navToe INTEGER (0..37799), + navOmega INTEGER (-2147483648..2147483647), + navDeltaN INTEGER (-32768..32767), + navM0 INTEGER (-2147483648..2147483647), + navOmegaADot INTEGER (-8388608..8388607), + navE INTEGER (0..4294967295), + navIDot INTEGER (-8192..8191), + navAPowerHalf INTEGER (0..4294967295), + navI0 INTEGER (-2147483648..2147483647), + navOmegaA0 INTEGER (-2147483648..2147483647), + navCrs INTEGER (-32768..32767), + navCis INTEGER (-32768..32767), + navCus INTEGER (-32768..32767), + navCrc INTEGER (-32768..32767), + navCic INTEGER (-32768..32767), + navCuc INTEGER (-32768..32767), + addNAVparam SEQUENCE { + ephemCodeOnL2 INTEGER (0..3), + ephemL2Pflag INTEGER (0..1), + ephemSF1Rsvd 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 + }, + ephemAODA INTEGER (0..31) + } OPTIONAL, -- Need ON + ... +} + + +NavModelCNAV-KeplerianSet ::= SEQUENCE { + cnavTop INTEGER (0..2015), + cnavURAindex INTEGER (-16..15), + cnavDeltaA INTEGER (-33554432..33554431), + cnavAdot INTEGER (-16777216..16777215), + cnavDeltaNo INTEGER (-65536..65535), + cnavDeltaNoDot INTEGER (-4194304..4194303), + cnavMo INTEGER (-4294967296..4294967295), + cnavE INTEGER (0..8589934591), + cnavOmega INTEGER (-4294967296..4294967295), + cnavOMEGA0 INTEGER (-4294967296..4294967295), + cnavDeltaOmegaDot INTEGER (-65536..65535), + cnavIo INTEGER (-4294967296..4294967295), + cnavIoDot INTEGER (-16384..16383), + cnavCis INTEGER (-32768..32767), + cnavCic INTEGER (-32768..32767), + cnavCrs INTEGER (-8388608..8388607), + cnavCrc INTEGER (-8388608..8388607), + cnavCus INTEGER (-1048576..1048575), + cnavCuc INTEGER (-1048576..1048575), + ... +} + + +NavModel-GLONASS-ECEF ::= SEQUENCE { + gloEn INTEGER (0..31), + gloP1 BIT STRING (SIZE(2)), + gloP2 BOOLEAN, + gloM INTEGER (0..3), + gloX INTEGER (-67108864..67108863), + gloXdot INTEGER (-8388608..8388607), + gloXdotdot INTEGER (-16..15), + gloY INTEGER (-67108864..67108863), + gloYdot INTEGER (-8388608..8388607), + gloYdotdot INTEGER (-16..15), + gloZ INTEGER (-67108864..67108863), + gloZdot INTEGER (-8388608..8388607), + gloZdotdot INTEGER (-16..15), + ... +} + + +NavModel-SBAS-ECEF ::= SEQUENCE { + sbasTo INTEGER (0..5399) OPTIONAL, -- Cond ClockModel + sbasAccuracy BIT STRING (SIZE(4)), + sbasXg INTEGER (-536870912..536870911), + sbasYg INTEGER (-536870912..536870911), + sbasZg INTEGER (-16777216..16777215), + sbasXgDot INTEGER (-65536..65535), + sbasYgDot INTEGER (-65536..65535), + sbasZgDot INTEGER (-131072..131071), + sbasXgDotDot INTEGER (-512..511), + sbagYgDotDot INTEGER (-512..511), + sbasZgDotDot INTEGER (-512..511), + ... +} + + +NavModel-BDS-KeplerianSet-r12 ::= SEQUENCE { + bdsAODE-r12 INTEGER (0..31), + bdsURAI-r12 INTEGER (0..15), + bdsToe-r12 INTEGER (0..131071), + bdsAPowerHalf-r12 INTEGER (0..4294967295), + bdsE-r12 INTEGER (0..4294967295), + bdsW-r12 INTEGER (-2147483648..2147483647), + bdsDeltaN-r12 INTEGER (-32768..32767), + bdsM0-r12 INTEGER (-2147483648..2147483647), + bdsOmega0-r12 INTEGER (-2147483648..2147483647), + bdsOmegaDot-r12 INTEGER (-8388608..8388607), + bdsI0-r12 INTEGER (-2147483648..2147483647), + bdsIDot-r12 INTEGER (-8192..8191), + bdsCuc-r12 INTEGER (-131072..131071), + bdsCus-r12 INTEGER (-131072..131071), + bdsCrc-r12 INTEGER (-131072..131071), + bdsCrs-r12 INTEGER (-131072..131071), + bdsCic-r12 INTEGER (-131072..131071), + bdsCis-r12 INTEGER (-131072..131071), + ... +} + + +GNSS-RealTimeIntegrity ::= SEQUENCE { + gnss-BadSignalList GNSS-BadSignalList, + ... +} + +GNSS-BadSignalList ::= SEQUENCE (SIZE(1..64)) OF BadSignalElement + +BadSignalElement ::= SEQUENCE { + badSVID SV-ID, + badSignalID GNSS-SignalIDs OPTIONAL, -- Need OP + ... +} + + +GNSS-DataBitAssistance ::= SEQUENCE { + gnss-TOD INTEGER (0..3599), + gnss-TODfrac INTEGER (0..999) OPTIONAL, -- Need ON + gnss-DataBitsSatList GNSS-DataBitsSatList, + ... +} + +GNSS-DataBitsSatList ::= SEQUENCE (SIZE(1..64))OF GNSS-DataBitsSatElement + +GNSS-DataBitsSatElement ::= SEQUENCE { + svID SV-ID, + gnss-DataBitsSgnList GNSS-DataBitsSgnList, + ... +} + +GNSS-DataBitsSgnList ::= SEQUENCE (SIZE(1..8)) OF GNSS-DataBitsSgnElement + +GNSS-DataBitsSgnElement ::= SEQUENCE { + gnss-SignalType GNSS-SignalID, + gnss-DataBits BIT STRING (SIZE (1..1024)), + ... +} + + +GNSS-AcquisitionAssistance ::= SEQUENCE { + gnss-SignalID GNSS-SignalID, + gnss-AcquisitionAssistList GNSS-AcquisitionAssistList, + ..., + confidence-r10 INTEGER (0..100) OPTIONAL -- Need ON +} + +GNSS-AcquisitionAssistList ::= SEQUENCE (SIZE(1..64)) OF GNSS-AcquisitionAssistElement + +GNSS-AcquisitionAssistElement ::= SEQUENCE { + svID SV-ID, + doppler0 INTEGER (-2048..2047), + doppler1 INTEGER (0..63), + dopplerUncertainty INTEGER (0..4), + codePhase INTEGER (0..1022), + intCodePhase INTEGER (0..127), + codePhaseSearchWindow INTEGER (0..31), + azimuth INTEGER (0..511), + elevation INTEGER (0..127), + ..., + codePhase1023 BOOLEAN OPTIONAL, -- Need OP + dopplerUncertaintyExt-r10 ENUMERATED { d60, + d80, + d100, + d120, + noInformation, ... } OPTIONAL -- Need ON +} + + +GNSS-Almanac ::= SEQUENCE { + weekNumber INTEGER (0..255) OPTIONAL, -- Need ON + toa INTEGER (0..255) OPTIONAL, -- Need ON + ioda INTEGER (0..3) OPTIONAL, -- Need ON + completeAlmanacProvided BOOLEAN, + gnss-AlmanacList GNSS-AlmanacList, + ..., + [[ toa-ext-v1240 INTEGER (256..1023) OPTIONAL, -- Need ON + ioda-ext-v1240 INTEGER (4..15) OPTIONAL -- Need ON + ]] +} + +GNSS-AlmanacList ::= SEQUENCE (SIZE(1..64)) OF GNSS-AlmanacElement + +GNSS-AlmanacElement ::= CHOICE { + keplerianAlmanacSet AlmanacKeplerianSet, -- Model-1 + keplerianNAV-Almanac AlmanacNAV-KeplerianSet, -- Model-2 + keplerianReducedAlmanac AlmanacReducedKeplerianSet, -- Model-3 + keplerianMidiAlmanac AlmanacMidiAlmanacSet, -- Model-4 + keplerianGLONASS AlmanacGLONASS-AlmanacSet, -- Model-5 + ecef-SBAS-Almanac AlmanacECEF-SBAS-AlmanacSet,-- Model-6 + ..., + keplerianBDS-Almanac-r12 AlmanacBDS-AlmanacSet-r12 -- Model-7 +} + + +AlmanacKeplerianSet ::= SEQUENCE { + svID SV-ID, + kepAlmanacE INTEGER (0..2047), + kepAlmanacDeltaI INTEGER (-1024..1023), + kepAlmanacOmegaDot INTEGER (-1024..1023), + kepSV-StatusINAV BIT STRING (SIZE (4)), + kepSV-StatusFNAV BIT STRING (SIZE (2)) OPTIONAL, -- Need ON + kepAlmanacAPowerHalf INTEGER (-4096..4095), + kepAlmanacOmega0 INTEGER (-32768..32767), + kepAlmanacW INTEGER (-32768..32767), + kepAlmanacM0 INTEGER (-32768..32767), + kepAlmanacAF0 INTEGER (-32768..32767), + kepAlmanacAF1 INTEGER (-4096..4095), + ... +} + + +AlmanacNAV-KeplerianSet ::= SEQUENCE { + svID SV-ID, + navAlmE INTEGER (0..65535), + navAlmDeltaI INTEGER (-32768..32767), + navAlmOMEGADOT INTEGER (-32768..32767), + navAlmSVHealth INTEGER (0..255), + navAlmSqrtA INTEGER (0..16777215), + navAlmOMEGAo INTEGER (-8388608..8388607), + navAlmOmega INTEGER (-8388608..8388607), + navAlmMo INTEGER (-8388608..8388607), + navAlmaf0 INTEGER (-1024..1023), + navAlmaf1 INTEGER (-1024..1023), + ... +} + + +AlmanacReducedKeplerianSet ::= SEQUENCE { + svID SV-ID, + redAlmDeltaA INTEGER (-128..127), + redAlmOmega0 INTEGER (-64..63), + redAlmPhi0 INTEGER (-64..63), + redAlmL1Health BOOLEAN, + redAlmL2Health BOOLEAN, + redAlmL5Health BOOLEAN, + ... +} + + +AlmanacMidiAlmanacSet ::= SEQUENCE { + svID SV-ID, + midiAlmE INTEGER (0..2047), + midiAlmDeltaI INTEGER (-1024..1023), + midiAlmOmegaDot INTEGER (-1024..1023), + midiAlmSqrtA INTEGER (0..131071), + midiAlmOmega0 INTEGER (-32768..32767), + midiAlmOmega INTEGER (-32768..32767), + midiAlmMo INTEGER (-32768..32767), + midiAlmaf0 INTEGER (-1024..1023), + midiAlmaf1 INTEGER (-512..511), + midiAlmL1Health BOOLEAN, + midiAlmL2Health BOOLEAN, + midiAlmL5Health BOOLEAN, + ... +} + + +AlmanacGLONASS-AlmanacSet ::= SEQUENCE { + gloAlm-NA INTEGER (1..1461), + gloAlmnA INTEGER (1..24), + gloAlmHA INTEGER (0..31), + gloAlmLambdaA INTEGER (-1048576..1048575), + gloAlmtlambdaA INTEGER (0..2097151), + gloAlmDeltaIa INTEGER (-131072..131071), + gloAlmDeltaTA INTEGER (-2097152..2097151), + gloAlmDeltaTdotA INTEGER (-64..63), + gloAlmEpsilonA INTEGER (0..32767), + gloAlmOmegaA INTEGER (-32768..32767), + gloAlmTauA INTEGER (-512..511), + gloAlmCA INTEGER (0..1), + gloAlmMA BIT STRING (SIZE(2)) OPTIONAL, -- Need ON + ... +} + + +AlmanacECEF-SBAS-AlmanacSet ::= SEQUENCE { + sbasAlmDataID INTEGER (0..3), + svID SV-ID, + sbasAlmHealth BIT STRING (SIZE(8)), + sbasAlmXg INTEGER (-16384..16383), + sbasAlmYg INTEGER (-16384..16383), + sbasAlmZg INTEGER (-256..255), + sbasAlmXgdot INTEGER (-4..3), + sbasAlmYgDot INTEGER (-4..3), + sbasAlmZgDot INTEGER (-8..7), + sbasAlmTo INTEGER (0..2047), + ... +} + + +AlmanacBDS-AlmanacSet-r12 ::= SEQUENCE { + svID SV-ID, + bdsAlmToa-r12 INTEGER (0..255) OPTIONAL, -- Cond NotSameForAllSV + bdsAlmSqrtA-r12 INTEGER (0..16777215), + bdsAlmE-r12 INTEGER (0..131071), + bdsAlmW-r12 INTEGER (-8388608..8388607), + bdsAlmM0-r12 INTEGER (-8388608..8388607), + bdsAlmOmega0-r12 INTEGER (-8388608..8388607), + bdsAlmOmegaDot-r12 INTEGER (-65536..65535), + bdsAlmDeltaI-r12 INTEGER (-32768..32767), + bdsAlmA0-r12 INTEGER (-1024..1023), + bdsAlmA1-r12 INTEGER (-1024..1023), + bdsSvHealth-r12 BIT STRING (SIZE(9)) OPTIONAL, -- Cond SV-ID + ... +} + + +GNSS-UTC-Model ::= CHOICE { + utcModel1 UTC-ModelSet1, -- Model-1 + utcModel2 UTC-ModelSet2, -- Model-2 + utcModel3 UTC-ModelSet3, -- Model-3 + utcModel4 UTC-ModelSet4, -- Model-4 + ..., + utcModel5-r12 UTC-ModelSet5-r12 -- Model-5 +} + + +UTC-ModelSet1 ::= SEQUENCE { + gnss-Utc-A1 INTEGER (-8388608..8388607), + gnss-Utc-A0 INTEGER (-2147483648..2147483647), + gnss-Utc-Tot INTEGER (0..255), + gnss-Utc-WNt INTEGER (0..255), + gnss-Utc-DeltaTls INTEGER (-128..127), + gnss-Utc-WNlsf INTEGER (0..255), + gnss-Utc-DN INTEGER (-128..127), + gnss-Utc-DeltaTlsf INTEGER (-128..127), + ... +} + + +UTC-ModelSet2 ::= SEQUENCE { + utcA0 INTEGER (-32768..32767), + utcA1 INTEGER (-4096..4095), + utcA2 INTEGER (-64..63), + utcDeltaTls INTEGER (-128..127), + utcTot INTEGER (0..65535), + utcWNot INTEGER (0..8191), + utcWNlsf INTEGER (0..255), + utcDN BIT STRING (SIZE(4)), + utcDeltaTlsf INTEGER (-128..127), + ... +} + + +UTC-ModelSet3 ::= SEQUENCE { + nA INTEGER (1..1461), + tauC INTEGER (-2147483648..2147483647), + b1 INTEGER (-1024..1023) OPTIONAL, -- Cond GLONASS-M + b2 INTEGER (-512..511) OPTIONAL, -- Cond GLONASS-M + kp BIT STRING (SIZE(2)) OPTIONAL, -- Cond GLONASS-M + ... +} + + +UTC-ModelSet4 ::= SEQUENCE { + utcA1wnt INTEGER (-8388608..8388607), + utcA0wnt 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), + utcStandardID INTEGER (0..7), + ... +} + + +UTC-ModelSet5-r12 ::= SEQUENCE { + utcA0-r12 INTEGER (-2147483648..2147483647), + utcA1-r12 INTEGER (-8388608..8388607), + utcDeltaTls-r12 INTEGER (-128..127), + utcWNlsf-r12 INTEGER (0..255), + utcDN-r12 INTEGER (0..255), + utcDeltaTlsf-r12 INTEGER (-128..127), + ... +} + + +GNSS-AuxiliaryInformation ::= CHOICE { + gnss-ID-GPS GNSS-ID-GPS, + gnss-ID-GLONASS GNSS-ID-GLONASS, + ... +} + +GNSS-ID-GPS ::= SEQUENCE (SIZE(1..64)) OF GNSS-ID-GPS-SatElement + +GNSS-ID-GPS-SatElement ::= SEQUENCE { + svID SV-ID, + signalsAvailable GNSS-SignalIDs, + ... +} + +GNSS-ID-GLONASS ::= SEQUENCE (SIZE(1..64)) OF GNSS-ID-GLONASS-SatElement + +GNSS-ID-GLONASS-SatElement ::= SEQUENCE { + svID SV-ID, + signalsAvailable GNSS-SignalIDs, + channelNumber INTEGER (-7..13) OPTIONAL, -- Cond FDMA + ... +} + + +BDS-DifferentialCorrections-r12 ::= SEQUENCE { + dbds-RefTime-r12 INTEGER (0..3599), + bds-SgnTypeList-r12 BDS-SgnTypeList-r12, + ... +} + +BDS-SgnTypeList-r12 ::= SEQUENCE (SIZE (1..3)) OF BDS-SgnTypeElement-r12 + +BDS-SgnTypeElement-r12 ::= SEQUENCE { + gnss-SignalID GNSS-SignalID OPTIONAL, -- Need ON + dbds-CorrectionList-r12 DBDS-CorrectionList-r12, + ... +} + +DBDS-CorrectionList-r12 ::= SEQUENCE (SIZE (1..64)) OF DBDS-CorrectionElement-r12 + +DBDS-CorrectionElement-r12 ::= SEQUENCE { + svID SV-ID, + bds-UDREI-r12 INTEGER (0..15), + bds-RURAI-r12 INTEGER (0..15), + bds-ECC-DeltaT-r12 INTEGER (-4096..4095), + ... +} + + +BDS-GridModelParameter-r12 ::= SEQUENCE { + bds-RefTime-r12 INTEGER (0..3599), + gridIonList-r12 GridIonList-r12, + ... +} + +GridIonList-r12 ::= SEQUENCE (SIZE (1..320)) OF GridIonElement-r12 + +GridIonElement-r12 ::= SEQUENCE { + igp-ID-r12 INTEGER (1..320), + dt-r12 INTEGER (0..511), + givei-r12 INTEGER (0..15) , + ... +} + + +A-GNSS-RequestAssistanceData ::= SEQUENCE { + gnss-CommonAssistDataReq GNSS-CommonAssistDataReq OPTIONAL, -- Cond CommonADReq + gnss-GenericAssistDataReq GNSS-GenericAssistDataReq OPTIONAL, -- Cond GenADReq + ... +} + + +GNSS-CommonAssistDataReq ::= SEQUENCE { + gnss-ReferenceTimeReq GNSS-ReferenceTimeReq + OPTIONAL, -- Cond RefTimeReq + gnss-ReferenceLocationReq GNSS-ReferenceLocationReq + OPTIONAL, -- Cond RefLocReq + gnss-IonosphericModelReq GNSS-IonosphericModelReq + OPTIONAL, -- Cond IonoModReq + gnss-EarthOrientationParametersReq GNSS-EarthOrientationParametersReq + OPTIONAL, -- Cond EOPReq + ... +} + + +GNSS-GenericAssistDataReq ::= SEQUENCE (SIZE (1..16)) OF GNSS-GenericAssistDataReqElement + +GNSS-GenericAssistDataReqElement ::= SEQUENCE { + gnss-ID GNSS-ID, + sbas-ID SBAS-ID OPTIONAL, -- Cond GNSS-ID-SBAS + gnss-TimeModelsReq GNSS-TimeModelListReq OPTIONAL, -- Cond TimeModReq + gnss-DifferentialCorrectionsReq GNSS-DifferentialCorrectionsReq OPTIONAL, -- Cond DGNSS-Req + gnss-NavigationModelReq GNSS-NavigationModelReq OPTIONAL, -- Cond NavModReq + gnss-RealTimeIntegrityReq GNSS-RealTimeIntegrityReq OPTIONAL, -- Cond RTIReq + gnss-DataBitAssistanceReq GNSS-DataBitAssistanceReq OPTIONAL, -- Cond DataBitsReq + gnss-AcquisitionAssistanceReq GNSS-AcquisitionAssistanceReq OPTIONAL, -- Cond AcquAssistReq + gnss-AlmanacReq GNSS-AlmanacReq OPTIONAL, -- Cond AlmanacReq + gnss-UTCModelReq GNSS-UTC-ModelReq OPTIONAL, -- Cond UTCModReq + gnss-AuxiliaryInformationReq GNSS-AuxiliaryInformationReq OPTIONAL, -- Cond AuxInfoReq + ..., + [[ + bds-DifferentialCorrectionsReq-r12 + BDS-DifferentialCorrectionsReq-r12 + OPTIONAL, -- Cond DBDS-Req + bds-GridModelReq-r12 BDS-GridModelReq-r12 OPTIONAL -- Cond BDS-GridModReq + ]] +} + + +GNSS-ReferenceTimeReq ::= SEQUENCE { + gnss-TimeReqPrefList SEQUENCE (SIZE (1..8)) OF GNSS-ID, + gps-TOW-assistReq BOOLEAN OPTIONAL, -- Cond gps + notOfLeapSecReq BOOLEAN OPTIONAL, -- Cond glonass + ... +} + + +GNSS-ReferenceLocationReq ::= SEQUENCE { + ... +} + + +GNSS-IonosphericModelReq ::= SEQUENCE { + klobucharModelReq BIT STRING (SIZE(2)) OPTIONAL, -- Cond klobuchar + neQuickModelReq NULL OPTIONAL, -- Cond nequick + ... +} + + +GNSS-EarthOrientationParametersReq ::= SEQUENCE { + ... +} + + +GNSS-TimeModelListReq ::= SEQUENCE (SIZE(1..15)) OF GNSS-TimeModelElementReq + +GNSS-TimeModelElementReq ::= SEQUENCE { + gnss-TO-IDsReq INTEGER (1..15), + deltaTreq BOOLEAN, + ... +} + + +GNSS-DifferentialCorrectionsReq ::= SEQUENCE { + dgnss-SignalsReq GNSS-SignalIDs, + dgnss-ValidityTimeReq BOOLEAN, + ... +} + + +GNSS-NavigationModelReq ::= CHOICE { + storedNavList StoredNavListInfo, + reqNavList ReqNavListInfo, + ... +} + + +StoredNavListInfo ::= SEQUENCE { + gnss-WeekOrDay INTEGER (0..4095), + gnss-Toe INTEGER (0..255), + t-toeLimit INTEGER (0..15), + satListRelatedDataList SatListRelatedDataList OPTIONAL, + ... +} + +SatListRelatedDataList ::= SEQUENCE (SIZE (1..64)) OF SatListRelatedDataElement + +SatListRelatedDataElement ::= SEQUENCE { + svID SV-ID, + iod BIT STRING (SIZE(11)), + clockModelID INTEGER (1..8) OPTIONAL, +orbitModelID INTEGER (1..8) OPTIONAL, + ... +} + +ReqNavListInfo ::= SEQUENCE { + svReqList BIT STRING (SIZE (64)), + clockModelID-PrefList SEQUENCE (SIZE (1..8)) OF INTEGER (1..8) OPTIONAL, + orbitModelID-PrefList SEQUENCE (SIZE (1..8)) OF INTEGER (1..8) OPTIONAL, + addNavparamReq BOOLEAN OPTIONAL, -- Cond orbitModelID-2 + ... +} + + + +GNSS-RealTimeIntegrityReq ::= SEQUENCE { + ... +} + + +GNSS-DataBitAssistanceReq ::= SEQUENCE { + gnss-TOD-Req INTEGER (0..3599), + gnss-TOD-FracReq INTEGER (0..999) OPTIONAL, + dataBitInterval INTEGER (0..15), + gnss-SignalType GNSS-SignalIDs, + gnss-DataBitsReq GNSS-DataBitsReqSatList OPTIONAL, + ... +} + +GNSS-DataBitsReqSatList ::= SEQUENCE (SIZE(1..64)) OF GNSS-DataBitsReqSatElement + +GNSS-DataBitsReqSatElement ::= SEQUENCE { + svID SV-ID, + ... +} + + +GNSS-AcquisitionAssistanceReq ::= SEQUENCE { + gnss-SignalID-Req GNSS-SignalID, + ... +} + + +GNSS-AlmanacReq ::= SEQUENCE { + modelID INTEGER(1..8) OPTIONAL, + ... +} + + +GNSS-UTC-ModelReq ::= SEQUENCE { + modelID INTEGER(1..8) OPTIONAL, + ... +} + + +GNSS-AuxiliaryInformationReq ::= SEQUENCE { + ... +} + + +BDS-DifferentialCorrectionsReq-r12 ::= SEQUENCE { + dgnss-SignalsReq GNSS-SignalIDs, + ... +} + + +BDS-GridModelReq-r12 ::= SEQUENCE { + ... +} + + +A-GNSS-ProvideLocationInformation ::= SEQUENCE { + gnss-SignalMeasurementInformation GNSS-SignalMeasurementInformation OPTIONAL, + gnss-LocationInformation GNSS-LocationInformation OPTIONAL, + gnss-Error A-GNSS-Error OPTIONAL, + ... +} + + +GNSS-SignalMeasurementInformation ::= SEQUENCE { + measurementReferenceTime MeasurementReferenceTime, + gnss-MeasurementList GNSS-MeasurementList, + ... +} + + +MeasurementReferenceTime ::= SEQUENCE { + gnss-TOD-msec INTEGER (0..3599999), + gnss-TOD-frac INTEGER (0..3999) OPTIONAL, + gnss-TOD-unc INTEGER (0..127) OPTIONAL, + gnss-TimeID GNSS-ID, + networkTime CHOICE { + eUTRA SEQUENCE { + physCellId INTEGER (0..503), + cellGlobalId CellGlobalIdEUTRA-AndUTRA OPTIONAL, + systemFrameNumber BIT STRING (SIZE (10)), + ... + }, + uTRA SEQUENCE { + mode CHOICE { + fdd SEQUENCE { + primary-CPICH-Info INTEGER (0..511), + ... + }, + tdd SEQUENCE { + cellParameters INTEGER (0..127), + ... + } + }, + cellGlobalId CellGlobalIdEUTRA-AndUTRA OPTIONAL, + referenceSystemFrameNumber + INTEGER (0..4095), + ... + }, + gSM SEQUENCE { + bcchCarrier INTEGER (0..1023), + bsic INTEGER (0..63), + cellGlobalId CellGlobalIdGERAN OPTIONAL, + referenceFrame SEQUENCE { + referenceFN INTEGER (0..65535), + referenceFNMSB INTEGER (0..63) OPTIONAL, + ... + }, + deltaGNSS-TOD INTEGER (0 .. 127) OPTIONAL, + ... + }, + ... + } OPTIONAL, + ... +} + + +GNSS-MeasurementList ::= SEQUENCE (SIZE(1..16)) OF GNSS-MeasurementForOneGNSS + +GNSS-MeasurementForOneGNSS ::= SEQUENCE { + gnss-ID GNSS-ID, + gnss-SgnMeasList GNSS-SgnMeasList, + ... +} + +GNSS-SgnMeasList ::= SEQUENCE (SIZE(1..8)) OF GNSS-SgnMeasElement + +GNSS-SgnMeasElement ::= SEQUENCE { + gnss-SignalID GNSS-SignalID, + gnss-CodePhaseAmbiguity INTEGER (0..127) OPTIONAL, + gnss-SatMeasList GNSS-SatMeasList, + ... +} + +GNSS-SatMeasList ::= SEQUENCE (SIZE(1..64)) OF GNSS-SatMeasElement + +GNSS-SatMeasElement ::= SEQUENCE { + svID SV-ID, + cNo INTEGER (0..63), + mpathDet ENUMERATED {notMeasured (0), low (1), medium (2), high (3), ...}, + carrierQualityInd INTEGER (0..3) OPTIONAL, + codePhase INTEGER (0..2097151), + integerCodePhase INTEGER (0..127) OPTIONAL, + codePhaseRMSError INTEGER (0..63), + doppler INTEGER (-32768..32767) OPTIONAL, + adr INTEGER (0..33554431) OPTIONAL, + ... +} + + +GNSS-LocationInformation ::= SEQUENCE { + measurementReferenceTime MeasurementReferenceTime, + agnss-List GNSS-ID-Bitmap, + ... +} + + +A-GNSS-RequestLocationInformation ::= SEQUENCE { + gnss-PositioningInstructions GNSS-PositioningInstructions, + ... +} + + +GNSS-PositioningInstructions ::= SEQUENCE { + gnss-Methods GNSS-ID-Bitmap, + fineTimeAssistanceMeasReq BOOLEAN, + adrMeasReq BOOLEAN, + multiFreqMeasReq BOOLEAN, + assistanceAvailability BOOLEAN, + ... +} + + +A-GNSS-ProvideCapabilities ::= SEQUENCE { + gnss-SupportList GNSS-SupportList OPTIONAL, + assistanceDataSupportList AssistanceDataSupportList OPTIONAL, + locationCoordinateTypes LocationCoordinateTypes OPTIONAL, + velocityTypes VelocityTypes OPTIONAL, + ... +} + +GNSS-SupportList ::= SEQUENCE (SIZE(1..16)) OF GNSS-SupportElement + +GNSS-SupportElement ::= SEQUENCE { + gnss-ID GNSS-ID, + sbas-IDs SBAS-IDs OPTIONAL, -- Cond GNSS-ID-SBAS + agnss-Modes PositioningModes, + gnss-Signals GNSS-SignalIDs, + fta-MeasSupport SEQUENCE { + cellTime AccessTypes, + mode PositioningModes, + ... + } OPTIONAL, -- Cond fta + adr-Support BOOLEAN, + velocityMeasurementSupport BOOLEAN, + ... +} + +AssistanceDataSupportList ::= SEQUENCE { + gnss-CommonAssistanceDataSupport GNSS-CommonAssistanceDataSupport, + gnss-GenericAssistanceDataSupport GNSS-GenericAssistanceDataSupport, + ... +} + + + +GNSS-CommonAssistanceDataSupport ::= SEQUENCE { + gnss-ReferenceTimeSupport GNSS-ReferenceTimeSupport + OPTIONAL, -- Cond RefTimeSup + gnss-ReferenceLocationSupport GNSS-ReferenceLocationSupport + OPTIONAL, -- Cond RefLocSup + gnss-IonosphericModelSupport GNSS-IonosphericModelSupport + OPTIONAL, -- Cond IonoModSup + gnss-EarthOrientationParametersSupport GNSS-EarthOrientationParametersSupport + OPTIONAL, -- Cond EOPSup + ... +} + + +GNSS-ReferenceTimeSupport ::= SEQUENCE { + gnss-SystemTime GNSS-ID-Bitmap, + fta-Support AccessTypes OPTIONAL, -- Cond fta + ... +} + + +GNSS-ReferenceLocationSupport ::= SEQUENCE { + ... +} + + +GNSS-IonosphericModelSupport ::= SEQUENCE { + ionoModel BIT STRING { klobuchar (0), + neQuick (1) } (SIZE (1..8)), + ... +} + + +GNSS-EarthOrientationParametersSupport ::= SEQUENCE { + ... +} + + +GNSS-GenericAssistanceDataSupport ::= + SEQUENCE (SIZE (1..16)) OF GNSS-GenericAssistDataSupportElement + +GNSS-GenericAssistDataSupportElement ::= SEQUENCE { + gnss-ID GNSS-ID, + sbas-ID SBAS-ID OPTIONAL, -- Cond GNSS-ID-SBAS + gnss-TimeModelsSupport GNSS-TimeModelListSupport + OPTIONAL, -- Cond TimeModSup + gnss-DifferentialCorrectionsSupport GNSS-DifferentialCorrectionsSupport + OPTIONAL, -- Cond DGNSS-Sup + gnss-NavigationModelSupport GNSS-NavigationModelSupport + OPTIONAL, -- Cond NavModSup + gnss-RealTimeIntegritySupport GNSS-RealTimeIntegritySupport + OPTIONAL, -- Cond RTISup + gnss-DataBitAssistanceSupport GNSS-DataBitAssistanceSupport + OPTIONAL, -- Cond DataBitsSup + gnss-AcquisitionAssistanceSupport GNSS-AcquisitionAssistanceSupport + OPTIONAL, -- Cond AcquAssistSup + gnss-AlmanacSupport GNSS-AlmanacSupport + OPTIONAL, -- Cond AlmanacSup + gnss-UTC-ModelSupport GNSS-UTC-ModelSupport + OPTIONAL, -- Cond UTCModSup + gnss-AuxiliaryInformationSupport GNSS-AuxiliaryInformationSupport + OPTIONAL, -- Cond AuxInfoSup + ..., + [[ + bds-DifferentialCorrectionsSupport-r12 + BDS-DifferentialCorrectionsSupport-r12 + OPTIONAL, -- Cond DBDS-Sup + bds-GridModelSupport-r12 BDS-GridModelSupport-r12 + OPTIONAL -- Cond BDS-GridModSup + ]] +} + + +GNSS-TimeModelListSupport ::= SEQUENCE { + ... +} + + +GNSS-DifferentialCorrectionsSupport ::= SEQUENCE { + gnssSignalIDs GNSS-SignalIDs, + dgnss-ValidityTimeSup BOOLEAN, + ... +} + + +GNSS-NavigationModelSupport ::= SEQUENCE { + clockModel BIT STRING { model-1 (0), + model-2 (1), + model-3 (2), + model-4 (3), + model-5 (4), + model-6 (5) } (SIZE (1..8)) OPTIONAL, + orbitModel BIT STRING { model-1 (0), + model-2 (1), + model-3 (2), + model-4 (3), + model-5 (4), + model-6 (5) } (SIZE (1..8)) OPTIONAL, + ... +} + + +GNSS-RealTimeIntegritySupport ::= SEQUENCE { + ... +} + + +GNSS-DataBitAssistanceSupport ::= SEQUENCE { + ... +} + + +GNSS-AcquisitionAssistanceSupport ::= SEQUENCE { + ..., + confidenceSupport-r10 ENUMERATED { true } OPTIONAL, + dopplerUncertaintyExtSupport-r10 ENUMERATED { true } OPTIONAL +} + + +GNSS-AlmanacSupport ::= SEQUENCE { + almanacModel BIT STRING { model-1 (0), + model-2 (1), + model-3 (2), + model-4 (3), + model-5 (4), + model-6 (5), + model-7 (6) } (SIZE (1..8)) OPTIONAL, + ... +} + + +GNSS-UTC-ModelSupport ::= SEQUENCE { + utc-Model BIT STRING { model-1 (0), + model-2 (1), + model-3 (2), + model-4 (3), + model-5 (4) } (SIZE (1..8)) OPTIONAL, + ... +} + + +GNSS-AuxiliaryInformationSupport ::= SEQUENCE { + ... +} + + +BDS-DifferentialCorrectionsSupport-r12 ::= SEQUENCE { + gnssSignalIDs GNSS-SignalIDs, + ... +} + + +BDS-GridModelSupport-r12 ::= SEQUENCE { + ... +} + + +A-GNSS-RequestCapabilities ::= SEQUENCE { + gnss-SupportListReq BOOLEAN, + assistanceDataSupportListReq BOOLEAN, + locationVelocityTypesReq BOOLEAN, + ... +} + + +A-GNSS-Error ::= CHOICE { + locationServerErrorCauses GNSS-LocationServerErrorCauses, + targetDeviceErrorCauses GNSS-TargetDeviceErrorCauses, + ... +} + + +GNSS-LocationServerErrorCauses ::= SEQUENCE { + cause ENUMERATED { + undefined, + undeliveredAssistanceDataIsNotSupportedByServer, + undeliveredAssistanceDataIsSupportedButCurrentlyNotAvailableByServer, undeliveredAssistanceDataIsPartlyNotSupportedAndPartlyNotAvailableByServer, + ... + }, + ... +} + + +GNSS-TargetDeviceErrorCauses ::= SEQUENCE { + cause ENUMERATED { undefined, + thereWereNotEnoughSatellitesReceived, + assistanceDataMissing, + notAllRequestedMeasurementsPossible, + ... + }, + fineTimeAssistanceMeasurementsNotPossible NULL OPTIONAL, + adrMeasurementsNotPossible NULL OPTIONAL, + multiFrequencyMeasurementsNotPossible NULL OPTIONAL, + ... +} + + +GNSS-ID ::= SEQUENCE { + gnss-id ENUMERATED{ gps, sbas, qzss, galileo, glonass, ..., bds }, + ... +} + + +GNSS-ID-Bitmap ::= SEQUENCE { + gnss-ids BIT STRING { gps (0), + sbas (1), + qzss (2), + galileo (3), + glonass (4), + bds (5) } (SIZE (1..16)), + ... +} + + +GNSS-SignalID ::= SEQUENCE { + gnss-SignalID INTEGER (0 .. 7), + ... +} + + +GNSS-SignalIDs ::= SEQUENCE { + gnss-SignalIDs BIT STRING (SIZE(8)), + ... +} + + +SBAS-ID ::= SEQUENCE { + sbas-id ENUMERATED { waas, egnos, msas, gagan, ...}, + ... +} + + +SBAS-IDs ::= SEQUENCE { + sbas-IDs BIT STRING { waas (0), + egnos (1), + msas (2), + gagan (3) } (SIZE (1..8)), + ... +} + + +SV-ID ::= SEQUENCE { + satellite-id INTEGER(0..63), + ... +} + + +ECID-ProvideLocationInformation ::= SEQUENCE { + ecid-SignalMeasurementInformation ECID-SignalMeasurementInformation OPTIONAL, + ecid-Error ECID-Error OPTIONAL, + ... +} + + +ECID-SignalMeasurementInformation ::= SEQUENCE { + primaryCellMeasuredResults MeasuredResultsElement OPTIONAL, + measuredResultsList MeasuredResultsList, + ... +} + +MeasuredResultsList ::= SEQUENCE (SIZE(1..32)) OF MeasuredResultsElement + +MeasuredResultsElement ::= SEQUENCE { + physCellId INTEGER (0..503), + cellGlobalId CellGlobalIdEUTRA-AndUTRA OPTIONAL, + arfcnEUTRA ARFCN-ValueEUTRA, + systemFrameNumber + BIT STRING (SIZE (10)) OPTIONAL, + rsrp-Result INTEGER (0..97) OPTIONAL, + rsrq-Result INTEGER (0..34) OPTIONAL, + ue-RxTxTimeDiff INTEGER (0..4095) OPTIONAL, + ..., + [[ arfcnEUTRA-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond EARFCN-max + ]] +} + + +ECID-RequestLocationInformation ::= SEQUENCE { + requestedMeasurements BIT STRING { rsrpReq (0), + rsrqReq (1), + ueRxTxReq (2) } (SIZE(1..8)), + ... +} + + +ECID-ProvideCapabilities ::= SEQUENCE { + ecid-MeasSupported BIT STRING { rsrpSup (0), + rsrqSup (1), + ueRxTxSup (2) } (SIZE(1..8)), + ... +} + + +ECID-RequestCapabilities ::= SEQUENCE { + ... +} + + +ECID-Error ::= CHOICE { + locationServerErrorCauses ECID-LocationServerErrorCauses, + targetDeviceErrorCauses ECID-TargetDeviceErrorCauses, + ... +} + + +ECID-LocationServerErrorCauses ::= SEQUENCE { + cause ENUMERATED { undefined, + ... + }, + ... +} + + +ECID-TargetDeviceErrorCauses ::= SEQUENCE { + cause ENUMERATED { undefined, + requestedMeasurementNotAvailable, + notAllrequestedMeasurementsPossible, + ... + }, + rsrpMeasurementNotPossible NULL OPTIONAL, + rsrqMeasurementNotPossible NULL OPTIONAL, + ueRxTxMeasurementNotPossible NULL OPTIONAL, + ... +} + + +TBS-ProvideLocationInformation-r13 ::= SEQUENCE { + tbs-MeasurementList-r13 TBS-MeasurementList-r13 OPTIONAL, + tbs-Error-r13 TBS-Error-r13 OPTIONAL, + ... +} + + +TBS-MeasurementList-r13 ::= SEQUENCE { + measurementReferenceTime-r13 UTCTime OPTIONAL, + mbs-SgnMeasList-r13 MBS-BeaconMeasList-r13 OPTIONAL, -- Cond MBS + ... +} + + +MBS-BeaconMeasList-r13 ::= SEQUENCE (SIZE(1..64)) OF MBS-BeaconMeasElement-r13 + +MBS-BeaconMeasElement-r13 ::= SEQUENCE { + transmitterID-r13 INTEGER (0..32767), + codePhase-r13 INTEGER (0..2097151), + codePhaseRMSError-r13 INTEGER (0..63), + ... +} + + +TBS-RequestLocationInformation-r13 ::= SEQUENCE { + mbsSgnMeasListReq BOOLEAN, + ... +} + + +TBS-ProvideCapabilities-r13 ::= SEQUENCE { + tbs-Modes-r13 BIT STRING { standalone (0), + ue-assisted (2) } (SIZE (1..8)), +... +} + + +TBS-RequestCapabilities-r13 ::= SEQUENCE { + ... +} + +TBS-Error-r13 ::= CHOICE { + locationServerErrorCauses-r13 TBS-LocationServerErrorCauses-r13, + targetDeviceErrorCauses-r13 TBS-TargetDeviceErrorCauses-r13, + ... +} + + +TBS-LocationServerErrorCauses-r13 ::= SEQUENCE { + cause-r13 ENUMERATED { undefined, + ... + }, + ... +} + + +TBS-TargetDeviceErrorCauses-r13 ::= SEQUENCE { + cause-r13 ENUMERATED { undefined, + thereWereNotEnoughMBSBeaconsReceived, + ... + }, + ... +} + + +Sensor-ProvideLocationInformation-r13 ::= SEQUENCE { + sensor-MeasurementList-r13 Sensor-MeasurementList-r13 OPTIONAL, + sensor-Error-r13 Sensor-Error-r13 OPTIONAL, + ... +} + + +Sensor-MeasurementList-r13 ::= SEQUENCE { + measurementReferenceTime-r13 UTCTime OPTIONAL, + uncompensatedBarometricPressure-r13 INTEGER (30000..115000) OPTIONAL, -- Cond Barometer + ... +} + + +Sensor-RequestLocationInformation-r13 ::= SEQUENCE { + uncompensatedBarometricPressureReq BOOLEAN, + ... +} + + +Sensor-ProvideCapabilities-r13 ::= SEQUENCE { + sensor-Modes-r13 BIT STRING { standalone (0), + ue-assisted (2) } (SIZE (1..8)), + ... +} + + +Sensor-RequestCapabilities-r13 ::= SEQUENCE { + ... +} + +Sensor-Error-r13 ::= CHOICE { + targetServerErrorCauses-r13 Sensor-LocationServerErrorCauses-r13, + targetDeviceErrorCauses-r13 Sensor-TargetDeviceErrorCauses-r13, + ... +} + + +Sensor-LocationServerErrorCauses-r13 ::= SEQUENCE { + cause-r13 ENUMERATED { undefined, + ...}, +... +} + + +Sensor-TargetDeviceErrorCauses-r13 ::= SEQUENCE { + cause-r13 ENUMERATED { undefined, + ...}, +... +} + + +WLAN-ProvideLocationInformation-r13 ::= SEQUENCE { + wlan-MeasurementList-r13 WLAN-MeasurementList-r13 OPTIONAL, + measurementReferenceTime-r13 UTCTime OPTIONAL, + wlan-Error-r13 WLAN-Error-r13 OPTIONAL, + ... +} + + +WLAN-MeasurementList-r13 ::= SEQUENCE (SIZE(1..maxWLANAPSize-r13)) OF WLAN-MeasurementElement-r13 + +WLAN-MeasurementElement-r13 ::= SEQUENCE { + wlan-AP-Identifier-r13 WLAN-AP-Identifier-r13, + rssi-r13 INTEGER(-127..128) OPTIONAL, + rtt-r13 WLAN-RTT-r13 OPTIONAL, + apChannelFrequency INTEGER(0..256) OPTIONAL, + servingFlag BOOLEAN OPTIONAL, + ... +} + +WLAN-AP-Identifier-r13 ::= SEQUENCE { + bssid-r13 OCTET STRING (SIZE (6)), + ssid-r13 OCTET STRING (SIZE (1..32)) OPTIONAL, + ... +} + +WLAN-RTT-r13 ::= SEQUENCE { + rttValue-r13 INTEGER(0..16777215), + rttUnits-r13 ENUMERATED { microseconds, + hundredsofnanoseconds, + tensofnanoseconds, + nanoseconds, + tenthsofnanoseconds, + ... }, + rttAccuracy-r13 INTEGER(0..255) OPTIONAL, + ... +} + +maxWLANAPSize-r13 INTEGER ::= 64 + +WLAN-RequestLocationInformation-r13 ::= SEQUENCE { + requestedMeasurements-r13 BIT STRING { + rssi (0), + rtt (1)} (SIZE(1..8)), + ... +} + + +WLAN-ProvideCapabilities-r13 ::= SEQUENCE { + wlan-Modes-r13 BIT STRING { standalone (0), + ue-assisted (2)} (SIZE (1..8)), + wlan-MeasSupported-r13 BIT STRING { + rssi-r13 (0), + rtt-r13 (1)} (SIZE(1..8)), + ... +} + + +WLAN-RequestCapabilities-r13 ::= SEQUENCE { + ... +} + + +WLAN-Error-r13 ::= CHOICE { + locationServerErrorCauses-r13 WLAN-LocationServerErrorCauses-r13, + targetDeviceErrorCauses-r13 WLAN-TargetDeviceErrorCauses-r13, + ... +} + + +WLAN-LocationServerErrorCauses-r13 ::= SEQUENCE { + cause-r13 ENUMERATED {undefined, ...} +} + + +WLAN-TargetDeviceErrorCauses-r13 ::= SEQUENCE { + cause-r13 ENUMERATED {undefined, + requestedMeasurementsNotAvailable, + notAllrequestedMeasurementsPossible, + ... + }, + wlan-AP-RSSI-MeasurementNotPossible-r13 NULL OPTIONAL, + wlan-AP-RTT-MeasurementNotPossible-r13 NULL OPTIONAL, + ... +} + + +BT-ProvideLocationInformation-r13 ::= SEQUENCE { + bt-MeasurementList-r13 BT-MeasurementList-r13 OPTIONAL, + measurementReferenceTime-r13 UTCTime OPTIONAL, + bt-Error-r13 BT-Error-r13 OPTIONAL, + ... +} + + +BT-MeasurementList-r13 ::= SEQUENCE (SIZE(1.. maxBTBeaconSize-r13)) OF BT-MeasurementElement-r13 + + +BT-MeasurementElement-r13 ::= SEQUENCE { + btAddr-r13 BIT STRING (SIZE (48)), + rssi-r13 INTEGER(-128..127) OPTIONAL, + ... +} + +maxBTBeaconSize-r13 INTEGER ::= 32 + +BT-RequestLocationInformation-r13 ::= SEQUENCE { + requestedMeasurements-r13 BIT STRING { + rssi (0)} (SIZE(1..8)), + ... +} + + +BT-ProvideCapabilities-r13 ::= SEQUENCE { + bt-Modes-r13 BIT STRING { standalone (0), + ue-assisted (2)} (SIZE (1..8)), + ... +} + + +BT-RequestCapabilities-r13 ::= SEQUENCE { + ... +} + + +BT-Error-r13 ::= CHOICE { + locationServerErrorCauses-r13 BT-LocationServerErrorCauses-r13, + targetDeviceErrorCauses-r13 BT-TargetDeviceErrorCauses-r13, + ... +} + + +BT-LocationServerErrorCauses-r13 ::= SEQUENCE { + cause-r13 ENUMERATED {undefined, ...} +} + + +BT-TargetDeviceErrorCauses-r13 ::= SEQUENCE { + cause-r13 ENUMERATED {undefined, + requestedMeasurementsNotAvailable, + notAllrequestedMeasurementsPossible, + ... + }, + bt-Beacon-rssiMeasurementNotPossible-r13 NULL OPTIONAL, +... +} + + +END diff --git a/epan/dissectors/asn1/lpp/Makefile.am b/epan/dissectors/asn1/lpp/Makefile.am new file mode 100644 index 0000000000..72d28e600b --- /dev/null +++ b/epan/dissectors/asn1/lpp/Makefile.am @@ -0,0 +1,23 @@ +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +include ../Makefile.preinc +include Makefile.common +include ../Makefile.inc + diff --git a/epan/dissectors/asn1/lpp/Makefile.common b/epan/dissectors/asn1/lpp/Makefile.common new file mode 100644 index 0000000000..e7dfea3481 --- /dev/null +++ b/epan/dissectors/asn1/lpp/Makefile.common @@ -0,0 +1,44 @@ +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +PROTOCOL_NAME = lpp + +EXPORT_FILES = \ + $(PROTOCOL_NAME)-exp.cnf + +EXT_ASN_FILE_LIST = + +ASN_FILE_LIST = \ + LPP.asn + +EXTRA_DIST = \ + $(EXTRA_DIST_COMMON) \ + $(ASN_FILE_LIST) \ + packet-$(PROTOCOL_NAME)-template.c \ + packet-$(PROTOCOL_NAME)-template.h \ + $(PROTOCOL_NAME).cnf + +SRC_FILES = \ + $(EXTRA_DIST) \ + $(EXT_ASN_FILE_LIST) + +A2W_FLAGS = + +EXTRA_CNF = + diff --git a/epan/dissectors/asn1/lpp/Makefile.nmake b/epan/dissectors/asn1/lpp/Makefile.nmake new file mode 100644 index 0000000000..d296638ddd --- /dev/null +++ b/epan/dissectors/asn1/lpp/Makefile.nmake @@ -0,0 +1,26 @@ +## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +include ../../../../config.nmake +include ../Makefile.preinc.nmake +include Makefile.common +include ../Makefile.inc.nmake + diff --git a/epan/dissectors/asn1/lpp/lpp.cnf b/epan/dissectors/asn1/lpp/lpp.cnf new file mode 100644 index 0000000000..0f3cb1995d --- /dev/null +++ b/epan/dissectors/asn1/lpp/lpp.cnf @@ -0,0 +1,1809 @@ +# lpp.cnf +# lpp conformation file +# Copyright 2011-2016 Pascal Quantin + +#.OPT +PER +UNALIGNED +#.END + +#.EXPORTS +Ellipsoid-Point_PDU +EllipsoidPointWithAltitude_PDU +HorizontalVelocity_PDU +EllipsoidArc_PDU +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid_PDU +Ellipsoid-PointWithUncertaintyCircle_PDU +EllipsoidPointWithUncertaintyEllipse_PDU +Polygon_PDU +GNSS-ID +GNSS-SignalID +GNSS-SignalIDs +GNSS-SystemTime +SV-ID +ECID-SignalMeasurementInformation +CellGlobalIdGERAN +CellGlobalIdEUTRA-AndUTRA +OTDOA-ReferenceCellInfo +OTDOA-NeighbourCellInfoElement +ARFCN-ValueEUTRA +Ellipsoid-Point +EllipsoidPointWithAltitude +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid +NetworkTime +GNSS-ID-Bitmap +ARFCN-ValueUTRA +GNSS-ReferenceTime +LPP-Message +Ellipsoid-PointWithUncertaintyCircle +EllipsoidPointWithUncertaintyEllipse +EllipsoidArc +Polygon +#.END + +#.PDU +LPP-Message +Ellipsoid-Point +EllipsoidPointWithAltitude +HorizontalVelocity +EllipsoidArc +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid +Ellipsoid-PointWithUncertaintyCircle +EllipsoidPointWithUncertaintyEllipse +Polygon +#.END + +#.MAKE_ENUM +GNSS-ID/gnss-id TYPE_PREFIX UPPER_CASE + +#.FN_HDR RequestCapabilities + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "Request Capabilities"); + +#.FN_HDR ProvideCapabilities + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "Provide Capabilities"); + +#.FN_HDR RequestAssistanceData + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "Request Assistance Data"); + +#.FN_HDR ProvideAssistanceData + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "Provide Assistance Data"); + +#.FN_HDR RequestLocationInformation + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "Request Location Information"); + +#.FN_HDR ProvideLocationInformation + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "Provide Location Information"); + +#.FN_HDR Abort + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "Abort"); + +#.FN_HDR Error + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "Error"); + +#.FN_BODY EPDU-ID VAL_PTR = &lpp_epdu_id +%(DEFAULT_BODY)s + +#.TYPE_ATTR +EPDU-ID STRINGS=VALS(lpp_ePDU_ID_vals) + +#.FN_BODY EPDU-Body VAL_PTR=&lppe_tvb + tvbuff_t *lppe_tvb = NULL; +%(DEFAULT_BODY)s + switch(lpp_epdu_id){ + case 1: + if (lppe_tvb && lppe_handle) { + call_dissector(lppe_handle, lppe_tvb, actx->pinfo, tree); + } + break; + default: + break; + } + lpp_epdu_id = -1; + +#.FN_BODY AccessTypes/accessTypes VAL_PTR = &accessTypes_tvb LEN_PTR = &len + tvbuff_t *accessTypes_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(accessTypes_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_accessTypes_eutra, accessTypes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_accessTypes_utra, accessTypes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_accessTypes_gsm, accessTypes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.TYPE_ATTR +Ellipsoid-Point/degreesLatitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLatitude_fmt) + +#.TYPE_ATTR +Ellipsoid-Point/degreesLongitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLongitude_fmt) + +#.TYPE_ATTR +Ellipsoid-PointWithUncertaintyCircle/degreesLatitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLatitude_fmt) + +#.TYPE_ATTR +Ellipsoid-PointWithUncertaintyCircle/degreesLongitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLongitude_fmt) + +#.TYPE_ATTR +Ellipsoid-PointWithUncertaintyCircle/uncertainty DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_uncertainty_fmt) + +#.TYPE_ATTR +EllipsoidPointWithUncertaintyEllipse/degreesLatitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLatitude_fmt) + +#.TYPE_ATTR +EllipsoidPointWithUncertaintyEllipse/degreesLongitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLongitude_fmt) + +#.TYPE_ATTR +EllipsoidPointWithUncertaintyEllipse/uncertaintySemiMajor DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_uncertainty_fmt) + +#.TYPE_ATTR +EllipsoidPointWithUncertaintyEllipse/uncertaintySemiMinor DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_uncertainty_fmt) + +#.TYPE_ATTR +EllipsoidPointWithUncertaintyEllipse/orientationMajorAxis DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_angle_fmt) + +#.TYPE_ATTR +EllipsoidPointWithUncertaintyEllipse/confidence DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_confidence_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitude/degreesLatitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLatitude_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitude/degreesLongitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLongitude_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitude/altitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_altitude_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid/degreesLatitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLatitude_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid/degreesLongitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLongitude_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid/altitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_altitude_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid/uncertaintySemiMajor DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_uncertainty_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid/uncertaintySemiMinor DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_uncertainty_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid/orientationMajorAxis DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_angle_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid/uncertaintyAltitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_uncertaintyAltitude_fmt) + +#.TYPE_ATTR +EllipsoidPointWithAltitudeAndUncertaintyEllipsoid/confidence DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_confidence_fmt) + +#.TYPE_ATTR +EllipsoidArc/degreesLatitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLatitude_fmt) + +#.TYPE_ATTR +EllipsoidArc/degreesLongitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLongitude_fmt) + +#.TYPE_ATTR +EllipsoidArc/innerRadius DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_radius_fmt) + +#.TYPE_ATTR +EllipsoidArc/uncertaintyRadius DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_uncertainty_fmt) + +#.TYPE_ATTR +EllipsoidArc/offsetAngle DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_angle_fmt) + +#.TYPE_ATTR +EllipsoidArc/includedAngle DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_angle_fmt) + +#.TYPE_ATTR +EllipsoidArc/confidence DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_confidence_fmt) + +#.FN_FTR HorizontalVelocity/bearing + proto_item_append_text(actx->created_item, " degrees"); + +#.FN_FTR HorizontalVelocity/horizontalSpeed + proto_item_append_text(actx->created_item, " km/h"); + +#.FN_FTR HorizontalVelocityWithUncertainty/bearing + proto_item_append_text(actx->created_item, " degrees"); + +#.FN_FTR HorizontalVelocityWithUncertainty/horizontalSpeed + proto_item_append_text(actx->created_item, " km/h"); + +#.FN_FTR HorizontalVelocityWithUncertainty/uncertaintySpeed + proto_item_append_text(actx->created_item, " km/h"); + +#.FN_FTR HorizontalWithVerticalVelocityAndUncertainty/bearing + proto_item_append_text(actx->created_item, " degrees"); + +#.FN_FTR HorizontalWithVerticalVelocityAndUncertainty/horizontalSpeed + proto_item_append_text(actx->created_item, " km/h"); + +#.FN_FTR HorizontalWithVerticalVelocityAndUncertainty/verticalSpeed + proto_item_append_text(actx->created_item, " km/h"); + +#.FN_FTR HorizontalWithVerticalVelocityAndUncertainty/horizontalUncertaintySpeed + proto_item_append_text(actx->created_item, " km/h"); + +#.FN_FTR HorizontalWithVerticalVelocityAndUncertainty/verticalUncertaintySpeed + proto_item_append_text(actx->created_item, " km/h"); + +#.TYPE_ATTR +PolygonPoints/degreesLatitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLatitude_fmt) + +#.TYPE_ATTR +PolygonPoints/degreesLongitude DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_degreesLongitude_fmt) + +#.FN_BODY PositioningModes/posModes VAL_PTR = &posModes_tvb LEN_PTR = &len + tvbuff_t *posModes_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(posModes_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_posModes_standalone, posModes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_posModes_ue_based, posModes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_posModes_ue_assisted, posModes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY PeriodicalReportingCriteria/reportingInterval VAL_PTR=&idx + guint32 idx; + const gchar *interval[10] = {"", ": 1 s", ": 2 s", ": 4 s", ": 8 s", ": 10 s", + ": 16 s", ": 20 s", ": 32 s", ": 64 s"}; + +%(DEFAULT_BODY)s + +#.FN_FTR PeriodicalReportingCriteria/reportingInterval + if (idx < 10) { + proto_item_append_text(actx->created_item, "%s", interval[idx]); + } + +#.FN_BODY ReportingDuration VAL_PTR = &duration + guint32 duration; + +%(DEFAULT_BODY)s + proto_item_append_text(actx->created_item, " s"); + if (duration == 0) { + proto_item_append_text(actx->created_item, " (infinite)"); + } + +#.TYPE_ATTR +HorizontalAccuracy/accuracy DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_uncertainty_fmt) + +#.TYPE_ATTR +HorizontalAccuracy/confidence DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_confidence_fmt) + +#.TYPE_ATTR +VerticalAccuracy/accuracy DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_uncertainty_fmt) + +#.TYPE_ATTR +VerticalAccuracy/confidence DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_confidence_fmt) + +#.FN_FTR ResponseTime/time + proto_item_append_text(actx->created_item, " s"); + +#.FN_FTR ResponseTime/eag_1/responseTimeEarlyFix-r12 + proto_item_append_text(actx->created_item, " s"); + +#.FN_BODY LocationSource-r13 VAL_PTR = &locSource_tvb LEN_PTR = &len + tvbuff_t *locSource_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(locSource_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_LocationSource_r13_a_gnss, locSource_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_LocationSource_r13_wlan, locSource_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_LocationSource_r13_bt, locSource_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 4) { + proto_tree_add_item(subtree, hf_lpp_LocationSource_r13_tbs, locSource_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 5) { + proto_tree_add_item(subtree, hf_lpp_LocationSource_r13_sensor, locSource_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.TYPE_ATTR +OTDOA-NeighbourCellInfoElement/expectedRSTD DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_expectedRSTD_fmt) + +#.TYPE_ATTR +OTDOA-NeighbourCellInfoElement/expectedRSTD-Uncertainty DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_expectedRSTD_Uncertainty_fmt) + +#.TYPE_ATTR +NeighbourMeasurementElement/rstd DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_rstd_fmt) + +#.FN_BODY OTDOA-MeasQuality/error-Resolution VAL_PTR = &error_Resolution_tvb HF_INDEX=-1 + tvbuff_t *error_Resolution_tvb = NULL; +%(DEFAULT_BODY)s + +#.FN_FTR OTDOA-MeasQuality/error-Resolution + if (error_Resolution_tvb) { + actx->created_item = proto_tree_add_uint(tree, hf_index, error_Resolution_tvb, 0, 1, tvb_get_bits8(error_Resolution_tvb, 0, 2)); + } + +#.TYPE_ATTR +OTDOA-MeasQuality/error-Resolution TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lpp_error_Resolution_vals) + +#.FN_BODY OTDOA-MeasQuality/error-Value VAL_PTR = &error_Value_tvb HF_INDEX=-1 + tvbuff_t *error_Value_tvb = NULL; +%(DEFAULT_BODY)s + +#.FN_FTR OTDOA-MeasQuality/error-Value + if (error_Value_tvb) { + actx->created_item = proto_tree_add_uint(tree, hf_index, error_Value_tvb, 0, 1, tvb_get_bits8(error_Value_tvb, 0, 5)); + } + +#.TYPE_ATTR +OTDOA-MeasQuality/error-Value TYPE=FT_UINT8 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lpp_error_Value_vals_ext + +#.FN_BODY OTDOA-MeasQuality/error-NumSamples VAL_PTR = &error_NumSamples_tvb HF_INDEX=-1 + tvbuff_t *error_NumSamples_tvb = NULL; +%(DEFAULT_BODY)s + +#.FN_FTR OTDOA-MeasQuality/error-NumSamples + if (error_NumSamples_tvb) { + actx->created_item = proto_tree_add_uint(tree, hf_index, error_NumSamples_tvb, 0, 1, tvb_get_bits8(error_NumSamples_tvb, 0, 3)); + } + +#.TYPE_ATTR +OTDOA-MeasQuality/error-NumSamples TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lpp_error_NumSamples_vals) + +#.FN_BODY OTDOA-ProvideCapabilities/otdoa-Mode VAL_PTR = &otdoa_Mode_tvb LEN_PTR = &len + tvbuff_t *otdoa_Mode_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(otdoa_Mode_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_otdoa_Mode_ue_assisted, otdoa_Mode_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.TYPE_ATTR +GNSS-ReferenceTime/referenceTimeUnc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_referenceTimeUnc_fmt) + +#.TYPE_ATTR +GNSS-ReferenceTimeForOneCell/referenceTimeUnc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_referenceTimeUnc_fmt) + +#.FN_BODY GNSS-SystemTime/notificationOfLeapSecond VAL_PTR = ¬ificationOfLeapSecond_tvb HF_INDEX=-1 + tvbuff_t *notificationOfLeapSecond_tvb = NULL; +%(DEFAULT_BODY)s + +#.FN_FTR GNSS-SystemTime/notificationOfLeapSecond + if (notificationOfLeapSecond_tvb) { + actx->created_item = proto_tree_add_uint(tree, hf_index, notificationOfLeapSecond_tvb, 0, 1, tvb_get_bits8(notificationOfLeapSecond_tvb, 0, 2)); + } + +#.TYPE_ATTR +GNSS-SystemTime/notificationOfLeapSecond TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lpp_kp_vals) + +#.TYPE_ATTR +NetworkTime/fractionalSecondsFromFrameStructureStart DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_fractionalSecondsFromFrameStructureStart_fmt) + +#.TYPE_ATTR +NetworkTime/frameDrift DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_frameDrift_fmt) + +#.FN_BODY KlobucharModelParameter/dataID VAL_PTR = &dataID_tvb HF_INDEX=-1 + tvbuff_t *dataID_tvb = NULL; +%(DEFAULT_BODY)s + +#.FN_FTR KlobucharModelParameter/dataID + if (dataID_tvb) { + actx->created_item = proto_tree_add_uint(tree, hf_index, dataID_tvb, 0, 1, tvb_get_bits8(dataID_tvb, 0, 2)); + } + +#.TYPE_ATTR +KlobucharModelParameter/dataID TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lpp_dataID_vals) + +#.TYPE_ATTR +KlobucharModelParameter/alfa0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_alpha0_fmt) + +#.TYPE_ATTR +KlobucharModelParameter/alfa1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_alpha1_fmt) + +#.TYPE_ATTR +KlobucharModelParameter/alfa2 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_alpha2_3_fmt) + +#.TYPE_ATTR +KlobucharModelParameter/alfa3 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_alpha2_3_fmt) + +#.TYPE_ATTR +KlobucharModelParameter/beta0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_beta0_fmt) + +#.TYPE_ATTR +KlobucharModelParameter/beta1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_beta1_fmt) + +#.TYPE_ATTR +KlobucharModelParameter/beta2 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_beta2_3_fmt) + +#.TYPE_ATTR +KlobucharModelParameter/beta3 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_beta2_3_fmt) + +#.TYPE_ATTR +NeQuickModelParameter/ai0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_ai0_fmt) + +#.TYPE_ATTR +NeQuickModelParameter/ai1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_ai1_fmt) + +#.TYPE_ATTR +NeQuickModelParameter/ai2 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_ai2_fmt) + +#.TYPE_ATTR +GNSS-EarthOrientationParameters/teop DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_teop_fmt) + +#.TYPE_ATTR +GNSS-EarthOrientationParameters/pmX DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_pmX_Y_fmt) + +#.TYPE_ATTR +GNSS-EarthOrientationParameters/pmXdot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_pmX_Ydot_fmt) + +#.TYPE_ATTR +GNSS-EarthOrientationParameters/pmY DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_pmX_Y_fmt) + +#.TYPE_ATTR +GNSS-EarthOrientationParameters/pmYdot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_pmX_Ydot_fmt) + +#.TYPE_ATTR +GNSS-EarthOrientationParameters/deltaUT1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_deltaUT1_fmt) + +#.TYPE_ATTR +GNSS-EarthOrientationParameters/deltaUT1dot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_deltaUT1dot_fmt) + +#.TYPE_ATTR +GNSS-TimeModelElement/gnss-TimeModelRefTime DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gnss_TimeModelRefTime_fmt) + +#.TYPE_ATTR +GNSS-TimeModelElement/tA0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_tA0_fmt) + +#.TYPE_ATTR +GNSS-TimeModelElement/tA1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_tA1_fmt) + +#.TYPE_ATTR +GNSS-TimeModelElement/tA2 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_tA2_fmt) + +#.TYPE_ATTR +GNSS-TimeModelElement/gnss-TO-ID STRINGS=VALS(lpp_gnss_TO_ID_vals) + +#.FN_FTR GNSS-TimeModelElement/deltaT + proto_item_append_text(actx->created_item, " s"); + +#.FN_FTR GNSS-DifferentialCorrections/dgnss-RefTime + proto_item_append_text(actx->created_item, " s"); + +#.TYPE_ATTR +DGNSS-SgnTypeElement/gnss-StatusHealth STRINGS=VALS(lpp_gnss_StatusHealth_vals) + +#.TYPE_ATTR +DGNSS-CorrectionsElement/udre STRINGS=VALS(lpp_udre_vals) + +#.TYPE_ATTR +DGNSS-CorrectionsElement/pseudoRangeCor DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_pseudoRangeCor_fmt) + +#.TYPE_ATTR +DGNSS-CorrectionsElement/rangeRateCor DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_rangeRateCor_fmt) + +#.TYPE_ATTR +DGNSS-CorrectionsElement/udreGrowthRate STRINGS=VALS(lpp_udreGrowthRate_vals) + +#.TYPE_ATTR +DGNSS-CorrectionsElement/udreValidityTime STRINGS=VALS(lpp_udreValidityTime_vals) + +#.FN_BODY GNSS-NavModelSatelliteElement/eag_1/svHealthExt-v1240 VAL_PTR = &svHealthExt_tvb + tvbuff_t *svHealthExt_tvb = NULL; + proto_tree *subtree; +%(DEFAULT_BODY)s + +#.FN_FTR GNSS-NavModelSatelliteElement/eag_1/svHealthExt-v1240 + if (svHealthExt_tvb) { + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_svHealthExt_v1240); + proto_tree_add_bits_item(subtree, hf_lpp_svHealthExt_v1240_e5bhs, svHealthExt_tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(subtree, hf_lpp_svHealthExt_v1240_e1_bhs, svHealthExt_tvb, 2, 2, ENC_BIG_ENDIAN); + } + +#.TYPE_ATTR +StandardClockModelElement/stanClockToc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_stanClockToc_fmt) + +#.TYPE_ATTR +StandardClockModelElement/stanClockAF2 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_stanClockAF2_fmt) + +#.TYPE_ATTR +StandardClockModelElement/stanClockAF1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_stanClockAF1_fmt) + +#.TYPE_ATTR +StandardClockModelElement/stanClockAF0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_stanClockAF0_fmt) + +#.TYPE_ATTR +StandardClockModelElement/stanClockTgd DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_stanClockTgd_fmt) + +#.TYPE_ATTR +StandardClockModelElement/sisa DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sisa_fmt) + +#.TYPE_ATTR +StandardClockModelElement/stanModelID STRINGS=VALS(lpp_stanModelID_vals) + +#.TYPE_ATTR +NAV-ClockModel/navToc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navToc_fmt) + +#.TYPE_ATTR +NAV-ClockModel/navaf2 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navaf2_fmt) + +#.TYPE_ATTR +NAV-ClockModel/navaf1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navaf1_fmt) + +#.TYPE_ATTR +NAV-ClockModel/navaf0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navaf0_navTgd_fmt) + +#.TYPE_ATTR +NAV-ClockModel/navTgd DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navaf0_navTgd_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavToc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavToc_cnavTop_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavTop DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavToc_cnavTop_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavAf2 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavAf2_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavAf1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavAf1_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavAf0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavX_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavTgd DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavX_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavISCl1cp DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavX_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavISCl1cd DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavX_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavISCl1ca DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavX_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavISCl2c DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavX_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavISCl5i5 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavX_fmt) + +#.TYPE_ATTR +CNAV-ClockModel/cnavISCl5q5 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavX_fmt) + +#.TYPE_ATTR +GLONASS-ClockModel/gloTau DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloTau_gloDeltaTau_fmt) + +#.TYPE_ATTR +GLONASS-ClockModel/gloGamma DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloGamma_fmt) + +#.TYPE_ATTR +GLONASS-ClockModel/gloDeltaTau DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloTau_gloDeltaTau_fmt) + +#.TYPE_ATTR +SBAS-ClockModel/sbasTo DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasTo_fmt) + +#.TYPE_ATTR +SBAS-ClockModel/sbasAgfo DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasAgfo_fmt) + +#.TYPE_ATTR +SBAS-ClockModel/sbasAgf1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasAgf1_fmt) + +#.TYPE_ATTR +BDS-ClockModel-r12/bdsAODC-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAODC_AODE_r12_fmt) + +#.TYPE_ATTR +BDS-ClockModel-r12/bdsToc-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsToc_Toe_r12_fmt) + +#.TYPE_ATTR +BDS-ClockModel-r12/bdsA0-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsA0_r12_fmt) + +#.TYPE_ATTR +BDS-ClockModel-r12/bdsA1-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsA1_r12_fmt) + +#.TYPE_ATTR +BDS-ClockModel-r12/bdsA2-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsA2_r12_fmt) + +#.TYPE_ATTR +BDS-ClockModel-r12/bdsTgd1-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsTgd1_r12_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerToe DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerToe_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerW DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerW_M0_I0_Omega0_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerDeltaN DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerDeltaN_OmegaDot_IDot_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerM0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerW_M0_I0_Omega0_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerOmegaDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerDeltaN_OmegaDot_IDot_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerE DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerE_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerIDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerDeltaN_OmegaDot_IDot_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerAPowerHalf DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerAPowerHalf_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerI0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerW_M0_I0_Omega0_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerOmega0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerW_M0_I0_Omega0_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerCrs DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerCrs_Crc_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerCis DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerCx_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerCus DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerCx_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerCrc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerCrs_Crc_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerCic DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerCx_fmt) + +#.TYPE_ATTR +NavModelKeplerianSet/keplerCuc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_keplerCx_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navToe DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navToe_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navOmega DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navOmega_M0_I0_OmegaA0_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navDeltaN DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navDeltaN_OmegaADot_IDot_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navM0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navOmega_M0_I0_OmegaA0_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navOmegaADot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navDeltaN_OmegaADot_IDot_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navE DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navE_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navIDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navDeltaN_OmegaADot_IDot_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navAPowerHalf DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navAPowerHalf_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navI0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navOmega_M0_I0_OmegaA0_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navOmegaA0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navOmega_M0_I0_OmegaA0_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navCrs DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navCrs_Crc_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navCis DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navCx_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navCus DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navCx_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navCrc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navCrs_Crc_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navCic DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navCx_fmt) + +#.TYPE_ATTR +NavModelNAV-KeplerianSet/navCuc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navCx_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavTop DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavToc_cnavTop_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavDeltaA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavDeltaA_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavAdot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavAdot_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavDeltaNo DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavDeltaNo_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavDeltaNoDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavDeltaNoDot_fmt) + +#.FN_BODY NavModelCNAV-KeplerianSet/cnavMo VAL_PTR=&cnavMo + gint64 cnavMo; + int curr_offset = offset; +%(DEFAULT_BODY)s + +#.FN_FTR NavModelCNAV-KeplerianSet/cnavMo + PROTO_ITEM_SET_HIDDEN(actx->created_item); + actx->created_item = proto_tree_add_int64_format_value(tree, hf_index, tvb, curr_offset>>3, (offset+7-curr_offset)>>3, + cnavMo, "%g semi-circles (%"G_GINT64_MODIFIER"d)", + (double)cnavMo*pow(2, -32), cnavMo); + +#.FN_BODY NavModelCNAV-KeplerianSet/cnavE VAL_PTR=&cnavE + guint64 cnavE; + int curr_offset = offset; +%(DEFAULT_BODY)s + +#.FN_FTR NavModelCNAV-KeplerianSet/cnavE + PROTO_ITEM_SET_HIDDEN(actx->created_item); + actx->created_item = proto_tree_add_uint64_format_value(tree, hf_index, tvb, curr_offset>>3, (offset+7-curr_offset)>>3, + cnavE, "%g (%"G_GINT64_MODIFIER"u)", + (double)cnavE*pow(2, -34), cnavE); + +#.FN_BODY NavModelCNAV-KeplerianSet/cnavOmega VAL_PTR=&cnavOmega + gint64 cnavOmega; + int curr_offset = offset; +%(DEFAULT_BODY)s + +#.FN_FTR NavModelCNAV-KeplerianSet/cnavOmega + PROTO_ITEM_SET_HIDDEN(actx->created_item); + actx->created_item = proto_tree_add_int64_format_value(tree, hf_index, tvb, curr_offset>>3, (offset+7-curr_offset)>>3, + cnavOmega, "%g semi-circles (%"G_GINT64_MODIFIER"d)", + (double)cnavOmega*pow(2, -32), cnavOmega); + +#.FN_BODY NavModelCNAV-KeplerianSet/cnavOMEGA0 VAL_PTR=&cnavOMEGA0 + gint64 cnavOMEGA0; + int curr_offset = offset; +%(DEFAULT_BODY)s + +#.FN_FTR NavModelCNAV-KeplerianSet/cnavOMEGA0 + PROTO_ITEM_SET_HIDDEN(actx->created_item); + actx->created_item = proto_tree_add_int64_format_value(tree, hf_index, tvb, curr_offset>>3, (offset+7-curr_offset)>>3, + cnavOMEGA0, "%g semi-circles (%"G_GINT64_MODIFIER"d)", + (double)cnavOMEGA0*pow(2, -32), cnavOMEGA0); + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavDeltaOmegaDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavDeltaOmegaDot_IoDot_fmt) + +#.FN_BODY NavModelCNAV-KeplerianSet/cnavIo VAL_PTR=&cnavIo + gint64 cnavIo; + int curr_offset = offset; +%(DEFAULT_BODY)s + +#.FN_FTR NavModelCNAV-KeplerianSet/cnavIo + PROTO_ITEM_SET_HIDDEN(actx->created_item); + actx->created_item = proto_tree_add_int64_format_value(tree, hf_index, tvb, curr_offset>>3, (offset+7-curr_offset)>>3, + cnavIo, "%g semi-circles (%"G_GINT64_MODIFIER"d)", + (double)cnavIo*pow(2, -32), cnavIo); + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavIoDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavDeltaOmegaDot_IoDot_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavCis DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavCx_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavCic DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavCx_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavCrs DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavCrs_Crc_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavCrc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavCrs_Crc_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavCus DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavCx_fmt) + +#.TYPE_ATTR +NavModelCNAV-KeplerianSet/cnavCuc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_cnavCx_fmt) + +#.FN_FTR NavModel-GLONASS-ECEF/gloEn + proto_item_append_text(actx->created_item, " days"); + +#.FN_BODY NavModel-GLONASS-ECEF/gloP1 VAL_PTR = &gloP1_tvb HF_INDEX=-1 + tvbuff_t *gloP1_tvb = NULL; +%(DEFAULT_BODY)s + +#.FN_FTR NavModel-GLONASS-ECEF/gloP1 + if (gloP1_tvb) { + actx->created_item = proto_tree_add_uint(tree, hf_index, gloP1_tvb, 0, 1, tvb_get_bits8(gloP1_tvb, 0, 2)); + proto_item_append_text(actx->created_item, " mn"); + } + +#.TYPE_ATTR +NavModel-GLONASS-ECEF/gloX DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloX_Y_Z_fmt) + +#.TYPE_ATTR +NavModel-GLONASS-ECEF/gloXdot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloXdot_Ydot_Zdot_fmt) + +#.TYPE_ATTR +NavModel-GLONASS-ECEF/gloXdotdot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloXdotdot_Ydotdot_Zdotdot_fmt) + +#.TYPE_ATTR +NavModel-GLONASS-ECEF/gloY DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloX_Y_Z_fmt) + +#.TYPE_ATTR +NavModel-GLONASS-ECEF/gloYdot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloXdot_Ydot_Zdot_fmt) + +#.TYPE_ATTR +NavModel-GLONASS-ECEF/gloYdotdot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloXdotdot_Ydotdot_Zdotdot_fmt) + +#.TYPE_ATTR +NavModel-GLONASS-ECEF/gloZ DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloX_Y_Z_fmt) + +#.TYPE_ATTR +NavModel-GLONASS-ECEF/gloZdot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloXdot_Ydot_Zdot_fmt) + +#.TYPE_ATTR +NavModel-GLONASS-ECEF/gloZdotdot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloXdotdot_Ydotdot_Zdotdot_fmt) + +#.TYPE_ATTR +NavModel-GLONASS-ECEF/gloP1 TYPE=FT_UINT8 DISPLAY=BASE_DEC + +#.TYPE_ATTR +NavModel-SBAS-ECEF/sbasTo DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasTo_fmt) + +#.TYPE_ATTR +NavModel-SBAS-ECEF/sbasXg DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasXg_Yg_fmt) + +#.TYPE_ATTR +NavModel-SBAS-ECEF/sbasYg DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasXg_Yg_fmt) + +#.TYPE_ATTR +NavModel-SBAS-ECEF/sbasZg DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasZg_fmt) + +#.TYPE_ATTR +NavModel-SBAS-ECEF/sbasXgDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasXgDot_YgDot_fmt) + +#.TYPE_ATTR +NavModel-SBAS-ECEF/sbasYgDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasXgDot_YgDot_fmt) + +#.TYPE_ATTR +NavModel-SBAS-ECEF/sbasZgDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasZgDot_fmt) + +#.TYPE_ATTR +NavModel-SBAS-ECEF/sbasXgDotDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasXgDotDot_YgDotDot_fmt) + +#.TYPE_ATTR +NavModel-SBAS-ECEF/sbasYgDotDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasXgDotDot_YgDotDot_fmt) + +#.TYPE_ATTR +NavModel-SBAS-ECEF/sbasZgDotDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasZgDotDot_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsAODE-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAODC_AODE_r12_fmt) + +#.FN_FTR NavModel-BDS-KeplerianSet-r12/bdsURAI-r12 + proto_item_append_text(actx->created_item, " m"); + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsToe-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsToc_Toe_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsAPowerHalf-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAPowerHalf_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsE-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsE_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsW-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsW_M0_Omega0_I0_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsDeltaN-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsDeltaN_OmegaDot_IDot_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsM0-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsW_M0_Omega0_I0_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsOmega0-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsW_M0_Omega0_I0_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsOmegaDot-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsDeltaN_OmegaDot_IDot_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsI0-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsW_M0_Omega0_I0_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsIDot-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsDeltaN_OmegaDot_IDot_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsCuc-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsCuc_Cus_Cic_Cis_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsCus-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsCuc_Cus_Cic_Cis_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsCrc-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsCrc_Crs_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsCrs-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsCrc_Crs_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsCic-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsCuc_Cus_Cic_Cis_r12_fmt) + +#.TYPE_ATTR +NavModel-BDS-KeplerianSet-r12/bdsCis-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsCuc_Cus_Cic_Cis_r12_fmt) + +#.FN_FTR GNSS-DataBitAssistance/gnss-TOD + proto_item_append_text(actx->created_item, " s"); + +#.FN_FTR GNSS-DataBitAssistance/gnss-TODfrac + proto_item_append_text(actx->created_item, " ms"); + +#.FN_FTR GNSS-AcquisitionAssistance/confidence-r10 + proto_item_append_text(actx->created_item, " %%"); + +#.TYPE_ATTR +GNSS-AcquisitionAssistElement/doppler0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_doppler0_fmt) + +#.TYPE_ATTR +GNSS-AcquisitionAssistElement/doppler1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_doppler1_fmt) + +#.TYPE_ATTR +GNSS-AcquisitionAssistElement/dopplerUncertainty STRINGS=VALS(lpp_dopplerUncertainty_vals) + +#.TYPE_ATTR +GNSS-AcquisitionAssistElement/codePhase DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_codePhase_fmt) + +#.FN_FTR GNSS-AcquisitionAssistElement/intCodePhase + proto_item_append_text(actx->created_item, " ms"); + +#.TYPE_ATTR +GNSS-AcquisitionAssistElement/codePhaseSearchWindow DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lpp_codePhaseSearchWindow_vals_ext + +#.TYPE_ATTR +GNSS-AcquisitionAssistElement/azimuth DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_azimuth_elevation_fmt) + +#.TYPE_ATTR +GNSS-AcquisitionAssistElement/elevation DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_azimuth_elevation_fmt) + +#.FN_BODY GNSS-Almanac/toa VAL_PTR = &toa + guint32 toa, val; + int len, old_offset = offset; + T_GNSS_ID_enum gnss_id = (T_GNSS_ID_enum)GPOINTER_TO_UINT(actx->private_data); +%(DEFAULT_BODY)s + +#.FN_FTR GNSS-Almanac/toa + len = (offset-old_offset) >> 3 ? (offset-old_offset) >> 3 : 1; + val = (gnss_id == T_GNSS_ID_GALILEO) ? 600*toa : 4096*toa; + actx->created_item = proto_tree_add_uint_format_value(tree, hf_lpp_toa, tvb, old_offset, len, + toa, "%u s (%u)", val, toa); + +#.FN_BODY GNSS-Almanac/eag_1/toa-ext-v1240 VAL_PTR = &toa_ext + guint32 toa_ext, val; + int len, old_offset = offset; + T_GNSS_ID_enum gnss_id = (T_GNSS_ID_enum)GPOINTER_TO_UINT(actx->private_data); +%(DEFAULT_BODY)s + +#.FN_FTR GNSS-Almanac/eag_1/toa-ext-v1240 + len = (offset-old_offset) >> 3 ? (offset-old_offset) >> 3 : 1; + val = (gnss_id == T_GNSS_ID_GALILEO) ? 600*toa_ext : 4096*toa_ext; + actx->created_item = proto_tree_add_uint_format_value(tree, hf_lpp_toa_ext_v1240, tvb, old_offset, len, + toa_ext, "%u s (%u)", val, toa_ext); + +#.TYPE_ATTR +AlmanacKeplerianSet/kepAlmanacE DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_kepAlmanacE_fmt) + +#.TYPE_ATTR +AlmanacKeplerianSet/kepAlmanacDeltaI DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_kepAlmanacDeltaI_fmt) + +#.TYPE_ATTR +AlmanacKeplerianSet/kepAlmanacOmegaDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_kepAlmanacOmegaDot_fmt) + +#.FN_BODY AlmanacKeplerianSet/kepSV-StatusINAV VAL_PTR = &statusINAV_tvb + tvbuff_t *statusINAV_tvb = NULL; + proto_tree *subtree; +%(DEFAULT_BODY)s + +#.FN_FTR AlmanacKeplerianSet/kepSV-StatusINAV + if (statusINAV_tvb) { + subtree = proto_item_add_subtree(actx->created_item, ett_kepSV_StatusINAV); + proto_tree_add_bits_item(subtree, hf_lpp_kepSV_StatusINAV_e5bhs, statusINAV_tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(subtree, hf_lpp_kepSV_StatusINAV_e1_bhs, statusINAV_tvb, 2, 2, ENC_BIG_ENDIAN); + } + +#.FN_BODY AlmanacKeplerianSet/kepSV-StatusFNAV VAL_PTR = &statusFNAV_tvb + tvbuff_t *statusFNAV_tvb = NULL; + proto_tree *subtree; +%(DEFAULT_BODY)s + +#.FN_FTR AlmanacKeplerianSet/kepSV-StatusFNAV + if (statusFNAV_tvb) { + subtree = proto_item_add_subtree(actx->created_item, ett_kepSV_StatusFNAV); + proto_tree_add_bits_item(subtree, hf_lpp_kepSV_StatusFNAV_e5ahs, statusFNAV_tvb, 0, 2, ENC_BIG_ENDIAN); + } + +#.TYPE_ATTR +AlmanacKeplerianSet/kepAlmanacAPowerHalf DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_kepAlmanacAPowerHalf_fmt) + +#.TYPE_ATTR +AlmanacKeplerianSet/kepAlmanacOmega0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_kepAlmanacOmega0_W_M0_fmt) + +#.TYPE_ATTR +AlmanacKeplerianSet/kepAlmanacW DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_kepAlmanacOmega0_W_M0_fmt) + +#.TYPE_ATTR +AlmanacKeplerianSet/kepAlmanacM0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_kepAlmanacOmega0_W_M0_fmt) + +#.TYPE_ATTR +AlmanacKeplerianSet/kepAlmanacAF0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_kepAlmanacAF0_fmt) + +#.TYPE_ATTR +AlmanacKeplerianSet/kepAlmanacAF1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_kepAlmanacAF1_fmt) + +#.TYPE_ATTR +AlmanacNAV-KeplerianSet/navAlmE DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navAlmE_fmt) + +#.TYPE_ATTR +AlmanacNAV-KeplerianSet/navAlmDeltaI DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navAlmDeltaI_fmt) + +#.TYPE_ATTR +AlmanacNAV-KeplerianSet/navAlmOMEGADOT DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navAlmOMEGADOT_fmt) + +#.TYPE_ATTR +AlmanacNAV-KeplerianSet/navAlmSqrtA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navAlmSqrtA_fmt) + +#.TYPE_ATTR +AlmanacNAV-KeplerianSet/navAlmOMEGAo DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navAlmOMEGAo_Omega_Mo_fmt) + +#.TYPE_ATTR +AlmanacNAV-KeplerianSet/navAlmOmega DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navAlmOMEGAo_Omega_Mo_fmt) + +#.TYPE_ATTR +AlmanacNAV-KeplerianSet/navAlmMo DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navAlmOMEGAo_Omega_Mo_fmt) + +#.TYPE_ATTR +AlmanacNAV-KeplerianSet/navAlmaf0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navAlmaf0_fmt) + +#.TYPE_ATTR +AlmanacNAV-KeplerianSet/navAlmaf1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_navAlmaf1_fmt) + +#.TYPE_ATTR +AlmanacReducedKeplerianSet/redAlmDeltaA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_redAlmDeltaA_fmt) + +#.TYPE_ATTR +AlmanacReducedKeplerianSet/redAlmOmega0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_redAlmOmega0_Phi0_fmt) + +#.TYPE_ATTR +AlmanacMidiAlmanacSet/midiAlmE DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_midiAlmE_fmt) + +#.TYPE_ATTR +AlmanacMidiAlmanacSet/midiAlmDeltaI DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_midiAlmDeltaI_fmt) + +#.TYPE_ATTR +AlmanacMidiAlmanacSet/midiAlmOmegaDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_midiAlmOmegaDot_fmt) + +#.TYPE_ATTR +AlmanacMidiAlmanacSet/midiAlmSqrtA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_midiAlmSqrtA_fmt) + +#.TYPE_ATTR +AlmanacMidiAlmanacSet/midiAlmOmega0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_midiAlmOmega0_Omega_Mo_fmt) + +#.TYPE_ATTR +AlmanacMidiAlmanacSet/midiAlmOmega DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_midiAlmOmega0_Omega_Mo_fmt) + +#.TYPE_ATTR +AlmanacMidiAlmanacSet/midiAlmMo DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_midiAlmOmega0_Omega_Mo_fmt) + +#.TYPE_ATTR +AlmanacMidiAlmanacSet/midiAlmaf0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_midiAlmaf0_fmt) + +#.TYPE_ATTR +AlmanacMidiAlmanacSet/midiAlmaf1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_midiAlmaf1_fmt) + +#.FN_FTR AlmanacGLONASS-AlmanacSet/gloAlm-NA + proto_item_append_text(actx->created_item, " days"); + +#.TYPE_ATTR +AlmanacGLONASS-AlmanacSet/gloAlmLambdaA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloAlmLambdaA_DeltaIa_fmt) + +#.TYPE_ATTR +AlmanacGLONASS-AlmanacSet/gloAlmtlambdaA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloAlmtlambdaA_fmt) + +#.TYPE_ATTR +AlmanacGLONASS-AlmanacSet/gloAlmDeltaIa DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloAlmLambdaA_DeltaIa_fmt) + +#.TYPE_ATTR +AlmanacGLONASS-AlmanacSet/gloAlmDeltaTA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloAlmDeltaTA_fmt) + +#.TYPE_ATTR +AlmanacGLONASS-AlmanacSet/gloAlmDeltaTdotA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloAlmDeltaTdotA_fmt) + +#.TYPE_ATTR +AlmanacGLONASS-AlmanacSet/gloAlmEpsilonA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloAlmEpsilonA_fmt) + +#.TYPE_ATTR +AlmanacGLONASS-AlmanacSet/gloAlmOmegaA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloAlmOmegaA_fmt) + +#.TYPE_ATTR +AlmanacGLONASS-AlmanacSet/gloAlmTauA DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gloAlmTauA_fmt) + +#.TYPE_ATTR +AlmanacECEF-SBAS-AlmanacSet/sbasAlmXg DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasAlmXg_Yg_fmt) + +#.TYPE_ATTR +AlmanacECEF-SBAS-AlmanacSet/sbasAlmYg DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasAlmXg_Yg_fmt) + +#.TYPE_ATTR +AlmanacECEF-SBAS-AlmanacSet/sbasAlmZg DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasAlmZg_fmt) + +#.TYPE_ATTR +AlmanacECEF-SBAS-AlmanacSet/sbasAlmXgdot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasAlmXgdot_YgDot_fmt) + +#.TYPE_ATTR +AlmanacECEF-SBAS-AlmanacSet/sbasAlmYgDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasAlmXgdot_YgDot_fmt) + +#.TYPE_ATTR +AlmanacECEF-SBAS-AlmanacSet/sbasAlmZgDot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasAlmZgDot_fmt) + +#.TYPE_ATTR +AlmanacECEF-SBAS-AlmanacSet/sbasAlmTo DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_sbasAlmTo_fmt) + +#.TYPE_ATTR +AlmanacBDS-AlmanacSet-r12/bdsAlmToa-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAlmToa_r12_fmt) + +#.TYPE_ATTR +AlmanacBDS-AlmanacSet-r12/bdsAlmSqrtA-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAlmSqrtA_r12_fmt) + +#.TYPE_ATTR +AlmanacBDS-AlmanacSet-r12/bdsAlmE-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAlmE_r12_fmt) + +#.TYPE_ATTR +AlmanacBDS-AlmanacSet-r12/bdsAlmW-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAlmW_M0_Omega0_r12_fmt) + +#.TYPE_ATTR +AlmanacBDS-AlmanacSet-r12/bdsAlmM0-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAlmW_M0_Omega0_r12_fmt) + +#.TYPE_ATTR +AlmanacBDS-AlmanacSet-r12/bdsAlmOmega0-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAlmW_M0_Omega0_r12_fmt) + +#.TYPE_ATTR +AlmanacBDS-AlmanacSet-r12/bdsAlmOmegaDot-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAlmOmegaDot_r12_fmt) + +#.TYPE_ATTR +AlmanacBDS-AlmanacSet-r12/bdsAlmDeltaI-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAlmDeltaI_r12_fmt) + +#.TYPE_ATTR +AlmanacBDS-AlmanacSet-r12/bdsAlmA0-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAlmA0_r12_fmt) + +#.TYPE_ATTR +AlmanacBDS-AlmanacSet-r12/bdsAlmA1-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bdsAlmA1_r12_fmt) + +#.FN_BODY AlmanacBDS-AlmanacSet-r12/bdsSvHealth-r12 VAL_PTR = &bdsSvHealth_tvb + tvbuff_t *bdsSvHealth_tvb = NULL; + proto_tree *subtree; +%(DEFAULT_BODY)s + +#.FN_FTR AlmanacBDS-AlmanacSet-r12/bdsSvHealth-r12 + if (bdsSvHealth_tvb) { + guint16 bits; + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bdsSvHealth_r12); + bits = tvb_get_bits16(bdsSvHealth_tvb, 0, 9,ENC_BIG_ENDIAN); + if (bits == 0x1ff) { + proto_tree_add_boolean_bits_format_value(subtree, hf_lpp_bdsSvHealth_r12_sat_clock, bdsSvHealth_tvb, 0, 1, 1, + "Satellite is in failure or permanently shut off (1)"); + } else if (bits == 0x100) { + proto_tree_add_boolean_bits_format_value(subtree, hf_lpp_bdsSvHealth_r12_sat_clock, bdsSvHealth_tvb, 0, 1, 1, + "Satellite clock is unavailable (1)"); + } else { + proto_tree_add_bits_item(subtree, hf_lpp_bdsSvHealth_r12_sat_clock, bdsSvHealth_tvb, 0, 1, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(subtree, hf_lpp_bdsSvHealth_r12_b1i, bdsSvHealth_tvb, 1, 1, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(subtree, hf_lpp_bdsSvHealth_r12_b2i, bdsSvHealth_tvb, 2, 1, ENC_BIG_ENDIAN); + proto_tree_add_bits_item(subtree, hf_lpp_bdsSvHealth_r12_nav, bdsSvHealth_tvb, 7, 1, ENC_BIG_ENDIAN); + } + } + +#.TYPE_ATTR +UTC-ModelSet1/gnss-Utc-A1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gnss_Utc_A1_fmt) + +#.TYPE_ATTR +UTC-ModelSet1/gnss-Utc-A0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gnss_Utc_A0_fmt) + +#.TYPE_ATTR +UTC-ModelSet1/gnss-Utc-Tot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gnss_Utc_Tot_fmt) + +#.FN_FTR UTC-ModelSet1/gnss-Utc-WNt + proto_item_append_text(actx->created_item, " weeks"); + +#.FN_FTR UTC-ModelSet1/gnss-Utc-DeltaTls + proto_item_append_text(actx->created_item, " s"); + +#.FN_FTR UTC-ModelSet1/gnss-Utc-WNlsf + proto_item_append_text(actx->created_item, " weeks"); + +#.FN_FTR UTC-ModelSet1/gnss-Utc-DN + proto_item_append_text(actx->created_item, " days"); + +#.FN_FTR UTC-ModelSet1/gnss-Utc-DeltaTlsf + proto_item_append_text(actx->created_item, " s"); + +#.TYPE_ATTR +UTC-ModelSet2/utcA0 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_tA0_fmt) + +#.TYPE_ATTR +UTC-ModelSet2/utcA1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_tA1_fmt) + +#.TYPE_ATTR +UTC-ModelSet2/utcA2 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_tA2_fmt) + +#.FN_FTR UTC-ModelSet2/utcDeltaTls + proto_item_append_text(actx->created_item, " s"); + +#.TYPE_ATTR +UTC-ModelSet2/utcTot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gnss_TimeModelRefTime_fmt) + +#.FN_FTR UTC-ModelSet2/utcWNot + proto_item_append_text(actx->created_item, " weeks"); + +#.FN_FTR UTC-ModelSet2/utcWNlsf + proto_item_append_text(actx->created_item, " weeks"); + +#.FN_FTR UTC-ModelSet2/utcDN + proto_item_append_text(actx->created_item, " days"); + +#.FN_FTR UTC-ModelSet2/utcDeltaTlsf + proto_item_append_text(actx->created_item, " s"); + +#.FN_FTR UTC-ModelSet3/nA + proto_item_append_text(actx->created_item, " days"); + +#.TYPE_ATTR +UTC-ModelSet3/tauC DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_tauC_fmt) + +#.TYPE_ATTR +UTC-ModelSet3/b1 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_b1_fmt) + +#.TYPE_ATTR +UTC-ModelSet3/b2 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_b2_fmt) + +#.FN_BODY UTC-ModelSet3/kp VAL_PTR = &kp_tvb HF_INDEX=-1 + tvbuff_t *kp_tvb = NULL; +%(DEFAULT_BODY)s + +#.FN_FTR UTC-ModelSet3/kp + if (kp_tvb) { + actx->created_item = proto_tree_add_uint(tree, hf_index, kp_tvb, 0, 1, tvb_get_bits8(kp_tvb, 0, 2)); + } + +#.TYPE_ATTR +UTC-ModelSet3/kp TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lpp_kp_vals) + +#.TYPE_ATTR +UTC-ModelSet4/utcA1wnt DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gnss_Utc_A1_fmt) + +#.TYPE_ATTR +UTC-ModelSet4/utcA0wnt DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gnss_Utc_A0_fmt) + +#.TYPE_ATTR +UTC-ModelSet4/utcTot DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gnss_Utc_Tot_fmt) + +#.FN_FTR UTC-ModelSet4/utcWNt + proto_item_append_text(actx->created_item, " weeks"); + +#.FN_FTR UTC-ModelSet4/utcDeltaTls + proto_item_append_text(actx->created_item, " s"); + +#.FN_FTR UTC-ModelSet4/utcWNlsf + proto_item_append_text(actx->created_item, " weeks"); + +#.FN_FTR UTC-ModelSet4/utcDN + proto_item_append_text(actx->created_item, " days"); + +#.FN_FTR UTC-ModelSet4/utcDeltaTlsf + proto_item_append_text(actx->created_item, " s"); + +#.TYPE_ATTR +UTC-ModelSet4/utcStandardID TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lpp_utcStandardID_vals) + +#.TYPE_ATTR +UTC-ModelSet5-r12/utcA0-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gnss_Utc_A0_fmt) + +#.TYPE_ATTR +UTC-ModelSet5-r12/utcA1-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_gnss_Utc_A1_fmt) + +#.FN_FTR UTC-ModelSet5-r12/utcDeltaTls-r12 + proto_item_append_text(actx->created_item, " s"); + +#.FN_FTR UTC-ModelSet5-r12/utcWNlsf-r12 + proto_item_append_text(actx->created_item, " weeks"); + +#.FN_FTR UTC-ModelSet5-r12/utcDN-r12 + proto_item_append_text(actx->created_item, " days"); + +#.FN_FTR UTC-ModelSet5-r12/utcDeltaTlsf-r12 + proto_item_append_text(actx->created_item, " s"); + +#.FN_FTR BDS-DifferentialCorrections-r12/dbds-RefTime-r12 + proto_item_append_text(actx->created_item, " s"); + +#.TYPE_ATTR +DBDS-CorrectionElement-r12/bds-UDREI-r12 TYPE=FT_UINT8 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lpp_bds_UDREI_vals_ext + +#.TYPE_ATTR +DBDS-CorrectionElement-r12/bds-RURAI-r12 TYPE=FT_UINT8 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lpp_bds_RURAI_vals_ext + +#.TYPE_ATTR +DBDS-CorrectionElement-r12/bds-ECC-DeltaT-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bds_ECC_DeltaT_r12_fmt) + +#.FN_FTR BDS-GridModelParameter-r12/bds-RefTime-r12 + proto_item_append_text(actx->created_item, " s"); + +#.TYPE_ATTR +GridIonElement-r12/dt-r12 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_bds_GridIonElement_dt_r12_fmt) + +#.TYPE_ATTR +GridIonElement-r12/givei-r12 TYPE=FT_UINT8 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lpp_bds_givei_vals_ext + +#.FN_FTR StoredNavListInfo/gnss-WeekOrDay + proto_item_append_text(actx->created_item, " (days for glonass, weeks otherwise)"); + +#.FN_FTR StoredNavListInfo/gnss-Toe + proto_item_append_text(actx->created_item, " (units of 15 mns for glonass, hours otherwise)"); + +#.FN_FTR StoredNavListInfo/t-toeLimit + proto_item_append_text(actx->created_item, " (units of 30 mns for glonass, hours otherwise)"); + +#.FN_FTR GNSS-DataBitAssistanceReq/gnss-TOD-Req + proto_item_append_text(actx->created_item, " s"); + +#.FN_FTR GNSS-DataBitAssistanceReq/gnss-TOD-FracReq + proto_item_append_text(actx->created_item, " ms"); + +#.TYPE_ATTR +GNSS-DataBitAssistanceReq/dataBitInterval TYPE=FT_UINT8 DISPLAY=BASE_DEC|BASE_EXT_STRING STRINGS=&lpp_dataBitInterval_vals_ext + +#.FN_FTR MeasurementReferenceTime/gnss-TOD-msec + proto_item_append_text(actx->created_item, " ms"); + +#.TYPE_ATTR +MeasurementReferenceTime/gnss-TOD-frac DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_fractionalSecondsFromFrameStructureStart_fmt) + +#.TYPE_ATTR +MeasurementReferenceTime/gnss-TOD-unc DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_referenceTimeUnc_fmt) + +#.FN_FTR MeasurementReferenceTime/networkTime/gSM/deltaGNSS-TOD + proto_item_append_text(actx->created_item, " ms"); + +#.FN_FTR GNSS-SgnMeasElement/gnss-CodePhaseAmbiguity + proto_item_append_text(actx->created_item, " ms"); + +#.FN_FTR GNSS-SatMeasElement/cNo + proto_item_append_text(actx->created_item, " dB-Hz"); + +#.TYPE_ATTR +GNSS-SatMeasElement/carrierQualityInd TYPE=FT_UINT8 DISPLAY=BASE_DEC STRINGS=VALS(lpp_carrierQualityInd_vals) + +#.TYPE_ATTR +GNSS-SatMeasElement/codePhase DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_GNSS_SatMeas_codePhase_fmt) + +#.FN_FTR GNSS-SatMeasElement/integerCodePhase + proto_item_append_text(actx->created_item, " ms"); + +#.TYPE_ATTR +GNSS-SatMeasElement/codePhaseRMSError DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_codePhaseRMSError_fmt) + +#.TYPE_ATTR +GNSS-SatMeasElement/doppler DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_doppler_fmt) + +#.TYPE_ATTR +GNSS-SatMeasElement/adr DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_adr_fmt) + +#.FN_BODY GNSS-IonosphericModelSupport/ionoModel VAL_PTR = &ionoModel_tvb LEN_PTR = &len + tvbuff_t *ionoModel_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(ionoModel_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_ionoModel_klobuchar, ionoModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_ionoModel_neQuick, ionoModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY GNSS-NavigationModelSupport/clockModel VAL_PTR = &clockModel_tvb LEN_PTR = &len + tvbuff_t *clockModel_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(clockModel_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_clockModel_model_1, clockModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_clockModel_model_2, clockModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_clockModel_model_3, clockModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 4) { + proto_tree_add_item(subtree, hf_lpp_T_clockModel_model_4, clockModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 5) { + proto_tree_add_item(subtree, hf_lpp_T_clockModel_model_5, clockModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 6) { + proto_tree_add_item(subtree, hf_lpp_T_clockModel_model_6, clockModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY GNSS-NavigationModelSupport/orbitModel VAL_PTR = &orbitModel_tvb LEN_PTR = &len + tvbuff_t *orbitModel_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(orbitModel_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_orbitModel_model_1, orbitModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_orbitModel_model_2, orbitModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_orbitModel_model_3, orbitModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 4) { + proto_tree_add_item(subtree, hf_lpp_T_orbitModel_model_4, orbitModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 5) { + proto_tree_add_item(subtree, hf_lpp_T_orbitModel_model_5, orbitModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 6) { + proto_tree_add_item(subtree, hf_lpp_T_orbitModel_model_6, orbitModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY GNSS-AlmanacSupport/almanacModel VAL_PTR = &almanacModel_tvb LEN_PTR = &len + tvbuff_t *almanacModel_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(almanacModel_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_almanacModel_model_1, almanacModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_almanacModel_model_2, almanacModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_almanacModel_model_3, almanacModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 4) { + proto_tree_add_item(subtree, hf_lpp_T_almanacModel_model_4, almanacModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 5) { + proto_tree_add_item(subtree, hf_lpp_T_almanacModel_model_5, almanacModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 6) { + proto_tree_add_item(subtree, hf_lpp_T_almanacModel_model_6, almanacModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 7) { + proto_tree_add_item(subtree, hf_lpp_T_almanacModel_model_7, almanacModel_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY GNSS-UTC-ModelSupport/utc-Model VAL_PTR = &utc_Model_tvb LEN_PTR = &len + tvbuff_t *utc_Model_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(utc_Model_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_utc_Model_model_1, utc_Model_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_utc_Model_model_2, utc_Model_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_utc_Model_model_3, utc_Model_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 4) { + proto_tree_add_item(subtree, hf_lpp_T_utc_Model_model_4, utc_Model_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 5) { + proto_tree_add_item(subtree, hf_lpp_T_utc_Model_model_5, utc_Model_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY GNSS-ID/gnss-id VAL_PTR = &gnss_id + guint32 gnss_id; +%(DEFAULT_BODY)s + actx->private_data = GUINT_TO_POINTER(gnss_id); + +#.FN_BODY GNSS-ID-Bitmap/gnss-ids VAL_PTR = &gnss_ids_tvb LEN_PTR = &len + tvbuff_t *gnss_ids_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(gnss_ids_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_gnss_ids_gps, gnss_ids_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_gnss_ids_sbas, gnss_ids_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_gnss_ids_qzss, gnss_ids_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 4) { + proto_tree_add_item(subtree, hf_lpp_T_gnss_ids_galileo, gnss_ids_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 5) { + proto_tree_add_item(subtree, hf_lpp_T_gnss_ids_glonass, gnss_ids_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 6) { + proto_tree_add_item(subtree, hf_lpp_T_gnss_ids_bds, gnss_ids_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY SBAS-IDs/sbas-IDs VAL_PTR = &sbas_IDs_tvb LEN_PTR = &len + tvbuff_t *sbas_IDs_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(sbas_IDs_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_sbas_IDs_waas, sbas_IDs_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_sbas_IDs_egnos, sbas_IDs_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_sbas_IDs_msas, sbas_IDs_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 4) { + proto_tree_add_item(subtree, hf_lpp_T_sbas_IDs_gagan, sbas_IDs_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.TYPE_ATTR +MeasuredResultsElement/rsrp-Result DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_rsrp_Result_fmt) + +#.TYPE_ATTR +MeasuredResultsElement/rsrq-Result DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_rsrq_Result_fmt) + +#.TYPE_ATTR +MeasuredResultsElement/ue-RxTxTimeDiff DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_ue_RxTxTimeDiff_fmt) + +#.FN_BODY ECID-RequestLocationInformation/requestedMeasurements VAL_PTR = &requestedMeasurements_tvb LEN_PTR = &len + tvbuff_t *requestedMeasurements_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(requestedMeasurements_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_requestedMeasurements_rsrpReq, requestedMeasurements_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_requestedMeasurements_rsrqReq, requestedMeasurements_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_requestedMeasurements_ueRxTxReq, requestedMeasurements_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY ECID-ProvideCapabilities/ecid-MeasSupported VAL_PTR = &ecid_MeasSupported_tvb LEN_PTR = &len + tvbuff_t *ecid_MeasSupported_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(ecid_MeasSupported_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_ecid_MeasSupported_rsrpSup, ecid_MeasSupported_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_ecid_MeasSupported_rsrqSup, ecid_MeasSupported_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_ecid_MeasSupported_ueRxTxSup, ecid_MeasSupported_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.TYPE_ATTR +MBS-BeaconMeasElement-r13/codePhase-r13 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_mbs_beaconMeasElt_codePhase_fmt) + +#.TYPE_ATTR +MBS-BeaconMeasElement-r13/codePhaseRMSError-r13 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(lpp_codePhaseRMSError_fmt) + +#.FN_BODY TBS-ProvideCapabilities-r13/tbs-Modes-r13 VAL_PTR = &tbs_Modes_tvb LEN_PTR = &len + tvbuff_t *tbs_Modes_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(tbs_Modes_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_tbs_Modes_r13_standalone, tbs_Modes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_tbs_Modes_r13_ue_assisted, tbs_Modes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_FTR Sensor-MeasurementList-r13/uncompensatedBarometricPressure-r13 + proto_item_append_text(actx->created_item, " Pa"); + +#.FN_BODY Sensor-ProvideCapabilities-r13/sensor-Modes-r13 VAL_PTR = &sensor_Modes_tvb LEN_PTR = &len + tvbuff_t *sensor_Modes_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(sensor_Modes_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_sensor_Modes_r13_standalone, sensor_Modes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_sensor_Modes_r13_ue_assisted, sensor_Modes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_FTR WLAN-MeasurementElement-r13/rssi-r13 + proto_item_append_text(actx->created_item, " dBm"); + +#.TYPE_ATTR +WLAN-AP-Identifier-r13/bssid-r13 TYPE=FT_ETHER + +#.TYPE_ATTR +WLAN-AP-Identifier-r13/ssid-r13 TYPE=FT_STRING DISPLAY=STR_ASCII + +#.FN_BODY WLAN-AP-Identifier-r13/ssid-r13 VAL_PTR=&ssid_tvb HF_INDEX=-1 + tvbuff_t *ssid_tvb = NULL; + +%(DEFAULT_BODY)s + actx->created_item = proto_tree_add_item(tree, hf_index, ssid_tvb, 0, -1, ENC_ASCII|ENC_NA); + +#.FN_BODY WLAN-RequestLocationInformation-r13/requestedMeasurements-r13 VAL_PTR = &requestedMeasurements_tvb LEN_PTR = &len + tvbuff_t *requestedMeasurements_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(requestedMeasurements_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_requestedMeasurements_r13_rssi, requestedMeasurements_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_requestedMeasurements_r13_rtt, requestedMeasurements_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY WLAN-ProvideCapabilities-r13/wlan-Modes-r13 VAL_PTR = &wlan_Modes_tvb LEN_PTR = &len + tvbuff_t *wlan_Modes_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(wlan_Modes_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_wlan_Modes_r13_standalone, wlan_Modes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_wlan_Modes_r13_ue_assisted, wlan_Modes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY WLAN-ProvideCapabilities-r13/wlan-MeasSupported-r13 VAL_PTR = &wlan_MeasSupported_tvb LEN_PTR = &len + tvbuff_t *wlan_MeasSupported_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(wlan_MeasSupported_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_wlan_MeasSupported_r13_rssi_r13, wlan_MeasSupported_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 2) { + proto_tree_add_item(subtree, hf_lpp_T_wlan_MeasSupported_r13_rtt_r13, wlan_MeasSupported_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.TYPE_ATTR +BT-MeasurementElement-r13/btAddr-r13 TYPE=FT_ETHER DISPLAY=BASE_NONE + +#.FN_BODY BT-MeasurementElement-r13/btAddr-r13 VAL_PTR=&btAddr_tvb HF_INDEX=-1 + tvbuff_t *btAddr_tvb = NULL; + +%(DEFAULT_BODY)s + actx->created_item = proto_tree_add_item(tree, hf_index, btAddr_tvb, 0, 6, ENC_NA); + +#.FN_FTR BT-MeasurementElement-r13/rssi-r13 + proto_item_append_text(actx->created_item, " dBm"); + +#.FN_BODY BT-RequestLocationInformation-r13/requestedMeasurements-r13 VAL_PTR = &requestedMeasurements_tvb LEN_PTR = &len + tvbuff_t *requestedMeasurements_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(requestedMeasurements_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_requestedMeasurements_r13_01_rssi, requestedMeasurements_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } + +#.FN_BODY BT-ProvideCapabilities-r13/bt-Modes-r13 VAL_PTR = &bt_Modes_tvb LEN_PTR = &len + tvbuff_t *bt_Modes_tvb = NULL; + int len; + +%(DEFAULT_BODY)s + if(bt_Modes_tvb){ + proto_tree *subtree; + + subtree = proto_item_add_subtree(actx->created_item, ett_lpp_bitmap); + if (len >= 1) { + proto_tree_add_item(subtree, hf_lpp_T_bt_Modes_r13_standalone, bt_Modes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + if (len >= 3) { + proto_tree_add_item(subtree, hf_lpp_T_bt_Modes_r13_ue_assisted, bt_Modes_tvb, 0, 1, ENC_BIG_ENDIAN); + } + } diff --git a/epan/dissectors/asn1/lpp/packet-lpp-template.c b/epan/dissectors/asn1/lpp/packet-lpp-template.c new file mode 100644 index 0000000000..ba31d56c14 --- /dev/null +++ b/epan/dissectors/asn1/lpp/packet-lpp-template.c @@ -0,0 +1,1726 @@ +/* packet-lpp.c + * Routines for 3GPP LTE Positioning Protocol (LPP) packet dissection + * Copyright 2011-2016 Pascal Quantin <pascal.quantin@gmail.com> + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Ref 3GPP TS 36.355 version 13.0.0 Release 13 + * http://www.3gpp.org + */ + +#include "config.h" + +#include "math.h" + +#include <epan/packet.h> +#include <epan/asn1.h> +#include <epan/tfs.h> + +#include "packet-per.h" +#include "packet-lpp.h" + +#define PNAME "LTE Positioning Protocol (LPP)" +#define PSNAME "LPP" +#define PFNAME "lpp" + +void proto_register_lpp(void); +void proto_reg_handoff_lpp(void); + +/* Initialize the protocol and registered fields */ +static int proto_lpp = -1; + +#include "packet-lpp-hf.c" +static int hf_lpp_svHealthExt_v1240_e5bhs = -1; +static int hf_lpp_svHealthExt_v1240_e1_bhs = -1; +static int hf_lpp_kepSV_StatusINAV_e5bhs = -1; +static int hf_lpp_kepSV_StatusINAV_e1_bhs = -1; +static int hf_lpp_kepSV_StatusFNAV_e5ahs = -1; +static int hf_lpp_bdsSvHealth_r12_sat_clock = -1; +static int hf_lpp_bdsSvHealth_r12_b1i = -1; +static int hf_lpp_bdsSvHealth_r12_b2i = -1; +static int hf_lpp_bdsSvHealth_r12_nav = -1; + +static dissector_handle_t lppe_handle = NULL; + +static guint32 lpp_epdu_id = -1; + +/* Initialize the subtree pointers */ +static gint ett_lpp = -1; +static gint ett_lpp_bitmap = -1; +static gint ett_lpp_svHealthExt_v1240 = -1; +static gint ett_kepSV_StatusINAV = -1; +static gint ett_kepSV_StatusFNAV = -1; +static gint ett_lpp_bdsSvHealth_r12 = -1; +#include "packet-lpp-ett.c" + +/* Include constants */ +#include "packet-lpp-val.h" + +static const value_string lpp_ePDU_ID_vals[] = { + { 1, "OMA LPP extensions (LPPe)"}, + { 0, NULL} +}; + +static void +lpp_degreesLatitude_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%f degrees (%u)", + ((float)v/8388607.0)*90, v); +} + +static void +lpp_degreesLongitude_fmt(gchar *s, guint32 v) +{ + gint32 longitude = (gint32) v; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f degrees (%d)", + ((float)longitude/8388608.0)*180, longitude); +} + +static void +lpp_uncertainty_fmt(gchar *s, guint32 v) +{ + double uncertainty = 10*(pow(1.1, (double)v)-1); + + if (uncertainty < 1000) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m (%u)", uncertainty, v); + } else { + g_snprintf(s, ITEM_LABEL_LENGTH, "%f km (%u)", uncertainty/1000, v); + } +} + +static void +lpp_angle_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u degrees (%u)", 2*v, v); +} + +static void +lpp_confidence_fmt(gchar *s, guint32 v) +{ + if (v == 0) { + g_snprintf(s, ITEM_LABEL_LENGTH, "no information (0)"); + } else { + g_snprintf(s, ITEM_LABEL_LENGTH, "%u %%", v); + } +} + +static void +lpp_altitude_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u m", v); +} + +static void +lpp_uncertaintyAltitude_fmt(gchar *s, guint32 v) +{ + double uncertainty = 45*(pow(1.025, (double)v)-1); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m (%u)", uncertainty, v); +} + +static void +lpp_radius_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u m (%u)", 5*v, v); +} + +static void +lpp_expectedRSTD_fmt(gchar *s, guint32 v) +{ + gint32 rstd = 3*((gint32)v-8192); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%d Ts (%u)", rstd, v); +} + +static void +lpp_expectedRSTD_Uncertainty_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u Ts (%u)", 3*v, v); +} + +static void +lpp_rstd_fmt(gchar *s, guint32 v) +{ + if (v == 0) { + g_snprintf(s, ITEM_LABEL_LENGTH, "RSTD < -15391 Ts (0)"); + } else if (v < 2260) { + g_snprintf(s, ITEM_LABEL_LENGTH, "-%u Ts <= RSTD < -%u Ts (%u)", 15391-5*(v-1), 15391-5*v, v); + } else if (v < 6355) { + g_snprintf(s, ITEM_LABEL_LENGTH, "-%u Ts <= RSTD < -%u Ts (%u)", 6356-v, 6355-v, v); + } else if (v == 6355) { + g_snprintf(s, ITEM_LABEL_LENGTH, "-1 Ts <= RSTD <= 0 Ts (6355)"); + } else if (v < 10452) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%u Ts < RSTD <= %u Ts (%u)", v-6356, v-6355, v); + } else if (v < 12711) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%u Ts < RSTD <= %u Ts (%u)", 5*(v-1)-48159, 5*v-48159, v); + } else { + g_snprintf(s, ITEM_LABEL_LENGTH, "15391 Ts < RSTD (12711)"); + } +} + +static const value_string lpp_error_Resolution_vals[] = { + { 0, "5 meters"}, + { 1, "10 meters"}, + { 2, "20 meters"}, + { 3, "30 meters"}, + { 0, NULL} +}; + +static const value_string lpp_error_Value_vals[] = { + { 0, "0 to (R*1-1) meters"}, + { 1, "R*1 to (R*2-1) meters"}, + { 2, "R*2 to (R*3-1) meters"}, + { 3, "R*3 to (R*4-1) meters"}, + { 4, "R*4 to (R*5-1) meters"}, + { 5, "R*5 to (R*6-1) meters"}, + { 6, "R*6 to (R*7-1) meters"}, + { 7, "R*7 to (R*8-1) meters"}, + { 8, "R*8 to (R*9-1) meters"}, + { 9, "R*9 to (R*10-1) meters"}, + { 10, "R*10 to (R*11-1) meters"}, + { 11, "R*11 to (R*12-1) meters"}, + { 12, "R*12 to (R*13-1) meters"}, + { 13, "R*13 to (R*14-1) meters"}, + { 14, "R*14 to (R*15-1) meters"}, + { 15, "R*15 to (R*16-1) meters"}, + { 16, "R*16 to (R*17-1) meters"}, + { 17, "R*17 to (R*18-1) meters"}, + { 18, "R*18 to (R*19-1) meters"}, + { 19, "R*19 to (R*20-1) meters"}, + { 20, "R*20 to (R*21-1) meters"}, + { 21, "R*21 to (R*22-1) meters"}, + { 22, "R*22 to (R*23-1) meters"}, + { 23, "R*23 to (R*24-1) meters"}, + { 24, "R*24 to (R*25-1) meters"}, + { 25, "R*25 to (R*26-1) meters"}, + { 26, "R*26 to (R*27-1) meters"}, + { 27, "R*27 to (R*28-1) meters"}, + { 28, "R*28 to (R*29-1) meters"}, + { 29, "R*29 to (R*30-1) meters"}, + { 30, "R*30 to (R*31-1) meters"}, + { 31, "R*31 meters or more"}, + { 0, NULL} +}; +static value_string_ext lpp_error_Value_vals_ext = VALUE_STRING_EXT_INIT(lpp_error_Value_vals); + +static const value_string lpp_error_NumSamples_vals[] = { + { 0, "Not the baseline metric"}, + { 1, "5-9"}, + { 2, "10-14"}, + { 3, "15-24"}, + { 4, "25-34"}, + { 5, "35-44"}, + { 6, "45-54"}, + { 7, "55 or more"}, + { 0, NULL} +}; + +static void +lpp_referenceTimeUnc_fmt(gchar *s, guint32 v) +{ + double referenceTimeUnc = 0.5*(pow(1.14, (double)v)-1); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f us (%u)", referenceTimeUnc, v); +} + +static const value_string lpp_kp_vals[] = { + { 0, "No UTC correction at the end of current quarter"}, + { 1, "UTC correction by plus (+1 s) in the end of current quarter"}, + { 3, "UTC correction by minus (-1 s) in the end of current quarter"}, + { 0, NULL} +}; + +static void +lpp_fractionalSecondsFromFrameStructureStart_fmt(gchar *s, guint32 v) +{ + float frac = ((float)v)/4; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f us (%u)", frac, v); +} + +static void +lpp_frameDrift_fmt(gchar *s, guint32 v) +{ + double drift = (double)((gint32)v)*pow(2, -30); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", drift, (gint32)v); +} + +static const value_string lpp_dataID_vals[] = { + { 0, "Parameters are applicable worldwide"}, + { 1, "Parameters have been generated by BDS"}, + { 3, "Parameters have been generated by QZSS"}, + { 0, NULL} +}; + +static void +lpp_alpha0_fmt(gchar *s, guint32 v) +{ + double alpha = (double)((gint32)v)*pow(2, -30); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", alpha, (gint32)v); +} + +static void +lpp_alpha1_fmt(gchar *s, guint32 v) +{ + double alpha = (double)((gint32)v)*pow(2, -27); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/semi-circle (%d)", alpha, (gint32)v); +} + +static void +lpp_alpha2_3_fmt(gchar *s, guint32 v) +{ + double alpha = (double)((gint32)v)*pow(2, -24); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/semi-circle (%d)", alpha, (gint32)v); +} + +static void +lpp_beta0_fmt(gchar *s, guint32 v) +{ + double beta = (double)((gint32)v)*pow(2, 11); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", beta, (gint32)v); +} + +static void +lpp_beta1_fmt(gchar *s, guint32 v) +{ + double beta = (double)((gint32)v)*pow(2, 14); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/semi-circle (%d)", beta, (gint32)v); +} + +static void +lpp_beta2_3_fmt(gchar *s, guint32 v) +{ + double beta = (double)((gint32)v)*pow(2, 16); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/semi-circle (%d)", beta, (gint32)v); +} + +static void +lpp_ai0_fmt(gchar *s, guint32 v) +{ + double ai = (double)v*pow(2, -2); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g sfu (%u)", ai, v); +} + +static void +lpp_ai1_fmt(gchar *s, guint32 v) +{ + double ai = (double)v*pow(2, -8); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g sfu/degree (%u)", ai, v); +} + +static void +lpp_ai2_fmt(gchar *s, guint32 v) +{ + double ai = (double)v*pow(2, -15); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g sfu/degree2 (%u)", ai, v); +} + +static void +lpp_teop_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u s (%u)", 16*v, v); +} + +static void +lpp_pmX_Y_fmt(gchar *s, guint32 v) +{ + double pm = (double)((gint32)v)*pow(2, -20); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g arc-seconds (%d)", pm, (gint32)v); +} + +static void +lpp_pmX_Ydot_fmt(gchar *s, guint32 v) +{ + double pmDot = (double)((gint32)v)*pow(2, -21); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g arc-seconds/day (%d)", pmDot, (gint32)v); +} + +static void +lpp_deltaUT1_fmt(gchar *s, guint32 v) +{ + double deltaUT1 = (double)((gint32)v)*pow(2, -24); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", deltaUT1, (gint32)v); +} + +static void +lpp_deltaUT1dot_fmt(gchar *s, guint32 v) +{ + double deltaUT1dot = (double)((gint32)v)*pow(2, -25); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/day (%d)", deltaUT1dot, (gint32)v); +} + +static void +lpp_gnss_TimeModelRefTime_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u s (%u)", v*16, v); +} + +static void +lpp_tA0_fmt(gchar *s, guint32 v) +{ + double tA0 = (double)((gint32)v)*pow(2, -35); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", tA0, (gint32)v); +} + +static void +lpp_tA1_fmt(gchar *s, guint32 v) +{ + double tA1 = (double)((gint32)v)*pow(2, -51); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", tA1, (gint32)v); +} + +static void +lpp_tA2_fmt(gchar *s, guint32 v) +{ + double tA2 = (double)((gint32)v)*pow(2, -68); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s2 (%d)", tA2, (gint32)v); +} + +static const value_string lpp_gnss_TO_ID_vals[] = { + { 1, "GPS"}, + { 2, "Galileo"}, + { 3, "QZSS"}, + { 4, "GLONASS"}, + { 0, NULL} +}; + +static const value_string lpp_gnss_StatusHealth_vals[] = { + { 0, "UDRE Scale Factor = 1.0"}, + { 1, "UDRE Scale Factor = 0.75"}, + { 2, "UDRE Scale Factor = 0.5"}, + { 3, "UDRE Scale Factor = 0.3"}, + { 4, "UDRE Scale Factor = 0.2"}, + { 5, "UDRE Scale Factor = 0.1"}, + { 6, "Reference Station Transmission Not Monitored"}, + { 7, "Data is invalid - disregard"}, + { 0, NULL} +}; + +static const value_string lpp_udre_vals[] = { + { 0, "UDRE <= 1.0 m"}, + { 1, "1.0 m < UDRE <= 4.0 m"}, + { 2, "4.0 m < UDRE <= 8.0 m"}, + { 3, "8.0 m < UDRE"}, + { 0, NULL} +}; + +static void +lpp_pseudoRangeCor_fmt(gchar *s, guint32 v) +{ + double pseudoRangeCor = ((double)(gint32)v)*0.32; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m (%d)", pseudoRangeCor, (gint32)v); +} + +static void +lpp_rangeRateCor_fmt(gchar *s, guint32 v) +{ + double rangeRateCor = ((double)(gint32)v)*0.032; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m/s (%d)", rangeRateCor, (gint32)v); +} + +static const value_string lpp_udreGrowthRate_vals[] = { + { 0, "1.5"}, + { 1, "2"}, + { 2, "4"}, + { 3, "6"}, + { 4, "8"}, + { 5, "10"}, + { 6, "12"}, + { 7, "16"}, + { 0, NULL} +}; + +static const value_string lpp_udreValidityTime_vals[] = { + { 0, "20 s"}, + { 1, "40 s"}, + { 2, "80 s"}, + { 3, "160 s"}, + { 4, "320 s"}, + { 5, "640 s"}, + { 6, "1280 s"}, + { 7, "2560 s"}, + { 0, NULL} +}; + +static const value_string lpp_signal_health_status_vals[] = { + { 0, "Signal OK"}, + { 1, "Signal out of service"}, + { 2, "Signal will be out of service"}, + { 3, "Signal Component currently in Test"}, + { 0, NULL} +}; +static void +lpp_stanClockToc_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u m/s (%u)", 60*v, v); +} + +static void +lpp_stanClockAF2_fmt(gchar *s, guint32 v) +{ + double stanClockAF2 = (double)((gint32)v)*pow(2, -59); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s2 (%d)", stanClockAF2, (gint32)v); +} + +static void +lpp_stanClockAF1_fmt(gchar *s, guint32 v) +{ + double stanClockAF1 = (double)((gint32)v)*pow(2, -46); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", stanClockAF1, (gint32)v); +} + +static void +lpp_stanClockAF0_fmt(gchar *s, guint32 v) +{ + double stanClockAF0 = (double)((gint32)v)*pow(2, -34); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", stanClockAF0, (gint32)v); +} + +static void +lpp_stanClockTgd_fmt(gchar *s, guint32 v) +{ + double stanClockTgd = (double)((gint32)v)*pow(2, -32); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", stanClockTgd, (gint32)v); +} + +static void +lpp_sisa_fmt(gchar *s, guint32 v) +{ + if (v < 50) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%u cm (%u)", v, v); + } else if (v < 75) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%u cm (%u)", 50+((v-50)*2), v); + } else if (v < 100) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%u cm (%u)", 100+((v-75)*4), v); + } else if (v < 126) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%u cm (%u)", 200+((v-100)*16), v); + } else if (v < 255) { + g_snprintf(s, ITEM_LABEL_LENGTH, "Spare (%u)", v); + } else { + g_snprintf(s, ITEM_LABEL_LENGTH, "No Accuracy Prediction Available (255)"); + } +} + +static const value_string lpp_stanModelID_vals[] = { + { 0, "I/Nav"}, + { 1, "F/Nav"}, + { 0, NULL} +}; + +static void +lpp_navToc_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u s (%u)", 16*v, v); +} + +static void +lpp_navaf2_fmt(gchar *s, guint32 v) +{ + double navaf2 = (double)((gint32)v)*pow(2, -55); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s2 (%d)", navaf2, (gint32)v); +} + +static void +lpp_navaf1_fmt(gchar *s, guint32 v) +{ + double navaf1 = (double)((gint32)v)*pow(2, -43); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", navaf1, (gint32)v); +} + +static void +lpp_navaf0_navTgd_fmt(gchar *s, guint32 v) +{ + double navaf0_navTgd = (double)((gint32)v)*pow(2, -31); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", navaf0_navTgd, (gint32)v); +} + +static void +lpp_cnavToc_cnavTop_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u s (%u)", 300*v, v); +} + +static void +lpp_cnavAf2_fmt(gchar *s, guint32 v) +{ + double cnavAf2 = (double)((gint32)v)*pow(2, -60); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s2 (%d)", cnavAf2, (gint32)v); +} + +static void +lpp_cnavAf1_fmt(gchar *s, guint32 v) +{ + double cnavAf1 = (double)((gint32)v)*pow(2, -48); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", cnavAf1, (gint32)v); +} + +static void +lpp_cnavX_fmt(gchar *s, guint32 v) +{ + double cnavX = (double)((gint32)v)*pow(2, -35); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", cnavX, (gint32)v); +} + +static void +lpp_gloTau_gloDeltaTau_fmt(gchar *s, guint32 v) +{ + double gloTau_gloDeltaTau = (double)((gint32)v)*pow(2, -30); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", gloTau_gloDeltaTau, (gint32)v); +} + +static void +lpp_gloGamma_fmt(gchar *s, guint32 v) +{ + double gloGamma = (double)((gint32)v)*pow(2, -40); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g (%d)", gloGamma, (gint32)v); +} + +static void +lpp_sbasTo_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u s (%u)", 16*v, v); +} + +static void +lpp_sbasAgfo_fmt(gchar *s, guint32 v) +{ + double sbasAgfo = (double)((gint32)v)*pow(2, -31); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", sbasAgfo, (gint32)v); +} + +static void +lpp_sbasAgf1_fmt(gchar *s, guint32 v) +{ + double sbasAgf1 = (double)((gint32)v)*pow(2, -40); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", sbasAgf1, (gint32)v); +} + +static void +lpp_bdsAODC_AODE_r12_fmt(gchar *s, guint32 v) +{ + if (v < 25) { + g_snprintf(s, ITEM_LABEL_LENGTH, "Age of the satellite clock correction parameters is %u hours (%u)", v, v); + } else if (v < 31) { + g_snprintf(s, ITEM_LABEL_LENGTH, "Age of the satellite clock correction parameters is %u days (%u)", v-23, v); + } else { + g_snprintf(s, ITEM_LABEL_LENGTH, "Age of the satellite clock correction parameters is over 7 days (%u)", v); + } +} + + +static void +lpp_bdsToc_Toe_r12_fmt(gchar *s, guint32 v) +{ + double bdsToc = (double)((gint32)v)*pow(2, 3); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", bdsToc, (gint32)v); +} + +static void +lpp_bdsA0_r12_fmt(gchar *s, guint32 v) +{ + double bdsA0 = (double)((gint32)v)*pow(2, -33); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", bdsA0, (gint32)v); +} + +static void +lpp_bdsA1_r12_fmt(gchar *s, guint32 v) +{ + double bdsA1 = (double)((gint32)v)*pow(2, -50); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", bdsA1, (gint32)v); +} + +static void +lpp_bdsA2_r12_fmt(gchar *s, guint32 v) +{ + double bdsA2 = (double)((gint32)v)*pow(2, -66); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s2 (%d)", bdsA2, (gint32)v); +} + +static void +lpp_bdsTgd1_r12_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%g ns (%d)", (float)((gint32)v)*0.1, (gint32)v); +} + +static void +lpp_keplerToe_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u s (%u)", 60*v, v); +} + +static void +lpp_keplerW_M0_I0_Omega0_fmt(gchar *s, guint32 v) +{ + double keplerW_M0_I0_Omega0 = (double)((gint32)v)*pow(2, -31); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", keplerW_M0_I0_Omega0, (gint32)v); +} + +static void +lpp_keplerDeltaN_OmegaDot_IDot_fmt(gchar *s, guint32 v) +{ + double keplerDeltaN_OmegaDot_IDot = (double)((gint32)v)*pow(2, -43); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles/s (%d)", keplerDeltaN_OmegaDot_IDot, (gint32)v); +} + +static void +lpp_keplerE_fmt(gchar *s, guint32 v) +{ + double keplerE = (double)v*pow(2, -33); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g (%u)", keplerE, v); +} + +static void +lpp_keplerAPowerHalf_fmt(gchar *s, guint32 v) +{ + double keplerAPowerHalf = (double)v*pow(2, -19); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m1/2 (%u)", keplerAPowerHalf, v); +} + +static void +lpp_keplerCrs_Crc_fmt(gchar *s, guint32 v) +{ + double keplerCrs_Crc = (double)((gint32)v)*pow(2, -5); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m (%d)", keplerCrs_Crc, (gint32)v); +} + +static void +lpp_keplerCx_fmt(gchar *s, guint32 v) +{ + double keplerCx = (double)((gint32)v)*pow(2, -29); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g rad (%d)", keplerCx, (gint32)v); +} + +static void +lpp_navToe_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u s (%u)", 16*v, v); +} + +static void +lpp_navOmega_M0_I0_OmegaA0_fmt(gchar *s, guint32 v) +{ + double navOmega_M0_I0_OmegaA0 = (double)((gint32)v)*pow(2, -31); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", navOmega_M0_I0_OmegaA0, (gint32)v); +} + +static void +lpp_navDeltaN_OmegaADot_IDot_fmt(gchar *s, guint32 v) +{ + double navDeltaN_OmegaADot_IDot = (double)((gint32)v)*pow(2, -43); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles/s (%d)", navDeltaN_OmegaADot_IDot, (gint32)v); +} + +static void +lpp_navE_fmt(gchar *s, guint32 v) +{ + double navE = (double)v*pow(2, -33); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g (%u)", navE, v); +} + +static void +lpp_navAPowerHalf_fmt(gchar *s, guint32 v) +{ + double navAPowerHalf = (double)v*pow(2, -19); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m1/2 (%u)", navAPowerHalf, v); +} + +static void +lpp_navCrs_Crc_fmt(gchar *s, guint32 v) +{ + double navCrs_Crc = (double)((gint32)v)*pow(2, -5); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m (%d)", navCrs_Crc, (gint32)v); +} + +static void +lpp_navCx_fmt(gchar *s, guint32 v) +{ + double navCx = (double)((gint32)v)*pow(2, -29); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g rad (%d)", navCx, (gint32)v); +} + +static void +lpp_cnavDeltaA_fmt(gchar *s, guint32 v) +{ + double cnavDeltaA = (double)((gint32)v)*pow(2, -9); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m (%d)", cnavDeltaA, (gint32)v); +} + +static void +lpp_cnavAdot_fmt(gchar *s, guint32 v) +{ + double cnavAdot = (double)((gint32)v)*pow(2, -21); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m/s (%d)", cnavAdot, (gint32)v); +} + +static void +lpp_cnavDeltaNo_fmt(gchar *s, guint32 v) +{ + double cnavDeltaNo = (double)((gint32)v)*pow(2, -44); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles/s (%d)", cnavDeltaNo, (gint32)v); +} + +static void +lpp_cnavDeltaNoDot_fmt(gchar *s, guint32 v) +{ + double cnavDeltaNoDot = (double)((gint32)v)*pow(2, -57); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles/s2 (%d)", cnavDeltaNoDot, (gint32)v); +} + +static void +lpp_cnavDeltaOmegaDot_IoDot_fmt(gchar *s, guint32 v) +{ + double cnavDeltaOmegaDot_IoDot = (double)((gint32)v)*pow(2, -44); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles/s (%d)", cnavDeltaOmegaDot_IoDot, (gint32)v); +} + +static void +lpp_cnavCx_fmt(gchar *s, guint32 v) +{ + double cnavCx = (double)((gint32)v)*pow(2, -30); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g rad (%d)", cnavCx, (gint32)v); +} + +static void +lpp_cnavCrs_Crc_fmt(gchar *s, guint32 v) +{ + double cnavCrs_Crc = (double)((gint32)v)*pow(2, -8); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m (%d)", cnavCrs_Crc, (gint32)v); +} + +static void +lpp_gloX_Y_Z_fmt(gchar *s, guint32 v) +{ + double gloX_Y_Z = (double)((gint32)v)*pow(2, -11); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g km (%d)", gloX_Y_Z, (gint32)v); +} + +static void +lpp_gloXdot_Ydot_Zdot_fmt(gchar *s, guint32 v) +{ + double gloXdot_Ydot_Zdot = (double)((gint32)v)*pow(2, -20); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g km/s (%d)", gloXdot_Ydot_Zdot, (gint32)v); +} + +static void +lpp_gloXdotdot_Ydotdot_Zdotdot_fmt(gchar *s, guint32 v) +{ + double gloXdotdot_Ydotdot_Zdotdot = (double)((gint32)v)*pow(2, -30); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g km/s2 (%d)", gloXdotdot_Ydotdot_Zdotdot, (gint32)v); +} + +static void +lpp_sbasXg_Yg_fmt(gchar *s, guint32 v) +{ + double sbasXg_Yg = (double)((gint32)v)*0.08; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m (%d)", sbasXg_Yg, (gint32)v); +} + +static void +lpp_sbasZg_fmt(gchar *s, guint32 v) +{ + double sbasZg = (double)((gint32)v)*0.4; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m (%d)", sbasZg, (gint32)v); +} + +static void +lpp_sbasXgDot_YgDot_fmt(gchar *s, guint32 v) +{ + double sbasXgDot_YgDot = (double)((gint32)v)*0.000625; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m/s (%d)", sbasXgDot_YgDot, (gint32)v); +} + +static void +lpp_sbasZgDot_fmt(gchar *s, guint32 v) +{ + double sbasZgDot = (double)((gint32)v)*0.004; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m/s (%d)", sbasZgDot, (gint32)v); +} + +static void +lpp_sbasXgDotDot_YgDotDot_fmt(gchar *s, guint32 v) +{ + double sbasXgDotDot_YgDotDot = (double)((gint32)v)*0.0000125; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m/s2 (%d)", sbasXgDotDot_YgDotDot, (gint32)v); +} + +static void +lpp_sbasZgDotDot_fmt(gchar *s, guint32 v) +{ + double sbasZgDotDot = (double)((gint32)v)*0.0000625; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m/s2 (%d)", sbasZgDotDot, (gint32)v); +} + +static void +lpp_bdsAPowerHalf_r12_fmt(gchar *s, guint32 v) +{ + double bdsAPowerHalf = (double)v*pow(2, -19); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m1/2 (%u)", bdsAPowerHalf, v); +} + +static void +lpp_bdsE_r12_fmt(gchar *s, guint32 v) +{ + double bdsE = (double)v*pow(2, -33); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g (%u)", bdsE, v); +} + +static void +lpp_bdsW_M0_Omega0_I0_r12_fmt(gchar *s, guint32 v) +{ + double bdsW_M0_Omega0_I0 = (double)((gint32)v)*pow(2, -31); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", bdsW_M0_Omega0_I0, (gint32)v); +} + +static void +lpp_bdsDeltaN_OmegaDot_IDot_r12_fmt(gchar *s, guint32 v) +{ + double bdsDeltaN_OmegaDot_IDot = (double)((gint32)v)*pow(2, -43); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles/s (%d)", bdsDeltaN_OmegaDot_IDot, (gint32)v); +} + +static void +lpp_bdsCuc_Cus_Cic_Cis_r12_fmt(gchar *s, guint32 v) +{ + double bdsCuc_Cus_Cic_Cis = (double)((gint32)v)*pow(2, -31); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g rad (%d)", bdsCuc_Cus_Cic_Cis, (gint32)v); +} + +static void +lpp_bdsCrc_Crs_r12_fmt(gchar *s, guint32 v) +{ + double bdsCrc_Crs = (double)((gint32)v)*pow(2, -6); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g rad (%d)", bdsCrc_Crs, (gint32)v); +} + +static void +lpp_doppler0_fmt(gchar *s, guint32 v) +{ + double doppler0 = (double)((gint32)v)*0.5; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m/s (%d)", doppler0, (gint32)v); +} + +static void +lpp_doppler1_fmt(gchar *s, guint32 v) +{ + double doppler1 = (double)((gint32)(v-42))/210; + + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m/s2 (%u)", doppler1, v); +} + +static const value_string lpp_dopplerUncertainty_vals[] = { + { 0, "40 m/s"}, + { 1, "20 m/s"}, + { 2, "10 m/s"}, + { 3, "5 m/s"}, + { 4, "2.5 m/s"}, + { 0, NULL} +}; + +static void +lpp_codePhase_fmt(gchar *s, guint32 v) +{ + double codePhase = (double)v*pow(2, -10); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g ms (%u)", codePhase, v); +} + +static const value_string lpp_codePhaseSearchWindow_vals[] = { + { 0, "No information"}, + { 1, "0.002 ms"}, + { 2, "0.004 ms"}, + { 3, "0.008 ms"}, + { 4, "0.012 ms"}, + { 5, "0.016 ms"}, + { 6, "0.024 ms"}, + { 7, "0.032 ms"}, + { 8, "0.048 ms"}, + { 9, "0.064 ms"}, + { 10, "0.096 ms"}, + { 11, "0.128 ms"}, + { 12, "0.164 ms"}, + { 13, "0.200 ms"}, + { 14, "0.250 ms"}, + { 15, "0.300 ms"}, + { 16, "0.360 ms"}, + { 17, "0.420 ms"}, + { 18, "0.480 ms"}, + { 19, "0.540 ms"}, + { 20, "0.600 ms"}, + { 21, "0.660 ms"}, + { 22, "0.720 ms"}, + { 23, "0.780 ms"}, + { 24, "0.850 ms"}, + { 25, "1.000 ms"}, + { 26, "1.150 ms"}, + { 27, "1.300 ms"}, + { 28, "1.450 ms"}, + { 29, "1.600 ms"}, + { 30, "1.800 ms"}, + { 31, "2.000 ms"}, + { 0, NULL} +}; +static value_string_ext lpp_codePhaseSearchWindow_vals_ext = VALUE_STRING_EXT_INIT(lpp_codePhaseSearchWindow_vals); + +static void +lpp_azimuth_elevation_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%f degrees (%u)", (float)v*0.703125, v); +} + +static void +lpp_kepAlmanacE_fmt(gchar *s, guint32 v) +{ + double kepAlmanacE = (double)v*pow(2, -16); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g (%u)", kepAlmanacE, v); +} + +static void +lpp_kepAlmanacDeltaI_fmt(gchar *s, guint32 v) +{ + double kepAlmanacDeltaI = (double)((gint32)v)*pow(2, -14); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", kepAlmanacDeltaI, (gint32)v); +} + +static void +lpp_kepAlmanacOmegaDot_fmt(gchar *s, guint32 v) +{ + double kepAlmanacOmegaDot = (double)((gint32)v)*pow(2, -33); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles/s (%d)", kepAlmanacOmegaDot, (gint32)v); +} + +static void +lpp_kepAlmanacAPowerHalf_fmt(gchar *s, guint32 v) +{ + double kepAlmanacAPowerHalf = (double)((gint32)v)*pow(2, -9); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m1/2 (%d)", kepAlmanacAPowerHalf, (gint32)v); +} + +static void +lpp_kepAlmanacOmega0_W_M0_fmt(gchar *s, guint32 v) +{ + double kepAlmanacOmega0_W_M0 = (double)((gint32)v)*pow(2, -15); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", kepAlmanacOmega0_W_M0, (gint32)v); +} + +static void +lpp_kepAlmanacAF0_fmt(gchar *s, guint32 v) +{ + double kepAlmanacAF0 = (double)((gint32)v)*pow(2, -19); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", kepAlmanacAF0, (gint32)v); +} + +static void +lpp_kepAlmanacAF1_fmt(gchar *s, guint32 v) +{ + double kepAlmanacAF1 = (double)((gint32)v)*pow(2, -38); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", kepAlmanacAF1, (gint32)v); +} + +static void +lpp_navAlmE_fmt(gchar *s, guint32 v) +{ + double navAlmE = (double)v*pow(2, -21); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g (%u)", navAlmE, v); +} + +static void +lpp_navAlmDeltaI_fmt(gchar *s, guint32 v) +{ + double navAlmDeltaI = (double)((gint32)v)*pow(2, -19); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", navAlmDeltaI, (gint32)v); +} + +static void +lpp_navAlmOMEGADOT_fmt(gchar *s, guint32 v) +{ + double navAlmOMEGADOT = (double)((gint32)v)*pow(2, -38); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles/s (%d)", navAlmOMEGADOT, (gint32)v); +} + +static void +lpp_navAlmSqrtA_fmt(gchar *s, guint32 v) +{ + double navAlmSqrtA = (double)v*pow(2, -11); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m1/2 (%u)", navAlmSqrtA, v); +} + +static void +lpp_navAlmOMEGAo_Omega_Mo_fmt(gchar *s, guint32 v) +{ + double navAlmOMEGAo_Omega_Mo = (double)((gint32)v)*pow(2, -23); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", navAlmOMEGAo_Omega_Mo, (gint32)v); +} + +static void +lpp_navAlmaf0_fmt(gchar *s, guint32 v) +{ + double navAlmaf0 = (double)((gint32)v)*pow(2, -20); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", navAlmaf0, (gint32)v); +} + +static void +lpp_navAlmaf1_fmt(gchar *s, guint32 v) +{ + double navAlmaf1 = (double)((gint32)v)*pow(2, -38); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", navAlmaf1, (gint32)v); +} + +static void +lpp_redAlmDeltaA_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%d m (%d)", 512*(gint)v, (gint)v); +} + +static void +lpp_redAlmOmega0_Phi0_fmt(gchar *s, guint32 v) +{ + double redAlmOmega0_Phi0 = (double)((gint32)v)*pow(2, -6); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", redAlmOmega0_Phi0, (gint32)v); +} + +static void +lpp_midiAlmE_fmt(gchar *s, guint32 v) +{ + double midiAlmE = (double)v*pow(2, -16); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g (%u)", midiAlmE, v); +} + +static void +lpp_midiAlmDeltaI_fmt(gchar *s, guint32 v) +{ + double midiAlmDeltaI = (double)((gint32)v)*pow(2, -14); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", midiAlmDeltaI, (gint32)v); +} + +static void +lpp_midiAlmOmegaDot_fmt(gchar *s, guint32 v) +{ + double midiAlmOmegaDot = (double)((gint32)v)*pow(2, -33); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles/s (%d)", midiAlmOmegaDot, (gint32)v); +} + +static void +lpp_midiAlmSqrtA_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m1/2 (%u)", (float)v*0.0625, v); +} + +static void +lpp_midiAlmOmega0_Omega_Mo_fmt(gchar *s, guint32 v) +{ + double midiAlmOmega0_Omega_Mo = (double)((gint32)v)*pow(2, -15); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", midiAlmOmega0_Omega_Mo, (gint32)v); +} + +static void +lpp_midiAlmaf0_fmt(gchar *s, guint32 v) +{ + double midiAlmaf0 = (double)((gint32)v)*pow(2, -20); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", midiAlmaf0, (gint32)v); +} + +static void +lpp_midiAlmaf1_fmt(gchar *s, guint32 v) +{ + double midiAlmaf1 = (double)((gint32)v)*pow(2, -37); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", midiAlmaf1, (gint32)v); +} + +static void +lpp_gloAlmLambdaA_DeltaIa_fmt(gchar *s, guint32 v) +{ + double gloAlmLambdaA_DeltaIa = (double)((gint32)v)*pow(2, -20); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", gloAlmLambdaA_DeltaIa, (gint32)v); +} + +static void +lpp_gloAlmtlambdaA_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%f s (%u)", (float)v*0.03125, v); +} + +static void +lpp_gloAlmDeltaTA_fmt(gchar *s, guint32 v) +{ + double gloAlmDeltaTA = (double)((gint32)v)*pow(2, -9); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/orbit period (%d)", gloAlmDeltaTA, (gint32)v); +} + +static void +lpp_gloAlmDeltaTdotA_fmt(gchar *s, guint32 v) +{ + double gloAlmDeltaTdotA = (double)((gint32)v)*pow(2, -14); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/orbit period (%d)", gloAlmDeltaTdotA, (gint32)v); +} + +static void +lpp_gloAlmEpsilonA_fmt(gchar *s, guint32 v) +{ + double gloAlmEpsilonA = (double)v*pow(2, -20); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g (%u)", gloAlmEpsilonA, (gint32)v); +} + +static void +lpp_gloAlmOmegaA_fmt(gchar *s, guint32 v) +{ + double gloAlmOmegaA = (double)((gint32)v)*pow(2, -15); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", gloAlmOmegaA, (gint32)v); +} + +static void +lpp_gloAlmTauA_fmt(gchar *s, guint32 v) +{ + double gloAlmTauA = (double)((gint32)v)*pow(2, -18); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", gloAlmTauA, (gint32)v); +} + +static void +lpp_sbasAlmXg_Yg_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%f km (%d)", (gint32)v*2.6, (gint32)v); +} + +static void +lpp_sbasAlmZg_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%d km (%d)", (gint32)v*26, (gint32)v); +} + +static void +lpp_sbasAlmXgdot_YgDot_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%d m/s (%d)", (gint32)v*10, (gint32)v); +} + +static void +lpp_sbasAlmZgDot_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%f m/s (%d)", (gint32)v*40.96, (gint32)v); +} + +static void +lpp_sbasAlmTo_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u m/s (%u)", v*64, v); +} + +static void +lpp_bdsAlmToa_r12_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u s (%u)", v*4096, v); +} + +static void +lpp_bdsAlmSqrtA_r12_fmt(gchar *s, guint32 v) +{ + double bdsAlmSqrtA = (double)v*pow(2, -11); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m1/2 (%u)", bdsAlmSqrtA, v); +} + +static void +lpp_bdsAlmE_r12_fmt(gchar *s, guint32 v) +{ + double bdsAlmE = (double)v*pow(2, -21); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m1/2 (%u)", bdsAlmE, v); +} + +static void +lpp_bdsAlmW_M0_Omega0_r12_fmt(gchar *s, guint32 v) +{ + double bdsAlmW_M0_Omega0 = (double)((gint32)v)*pow(2, -23); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", bdsAlmW_M0_Omega0, (gint32)v); +} + +static void +lpp_bdsAlmOmegaDot_r12_fmt(gchar *s, guint32 v) +{ + double bdsAlmOmegaDot = (double)((gint32)v)*pow(2, -38); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles/s (%d)", bdsAlmOmegaDot, (gint32)v); +} + +static void +lpp_bdsAlmDeltaI_r12_fmt(gchar *s, guint32 v) +{ + double bdsAlmDeltaI = (double)((gint32)v)*pow(2, -19); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g semi-circles (%d)", bdsAlmDeltaI, (gint32)v); +} + +static void +lpp_bdsAlmA0_r12_fmt(gchar *s, guint32 v) +{ + double bdsAlmA0 = (double)((gint32)v)*pow(2, -20); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", bdsAlmA0, (gint32)v); +} + +static void +lpp_bdsAlmA1_r12_fmt(gchar *s, guint32 v) +{ + double bdsAlmA1 = (double)((gint32)v)*pow(2, -38); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", bdsAlmA1, (gint32)v); +} + +static const true_false_string lpp_bdsSvHealth_r12_b1i_b2i_value = { + "OK", + "Weak" +}; + +static const true_false_string lpp_bdsSvHealth_r12_nav_value = { + "OK", + "Bad (IOD over limit)" +}; + +static void +lpp_gnss_Utc_A1_fmt(gchar *s, guint32 v) +{ + double gnss_Utc_A1 = (double)((gint32)v)*pow(2, -50); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/s (%d)", gnss_Utc_A1, (gint32)v); +} + +static void +lpp_gnss_Utc_A0_fmt(gchar *s, guint32 v) +{ + double gnss_Utc_A0 = (double)((gint32)v)*pow(2, -30); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", gnss_Utc_A0, (gint32)v); +} + +static void +lpp_gnss_Utc_Tot_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%u s (%u)", v*4096, v); +} + +static const value_string lpp_bds_UDREI_vals[] = { + { 0, "1 meter"}, + { 1, "1.5 meters"}, + { 2, "2 meters"}, + { 3, "3 meters"}, + { 4, "4 meters"}, + { 5, "5 meters"}, + { 6, "6 meters"}, + { 7, "8 meters"}, + { 8, "10 meters"}, + { 9, "15 meters"}, + { 10, "20 meters"}, + { 11, "50 meters"}, + { 12, "100 meters"}, + { 13, "150 meters"}, + { 14, "Not monitored"}, + { 15, "Not available"}, + { 0, NULL} +}; +static value_string_ext lpp_bds_UDREI_vals_ext = VALUE_STRING_EXT_INIT(lpp_bds_UDREI_vals); + +static const value_string lpp_bds_RURAI_vals[] = { + { 0, "0.75 meter"}, + { 1, "1 meter"}, + { 2, "1.25 meters"}, + { 3, "1.75 meters"}, + { 4, "2.25 meters"}, + { 5, "3 meters"}, + { 6, "3.75 meters"}, + { 7, "4.5 meters"}, + { 8, "5.25 meters"}, + { 9, "6 meters"}, + { 10, "7.5 meters"}, + { 11, "15 meters"}, + { 12, "50 meters"}, + { 13, "150 meters"}, + { 14, "300 meters"}, + { 15, "> 300 meters"}, + { 0, NULL} +}; +static value_string_ext lpp_bds_RURAI_vals_ext = VALUE_STRING_EXT_INIT(lpp_bds_RURAI_vals); + +static void +lpp_bds_ECC_DeltaT_r12_fmt(gchar *s, guint32 v) +{ + if ((gint32)v == -4096) { + g_snprintf(s, ITEM_LABEL_LENGTH, "Not available (%d)", (gint32)v); + } else { + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m (%d)", (float)((gint32)v)*0.1, (gint32)v); + } +} + +static void +lpp_bds_GridIonElement_dt_r12_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m (%d)", (float)((gint32)v)*0.125, (gint32)v); +} + +static const value_string lpp_bds_givei_vals[] = { + { 0, "0.3 meter"}, + { 1, "0.6 meter"}, + { 2, "0.9 meter"}, + { 3, "1.2 meters"}, + { 4, "1.5 meters"}, + { 5, "1.8 meters"}, + { 6, "2.1 meters"}, + { 7, "2.4 meters"}, + { 8, "2.7 meters"}, + { 9, "3 meters"}, + { 10, "3.6 meters"}, + { 11, "4.5 meters"}, + { 12, "6 meters"}, + { 13, "9 meters"}, + { 14, "15 meters"}, + { 15, "45 meters"}, + { 0, NULL} +}; +static value_string_ext lpp_bds_givei_vals_ext = VALUE_STRING_EXT_INIT(lpp_bds_givei_vals); + +static void +lpp_tauC_fmt(gchar *s, guint32 v) +{ + double tauC = (double)((gint32)v)*pow(2, -31); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", tauC, (gint32)v); +} + +static void +lpp_b1_fmt(gchar *s, guint32 v) +{ + double b1 = (double)((gint32)v)*pow(2, -10); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s (%d)", b1, (gint32)v); +} + +static void +lpp_b2_fmt(gchar *s, guint32 v) +{ + double b2 = (double)((gint32)v)*pow(2, -16); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g s/msd (%d)", b2, (gint32)v); +} + +static const value_string lpp_utcStandardID_vals[] = { + { 0, "UTC as operated by the Communications Research Laboratory (CRL), Tokyo, Japan"}, + { 1, "UTC as operated by the National Institute of Standards and Technology (NIST)"}, + { 2, "UTC as operated by the U. S. Naval Observatory (USNO)"}, + { 3, "UTC as operated by the International Bureau of Weights and Measures (BIPM)"}, + { 0, NULL} +}; + +static const value_string lpp_dataBitInterval_vals[] = { + { 0, "0.1"}, + { 1, "0.2"}, + { 2, "0.4"}, + { 3, "0.8"}, + { 4, "1.6"}, + { 5, "3.2"}, + { 6, "6.4"}, + { 7, "12.8"}, + { 8, "25.6"}, + { 9, "51.2"}, + { 10, "102.4"}, + { 11, "204.8"}, + { 12, "409.6"}, + { 13, "819.2"}, + { 14, "1638.4"}, + { 15, "Not specified"}, + { 0, NULL} +}; +static value_string_ext lpp_dataBitInterval_vals_ext = VALUE_STRING_EXT_INIT(lpp_dataBitInterval_vals); + +static const value_string lpp_carrierQualityInd_vals[] = { + { 0, "Data direct, carrier phase not continuous"}, + { 1, "Data inverted, carrier phase not continuous"}, + { 2, "Data direct, carrier phase continuous"}, + { 3, "Data inverted, carrier phase continuous"}, + { 0, NULL} +}; + +static void +lpp_GNSS_SatMeas_codePhase_fmt(gchar *s, guint32 v) +{ + double codePhase = (double)v*pow(2, -21); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g ms (%u)", codePhase, v); +} + +static void +lpp_codePhaseRMSError_fmt(gchar *s, guint32 v) +{ + guint8 mantissa = v & 0x07; + guint8 exponent = (v & 0x38) >> 3; + guint8 mantissa_1 = (v - 1) & 0x07; + guint8 exponent_1 = ((v - 1) & 0x38) >> 3; + + if (v == 0) { + g_snprintf(s, ITEM_LABEL_LENGTH, "P < 0.5 (0)"); + } else if (v < 63) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%f <= P < %f (%u)", 0.5*(1+mantissa_1/8)*pow(2, exponent_1), + 0.5*(1+mantissa/8)*pow(2, exponent), v); + } else { + g_snprintf(s, ITEM_LABEL_LENGTH, "112 <= P (63)"); + } +} + +static void +lpp_doppler_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m/s (%d)", (gint32)v*0.04, (gint32)v); +} + +static void +lpp_adr_fmt(gchar *s, guint32 v) +{ + double adr = (double)v*pow(2, -10); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g m (%u)", adr, v); +} + +static void +lpp_rsrp_Result_fmt(gchar *s, guint32 v) +{ + g_snprintf(s, ITEM_LABEL_LENGTH, "%d dBm (%u)", v-140, v); +} + +static void +lpp_rsrq_Result_fmt(gchar *s, guint32 v) +{ + if (v == 0) { + g_snprintf(s, ITEM_LABEL_LENGTH, "RSRQ < -19.5 dB (0)"); + } else if (v < 34) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%.1f dB <= RSRQ < %.1f dB (%u)", ((float)v/2)-20, (((float)v+1)/2)-20, v); + } else { + g_snprintf(s, ITEM_LABEL_LENGTH, "-3 dB <= RSRQ (34)"); + } +} + +static void +lpp_ue_RxTxTimeDiff_fmt(gchar *s, guint32 v) +{ + if (v == 0) { + g_snprintf(s, ITEM_LABEL_LENGTH, "T < 2 Ts (0)"); + } else if (v < 2048) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%u Ts <= T < %u Ts (%u)", v*2, (v+1)*2, v); + } else if (v < 4095) { + g_snprintf(s, ITEM_LABEL_LENGTH, "%u Ts <= T < %u Ts (%u)", (v*8)-12288, ((v+1)*8)-12288, v); + } else { + g_snprintf(s, ITEM_LABEL_LENGTH, "20472 Ts <= T (4095)"); + } +} + +static void +lpp_mbs_beaconMeasElt_codePhase_fmt(gchar *s, guint32 v) +{ + double codePhase = (double)v*pow(2, -21); + + g_snprintf(s, ITEM_LABEL_LENGTH, "%g ms (%u)", codePhase, v); +} + +#include "packet-lpp-fn.c" + +static int dissect_lpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { + proto_tree *subtree; + proto_item *it; + + it = proto_tree_add_item(tree, proto_lpp, tvb, 0, -1, ENC_NA); + col_append_sep_str(pinfo->cinfo, COL_PROTOCOL, "/", "LPP"); + subtree = proto_item_add_subtree(it, ett_lpp); + + return dissect_LPP_Message_PDU(tvb, pinfo, subtree, NULL); +} + +/*--- proto_register_lpp -------------------------------------------*/ +void proto_register_lpp(void) { + + /* List of fields */ + static hf_register_info hf[] = { + +#include "packet-lpp-hfarr.c" + { &hf_lpp_svHealthExt_v1240_e5bhs, + { "E5b Signal Health Status", "lpp.svHealthExt_v1240.e5bhs", + FT_UINT8, BASE_DEC, VALS(lpp_signal_health_status_vals), 0, + NULL, HFILL }}, + { &hf_lpp_svHealthExt_v1240_e1_bhs, + { "E1-B Signal Health Status", "lpp.svHealthExt_v1240.e1_bhs", + FT_UINT8, BASE_DEC, VALS(lpp_signal_health_status_vals), 0, + NULL, HFILL }}, + { &hf_lpp_kepSV_StatusINAV_e5bhs, + { "E5b Signal Health Status", "lpp.kepSV_StatusINAV.e5bhs", + FT_UINT8, BASE_DEC, VALS(lpp_signal_health_status_vals), 0, + NULL, HFILL }}, + { &hf_lpp_kepSV_StatusINAV_e1_bhs, + { "E1-B Signal Health Status", "lpp.kepSV_StatusINAV.e1_bhs", + FT_UINT8, BASE_DEC, VALS(lpp_signal_health_status_vals), 0, + NULL, HFILL }}, + { &hf_lpp_kepSV_StatusFNAV_e5ahs, + { "E5a Signal Health Status", "lpp.kepSV_StatusFNAV.e5ahs", + FT_UINT8, BASE_DEC, VALS(lpp_signal_health_status_vals), 0, + NULL, HFILL }}, + { &hf_lpp_bdsSvHealth_r12_sat_clock, + { "Satellite Clock", "lpp.bdsSvHealth_r12.sat_clock", + FT_BOOLEAN, BASE_NONE, TFS(&tfs_ok_error), 0, + NULL, HFILL }}, + { &hf_lpp_bdsSvHealth_r12_b1i, + { "B1I Signal", "lpp.bdsSvHealth_r12.b1i", + FT_BOOLEAN, BASE_NONE, TFS(&lpp_bdsSvHealth_r12_b1i_b2i_value), 0, + NULL, HFILL }}, + { &hf_lpp_bdsSvHealth_r12_b2i, + { "B2I Signal", "lpp.bdsSvHealth_r12.b2i", + FT_BOOLEAN, BASE_NONE, TFS(&lpp_bdsSvHealth_r12_b1i_b2i_value), 0, + NULL, HFILL }}, + { &hf_lpp_bdsSvHealth_r12_nav, + { "NAV Message", "lpp.bdsSvHealth_r12.nav", + FT_BOOLEAN, BASE_NONE, TFS(&lpp_bdsSvHealth_r12_nav_value), 0, + NULL, HFILL }} + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_lpp, + &ett_lpp_bitmap, + &ett_lpp_svHealthExt_v1240, + &ett_kepSV_StatusINAV, + &ett_kepSV_StatusFNAV, + &ett_lpp_bdsSvHealth_r12, +#include "packet-lpp-ettarr.c" + }; + + + /* Register protocol */ + proto_lpp = proto_register_protocol(PNAME, PSNAME, PFNAME); + register_dissector("lpp", dissect_lpp, proto_lpp); + + /* Register fields and subtrees */ + proto_register_field_array(proto_lpp, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + +} + + +/*--- proto_reg_handoff_lpp ---------------------------------------*/ +void +proto_reg_handoff_lpp(void) +{ + lppe_handle = find_dissector("lppe"); +} + + diff --git a/epan/dissectors/asn1/lpp/packet-lpp-template.h b/epan/dissectors/asn1/lpp/packet-lpp-template.h new file mode 100644 index 0000000000..1928d3bfd2 --- /dev/null +++ b/epan/dissectors/asn1/lpp/packet-lpp-template.h @@ -0,0 +1,32 @@ +/* packet-lpp.h + * Routines for 3GPP LTE Positioning Protocol (LPP) packet dissection + * Copyright 2011-2016 Pascal Quantin <pascal.quantin@gmail.com> + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Ref 3GPP TS 36.355 version 13.0.0 Release 13 + * http://www.3gpp.org + */ + +#ifndef PACKET_LPP_H +#define PACKET_LPP_H + +#include "packet-lpp-exp.h" + +#endif /* PACKET_LPP_H */ |