How do I set the data rate of the NEMA messages used?

News Article Feature Image

Here is the function call:

/* Set the rate of the NMEA messages used */
PSRF103("00", "00", "01", "02");
// GGA at 1 sec rate
Here is the function:
//-----------------------------------------------------------------------------
// Function:    PSRF103
// Description: Send SiRF msg 103 to GPS
//-----------------------------------------------------------------------------
// where:        $PSRF103,05,00,01,01*20
//   $PSRF103
//   05         00=GGA
//              01=GLL
//              02=GSA
//              03=GSV
//              04=RMC
//              05=VTG
//   00         mode, 0=set rate, 1=query
//   01         rate in seconds, 0-255
//   01         checksum 0=no, 1=yes
//   *20        checksum
void PSRF103(char nmeamsg[], char mode[], char rate[], char chksum[])
{
char msg[25] = "$PSRF103";                              // NMEA msg
char csum[2];
unsigned short checksum = 0;
int i;
strcat(msg,",");
strcat(msg,nmeamsg);                                    // Add NMEA msg
strcat(msg,",");
strcat(msg,mode);                                       // Add mode
strcat(msg,",");
strcat(msg,rate);                                       // Add rate
strcat(msg,",");
strcat(msg,chksum);                                     // Add checksum mode
for (i=1;i<strlen(msg);i++)
checksum ^= msg[i];                                   // XOR
sprintf(csum,"%02X",checksum);                          // Convert hex string
strcat(msg,"*");                                        // Add checksum delimeter
strcat(msg, csum);                                      // Add checksum
strcat(msg,"\r\n");                                     // Add CR, LF
USART_SendString(GPS_USART,msg);                        // Send msg
DPRINT(msg);
}