Skip to content

Commit 7004069

Browse files
committed
Add get/setProcessNMEAMask to allow selection of which messages are passed to processNMEA
1 parent e14ce73 commit 7004069

File tree

5 files changed

+145
-75
lines changed

5 files changed

+145
-75
lines changed

examples/Data_Logging/DataLoggingExample6_NMEA/DataLoggingExample6_NMEA.ino

+2-2
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ void setup()
145145
myGNSS.enableNMEAMessage(UBX_NMEA_GSA, COM_PORT_I2C, 1); // Ensure the GxGSA (GNSS DOP and Active satellites) message is enabled. Send every measurement.
146146
myGNSS.enableNMEAMessage(UBX_NMEA_GSV, COM_PORT_I2C, 1); // Ensure the GxGSV (GNSS satellites in view) message is enabled. Send every measurement.
147147

148-
myGNSS.setNMEALoggingMask(SFE_UBLOX_LOG_NMEA_ALL); // Enable logging of all enabled NMEA messages
149-
//myGNSS.setNMEALoggingMask(SFE_UBLOX_LOG_NMEA_GGA | SFE_UBLOX_LOG_NMEA_GSA); // Or we can, for example, log only GxGGA and GxGSA. Ignore GxGSV
148+
myGNSS.setNMEALoggingMask(SFE_UBLOX_FILTER_NMEA_ALL); // Enable logging of all enabled NMEA messages
149+
//myGNSS.setNMEALoggingMask(SFE_UBLOX_FILTER_NMEA_GGA | SFE_UBLOX_FILTER_NMEA_GSA); // Or we can, for example, log only GxGGA & GxGSA and ignore GxGSV
150150

151151
Serial.println(F("Press any key to stop logging."));
152152

examples/Example2_NMEAParsing/Example2_NMEAParsing.ino

+7-3
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ void setup()
4545
Serial.println(F("u-blox GNSS not detected at default I2C address. Please check wiring. Freezing."));
4646
while (1);
4747
}
48+
49+
myGNSS.setProcessNMEAMask(SFE_UBLOX_FILTER_NMEA_ALL); // Make sure the library is passing all NMEA messages to processNMEA
50+
51+
myGNSS.setProcessNMEAMask(SFE_UBLOX_FILTER_NMEA_GGA); // Or, we can be kind to MicroNMEA and _only_ pass the GGA messages to it
4852
}
4953

5054
void loop()
@@ -60,12 +64,12 @@ void loop()
6064
Serial.println(latitude_mdeg / 1000000., 6);
6165
Serial.print("Longitude (deg): ");
6266
Serial.println(longitude_mdeg / 1000000., 6);
67+
68+
nmea.clear(); // Clear the MicroNMEA storage to make sure we are getting fresh data
6369
}
6470
else
6571
{
66-
Serial.print("No Fix - ");
67-
Serial.print("Num. satellites: ");
68-
Serial.println(nmea.getNumSatellites());
72+
Serial.println("Waiting for fresh data");
6973
}
7074

7175
delay(250); //Don't pound too hard on the I2C bus

keywords.txt

+24-22
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,8 @@ logHNRPVT KEYWORD2
384384

385385
setNMEALoggingMask KEYWORD2
386386
getNMEALoggingMask KEYWORD2
387+
setProcessNMEAMask KEYWORD2
388+
getProcessNMEAMask KEYWORD2
387389

388390
setNavigationFrequency KEYWORD2
389391
getNavigationFrequency KEYWORD2
@@ -559,28 +561,28 @@ UBX_NMEA_VLW LITERAL1
559561
UBX_NMEA_VTG LITERAL1
560562
UBX_NMEA_ZDA LITERAL1
561563

