Skip to content

Commit 3444ad3

Browse files
authored
Merge pull request #9 from sparkfun/release_candidate
Version 3.0.4
2 parents d695dfa + 55218cf commit 3444ad3

File tree

8 files changed

+179
-6
lines changed

8 files changed

+179
-6
lines changed

.github/workflows/compile-sketch.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
board:
1717
# Uno
1818
# https://github.com/arduino/ArduinoCore-avr/blob/master/boards.txt
19-
- fqbn: arduino:avr:uno
19+
- fqbn: arduino:avr:mega
2020
platforms: |
2121
- name: arduino:avr
2222
source-url: https://downloads.arduino.cc/packages/package_index.json

examples/Callbacks/CallbackExample2_NAV_ODO/CallbackExample2_NAV_ODO.ino

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Configuring the GNSS to automatically send odometer reports over I2C and display the data using a callback
33
By: Paul Clark
44
SparkFun Electronics
5-
Date: December 30th, 2020
5+
Date: March 20th, 2023
66
License: MIT. See license file for more information.
77
88
This example shows how to configure the u-blox GNSS to send odometer reports automatically
@@ -75,6 +75,27 @@ void setup()
7575

7676
myGNSS.setNavigationFrequency(1); //Produce one solution per second
7777

78+
//By default, the odometer is disabled. We need to enable it.
79+
//We can enable it using the default settings:
80+
myGNSS.enableOdometer();
81+
82+
//Or we can configure it using our own settings, by performing a read-modify-write:
83+
uint8_t flags; // Odometer/Low-speed COG filter flags
84+
uint8_t odoCfg; // Odometer filter settings
85+
uint8_t cogMaxSpeed; // Speed below which course-over-ground (COG) is computed with the low-speed COG filter : m/s * 0.1
86+
uint8_t cogMaxPosAcc; // Maximum acceptable position accuracy for computing COG with the low-speed COG filter
87+
uint8_t velLpGain; // Velocity low-pass filter level
88+
uint8_t cogLpGain; // COG low-pass filter level
89+
90+
if (myGNSS.getOdometerConfig(&flags, &odoCfg, &cogMaxSpeed, &cogMaxPosAcc, &velLpGain, &cogLpGain))
91+
{
92+
flags = UBX_CFG_ODO_USE_ODO; // Enable the odometer
93+
odoCfg = UBX_CFG_ODO_CAR; // Use the car profile (others are RUN, CYCLE, SWIM, CUSTOM)
94+
myGNSS.setOdometerConfig(flags, odoCfg, cogMaxSpeed, cogMaxPosAcc, velLpGain, cogLpGain); // Set the configuration
95+
}
96+
else
97+
Serial.println("Could not read odometer config!");
98+
7899
//myGNSS.resetOdometer(); //Uncomment this line to reset the odometer
79100

80101
myGNSS.setAutoNAVODOcallbackPtr(&printODOdata); // Enable automatic NAV ODO messages with callback to printODOdata

keywords.txt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,9 @@ setDynamicModel KEYWORD2
204204
getDynamicModel KEYWORD2
205205

206206
resetOdometer KEYWORD2
207+
enableOdometer KEYWORD2
208+
getOdometerConfig KEYWORD2
209+
setOdometerConfig KEYWORD2
207210

208211
enableGNSS KEYWORD2
209212
isGNSSenabled KEYWORD2
@@ -809,6 +812,7 @@ SFE_UBLOX_FILTER_NMEA_GST LITERAL1
809812
SFE_UBLOX_FILTER_NMEA_GSV LITERAL1
810813
SFE_UBLOX_FILTER_NMEA_RLM LITERAL1
811814
SFE_UBLOX_FILTER_NMEA_RMC LITERAL1
815+
SFE_UBLOX_FILTER_NMEA_THS LITERAL1
812816
SFE_UBLOX_FILTER_NMEA_TXT LITERAL1
813817
SFE_UBLOX_FILTER_NMEA_VLW LITERAL1
814818
SFE_UBLOX_FILTER_NMEA_VTG LITERAL1
@@ -845,25 +849,56 @@ SFE_UBLOX_FILTER_RTCM_TYPE4072_1 LITERAL1
845849

