gypsy_nmea_parser_received_data() in gypsy-nmea-parser.c watches out for <CR>. NMEA sentences may come in in chunks and if the second to last chunk ends with a <CR>, the following <LF> is left in the buffer and consequently the next sentence starts with a <LF>. nmea_parse_sentence() in nmea-parser.c invalidates a sentence that does not start with '$'. I am using a Telit UC864-G. NMEA sentences come in in several chunks and thus most of them get discarded because of that. A solution would be to ignore a sentence with a <LF> at the beginning. The following code works for me: static gboolean gypsy_nmea_parser_received_data (GypsyParser *parser, gsize length, GError **error) { GypsyNmeaParser *nmea = GYPSY_NMEA_PARSER (parser); GypsyNmeaParserPrivate *priv = nmea->priv; char *eos = NULL; priv->chars_in_buffer += length; /* Append a '\0' to the data so we never run off the end. The '\0' will be overwritten by the next call to received_data */ *(priv->buffer + priv->chars_in_buffer) = '\0'; /* NMEA sentences end with <CR><LF>, so find the <LF> at the end of each sentence */ while ((eos = strchr (priv->buffer, '\n'))) { int sentence_length; sentence_length = (eos - priv->buffer); if (sentence_length > 1) { /* terminate the string at the <CR> */ *(eos-1) = '\0'; g_debug ("NMEA sentence: %s", priv->buffer); if (nmea_parse_sentence (priv->ctxt, priv->buffer, NULL) == FALSE) { g_debug ("Invalid sentence: %s", priv->buffer); } } if (sentence_length > 0) { /* Remove the sentence from the buffer */ memset (priv->buffer, 0, sentence_length + 2); priv->chars_in_buffer = 0; } } return TRUE; }
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.