190-00228-20 GPS 16/17 Technical Specifications Rev. CPage 29APPENDIX C: EPHEMERIS DATA DOWNLOAD (PROGRAMMING EXAMPLE)SynopsisThis 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 ReviewTo download the ephemeris data, you must first command the unit to output information in Garmin BinaryFormat (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*hhThe checksum *hh is used for parity checking data and generally is not required in normal PCenvironments, but is recommended for use in environments containing high electromagnetic noise. Whenused, the parity bytes (hh) are the ASCII representation of the exclusive-or (XOR) sum of all the charactersbetween the “$” and “*” characters, non-inclusive. Sentences may be truncated by after anydata field and valid fields up to that point will be acted on by the GPS sensor. See Section 4 SoftwareInterface. The unit will stay 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 NotesPacket Delimiter DLE 0x10Packet ID (type) ID Packet typeData Size SIZE Number of bytes in data portion(notincluding escaped DLEs. See below)Data bytes DATA Not to exceed 256 bytes. . .. . .. . .Checksum CHKSUM 2’s complement of the arithmeticsum of all the bytes from thePacket ID byte to the last DATAbyte(inclusive) not countingescaped DLEs. See belowPacket Delimiter DLE 0x10End of Packet ETX 0x03The DLE (0x10) is a delimiter byte used in conjunction with the ETX byte to determine beginning andending of a packet. However, a 0x10 could appear in the data itself; if this occurs, the byte is escaped withanother 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 adelimiter. Note that the size byte of the packet does not count the second DLE byte in an escaped DLE pairin the data field. Since a DLE that is a part of the data will have a second DLE to escape it, a single DLEfollowed 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 achievedusing an algorithm similar to the Sample C Code fragment on the previous page.