846850
UBX_NAV_ATT LITERAL1
847851
UBX_NAV_CLOCK LITERAL1
852+
UBX_NAV_COV LITERAL1
848853
UBX_NAV_DOP LITERAL1
854+
UBX_NAV_EELL LITERAL1
855+
UBX_NAV_EOE LITERAL1
849856
UBX_NAV_GEOFENCE LITERAL1
850857
UBX_NAV_HPPOSECEF LITERAL1
851858
UBX_NAV_HPPOSLLH LITERAL1
852859
UBX_NAV_ODO LITERAL1
860+
UBX_NAV_ORB LITERAL1
861+
UBX_NAV_PL LITERAL1
853862
UBX_NAV_POSECEF LITERAL1
863+
UBX_NAV_POSLLH LITERAL1
854864
UBX_NAV_PVT LITERAL1
855865
UBX_NAV_PVAT LITERAL1
856866
UBX_NAV_RELPOSNED LITERAL1
857867
UBX_NAV_RESETODO LITERAL1
868+
UBX_NAV_SAT LITERAL1
869+
UBX_NAV_SBAS LITERAL1
870+
UBX_NAV_SIG LITERAL1
871+
UBX_NAV_SLAS LITERAL1
858872
UBX_NAV_STATUS LITERAL1
859873
UBX_NAV_SVIN LITERAL1
874+
UBX_NAV_TIMEBDS LITERAL1
875+
UBX_NAV_TIMEGAL LITERAL1
876+
UBX_NAV_TIMEGLO LITERAL1
877+
UBX_NAV_TIMEGPS LITERAL1
860878
UBX_NAV_TIMELS LITERAL1
879+
UBX_NAV_TIMEUTC LITERAL1
861880
UBX_NAV_VELECEF LITERAL1
862881
UBX_NAV_VELNED LITERAL1
863882

883+
UBX_MON_COMMS LITERAL1
884+
UBX_MON_HW2 LITERAL1
885+
UBX_MON_HW3 LITERAL1
886+
UBX_MON_HW LITERAL1
887+
UBX_MON_IO LITERAL1
888+
UBX_MON_MSGPP LITERAL1
889+
UBX_MON_RF LITERAL1
890+
UBX_MON_RXBUF LITERAL1
891+
UBX_MON_RXR LITERAL1
892+
UBX_MON_SPAN LITERAL1
893+
UBX_MON_SYS LITERAL1
894+
UBX_MON_TXBUF LITERAL1
895+
864896
UBX_RXM_PMP LITERAL1
865897
UBX_RXM_COR LITERAL1
898+
UBX_RXM_MEASX LITERAL1
866899
UBX_RXM_RAWX LITERAL1
900+
UBX_RXM_RLM LITERAL1
901+
UBX_RXM_RTCM LITERAL1
867902
UBX_RXM_SFRBX LITERAL1
868903
UBX_RXM_SPARTN LITERAL1
869904
UBX_RXM_QZSSL6 LITERAL1
@@ -901,6 +936,17 @@ VAL_CFG_SUBSEC_ANTCONF LITERAL1
901936
VAL_CFG_SUBSEC_LOGCONF LITERAL1
902937
VAL_CFG_SUBSEC_FTSCONF LITERAL1
903938

