boolean leapsecond() {
bool message_started = false;
char GPS_info_char;
char GPS_info_buffer[130];
String line2parse = "";
String leapsecondstring = "";
unsigned int received_char = 0;
gpsPort.println("$PUBX,04*37");
delay(2);
uint32_t startlstest = millis();
while (millis() < (startlstest + 1900)) {
while (gpsPort.available()) {
GPS_info_char = gpsPort.read();
if (GPS_info_char == '$') { // start of message
message_started = true;
received_char = 0;
} else if (GPS_info_char == '*') { // end of message
GPS_info_buffer[received_char] = '\0';
line2parse = GPS_info_buffer;
if (line2parse.startsWith("PUBX")) {
// DEBUG_CS.println(line2parse);
for (int j = 0; j < 6; j++) {
line2parse.remove(0, line2parse.indexOf(',') + 1);
}
leapsecondstring = line2parse.substring(0, line2parse.indexOf(','));
if (leapsecondstring.indexOf('D') > 1) {
gpsleapsecond = leapsecondstring.substring(0, 2).toInt();
gpsleapsecondvalid = false;
return false;
} else {
gpsleapsecond = leapsecondstring.toInt();
gpsleapsecondvalid = true;
return true;
}
}
message_started = false; // ready for the new message
} else if (message_started == true) { // the message is already started and I got a new character
if (received_char <= 127) { // to avoid buffer overflow
GPS_info_buffer[received_char] = GPS_info_char;
received_char++;
} else { // resets everything (overflow happened)
GPS_info_buffer[received_char + 1] = '\0';
message_started = false;
received_char = 0;
}
}
}
}
return 0;
}