Application protocol

Product Data Protocol

class garmin.A000(linkLayer)

Bases: object

Product Data Protocol.

The Product Data Protocol is used to determine the product data of the connected device, which enables the host to determine the protocols and data types supported by the device.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Host to Device

pid_product_rqst

ignored

1

Device to Host

pid_product_data

ProductData

2

Device to Host

pid_ext_product_data

ExtProductData

n-1

Device to Host

pid_ext_product_data

ExtProductData

class garmin.A001(linkLayer)

Bases: object

Protocol capabilities protocol.

The Protocol Capability Protocol is used by the device to report the protocols and data types it supports. When this protocol is supported, it will send a list of all supported protocols and data types after completion of the A000 Product Data Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device to Host

pid_protocol_array

ProtocolArray

Command Protocol

class garmin.A010(link)

Bases: CommandProtocol

Device Command Protocol 1.

This Device Command Protocol is used by most devices.

class garmin.A011(link)

Bases: CommandProtocol

Device command protocol 2.

This Device Command Protocol is used by panel-mounted aviation devices.

Transfer protocol

class garmin.A100(link, command, datatypes)

Bases: TransferProtocol

Waypoint Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device1 to Device2

pid_records

Records

1

Device1 to Device2

pid_wpt_data

<D0>

2

Device1 to Device2

pid_wpt_data

<D0>

n-2

Device1 to Device2

pid_wpt_data

<D0>

n-1

Device1 to Device2

pid_xfer_cmplt

Command

class garmin.A101(link, command, datatypes)

Bases: TransferProtocol

Waypoint Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device1 to Device2

pid_records

Records

1

Device1 to Device2

pid_wpt_cat

<D0>

2

Device1 to Device2

pid_wpt_cat

<D0>

n-2

Device1 to Device2

pid_wpt_cat

<D0>

n-1

Device1 to Device2

pid_xfer_cmplt

Command

class garmin.A200(link, command, datatypes)

Bases: TransferProtocol

Route Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device1 to Device2

pid_records

Records

1

Device1 to Device2

pid_rte_hdr

<D0>

2

Device1 to Device2

pid_rte_wpt_data

<D1>

3

Device1 to Device2

pid_rte_wpt_data

<D1>

n-2

Device1 to Device2

pid_rte_wpt_data

<D1>

n-1

Device1 to Device2

pid_xfer_cmplt

Command

class garmin.A201(link, command, datatypes)

Bases: TransferProtocol

Route Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device1 to Device2

pid_records

Records

1

Device1 to Device2

pid_rte_hdr

<D0>

2

Device1 to Device2

pid_rte_wpt_data

<D1>

3

Device1 to Device2

pid_rte_link_data

<D2>

4

Device1 to Device2

pid_rte_wpt_data

<D1>

5

Device1 to Device2

pid_rte_link_data

<D2>

n-2

Device1 to Device2

pid_rte_wpt_data

<D1>

n-1

Device1 to Device2

pid_xfer_cmplt

Command

class garmin.A300(link, command, datatypes)

Bases: TransferProtocol

Track Log Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device1 to Device2

pid_records

Records

1

Device1 to Device2

pid_trk_data

<D0>

2

Device1 to Device2

pid_trk_data

<D0>

n-2

Device1 to Device2

pid_trk_data

<D0>

n-1

Device1 to Device2

pid_xfer_cmplt

Command

class garmin.A301(link, command, datatypes)

Bases: TransferProtocol

Track Log Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device1 to Device2

pid_records

Records

1

Device1 to Device2

pid_trk_hdr

<D0>

2

Device1 to Device2

pid_trk_data

<D1>

3

Device1 to Device2

pid_trk_data

<D1>

n-2

Device1 to Device2

pid_trk_data

<D1>

n-1

Device1 to Device2

pid_xfer_cmplt

Command

class garmin.A302(link, command, datatypes)

Bases: A301

Track Log Transfer Protocol.

The A302 Track Log Transfer Protocol is used in fitness devices to transfer tracks from the device to the Host. The packet sequence for the protocol is identical to A301, except that the Host may only receive tracks from the device, and not send them.

class garmin.A400(link, command, datatypes)

Bases: TransferProtocol

Proximity Waypoint Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device1 to Device2

pid_records

Records

1

Device1 to Device2

pid_prx_wpt_data

<D0>

2

Device1 to Device2

pid_prx_wpt_data

<D0>

n-2

Device1 to Device2

pid_prx_wpt_data

<D0>

n-1

Device1 to Device2

pid_xfer_cmplt

Command

class garmin.A500(link, command, datatypes)

Bases: TransferProtocol

Almanac Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device1 to Device2

pid_records

Records

1

Device1 to Device2

pid_almanac_data

<D0>

2

Device1 to Device2

pid_almanac_data

<D0>

n-2

Device1 to Device2

pid_almanac_data

<D0>

n-1

Device1 to Device2

pid_xfer_cmplt

Command

Some device-specific data types do not include a satellite ID to relate each data packet to a particular satellite in the GPS constellation. For these data types, the order of the 32 pid_almanac_data packets corresponds to PRN order (i.e., the first packet contains data for PRN-01 and so on up to PRN-32).

class garmin.A600(link, command, datatypes)

Bases: TransferProtocol

Date and Time Initialization Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device1 to Device2

pid_date_time_data

<D0>

class garmin.A601(link, command, datatypes)

Bases: TransferProtocol

A601 implementation.

Used by GPSmap 60cs, no specifications as of 2004-09-26.

class garmin.A650(link, command, datatypes)

Bases: TransferProtocol

Flightbook Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Host to Device

pid_command_data

Command

1

Device to Host

pid_records

Records

2

Device to Host

