Binary Exchange format for GPS/GNSS

Data/Metadata/Ephemerides/Orbits/Solutions

Record 0x01 Outline:
Each record 0x01 = 1 holds GNSS navigation information
for a specific satellite. The format depends on the specific subrecord value.
Depending on the subrecord, the navigaition information may correspond to the
binary broadcast messeage, a decoded version of the message analogous to
what would appear in a RINEX NAV file, or other orbit formats such as SP3, and so on.

Once the BINEX file or stream has been parsed and a record ID = 0x01
has been identified, the user should consult this page for decoding information
of the record 0x01 message. For all 0x01 record messages, the first 1-4 bytes
of the message should be examined to determine the subrecord ID. The
C/C++ function read_ubnxi() can be used to do this. Once the subrecord ID
has been determined, consult the appropriate subrecord description.

Record 0x01 Subrecord 0x00: 0x01-00 — Coded GNSS Ephemeris
The first byte of the 0x01-00 message will be the byte 0x00, denoting the
subrecord 0x00. Subrecord 0x00 requires that the satellite number being stored
is in the range of 1-32.

Immediately following the subrecord 0x01 byte will be a byte specifying the
satellite ID. (See
details on decoding.)
The interpretation of the rest of the record message depends on which
satellite system is specified in the satellite ID byte.

Following the SVid1 byte, the contents depend on the specific
satellite system:

bit 0: information from subframe 4, page 25 available = uint1 & 0x01; if bit 0 = 1 and this indicates
that bits 1-4 have the assigned meaning defined below; if the information is not available,
bit 0 = 0 and the meaning of bits 1-4 are currently undefined

bit 5: ToW in the next sint4 is valid = uint1 >> 5 & 0x01; if bit 5 = 1, the ToW is valid; if
bit 5 = 0, the ToW is unknown

(upper 2 bits, 6-7, of this uint1 are reserved)

sint4 = ToW (time of week/time of message), in seconds, if it
is known (also, bit 5 in the uint1 above should be set equal to 1); otherwise, set this sint4 equal to 0 (also,
bit 5 in the uint1 above should be set equal to 0)

72 bytes:
The rest of the message for GPS will be the 72 bytes
from GPS ephemeris subframes 1, 2, and 3, words 3-10, minus the 6 parity
bits per each word, representing the encoded GPS navigation message, ordered
in the same way as the subframes 1-3 and words 3-10.
The MSB (bit 7) of the first byte of the rest of the message of subrecord 0x00
therefore corresponds to "Bit 61" of subframe 1 (the MSB of the 10-bit GPS week number),
and so on. See the ICD-GPS-200 for details on decoding. No byte-swapping
occurs in these 72 bytes of 0x01-00, regardless of the endian-ness of the
synchronization/endian byte fo the record.

for non-GPS constellations: under consideration, but details of broadcast bits for
these navigation messages must be completely understood first

Record 0x01 Subrecord 0x01: 0x01-01 — Decoded GPS Ephemeris
The first byte of the 0x01-01 message will be the byte 0x01, denoting the
subrecord 0x01. Note: Subrecord 0x01 was originally hoped to be extensible to non-GPS
navigation messages, but now it is exclusively meant for only GPS, with PRN values
in the range of 1-32. For the NAVSTAR GPS navigation message, the ToE value
must be equal to the ToC value (which has been the case for all valid GPS navigation
messages for years).

uint1 = PRN - 1 (offset ID, 0-31; originally, this byte was meant to be
a full satellite ID bytes
— see details on decoding —
but as 0x01-01 is restricted to be GPS-only and has ever only been used for the GPS constellation,
which has a satellite system ID of 0, one can evalute this byte directly as PRN - 1)

real4 = nominal URA (user range accuracy) value (decimeters;
multiply by 0.1 to obtain meters), rounded to the nearest decimeter (see ICD-GPS-200 20.3.3.3.1.3);
if the URA index X = 15, then a value of 327670 decimeters should be stored for the nominal URA value,
consistent with the convention used in RINEX

Record 0x01 Subrecord 0x02: 0x01-02 — Decoded GLONASS — FDMA Ephemeris
The first byte of the 0x01-02 message will be the byte 0x02, denoting the subrecord 0x02.
This record is designed to hold the decoded GLONASS ephemeris information for SVs broadcasting in FDMA.
The definition of the fields in 0x01-02 are identical to those in RINEX 2.10
GLONASS NAVIGATION MESSAGE FILE — DATA RECORD DESCRIPTION.

