Skip to content

Commit e115785

Browse files
committed
GPS - store 1 GGA/RMC event within model FIFO
1 parent 8ab6ecb commit e115785

File tree

2 files changed

+11
-20
lines changed

2 files changed

+11
-20
lines changed

src/components/gps/controller.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,6 @@ void GPSController::update() {
234234
WS_DEBUG_PRINT("[gps] Parsing NMEA sentence: ");
235235
WS_DEBUG_PRINTLN(nmea_sentence);
236236
if (!ada_gps->parse(nmea_sentence)) {
237-
WS_DEBUG_PRINTLN("[gps] Failed to parse NMEA sentence!"); // TODO: Remove in Prod!
238237
continue; // Skip parsing this sentence if parsing failed
239238
}
240239
has_gps_event = true;
@@ -244,13 +243,11 @@ void GPSController::update() {
244243
ada_gps->milliseconds, ada_gps->day, ada_gps->month, ada_gps->year);
245244
if (strncmp(nmea_sentence, "$GPRMC", 6) == 0 ||
246245
strncmp(nmea_sentence, "$GNRMC", 6) == 0) {
247-
WS_DEBUG_PRINTLN("[gps] Processing RMC sentence"); // TODO: Remove in Prod!
248246
_gps_model->AddGpsEventRMC(
249247
datetime, ada_gps->fix, ada_gps->latitude, &ada_gps->lat,
250248
ada_gps->longitude, &ada_gps->lon, ada_gps->speed, ada_gps->angle);
251249
} else if (strncmp(nmea_sentence, "$GPGGA", 6) == 0 ||
252250
strncmp(nmea_sentence, "$GNGGA", 6) == 0) {
253-
WS_DEBUG_PRINTLN("[gps] Processing GGA sentence"); // TODO: Remove in Prod!
254251
_gps_model->AddGpsEventGGA(
255252
datetime, ada_gps->fix, ada_gps->latitude, &ada_gps->lat,
256253
ada_gps->longitude, &ada_gps->lon, ada_gps->satellites,
@@ -264,7 +261,9 @@ void GPSController::update() {
264261
// We did not create a GPSEvent because the NMEA sentences were not
265262
// GGA/RMC or parsed correctly
266263
if (!has_gps_event) {
267-
WS_DEBUG_PRINTLN("[gps] No GPSEvent created from NMEA sentences!");
264+
WS_DEBUG_PRINTLN(
265+
"[gps] No GPSEvent created from NMEA sentences!"); // TODO: Remove
266+
// this in prod
268267
continue;
269268
}
270269

@@ -279,7 +278,7 @@ void GPSController::update() {
279278
_gps_model->GetGPSEvent())) {
280279
WS_DEBUG_PRINTLN("[gps] ERROR: Failed to publish GPSEvent!");
281280
} else {
282-
WS_DEBUG_PRINTLN("[gps] GPSEvent published successfully!");
281+
WS_DEBUG_PRINTLN("...ok!");
283282
}
284283
}
285284
drv->SetPollPeriodPrv(cur_time);

src/components/gps/model.cpp

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -118,14 +118,11 @@ bool GPSModel::AddGpsEventRMC(wippersnapper_gps_GPSDateTime datetime,
118118
uint8_t fix_status, float lat, char *lat_dir,
119119
float lon, char *lon_dir, float speed,
120120
float angle) {
121-
// Check if we've reached the maximum number of RMC responses
122-
if (_msg_gps_event.rmc_responses_count >= MAX_COUNT_RMC_GGA)
123-
return false;
124-
125121
// Validate pointers have been provided correctly
126122
if (!lat_dir || !lon_dir)
127123
return false;
128124

125+
// Always store at index 0, overwriting any previous response
129126
wippersnapper_gps_GPSRMCResponse rmc_response;
130127
rmc_response = wippersnapper_gps_GPSRMCResponse_init_zero;
131128
rmc_response.has_datetime = true;
@@ -152,21 +149,16 @@ bool GPSModel::AddGpsEventRMC(wippersnapper_gps_GPSDateTime datetime,
152149
// Fill course in degrees from true north
153150
snprintf(rmc_response.angle, sizeof(rmc_response.angle), "%.1f", angle);
154151

155-
_msg_gps_event.rmc_responses[_msg_gps_event.rmc_responses_count] =
156-
rmc_response;
157-
_msg_gps_event.rmc_responses_count++;
152+
// Always store at index 0, overwrite any previous response in the FIFO buffer
153+
_msg_gps_event.rmc_responses[0] = rmc_response;
154+
_msg_gps_event.rmc_responses_count = 1;
158155
return true;
159156
}
160157

161158
bool GPSModel::AddGpsEventGGA(wippersnapper_gps_GPSDateTime datetime,
162159
uint8_t fix_status, float lat, char *lat_dir,
163160
float lon, char *lon_dir, uint8_t num_sats,
164161
float hdop, float alt, float geoid_height) {
165-
166-
// Check if we've reached the maximum number of RMC responses
167-
if (_msg_gps_event.gga_responses_count >= MAX_COUNT_RMC_GGA)
168-
return false;
169-
170162
// Validate pointers have been provided correctly
171163
if (!lat_dir || !lon_dir)
172164
return false;
@@ -197,8 +189,8 @@ bool GPSModel::AddGpsEventGGA(wippersnapper_gps_GPSDateTime datetime,
197189
snprintf(gga_response.geoid_height, sizeof(gga_response.geoid_height), "%.1f",
198190
geoid_height);
199191

200-
_msg_gps_event.gga_responses[_msg_gps_event.gga_responses_count] =
201-
gga_response;
202-
_msg_gps_event.gga_responses_count++;
192+
// Always store at index 0, overwrite any previous response in the FIFO buffer
193+
_msg_gps_event.gga_responses[0] = gga_response;
194+
_msg_gps_event.gga_responses_count = 1;
203195
return true;
204196
}

0 commit comments

Comments
 (0)