@@ -8207,6 +8207,70 @@ bool SFE_UBLOX_GNSS::resetOdometer(uint16_t maxWait)
82078207 return (sendCommand(&packetCfg, maxWait, true) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
82088208}
82098209
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+
82108274// Enable/Disable individual GNSS systems using UBX-CFG-GNSS
82118275bool SFE_UBLOX_GNSS::enableGNSS(bool enable, sfe_ublox_gnss_ids_e id, uint16_t maxWait)
82128276{
0 commit comments