@@ -8207,6 +8207,70 @@ bool SFE_UBLOX_GNSS::resetOdometer(uint16_t maxWait)
8207
8207
return (sendCommand(&packetCfg, maxWait, true) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
8208
8208
}
8209
8209
8210
+ // Enable / disable the odometer
8211
+ bool SFE_UBLOX_GNSS::enableOdometer(bool enable, uint16_t maxWait)
8212
+ {
8213
+ packetCfg.cls = UBX_CLASS_CFG;
8214
+ packetCfg.id = UBX_CFG_ODO;
8215
+ packetCfg.len = 0;
8216
+ packetCfg.startingSpot = 0;
8217
+
8218
+ // Ask module for the current odometer configuration. Loads into payloadCfg.
8219
+ if (sendCommand(&packetCfg, maxWait) != SFE_UBLOX_STATUS_DATA_RECEIVED) // We are expecting data and an ACK
8220
+ return (false);
8221
+
8222
+ if (enable)
8223
+ payloadCfg[4] = payloadCfg[4] | UBX_CFG_ODO_USE_ODO;
8224
+ else
8225
+ payloadCfg[4] = payloadCfg[4] & ~UBX_CFG_ODO_USE_ODO;
8226
+
8227
+ return (sendCommand(&packetCfg, maxWait) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
8228
+ }
8229
+
8230
+ // Read the odometer configuration
8231
+ bool SFE_UBLOX_GNSS::getOdometerConfig(uint8_t *flags, uint8_t *odoCfg, uint8_t *cogMaxSpeed, uint8_t *cogMaxPosAcc, uint8_t *velLpGain, uint8_t *cogLpGain, uint16_t maxWait)
8232
+ {
8233
+ packetCfg.cls = UBX_CLASS_CFG;
8234
+ packetCfg.id = UBX_CFG_ODO;
8235
+ packetCfg.len = 0;
8236
+ packetCfg.startingSpot = 0;
8237
+
8238
+ // Ask module for the current odometer configuration. Loads into payloadCfg.
8239
+ if (sendCommand(&packetCfg, maxWait) != SFE_UBLOX_STATUS_DATA_RECEIVED) // We are expecting data and an ACK
8240
+ return (false);
8241
+
8242
+ *flags = payloadCfg[4];
8243
+ *odoCfg = payloadCfg[5];
8244
+ *cogMaxSpeed = payloadCfg[12];
8245
+ *cogMaxPosAcc = payloadCfg[13];
8246
+ *velLpGain = payloadCfg[16];
8247
+ *cogLpGain = payloadCfg[17];
8248
+
8249
+ return true;
8250
+ }
8251
+
8252
+ // Configure the odometer
8253
+ bool SFE_UBLOX_GNSS::setOdometerConfig(uint8_t flags, uint8_t odoCfg, uint8_t cogMaxSpeed, uint8_t cogMaxPosAcc, uint8_t velLpGain, uint8_t cogLpGain, uint16_t maxWait)
8254
+ {
8255
+ packetCfg.cls = UBX_CLASS_CFG;
8256
+ packetCfg.id = UBX_CFG_ODO;
8257
+ packetCfg.len = 0;
8258
+ packetCfg.startingSpot = 0;
8259
+
8260
+ // Ask module for the current odometer configuration. Loads into payloadCfg.
8261
+ if (sendCommand(&packetCfg, maxWait) != SFE_UBLOX_STATUS_DATA_RECEIVED) // We are expecting data and an ACK
8262
+ return (false);
8263
+
8264
+ payloadCfg[4] = flags;
8265
+ payloadCfg[5] = odoCfg;
8266
+ payloadCfg[12] = cogMaxSpeed;
8267
+ payloadCfg[13] = cogMaxPosAcc;
8268
+ payloadCfg[16] = velLpGain;
8269
+ payloadCfg[17] = cogLpGain;
8270
+
8271
+ return (sendCommand(&packetCfg, maxWait) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
8272
+ }
8273
+
8210
8274
// Enable/Disable individual GNSS systems using UBX-CFG-GNSS
8211
8275
bool SFE_UBLOX_GNSS::enableGNSS(bool enable, sfe_ublox_gnss_ids_e id, uint16_t maxWait)
8212
8276
{
0 commit comments