MotoAtlas

Using your Motorola Oncore GPS with DeLorme's StreetAtlas

The Motorola GPS normally uses a binary communication protocol but does have an NMEA mode. However, their NMEA mode isn't perfect. I'm not sure what messages Street Atlas 4.0 sends to get the position information - [Do you know this?] but the Motorola GPS doesn't respond to them.

To get the GPS to work, you must tell the GPS to send location messages manually. I used PCPLUS to do this. Here are the important sequences:

More about that NMEA format

Suppose you want to change the report rate, or use one of the other NMEA messages. The only thing stopping you is the sumcheck - the last two digits of the NMEA message.

This program is designed to calculate the checksum on an NMEA message. The following is an example of a Motorola Oncore NMEA command message:

$PMOTG,GGA,0002*02

followed by a CR/LF.

All data under NMEA is sent as sentences. A sentence starts with a "$", a two letter "talker ID", and a three letter "sentence ID". Then follows a number of fields giving data. Finally a "*" precedes a two hex-digit checksum. The checksum is calculated as the exclusive-or of all the characters between the $ and the *.

This program takes any sequence of characters and provides a checksum for that sequence of characters. So, to calculate the checksum for the above message, you would type:

nmeachecksum "PMOTG,GGA,0002"

and the software would return "02".

The Code


/*****
 nmeachecksum: calculates exclusive-or checksum of provided string.
 Code released into public domain.
 (c)1997 Rudy Moore
 *****/

main(int argv, char *argc[])
{
        int i;
        char sumcheck=0;

        if (argv != 2) {
                printf("Usage: %s <message string>\n\n",argc[0]);
                printf("This program calculates the exclusive-or checksum of the provided string.\n");
                exit(1);
                }

        for( i=0; i<strlen(argc[1]); i++ ) {
                sumcheck = sumcheck ^ argc[1][i];
                }

        printf("sumcheck: %.2X\n",sumcheck);
        printf("complete message: $%s*%.2X\n",argc[1],sumcheck);
}

[]Rudy Moore
This guide © 1997, all rights are reserved.