31
APPENDIX D: EPHEMERIS DATA DOWNLOAD (PROGRAMMING EXAMPLE)
Synopsis
This section describes, using an example, how to download ephemeris information from a Garmin
15, 15x, 16, 16x, 17, 18 or 18x family GPS unit with the exception of the GPS 15-W and the GPS
15-F.
Garmin Binary Format Review
To download the ephemeris data, you must first command the unit to output information in
Garmin Binary Format (Garmin mode) instead of the default NMEA output format. To put the unit
in Garmin mode, connect to the unit using a terminal program and send the following NMEA
sentence: $PGRMO,,G*hh<CR><LF>
The checksum *hh is used for parity checking data and generally is not required in normal PC
environments, but is recommended for use in environments containing high electromagnetic
noise. When used, the parity bytes (hh) are the ASCII representation of the exclusive-or (XOR)
sum of all the characters between the “$” and “*” characters, non-inclusive. Sentences may be
truncated by <CR><LF> after any data field and valid fields up to that point will be acted on by the
The unit will stay in Garmin mode until the next
power cycle.
Now that the unit is in Garmin binary format, transmitted and received packets are structured as
follows:
Byte Description
Name
Notes
Packet Delimiter
DLE
0x10
Packet ID (type)
ID
Packet type
Data Size
SIZE
Number of bytes in data portion(not
including escaped DLEs. See below)
Data bytes
DATA
Not to exceed 256 bytes
.
.
.
.
.
.
.
.
.
Checksum CHKSUM
2’s complement of the arithmetic
sum of all the bytes from the
Packet ID byte to the last DATA
byte(inclusive) not counting
escaped DLEs. See below
Packet Delimiter
DLE
0x10
End of Packet
ETX
0x03
The DLE (0x10) is a delimiter byte used in conjunction with the ETX byte to determine beginning
and ending of a packet. However, a 0x10 could appear in the data itself; if this occurs, the byte is
escaped with another DLE byte (sometimes referred to as DLE stuffing). In other words, if a DLE
occurs in the data, another DLE is transmitted immediately after to indicate that it is a data byte
and it is not being used as a delimiter. Note that the size byte of the packet does not count the
second DLE byte in an escaped DLE pair in the data field. Since a DLE that is a part of the data
will have a second DLE to escape it, a single DLE followed by an ETX byte means that the end of
a packet has been reached.
To interpret these packets properly, remove the escaped DLE bytes. This can be achieved using
fragment on page 29.