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:
If the GPS was last in a mode where it was regularly reporting positions, it will still be in that mode and you may get packets right from the beginning. These will probably be in binary which means that you're likely to hear your computer's bell going crazy. Not to worry. You can send messages while it's spewing out garbage and it will accept them. This holds true when you're sending the NMEA messages later on as well - though at that point the messages will be somewhat readable and not look (as much) like garbage.
64,64,67,105,1,43
I set up a macro to do this and used the ALT+Dial-the-number-on-the- keypad trick to get the nonASCII characters.
Then send a CR and LF. This is critical as the Motorola GPS doesn't accept any messages unless it sees the CR/LF. A CR is the Enter key and a LF is control-J. Or you could set up PCPLUS to send a CR/LF every time you hit the Enter key.
$PMOTG,GGA,0002*02 CR/LF
$PMOTG,RMC,0002*1F CR/LF
$PMOTG,GSA,0002*16 CR/LF
$PMOTG,FOR,0*2A CR/LF
It will continue to kick out the messages that you requested while it was in NMEA mode - but now they'll be in Motorola Binary 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".
/*****
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);
}