Garmin 15L GPS Receiver User Manual


 
190-00266-01 GPS 15H & 15L Technical Specifications Rev. D
Page 29
APPENDIX D: EPHEMERIS DATA DOWNLOAD (PROGRAMMING EXAMPLE)
Synopsis
This section describes, using an example, how to download ephemeris information from a Garmin 15, 16,
17 or 18 family GPS unit with the exception of the GPS 15-W and the GPS 15-F.
Garmin Binary Format Review
In order 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 is not required, but is recommended for use in
environments containing high electromagnetic noise. It is generally not required in normal PC
environments. 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 are acted on by the GPS sensor. The unit
stays in Garmin mode until the next power cycle.
Now that 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, so 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.
In order to interpret these packets properly, one must remove the escaped DLE bytes. This can be achieved
using an algorithm similar to the
Sample C Code fragment on the previous page.