939+
UBX_CFG_ODO_USE_ODO LITERAL1
940+
UBX_CFG_ODO_USE_COG LITERAL1
941+
UBX_CFG_ODO_OUT_LP_VEL LITERAL1
942+
UBX_CFG_ODO_OUT_LP_COG LITERAL1
943+
944+
UBX_CFG_ODO_RUN LITERAL1
945+
UBX_CFG_ODO_CYCLE LITERAL1
946+
UBX_CFG_ODO_SWIM LITERAL1
947+
UBX_CFG_ODO_CAR LITERAL1
948+
UBX_CFG_ODO_CUSTOM LITERAL1
949+
904950
DYN_MODEL_PORTABLE LITERAL1
905951
DYN_MODEL_STATIONARY LITERAL1
906952
DYN_MODEL_PEDESTRIAN LITERAL1

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=SparkFun u-blox GNSS v3
2-
version=3.0.3
2+
version=3.0.4
33
author=SparkFun Electronics <[email protected]>
44
maintainer=SparkFun Electronics <sparkfun.com>
55
sentence=Library for I2C, Serial and SPI Communication with u-blox GNSS modules<br/><br/>

src/u-blox_Class_and_ID.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ const uint8_t UBX_NMEA_GST = 0x07; // GxGST (GNSS Pseudo Range Error Statistics)
130130
const uint8_t UBX_NMEA_GSV = 0x03; // GxGSV (GNSS satellites in view)
131131
const uint8_t UBX_NMEA_RLM = 0x0B; // GxRMC (Return link message (RLM))
132132
const uint8_t UBX_NMEA_RMC = 0x04; // GxRMC (Recommended minimum data)
133+
const uint8_t UBX_NMEA_THS = 0x0E; // GxTHS (True heading and status)
133134
const uint8_t UBX_NMEA_TXT = 0x41; // GxTXT (text transmission)
134135
const uint8_t UBX_NMEA_VLW = 0x0F; // GxVLW (dual ground/water distance)
135136
const uint8_t UBX_NMEA_VTG = 0x05; // GxVTG (course over ground and Ground speed)
@@ -237,7 +238,9 @@ const uint8_t UBX_MON_VER = 0x04; // Receiver/Software Version. Used for obtai
237238
// The following are used to configure the NAV UBX messages (navigation results messages). Descriptions from UBX messages overview (ZED_F9P Interface Description Document page 35-36)
238239
const uint8_t UBX_NAV_ATT = 0x05; // Vehicle "Attitude" Solution
239240
const uint8_t UBX_NAV_CLOCK = 0x22; // Clock Solution
241+
const uint8_t UBX_NAV_COV = 0x36; // Covariance matrices
240242
const uint8_t UBX_NAV_DOP = 0x04; // Dilution of precision
243+
const uint8_t UBX_NAV_EELL = 0x3D; // Position error ellipse parameters
241244
const uint8_t UBX_NAV_EOE = 0x61; // End of Epoch
242245
const uint8_t UBX_NAV_GEOFENCE = 0x39; // Geofencing status. Used to poll the geofence status
243246
const uint8_t UBX_NAV_HPPOSECEF = 0x13; // High Precision Position Solution in ECEF. Used to find our positional accuracy (high precision).
@@ -252,6 +255,8 @@ const uint8_t UBX_NAV_PVAT = 0x17; // Navigation position velocity attitude
252255
const uint8_t UBX_NAV_RELPOSNED = 0x3C; // Relative Positioning Information in NED frame
253256
const uint8_t UBX_NAV_RESETODO = 0x10; // Reset odometer
254257
const uint8_t UBX_NAV_SAT = 0x35; // Satellite Information
258+
const uint8_t UBX_NAV_SBAS = 0x32; // SBAS subsystem
259+
const uint8_t UBX_NAV_SLAS = 0x42; // QZSS L1S SLAS status data
255260
const uint8_t UBX_NAV_SIG = 0x43; // Signal Information
256261
const uint8_t UBX_NAV_STATUS = 0x03; // Receiver Navigation Status
257262
const uint8_t UBX_NAV_SVIN = 0x3B; // Survey-in data. Used for checking Survey In status
@@ -338,6 +343,22 @@ const uint8_t COM_TYPE_NMEA = (1 << 1);
338343
const uint8_t COM_TYPE_RTCM3 = (1 << 5);
339344
const uint8_t COM_TYPE_SPARTN = (1 << 6);
340345