562-
SFE_UBLOX_LOG_NMEA_ALL LITERAL1
563-
SFE_UBLOX_LOG_NMEA_DTM LITERAL1
564-
SFE_UBLOX_LOG_NMEA_GAQ LITERAL1
565-
SFE_UBLOX_LOG_NMEA_GBQ LITERAL1
566-
SFE_UBLOX_LOG_NMEA_GBS LITERAL1
567-
SFE_UBLOX_LOG_NMEA_GGA LITERAL1
568-
SFE_UBLOX_LOG_NMEA_GLL LITERAL1
569-
SFE_UBLOX_LOG_NMEA_GLQ LITERAL1
570-
SFE_UBLOX_LOG_NMEA_GNQ LITERAL1
571-
SFE_UBLOX_LOG_NMEA_GNS LITERAL1
572-
SFE_UBLOX_LOG_NMEA_GPQ LITERAL1
573-
SFE_UBLOX_LOG_NMEA_GQQ LITERAL1
574-
SFE_UBLOX_LOG_NMEA_GRS LITERAL1
575-
SFE_UBLOX_LOG_NMEA_GSA LITERAL1
576-
SFE_UBLOX_LOG_NMEA_GST LITERAL1
577-
SFE_UBLOX_LOG_NMEA_GSV LITERAL1
578-
SFE_UBLOX_LOG_NMEA_RLM LITERAL1
579-
SFE_UBLOX_LOG_NMEA_RMC LITERAL1
580-
SFE_UBLOX_LOG_NMEA_TXT LITERAL1
581-
SFE_UBLOX_LOG_NMEA_VLW LITERAL1
582-
SFE_UBLOX_LOG_NMEA_VTG LITERAL1
583-
SFE_UBLOX_LOG_NMEA_ZDA LITERAL1
564+
SFE_UBLOX_FILTER_NMEA_ALL LITERAL1
565+
SFE_UBLOX_FILTER_NMEA_DTM LITERAL1
566+
SFE_UBLOX_FILTER_NMEA_GAQ LITERAL1
567+
SFE_UBLOX_FILTER_NMEA_GBQ LITERAL1
568+
SFE_UBLOX_FILTER_NMEA_GBS LITERAL1
569+
SFE_UBLOX_FILTER_NMEA_GGA LITERAL1
570+
SFE_UBLOX_FILTER_NMEA_GLL LITERAL1
571+
SFE_UBLOX_FILTER_NMEA_GLQ LITERAL1
572+
SFE_UBLOX_FILTER_NMEA_GNQ LITERAL1
573+
SFE_UBLOX_FILTER_NMEA_GNS LITERAL1
574+
SFE_UBLOX_FILTER_NMEA_GPQ LITERAL1
575+
SFE_UBLOX_FILTER_NMEA_GQQ LITERAL1
576+
SFE_UBLOX_FILTER_NMEA_GRS LITERAL1
577+
SFE_UBLOX_FILTER_NMEA_GSA LITERAL1
578+
SFE_UBLOX_FILTER_NMEA_GST LITERAL1
579+
SFE_UBLOX_FILTER_NMEA_GSV LITERAL1
580+
SFE_UBLOX_FILTER_NMEA_RLM LITERAL1
581+
SFE_UBLOX_FILTER_NMEA_RMC LITERAL1
582+
SFE_UBLOX_FILTER_NMEA_TXT LITERAL1
583+
SFE_UBLOX_FILTER_NMEA_VLW LITERAL1
584+
SFE_UBLOX_FILTER_NMEA_VTG LITERAL1
585+
SFE_UBLOX_FILTER_NMEA_ZDA LITERAL1
584586

585587
UBX_NAV_ATT LITERAL1
586588
UBX_NAV_CLOCK LITERAL1

src/SparkFun_u-blox_GNSS_Arduino_Library.cpp

+75-20
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ SFE_UBLOX_GNSS::SFE_UBLOX_GNSS(void)
5151
digitalWrite((uint8_t)debugPin, HIGH);
5252
}
5353

54-
_logNMEA.all = 0; // Default to logging no NMEA messages
54+
_logNMEA.all = 0; // Default to passing no NMEA messages to the file buffer
55+
_processNMEA.all = SFE_UBLOX_FILTER_NMEA_ALL; // Default to passing all NMEA messages to process NMEA
5556
}
5657