pid_flightbook_record

<D0>

n-2

Device to Host

pid_flightbook_record

<D0>

n-1

Device to Host

pid_xfer_cmplt

Command

class garmin.A700(link, command, datatypes)

Bases: TransferProtocol

Position initialisation protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device1 to Device2

pid_position_data

<D0>

class garmin.A800(link, command, datatypes)

Bases: TransferProtocol

PVT Data Protocol.

In PVT mode the device will transmit packets once per second with real-time position, velocity, and time. This protocol is used as an alternative to NMEA (https://www.nmea.org/content/STANDARDS/STANDARDS).

PVT mode can be switched on and off by sending the cmnd_start_pvt_data and cmnd_stop_pvt_data command.

According to the specification the ACK and NAK packets are optional, but the device will not retransmit a PVT packet in response to receiving a NAK.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device to Host (ACK/NAK optional)

pid_pvt_data

<D0>

class garmin.A801

Bases: object

A801 implementation.

Used by ?, no documentation as of 2001-05-30.

class garmin.A802

Bases: object

A802 implementation.

Used by ?, no documentation as of 2001-05-30.

class garmin.A900(link, command)

Bases: object

A900 implementation.

This protocol is undocumented, but it appears to be a map transfer protocol. The implementation is derived from the GarminDev drivers of the abandoned QLandkarteGT application (https://sourceforge.net/projects/qlandkartegt/) and the sendmap application included with the also abandoned cGPSmapper application (https://sourceforge.net/projects/cgpsmapper/).

On devices without mass storage mode, maps are stored in the internal flash memory of the device. Some of the memory regions are:

Region

Hex

Map Name

Filename

3

0x03

Device Base Map

gmapbmap.img

10

0x0a

Supplementary map

gmapsupp.img

14

0x0e

Firmware/System Software

fw_all.bin

16

0x10

Logo/Splash Screen

logo.bin

49

0x31

Primary or Pre Installed Map

gmapprom.img

50

0x32

OEM Installed Map

gmapoem.img

These regions are derived from the Garmin RGN firmware update file format (confusingly, the RGN subfiles within Garmin IMG files share the same name, but have a completely different structure and purpose). The file format is reverse engineered by Herbert Oppmann (https://www.memotech.franken.de/FileFormats/Garmin_RGN_Format.pdf). This protocol only seems to be able to access region 10 with the supplementary map.

The terminology of the commands below is taken from SPI interfaces for serial flash memory that are used elsewhere. Before any write operation, the write enable command WREN must be issued. Sending the WREN sets the internal write enable latch, which is indicated by the WEL response. The write disable command WRDI clears it.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Host to Device

pid_mem_wren

Region

1

Device to Host

pid_mem_wel

2

Device to Host

pid_mem_write

MemChunk

n-2

Device to Host

pid_mem_write

MemChunk

n-1

Device to Host

pid_mem_wrdi

Region

class garmin.A902(link, command)

Bases: object

A902 implementation.

This protocol is undocumented, but it appears to be a map unlock protocol. The implementation is derived from the GarminDev drivers of the abandoned QLandkarteGT application (https://sourceforge.net/projects/qlandkartegt/) and the also abandoned sendmap application included with the cGPSmapper application (https://sourceforge.net/projects/cgpsmapper/).

class garmin.A903

Bases: object

A903 implementation.

Used by etrex, no documentation as of 2001-05-30.

class garmin.A904

Bases: object

A904 implementation.

This protocol is undocumented, but it appears to be a routable protocol. No implementation as of yet.

class garmin.ImageTransfer(link, command)

Bases: object

Image transfer protocol.

With the image transfer protocol a screenshot and custom waypoint icons can be downloaded. The latter can also be uploaded. This protocol is undocumented. The implementation is derived from the GarminDev drivers of the abandoned QLandkarteGT application (https://sourceforge.net/projects/qlandkartegt/) and by reverse-engineering the Garmin xImage utility (https://www8.garmin.com/support/download_details.jsp?id=545). Compatible devices include the Garmin GPSMAP 60CX/60CSX, eTrex Legend C, eTrex Vista C, GPSMAP 60C/60CS, GPSMAP 76C/76CS. Some devices, like the 60C and 76C, originally didn’t support custom waypoint icons, but later it was added with a firmware update.

class garmin.ScreenshotTransfer(link, command)

Bases: object

class garmin.A906(link, command, datatypes)

Bases: TransferProtocol

Lap Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Device to Host

pid_records

Records

1

Device to Host

pid_lap

<D0>

2

Device to Host

pid_lap

<D0>

n-2

Device to Host

pid_lap

<D0>

n-1

Device to Host

pid_xfer_cmplt

Command

class garmin.A1000(link, command, datatypes)

Bases: TransferProtocol

Run Transfer Protocol.

Packet sequence:

N

Direction

Packet ID

Packet Data Type

0

Host to Device

pid_command_data

Command

1

Device to Host

pid_records

Records

2

Device to Host

pid_run

<D0>

k-2

Device to Host

pid_run

<D0>

k-1

Device to Host

pid_xfer_cmplt

Command

k

Host to Device

pid_command_data

Command

k+1

Device to Host

pid_records

Records

k+2

Device to Host

pid_lap

Lap

m-2

Device to Host

pid_lap

Lap

m-1

Device to Host

pid_xfer_cmplt

Command

m

Host to Device

pid_command_data

Command

m+1

Device to Host

pid_records

Records

m+2

Device to Host

pid_trk_hdr

TrkHdr

m+3

Device to Host

pid_trk_data

TrkPoint

n-2

Device to Host

pid_trk_data

TrkPoint

n-1

Device to Host

pid_xfer_cmplt

Command