346+
// Odometer configuration - flags
347+
const uint8_t UBX_CFG_ODO_USE_ODO = (1 << 0);
348+
const uint8_t UBX_CFG_ODO_USE_COG = (1 << 1);
349+
const uint8_t UBX_CFG_ODO_OUT_LP_VEL = (1 << 2);
350+
const uint8_t UBX_CFG_ODO_OUT_LP_COG = (1 << 3);
351+
352+
// Odometer configuration - odoCfg
353+
enum odoCfg_e
354+
{
355+
UBX_CFG_ODO_RUN = 0,
356+
UBX_CFG_ODO_CYCLE,
357+
UBX_CFG_ODO_SWIM,
358+
UBX_CFG_ODO_CAR,
359+
UBX_CFG_ODO_CUSTOM,
360+
};
361+
341362
// Configuration Sub-Section mask definitions for saveConfigSelective (UBX-CFG-CFG)
342363
const uint32_t VAL_CFG_SUBSEC_IOPORT = 0x00000001; // ioPort - communications port settings (causes IO system reset!)
343364
const uint32_t VAL_CFG_SUBSEC_MSGCONF = 0x00000002; // msgConf - message configuration

src/u-blox_GNSS.cpp

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ DevUBLOXGNSS::DevUBLOXGNSS(void)
6363
_logNMEA.all = 0; // Default to passing no NMEA messages to the file buffer
6464
_processNMEA.all = SFE_UBLOX_FILTER_NMEA_ALL; // Default to passing all NMEA messages to processNMEA
6565
_logRTCM.all = 0; // Default to passing no RTCM messages to the file buffer
66+
67+
createLock(); // Create the lock semaphore - if needed
6668
}
6769

6870
DevUBLOXGNSS::~DevUBLOXGNSS(void)
@@ -88,6 +90,8 @@ DevUBLOXGNSS::~DevUBLOXGNSS(void)
8890
delete[] spiBuffer; // Created with new[]
8991
spiBuffer = nullptr;
9092
}
93+
94+
deleteLock(); // Delete the lock semaphore - if required
9195
}
9296

9397
// Stop all automatic message processing. Free all used RAM
@@ -2140,6 +2144,8 @@ bool DevUBLOXGNSS::logThisNMEA()
21402144
logMe = true;
21412145
if ((nmeaAddressField[3] == 'R') && (nmeaAddressField[4] == 'M') && (nmeaAddressField[5] == 'C') && (_logNMEA.bits.UBX_NMEA_RMC == 1))
21422146
logMe = true;
2147+
if ((nmeaAddressField[3] == 'T') && (nmeaAddressField[4] == 'H') && (nmeaAddressField[5] == 'S') && (_logNMEA.bits.UBX_NMEA_THS == 1))
2148+
logMe = true;
21432149
if ((nmeaAddressField[3] == 'T') && (nmeaAddressField[4] == 'X') && (nmeaAddressField[5] == 'T') && (_logNMEA.bits.UBX_NMEA_TXT == 1))
21442150
logMe = true;
21452151
if ((nmeaAddressField[3] == 'V') && (nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'W') && (_logNMEA.bits.UBX_NMEA_VLW == 1))
@@ -2198,6 +2204,8 @@ bool DevUBLOXGNSS::isNMEAHeaderValid()
21982204
return (true);
21992205
if ((nmeaAddressField[3] == 'R') && (nmeaAddressField[4] == 'M') && (nmeaAddressField[5] == 'C'))
22002206
return (true);
2207+
if ((nmeaAddressField[3] == 'T') && (nmeaAddressField[4] == 'H') && (nmeaAddressField[5] == 'S'))
2208+
return (true);
22012209
if ((nmeaAddressField[3] == 'T') && (nmeaAddressField[4] == 'X') && (nmeaAddressField[5] == 'T'))
22022210
return (true);
22032211
if ((nmeaAddressField[3] == 'V') && (nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'W'))
@@ -2251,6 +2259,8 @@ bool DevUBLOXGNSS::processThisNMEA()
22512259
return (true);
22522260
if ((nmeaAddressField[3] == 'R') && (nmeaAddressField[4] == 'M') && (nmeaAddressField[5] == 'C') && (_processNMEA.bits.UBX_NMEA_RMC == 1))
22532261
return (true);
2262+
if ((nmeaAddressField[3] == 'T') && (nmeaAddressField[4] == 'H') && (nmeaAddressField[5] == 'S') && (_processNMEA.bits.UBX_NMEA_THS == 1))
2263+
return (true);
22542264
if ((nmeaAddressField[3] == 'T') && (nmeaAddressField[4] == 'X') && (nmeaAddressField[5] == 'T') && (_processNMEA.bits.UBX_NMEA_TXT == 1))
22552265
return (true);
22562266
if ((nmeaAddressField[3] == 'V') && (nmeaAddressField[4] == 'L') && (nmeaAddressField[5] == 'W') && (_processNMEA.bits.UBX_NMEA_VLW == 1))
@@ -7786,6 +7796,72 @@ bool DevUBLOXGNSS::resetOdometer(uint16_t maxWait)
77867796
return (sendCommand(&packetCfg, maxWait, true) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
77877797
}
77887798

