Skip to content

Commit 522a62f

Browse files
committed
GPS - Fix circular buffer pop
1 parent 77c553a commit 522a62f

File tree

1 file changed

+31
-32
lines changed

1 file changed

+31
-32
lines changed

src/components/gps/controller.cpp

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -181,39 +181,38 @@ void GPSController::update() {
181181
WS_DEBUG_PRINTLN(" times from GPS module.");
182182
// Pop off the buffer and parse
183183
char nmea_sentence[MAX_LEN_NMEA_SENTENCE];
184-
int rc = NmeaBufPop(nmea_sentence);
185-
if (rc == -1) {
186-
WS_DEBUG_PRINTLN("[gps] NMEA sentence buffer empty!");
187-
continue; // No sentences to process, skip this driver
188-
}
189-
// Parse the NMEA sentence
190-
if (!drv->GetAdaGps()->parse(nmea_sentence)) {
191-
WS_DEBUG_PRINT("[gps] ERROR: Failed to parse NMEA sentence: ");
192-
WS_DEBUG_PRINTLN(nmea_sentence);
193-
continue; // Skip this driver if parsing failed
194-
}
195-
Serial.print("Fix: ");
196-
Serial.print((int)drv->GetAdaGps()->fix);
197-
Serial.print(" quality: ");
198-
Serial.println((int)drv->GetAdaGps()->fixquality);
199-
if (drv->GetAdaGps()->fix) {
200-
Serial.print("Location: ");
201-
Serial.print(drv->GetAdaGps()->latitude, 4);
202-
Serial.print(drv->GetAdaGps()->lat);
203-
Serial.print(", ");
204-
Serial.print(drv->GetAdaGps()->longitude, 4);
205-
Serial.println(drv->GetAdaGps()->lon);
206-
Serial.print("Speed (knots): ");
207-
Serial.println(drv->GetAdaGps()->speed);
208-
Serial.print("Angle: ");
209-
Serial.println(drv->GetAdaGps()->angle);
210-
Serial.print("Altitude: ");
211-
Serial.println(drv->GetAdaGps()->altitude);
212-
Serial.print("Satellites: ");
213-
Serial.println((int)drv->GetAdaGps()->satellites);
214-
Serial.print("Antenna status: ");
215-
Serial.println((int)drv->GetAdaGps()->antenna);
184+
// Pop until we have no more sentences in the buffer
185+
while (NmeaBufPop(nmea_sentence) != -1) {
186+
// Parse the NMEA sentence
187+
if (!drv->GetAdaGps()->parse(nmea_sentence)) {
188+
WS_DEBUG_PRINT("[gps] ERROR: Failed to parse NMEA sentence: ");
189+
WS_DEBUG_PRINTLN(nmea_sentence);
190+
continue; // Skip this driver if parsing failed
191+
}
192+
Serial.print("Fix: ");
193+
Serial.print((int)drv->GetAdaGps()->fix);
194+
Serial.print(" quality: ");
195+
Serial.println((int)drv->GetAdaGps()->fixquality);
196+
if (drv->GetAdaGps()->fix) {
197+
Serial.print("Location: ");
198+
Serial.print(drv->GetAdaGps()->latitude, 4);
199+
Serial.print(drv->GetAdaGps()->lat);
200+
Serial.print(", ");
201+
Serial.print(drv->GetAdaGps()->longitude, 4);
202+
Serial.println(drv->GetAdaGps()->lon);
203+
Serial.print("Speed (knots): ");
204+
Serial.println(drv->GetAdaGps()->speed);
205+
Serial.print("Angle: ");
206+
Serial.println(drv->GetAdaGps()->angle);
207+
Serial.print("Altitude: ");
208+
Serial.println(drv->GetAdaGps()->altitude);
209+
Serial.print("Satellites: ");
210+
Serial.println((int)drv->GetAdaGps()->satellites);
211+
Serial.print("Antenna status: ");
212+
Serial.println((int)drv->GetAdaGps()->antenna);
213+
}
216214
}
215+
WS_DEBUG_PRINTLN("[gps] Finished processing NMEA sentences.");
217216
// TODO: Successfully parsed the NMEA sentence, update the model
218217

219218
drv->SetPollPeriodPrv(cur_time);

0 commit comments

Comments
 (0)