5758
//Stop all automatic message processing. Free all used RAM
@@ -1266,12 +1267,24 @@ void SFE_UBLOX_GNSS::process(uint8_t incoming, ubxPacket *incomingUBX, uint8_t r
12661267
{
12671268
storeFileBytes(&nmeaAddressField[0], 6); // Add start character and address field to the file buffer
12681269
}
1270+
// Check if it should be passed to processNMEA
1271+
if (processThisNMEA())
1272+
{
1273+
processNMEA(nmeaAddressField[0]); //Process the start character and address field
1274+
processNMEA(nmeaAddressField[1]);
1275+
processNMEA(nmeaAddressField[2]);
1276+
processNMEA(nmeaAddressField[3]);
1277+
processNMEA(nmeaAddressField[4]);
1278+
processNMEA(nmeaAddressField[5]);
1279+
}
12691280
}
12701281

1271-
if ((nmeaByteCounter > 5) || (nmeaByteCounter < 0)) // Should we add incoming to the file buffer?
1282+
if ((nmeaByteCounter > 5) || (nmeaByteCounter < 0)) // Should we add incoming to the file buffer and/or pass it to processNMEA?
12721283
{
12731284
if (logThisNMEA())
12741285
storeFileBytes(&incoming, 1); // Add incoming to the file buffer
1286+
if (processThisNMEA())
1287+
processNMEA(incoming); // Pass incoming to processNMEA
12751288
}
12761289

12771290
if (incoming == '*')
@@ -1284,34 +1297,35 @@ void SFE_UBLOX_GNSS::process(uint8_t incoming, ubxPacket *incomingUBX, uint8_t r
12841297

12851298
if (nmeaByteCounter == 0) // Check if we are done
12861299
currentSentence = NONE; // All done!
1287-
1288-
processNMEA(incoming); //Process each and every NMEA character
12891300
}
12901301
else if (currentSentence == RTCM)
12911302
{
12921303
processRTCMframe(incoming); //Deal with RTCM bytes
12931304
}
12941305
}
12951306