7799+
// Enable / disable the odometer
7800+
bool DevUBLOXGNSS::enableOdometer(bool enable, uint8_t layer, uint16_t maxWait)
7801+
{
7802+
return setVal8(UBLOX_CFG_ODO_USE_ODO, (uint8_t)enable, layer, maxWait);
7803+
}
7804+
7805+
// Read the odometer configuration
7806+
bool DevUBLOXGNSS::getOdometerConfig(uint8_t *flags, uint8_t *odoCfg, uint8_t *cogMaxSpeed, uint8_t *cogMaxPosAcc, uint8_t *velLpGain, uint8_t *cogLpGain, uint8_t layer, uint16_t maxWait)
7807+
{
7808+
bool result = newCfgValget(layer);
7809+
result &= addCfgValget(UBLOX_CFG_ODO_USE_ODO);
7810+
result &= addCfgValget(UBLOX_CFG_ODO_USE_COG);
7811+
result &= addCfgValget(UBLOX_CFG_ODO_OUTLPVEL);
7812+
result &= addCfgValget(UBLOX_CFG_ODO_OUTLPCOG);
7813+
result &= addCfgValget(UBLOX_CFG_ODO_PROFILE);
7814+
result &= addCfgValget(UBLOX_CFG_ODO_COGMAXSPEED);
7815+
result &= addCfgValget(UBLOX_CFG_ODO_COGMAXPOSACC);
7816+
result &= addCfgValget(UBLOX_CFG_ODO_VELLPGAIN);
7817+
result &= addCfgValget(UBLOX_CFG_ODO_COGLPGAIN);
7818+
result &= sendCfgValget(maxWait);
7819+
7820+
if (result)
7821+
{
7822+
uint8_t flagsBit = 0;
7823+
uint8_t flagsByte = 0;
7824+
result &= extractConfigValueByKey(&packetCfg, UBLOX_CFG_ODO_USE_ODO, &flagsBit, 1);
7825+
if (flagsBit)
7826+
flagsByte |= UBX_CFG_ODO_USE_ODO;
7827+
result &= extractConfigValueByKey(&packetCfg, UBLOX_CFG_ODO_USE_COG, &flagsBit, 1);
7828+
if (flagsBit)
7829+
flagsByte |= UBX_CFG_ODO_USE_COG;
7830+
result &= extractConfigValueByKey(&packetCfg, UBLOX_CFG_ODO_OUTLPVEL, &flagsBit, 1);
7831+
if (flagsBit)
7832+
flagsByte |= UBX_CFG_ODO_OUT_LP_VEL;
7833+
result &= extractConfigValueByKey(&packetCfg, UBLOX_CFG_ODO_OUTLPCOG, &flagsBit, 1);
7834+
if (flagsBit)
7835+
flagsByte |= UBX_CFG_ODO_OUT_LP_COG;
7836+
*flags = flagsByte;
7837+
7838+
result &= extractConfigValueByKey(&packetCfg, UBLOX_CFG_ODO_PROFILE, odoCfg, 1);
7839+
result &= extractConfigValueByKey(&packetCfg, UBLOX_CFG_ODO_COGMAXSPEED, cogMaxSpeed, 1);
7840+
result &= extractConfigValueByKey(&packetCfg, UBLOX_CFG_ODO_COGMAXPOSACC, cogMaxPosAcc, 1);
7841+
result &= extractConfigValueByKey(&packetCfg, UBLOX_CFG_ODO_VELLPGAIN, velLpGain, 1);
7842+
result &= extractConfigValueByKey(&packetCfg, UBLOX_CFG_ODO_COGLPGAIN, cogLpGain, 1);
7843+
}
7844+
7845+
return result;
7846+
}
7847+
7848+
// Configure the odometer
7849+
bool DevUBLOXGNSS::setOdometerConfig(uint8_t flags, uint8_t odoCfg, uint8_t cogMaxSpeed, uint8_t cogMaxPosAcc, uint8_t velLpGain, uint8_t cogLpGain, uint8_t layer, uint16_t maxWait)
7850+
{
7851+
bool result = newCfgValset(layer);
7852+
result &= addCfgValset8(UBLOX_CFG_ODO_USE_ODO, flags & UBX_CFG_ODO_USE_ODO ? 1 : 0);
7853+
result &= addCfgValset8(UBLOX_CFG_ODO_USE_COG, flags & UBX_CFG_ODO_USE_COG ? 1 : 0);
7854+
result &= addCfgValset8(UBLOX_CFG_ODO_OUTLPVEL, flags & UBX_CFG_ODO_OUT_LP_VEL ? 1 : 0);
7855+
result &= addCfgValset8(UBLOX_CFG_ODO_OUTLPCOG, flags & UBX_CFG_ODO_OUT_LP_COG ? 1 : 0);
7856+
result &= addCfgValset8(UBLOX_CFG_ODO_PROFILE, odoCfg);
7857+
result &= addCfgValset8(UBLOX_CFG_ODO_COGMAXSPEED, cogMaxSpeed);
7858+
result &= addCfgValset8(UBLOX_CFG_ODO_COGMAXPOSACC, cogMaxPosAcc);
7859+
result &= addCfgValset8(UBLOX_CFG_ODO_VELLPGAIN, velLpGain);
7860+
result &= addCfgValset8(UBLOX_CFG_ODO_COGLPGAIN, cogLpGain);
7861+
result &= sendCfgValset(maxWait);
7862+
return result;
7863+
}
7864+
77897865
uint32_t DevUBLOXGNSS::getEnableGNSSConfigKey(sfe_ublox_gnss_ids_e id)
77907866
{
77917867
const uint32_t gnssConfigKeys[(uint8_t)SFE_UBLOX_GNSS_ID_UNKNOWN] = {
@@ -15671,6 +15747,8 @@ int32_t DevUBLOXGNSS::getAltitude(uint16_t maxWait)
1567115747
// Get the current altitude in mm according to mean sea level
1567215748
// Ellipsoid model: https://www.esri.com/news/arcuser/0703/geoid1of3.html
1567315749
// Difference between Ellipsoid Model and Mean Sea Level: https://eos-gnss.com/elevation-for-beginners/
15750+
// Also see: https://portal.u-blox.com/s/question/0D52p00008HKDSkCAP/what-geoid-model-is-used-and-where-is-this-calculated
15751+
// and: https://cddis.nasa.gov/926/egm96/egm96.html on 10x10 degree grid
1567415752
int32_t DevUBLOXGNSS::getAltitudeMSL(uint16_t maxWait)
1567515753
{
1567615754
if (packetUBXNAVPVT == nullptr)

src/u-blox_GNSS.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,11 @@ class DevUBLOXGNSS
138138
bool _UART2 = false; // Default to UART1
139139

140140
// These lock / unlock functions can be used if you have multiple tasks writing to the bus.
141-
// The idea is that in a RTOS you override this class and the two functions in which you take and give a mutex.
141+
// The idea is that in a RTOS you override this class and the functions in which you take and give a mutex.
142+
virtual bool createLock(void) { return true; }
142143
virtual bool lock(void) { return true; }
143144
virtual void unlock(void) { }
145+
virtual void deleteLock(void) { }
144146

145147
public:
146148
void connectedToUART2(bool connected = true) { _UART2 = connected; }
@@ -391,8 +393,11 @@ class DevUBLOXGNSS
391393
bool setDynamicModel(dynModel newDynamicModel = DYN_MODEL_PORTABLE, uint8_t layer = VAL_LAYER_RAM_BBR, uint16_t maxWait = kUBLOXGNSSDefaultMaxWait);
392394
uint8_t getDynamicModel(uint8_t layer = VAL_LAYER_RAM, uint16_t maxWait = kUBLOXGNSSDefaultMaxWait); // Get the dynamic model - returns 255 if the sendCommand fails
393395

394-
// Reset the odometer
396+
// Reset / enable / configure the odometer
395397
bool resetOdometer(uint16_t maxWait = kUBLOXGNSSDefaultMaxWait); // Reset the odometer
398+
bool enableOdometer(bool enable = true, uint8_t layer = VAL_LAYER_RAM_BBR, uint16_t maxWait = kUBLOXGNSSDefaultMaxWait); // Enable / disable the odometer
399+
bool getOdometerConfig(uint8_t *flags, uint8_t *odoCfg, uint8_t *cogMaxSpeed, uint8_t *cogMaxPosAcc, uint8_t *velLpGain, uint8_t *cogLpGain, uint8_t layer = VAL_LAYER_RAM, uint16_t maxWait = kUBLOXGNSSDefaultMaxWait); // Read the odometer configuration
400+
bool setOdometerConfig(uint8_t flags, uint8_t odoCfg, uint8_t cogMaxSpeed, uint8_t cogMaxPosAcc, uint8_t velLpGain, uint8_t cogLpGain, uint8_t layer = VAL_LAYER_RAM_BBR, uint16_t maxWait = kUBLOXGNSSDefaultMaxWait); // Configure the odometer
396401

397402
// Enable/Disable individual GNSS systems using UBX-CFG-GNSS
398403
// Note: you must leave at least one major GNSS enabled! If in doubt, enable GPS before disabling the others

src/u-blox_external_typedefs.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ typedef struct
131131
uint32_t UBX_NMEA_VLW : 1;
132132
uint32_t UBX_NMEA_VTG : 1;
133133
uint32_t UBX_NMEA_ZDA : 1;
134+
uint32_t UBX_NMEA_THS : 1;
134135
} bits;
135136
};
136137
} sfe_ublox_nmea_filtering_t;
@@ -159,7 +160,8 @@ typedef enum
159160
SFE_UBLOX_FILTER_NMEA_TXT = 0x00040000,
160161
SFE_UBLOX_FILTER_NMEA_VLW = 0x00080000,
161162
SFE_UBLOX_FILTER_NMEA_VTG = 0x00100000,
162-
SFE_UBLOX_FILTER_NMEA_ZDA = 0x00200000
163+
SFE_UBLOX_FILTER_NMEA_ZDA = 0x00200000,
164+
SFE_UBLOX_FILTER_NMEA_THS = 0x00400000,
163165
} sfe_ublox_nmea_filtering_e;
164166

165167
// Define a struct to allow selective logging of RTCM messages

0 commit comments

Comments
 (0)