* Using bits 1 and 2 is highly recommended given that in the ICD-GLONASS (e.g. Edition 5.1, 2008), section 5.3,
Table 5.1, states that the operability of the SV depends on both Bn and Cn, and that operability requires
a Bn = 0 and Cn = 1, i.e. a Bn = 0 is insufficient.
** The ln bit in GLONASS-M navigation data is being considered, if necessary.

Record 0x01 Subrecord 0x03: 0x01-03 — Decoded SBAS Ephemeris
The first byte of the 0x01-03 message will be the byte 0x03, denoting the subrecord 0x03.
This record is designed to hold the decoded SBAS ephemeris information.
The definition of the fields in 0x01-03 are identical to those in RINEX 2.11
GEOSTATIONARY NAVIGATION MESSAGE FILE — DATA RECORD DESCRIPTION.

Record 0x01 Subrecord 0x04: 0x01-04 — Decoded Galileo Ephemeris
The first byte of the 0x01-04 message will be the byte 0x04, denoting the subrecord 0x04.
This record is designed to hold the decoded Galileo ephemeris information.
The definition of the fields in 0x01-04, except SISA, are identical to those in
RINEX 3.00/3.01 GALILEO NAVIGATION MESSAGE FILE — DATA RECORD DESCRIPTION.

real4 = SISA, Signal in space accuracy:
if negative, this is -(SISA index + 1), where the SISA index = 0-255; positive values are
reserved for the accuracy in distance when it becomes defined in the Galileo OS-SIS-ICD

Record 0x01 Subrecord 0x05: 0x01-05 — Decoded Beidou-2/Compass Ephemeris
The first byte of the 0x01-05 message will be the byte 0x05, denoting the subrecord 0x05.
This record is designed to hold the decoded Beidou-2/Compass ephemeris information.

Record 0x01 Subrecord 0x06: 0x01-06 — Decoded QZSS Ephemeris
The first byte of the 0x01-06 message will be the byte 0x06, denoting the subrecord 0x06.
This record is designed to hold the decoded QZSS ephemeris information.
Note: this record is provisional until further notice.

uint2 to hold three remaining pieces derived from the
QZSS navigation message:

curve fit interval (bit 17 w 10 of sf 2), bit 0 = uint2 & 0x0001

(bits 1-15 of this uint2 are currently reserved)

Record 0x01 Subrecord 0x07: 0x01-07 — Decoded IRNSS Ephemeris
The first byte of the 0x01-07 message will be the byte 0x07, denoting the subrecord 0x07.
This record is designed to hold the decoded IRNSS ephemeris information.
Note: this record is provisional until further notice.

Note 1: The subrecords 0x01-11 to 0x01-17 are to allow corrections or additions to the original 0x01-01 to 0x01-07 definitions and thereby should supersede the original 0x01-01 to 0x01-07 definitions when any of 0x01-11 to 0x01-17 are implemented.

Record 0x01 Subrecord 0x14: 0x01-14 — Upgraded Decoded Galileo Ephemeris
The first byte of the 0x01-14 message will be the byte 0x14, denoting the subrecord 0x14.
This record is designed to hold the decoded Galileo ephemeris information.
The definition of the fields in 0x01-14, except SISA, are identical to those in
RINEX 3.03 GALILEO NAVIGATION MESSAGE FILE — DATA RECORD DESCRIPTION.

real4 = SISA, Signal in space accuracy:
if negative, this is -(SISA index + 1) for SISA index = 0-255; a positive value is the
accuracy in distance in meters for SISA index = 0-125 as defined in the Galileo OS-SIS-ICD

Note 1 (as with RINEX): If bit 0 or bit 2 of data sources is set, E1-B DVS & HS,
E5b DVS & HS and both BGDs are valid. If bit 1 of data sources is set, E5a DVS & HS and BGD E5a/E1
are valid. Non-valid parameters are set to 0 and to be ignored.
General notes for all 0x01-41 to 0x01-47 — for raw navigation subframe/block/string/page

Note 1: For 0x01-41 to 0x01-47, the transmission time time tag, corresponding to the first bit of the navigation message in the record.

Note 2: The storage for all bits of any navigation subframe/block/string/page is in
Nuint1 8-bit bytes.
The first received bit is stored as the MSB of the first byte, bits follow sequentially,
using the MSB of each following 8-bit byte first, and all the unused bits (if any) are the LSBs in the last byte.
The navigation bits stored are always after deinterleaving and/or, if applicable, after Viterbi decoding.

Record 0x01 Subrecord 0x41: 0x01-41 — raw GPS navigation subframe
The first byte of the 0x01-41 message will be the byte 0x41, denoting the subrecord 0x41.

The BINEX record 0x01 outline for each subrecord on this page
should be intepreted as complete and finalized. Since other subrecords
may be specified in the future, all other subrecord IDs not explicitly
specified on this page are currently reserved.