1296-
// PRIVATE: Return true if we should log this NMEA message
1307+
// PRIVATE: Return true if we should add this NMEA message to the file buffer for logging
12971308
boolean SFE_UBLOX_GNSS::logThisNMEA()
12981309
{
12991310
if (_logNMEA.bits.all == 1) return (true);
13001311
if ((nmeaAddressField[3] == 'D') && (nmeaAddressField[4] == 'T') && (nmeaAddressField[5] == 'M') && (_logNMEA.bits.UBX_NMEA_DTM == 1)) return (true);
1301-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'A') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GAQ == 1)) return (true);
1302-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'B') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GBQ == 1)) return (true);
1303-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'B') && (nmeaAddressField[5] == 'S') && (_logNMEA.bits.UBX_NMEA_GBS == 1)) return (true);
1304-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'G') && (nmeaAddressField[5] == 'A') && (_logNMEA.bits.UBX_NMEA_GGA == 1)) return (true);
1305-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'L') && (_logNMEA.bits.UBX_NMEA_GLL == 1)) return (true);
1306-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GLQ == 1)) return (true);
1307-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'N') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GNQ == 1)) return (true);
1308-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'N') && (nmeaAddressField[5] == 'S') && (_logNMEA.bits.UBX_NMEA_GNS == 1)) return (true);
1309-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'P') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GPQ == 1)) return (true);
1310-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'Q') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GQQ == 1)) return (true);
1311-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'R') && (nmeaAddressField[5] == 'S') && (_logNMEA.bits.UBX_NMEA_GRS == 1)) return (true);
1312-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'S') && (nmeaAddressField[5] == 'A') && (_logNMEA.bits.UBX_NMEA_GSA == 1)) return (true);
1313-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'S') && (nmeaAddressField[5] == 'T') && (_logNMEA.bits.UBX_NMEA_GST == 1)) return (true);
1314-
if ((nmeaAddressField[3] == 'G') && (nmeaAddressField[4] == 'S') && (nmeaAddressField[5] == 'V') && (_logNMEA.bits.UBX_NMEA_GSV == 1)) return (true);
1312+
if (nmeaAddressField[3] == 'G')
1313+
{
1314+
if ((nmeaAddressField[4] == 'A') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GAQ == 1)) return (true);
1315+
if ((nmeaAddressField[4] == 'B') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GBQ == 1)) return (true);
1316+
if ((nmeaAddressField[4] == 'B') && (nmeaAddressField[5] == 'S') && (_logNMEA.bits.UBX_NMEA_GBS == 1)) return (true);
1317+
if ((nmeaAddressField[4] == 'G') && (nmeaAddressField[5] == 'A') && (_logNMEA.bits.UBX_NMEA_GGA == 1)) return (true);
1318+
if ((nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'L') && (_logNMEA.bits.UBX_NMEA_GLL == 1)) return (true);
1319+
if ((nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GLQ == 1)) return (true);
1320+
if ((nmeaAddressField[4] == 'N') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GNQ == 1)) return (true);
1321+
if ((nmeaAddressField[4] == 'N') && (nmeaAddressField[5] == 'S') && (_logNMEA.bits.UBX_NMEA_GNS == 1)) return (true);
1322+
if ((nmeaAddressField[4] == 'P') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GPQ == 1)) return (true);
1323+
if ((nmeaAddressField[4] == 'Q') && (nmeaAddressField[5] == 'Q') && (_logNMEA.bits.UBX_NMEA_GQQ == 1)) return (true);
1324+
if ((nmeaAddressField[4] == 'R') && (nmeaAddressField[5] == 'S') && (_logNMEA.bits.UBX_NMEA_GRS == 1)) return (true);
1325+
if ((nmeaAddressField[4] == 'S') && (nmeaAddressField[5] == 'A') && (_logNMEA.bits.UBX_NMEA_GSA == 1)) return (true);
1326+
if ((nmeaAddressField[4] == 'S') && (nmeaAddressField[5] == 'T') && (_logNMEA.bits.UBX_NMEA_GST == 1)) return (true);
1327+
if ((nmeaAddressField[4] == 'S') && (nmeaAddressField[5] == 'V') && (_logNMEA.bits.UBX_NMEA_GSV == 1)) return (true);
1328+
}
13151329
if ((nmeaAddressField[3] == 'R') && (nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'M') && (_logNMEA.bits.UBX_NMEA_RLM == 1)) return (true);
13161330
if ((nmeaAddressField[3] == 'R') && (nmeaAddressField[4] == 'M') && (nmeaAddressField[5] == 'C') && (_logNMEA.bits.UBX_NMEA_RMC == 1)) return (true);
13171331
if ((nmeaAddressField[3] == 'T') && (nmeaAddressField[4] == 'X') && (nmeaAddressField[5] == 'T') && (_logNMEA.bits.UBX_NMEA_TXT == 1)) return (true);
@@ -1321,6 +1335,37 @@ boolean SFE_UBLOX_GNSS::logThisNMEA()
13211335
return (false);
13221336
}
13231337

1338+
// PRIVATE: Return true if we should pass this NMEA message to processNMEA
1339+
boolean SFE_UBLOX_GNSS::processThisNMEA()
1340+
{
1341+
if (_processNMEA.bits.all == 1) return (true);
1342+
if ((nmeaAddressField[3] == 'D') && (nmeaAddressField[4] == 'T') && (nmeaAddressField[5] == 'M') && (_processNMEA.bits.UBX_NMEA_DTM == 1)) return (true);
1343+
if (nmeaAddressField[3] == 'G')
1344+
{
1345+
if ((nmeaAddressField[4] == 'A') && (nmeaAddressField[5] == 'Q') && (_processNMEA.bits.UBX_NMEA_GAQ == 1)) return (true);
1346+
if ((nmeaAddressField[4] == 'B') && (nmeaAddressField[5] == 'Q') && (_processNMEA.bits.UBX_NMEA_GBQ == 1)) return (true);
1347+
if ((nmeaAddressField[4] == 'B') && (nmeaAddressField[5] == 'S') && (_processNMEA.bits.UBX_NMEA_GBS == 1)) return (true);
1348+
if ((nmeaAddressField[4] == 'G') && (nmeaAddressField[5] == 'A') && (_processNMEA.bits.UBX_NMEA_GGA == 1)) return (true);
1349+
if ((nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'L') && (_processNMEA.bits.UBX_NMEA_GLL == 1)) return (true);
1350+
if ((nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'Q') && (_processNMEA.bits.UBX_NMEA_GLQ == 1)) return (true);
1351+
if ((nmeaAddressField[4] == 'N') && (nmeaAddressField[5] == 'Q') && (_processNMEA.bits.UBX_NMEA_GNQ == 1)) return (true);
1352+
if ((nmeaAddressField[4] == 'N') && (nmeaAddressField[5] == 'S') && (_processNMEA.bits.UBX_NMEA_GNS == 1)) return (true);
1353+
if ((nmeaAddressField[4] == 'P') && (nmeaAddressField[5] == 'Q') && (_processNMEA.bits.UBX_NMEA_GPQ == 1)) return (true);
1354+
if ((nmeaAddressField[4] == 'Q') && (nmeaAddressField[5] == 'Q') && (_processNMEA.bits.UBX_NMEA_GQQ == 1)) return (true);
1355+
if ((nmeaAddressField[4] == 'R') && (nmeaAddressField[5] == 'S') && (_processNMEA.bits.UBX_NMEA_GRS == 1)) return (true);
1356+
if ((nmeaAddressField[4] == 'S') && (nmeaAddressField[5] == 'A') && (_processNMEA.bits.UBX_NMEA_GSA == 1)) return (true);
1357+
if ((nmeaAddressField[4] == 'S') && (nmeaAddressField[5] == 'T') && (_processNMEA.bits.UBX_NMEA_GST == 1)) return (true);
1358+
if ((nmeaAddressField[4] == 'S') && (nmeaAddressField[5] == 'V') && (_processNMEA.bits.UBX_NMEA_GSV == 1)) return (true);
1359+
}
1360+
if ((nmeaAddressField[3] == 'R') && (nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'M') && (_processNMEA.bits.UBX_NMEA_RLM == 1)) return (true);
1361+
if ((nmeaAddressField[3] == 'R') && (nmeaAddressField[4] == 'M') && (nmeaAddressField[5] == 'C') && (_processNMEA.bits.UBX_NMEA_RMC == 1)) return (true);
1362+
if ((nmeaAddressField[3] == 'T') && (nmeaAddressField[4] == 'X') && (nmeaAddressField[5] == 'T') && (_processNMEA.bits.UBX_NMEA_TXT == 1)) return (true);
1363+
if ((nmeaAddressField[3] == 'V') && (nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'W') && (_processNMEA.bits.UBX_NMEA_VLW == 1)) return (true);
1364+
if ((nmeaAddressField[3] == 'V') && (nmeaAddressField[4] == 'T') && (nmeaAddressField[5] == 'G') && (_processNMEA.bits.UBX_NMEA_VTG == 1)) return (true);
1365+
if ((nmeaAddressField[3] == 'Z') && (nmeaAddressField[4] == 'D') && (nmeaAddressField[5] == 'A') && (_processNMEA.bits.UBX_NMEA_ZDA == 1)) return (true);
1366+
return (false);
1367+
}
1368+
13241369
//This is the default or generic NMEA processor. We're only going to pipe the data to serial port so we can see it.
13251370
//User could overwrite this function to pipe characters to nmea.process(c) of tinyGPS or MicroNMEA
13261371
//Or user could pipe each character to a buffer, radio, etc.
@@ -9143,7 +9188,7 @@ void SFE_UBLOX_GNSS::logHNRPVT(boolean enabled)
91439188
packetUBXHNRPVT->automaticFlags.flags.bits.addToFileBuffer = (uint8_t)enabled;
91449189
}
91459190

9146-
// ***** Helper Functions for NMEA Logging
9191+
// ***** Helper Functions for NMEA Logging / Processing
91479192

91489193
// Log selected NMEA messages to file buffer - if the messages are enabled and if the file buffer exists
91499194
// User needs to call setFileBufferSize before .begin
@@ -9156,6 +9201,16 @@ uint32_t SFE_UBLOX_GNSS::getNMEALoggingMask()
91569201
return (_logNMEA.all);
91579202
}
91589203

9204+
// Pass selected NMEA messages to processNMEA
9205+
void SFE_UBLOX_GNSS::setProcessNMEAMask(uint32_t messages)
9206+
{
9207+
_processNMEA.all = messages;
9208+
}
9209+
uint32_t SFE_UBLOX_GNSS::getProcessNMEAMask()
9210+
{
9211+
return (_processNMEA.all);
9212+
}
9213+
91599214
// ***** CFG RATE Helper Functions
91609215

91619216
//Set the rate at which the module will give us an updated navigation solution

src/SparkFun_u-blox_GNSS_Arduino_Library.h

+37-28
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ typedef enum
9999
SFE_UBLOX_PACKET_PACKETAUTO
100100
} sfe_ublox_packet_buffer_e;
101101

102-
// Define a struct to allow selective logging of NMEA messages
102+
// Define a struct to allow selective logging / processing of NMEA messages
103+
// Set the individual bits to pass the NMEA messages to the file buffer and/or processNMEA
104+
// Setting bits.all will pass all messages to the file buffer and processNMEA
103105
typedef struct
104106
{
105107
union
@@ -131,33 +133,34 @@ typedef struct
131133
uint32_t UBX_NMEA_ZDA : 1;
132134
} bits;
133135
};
134-
} sfe_ublox_nmea_logging_t;
135-
// Define an enum to make it easy to enable/disable selected NMEA messages for logging
136+
} sfe_ublox_nmea_filtering_t;
137+
138+
// Define an enum to make it easy to enable/disable selected NMEA messages for logging / processing
136139
typedef enum
137140
{
138-
SFE_UBLOX_LOG_NMEA_ALL = 0x00000001,
139-
SFE_UBLOX_LOG_NMEA_DTM = 0x00000002,
140-
SFE_UBLOX_LOG_NMEA_GAQ = 0x00000004,
141-
SFE_UBLOX_LOG_NMEA_GBQ = 0x00000008,
142-
SFE_UBLOX_LOG_NMEA_GBS = 0x00000010,
143-
SFE_UBLOX_LOG_NMEA_GGA = 0x00000020,
144-
SFE_UBLOX_LOG_NMEA_GLL = 0x00000040,
145-
SFE_UBLOX_LOG_NMEA_GLQ = 0x00000080,
146-
SFE_UBLOX_LOG_NMEA_GNQ = 0x00000100,
147-
SFE_UBLOX_LOG_NMEA_GNS = 0x00000200,
148-
SFE_UBLOX_LOG_NMEA_GPQ = 0x00000400,
149-
SFE_UBLOX_LOG_NMEA_GQQ = 0x00000800,
150-
SFE_UBLOX_LOG_NMEA_GRS = 0x00001000,
151-
SFE_UBLOX_LOG_NMEA_GSA = 0x00002000,
152-
SFE_UBLOX_LOG_NMEA_GST = 0x00004000,
153-
SFE_UBLOX_LOG_NMEA_GSV = 0x00008000,
154-
SFE_UBLOX_LOG_NMEA_RLM = 0x00010000,
155-
SFE_UBLOX_LOG_NMEA_RMC = 0x00020000,
156-
SFE_UBLOX_LOG_NMEA_TXT = 0x00040000,
157-
SFE_UBLOX_LOG_NMEA_VLW = 0x00080000,
158-
SFE_UBLOX_LOG_NMEA_VTG = 0x00100000,
159-
SFE_UBLOX_LOG_NMEA_ZDA = 0x00200000
160-
} sfe_ublox_nmea_logging_selective_e;
141+
SFE_UBLOX_FILTER_NMEA_ALL = 0x00000001,
142+
SFE_UBLOX_FILTER_NMEA_DTM = 0x00000002,
143+
SFE_UBLOX_FILTER_NMEA_GAQ = 0x00000004,
144+
SFE_UBLOX_FILTER_NMEA_GBQ = 0x00000008,
145+
SFE_UBLOX_FILTER_NMEA_GBS = 0x00000010,
146+
SFE_UBLOX_FILTER_NMEA_GGA = 0x00000020,
147+
SFE_UBLOX_FILTER_NMEA_GLL = 0x00000040,
148+
SFE_UBLOX_FILTER_NMEA_GLQ = 0x00000080,
149+
SFE_UBLOX_FILTER_NMEA_GNQ = 0x00000100,
150+
SFE_UBLOX_FILTER_NMEA_GNS = 0x00000200,
151+
SFE_UBLOX_FILTER_NMEA_GPQ = 0x00000400,
152+
SFE_UBLOX_FILTER_NMEA_GQQ = 0x00000800,
153+
SFE_UBLOX_FILTER_NMEA_GRS = 0x00001000,
154+
SFE_UBLOX_FILTER_NMEA_GSA = 0x00002000,
155+
SFE_UBLOX_FILTER_NMEA_GST = 0x00004000,
156+
SFE_UBLOX_FILTER_NMEA_GSV = 0x00008000,
157+
SFE_UBLOX_FILTER_NMEA_RLM = 0x00010000,
158+
SFE_UBLOX_FILTER_NMEA_RMC = 0x00020000,
159+
SFE_UBLOX_FILTER_NMEA_TXT = 0x00040000,
160+
SFE_UBLOX_FILTER_NMEA_VLW = 0x00080000,
161+
SFE_UBLOX_FILTER_NMEA_VTG = 0x00100000,
162+
SFE_UBLOX_FILTER_NMEA_ZDA = 0x00200000
163+
} sfe_ublox_nmea_filtering_e;
161164

162165
//Registers
163166
const uint8_t UBX_SYNCH_1 = 0xB5;
@@ -991,9 +994,13 @@ class SFE_UBLOX_GNSS
991994
void logHNRPVT(boolean enabled = true); // Log data to file buffer
992995

993996
// Helper functions for NMEA logging
994-
void setNMEALoggingMask(uint32_t messages = SFE_UBLOX_LOG_NMEA_ALL); // Log selected NMEA messages to file buffer - if enabled
997+
void setNMEALoggingMask(uint32_t messages = SFE_UBLOX_FILTER_NMEA_ALL); // Add selected NMEA messages to file buffer - if enabled. Default to adding ALL messages to the file buffer
995998
uint32_t getNMEALoggingMask(); // Return which NMEA messages are selected for logging to the file buffer - if enabled
996999

1000+
// Helper functions to control which NMEA messages are passed to processNMEA
1001+
void setProcessNMEAMask(uint32_t messages = SFE_UBLOX_FILTER_NMEA_ALL); // Control which NMEA messages are passed to processNMEA. Default to passing ALL messages
1002+
uint32_t getProcessNMEAMask(); // Return which NMEA messages are passed to processNMEA
1003+
9971004
// Helper functions for CFG RATE
9981005

9991006
boolean setNavigationFrequency(uint8_t navFreq, uint16_t maxWait = defaultMaxWait); //Set the number of nav solutions sent per second
@@ -1249,7 +1256,8 @@ class SFE_UBLOX_GNSS
12491256

12501257
boolean ubx7FcheckDisabled = false; // Flag to indicate if the "7F" check should be ignored in checkUbloxI2C
12511258

1252-
sfe_ublox_nmea_logging_t _logNMEA; // Flags to indicate which NMEA messages should be added to the file buffer for logging
1259+
sfe_ublox_nmea_filtering_t _logNMEA; // Flags to indicate which NMEA messages should be added to the file buffer for logging
1260+
sfe_ublox_nmea_filtering_t _processNMEA; // Flags to indicate which NMEA messages should be passed to processNMEA
12531261

12541262
//The packet buffers
12551263
//These are pointed at from within the ubxPacket
@@ -1289,6 +1297,7 @@ class SFE_UBLOX_GNSS
12891297
const int16_t maxNMEAByteCount = 1024; // Abort NMEA message reception if nmeaByteCounter exceeds this
12901298
uint8_t nmeaAddressField[6]; // NMEA Address Field - includes the start character (*)
12911299
boolean logThisNMEA(); // Return true if we should log this NMEA message
1300+
boolean processThisNMEA(); // Return true if we should pass this NMEA message to processNMEA
12921301

12931302
uint16_t rtcmLen = 0;
12941303

0 commit comments

Comments
 (0)