diff --git a/examples/gps/gps_main.c b/examples/gps/gps_main.c index 68f6da66e..a308f5213 100644 --- a/examples/gps/gps_main.c +++ b/examples/gps/gps_main.c @@ -26,6 +26,7 @@ #include +#include #include #include #include @@ -52,9 +53,11 @@ int main(int argc, FAR char *argv[]) { int fd; int cnt; + ssize_t nread; char ch; char line[MINMEA_MAX_LENGTH]; char *port = "/dev/ttyS1"; + bool truncated; /* Get the GPS serial port argument. If none specified, default to ttyS1 */ @@ -79,18 +82,38 @@ int main(int argc, FAR char *argv[]) /* Read until we complete a line */ cnt = 0; - do + truncated = false; + + for (; ; ) { - read(fd, &ch, 1); - if (ch != '\r' && ch != '\n') + nread = read(fd, &ch, 1); + if (nread <= 0) + { + continue; + } + + if (ch == '\r' || ch == '\n') + { + break; + } + + if (cnt < MINMEA_MAX_LENGTH - 1) { line[cnt++] = ch; } + else + { + truncated = true; + } } - while (ch != '\r' && ch != '\n'); line[cnt] = '\0'; + if (truncated) + { + continue; + } + switch (minmea_sentence_id(line, false)) { case MINMEA_SENTENCE_RMC: