Add flushCFGRATE. Ensure CFG RATE data is marked as stale by the set rate functions
This commit is contained in:
-3
@@ -81,9 +81,6 @@ void setup()
|
|||||||
while (1);
|
while (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Another trick we can use is to mark the CFG RATE data as stale so we can be sure we read fresh data
|
|
||||||
myGNSS.packetUBXCFGRATE->moduleQueried.moduleQueried.all = 0; // Mark all of the CFG RATE data as stale
|
|
||||||
|
|
||||||
// Read and print the updated measurement rate and navigation rate
|
// Read and print the updated measurement rate and navigation rate
|
||||||
|
|
||||||
rate = myGNSS.getMeasurementRate(); //Get the measurement rate of this module
|
rate = myGNSS.getMeasurementRate(); //Get the measurement rate of this module
|
||||||
|
|||||||
@@ -388,6 +388,7 @@ setMeasurementRate KEYWORD2
|
|||||||
getMeasurementRate KEYWORD2
|
getMeasurementRate KEYWORD2
|
||||||
setNavigationRate KEYWORD2
|
setNavigationRate KEYWORD2
|
||||||
getNavigationRate KEYWORD2
|
getNavigationRate KEYWORD2
|
||||||
|
flushCFGRATE KEYWORD2
|
||||||
|
|
||||||
getGeometricDOP KEYWORD2
|
getGeometricDOP KEYWORD2
|
||||||
getPositionDOP KEYWORD2
|
getPositionDOP KEYWORD2
|
||||||
|
|||||||
@@ -7387,20 +7387,8 @@ boolean SFE_UBLOX_GNSS::getNavigationFrequencyInternal(uint16_t maxWait)
|
|||||||
if (packetUBXCFGRATE == NULL) //Bail if the RAM allocation failed
|
if (packetUBXCFGRATE == NULL) //Bail if the RAM allocation failed
|
||||||
return (false);
|
return (false);
|
||||||
|
|
||||||
if (packetUBXCFGRATE->automaticFlags.flags.bits.automatic && packetUBXCFGRATE->automaticFlags.flags.bits.implicitUpdate)
|
// The CFG RATE message will never be produced automatically - that would be pointless.
|
||||||
{
|
// There is no setAutoCFGRATE function. We always need to poll explicitly.
|
||||||
//The GPS is automatically reporting, we just check whether we got unread data
|
|
||||||
checkUbloxInternal(&packetCfg, UBX_CLASS_CFG, UBX_CFG_RATE);
|
|
||||||
return packetUBXCFGRATE->moduleQueried.moduleQueried.bits.all;
|
|
||||||
}
|
|
||||||
else if (packetUBXCFGRATE->automaticFlags.flags.bits.automatic && !packetUBXCFGRATE->automaticFlags.flags.bits.implicitUpdate)
|
|
||||||
{
|
|
||||||
//Someone else has to call checkUblox for us...
|
|
||||||
return (false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//The GPS is not automatically reporting navigation rate so we have to poll explicitly
|
|
||||||
packetCfg.cls = UBX_CLASS_CFG;
|
packetCfg.cls = UBX_CLASS_CFG;
|
||||||
packetCfg.id = UBX_CFG_RATE;
|
packetCfg.id = UBX_CFG_RATE;
|
||||||
packetCfg.len = 0;
|
packetCfg.len = 0;
|
||||||
@@ -7418,7 +7406,6 @@ boolean SFE_UBLOX_GNSS::getNavigationFrequencyInternal(uint16_t maxWait)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (false);
|
return (false);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PRIVATE: Allocate RAM for packetUBXCFGRATE and initialize it
|
// PRIVATE: Allocate RAM for packetUBXCFGRATE and initialize it
|
||||||
@@ -7431,10 +7418,10 @@ boolean SFE_UBLOX_GNSS::initPacketUBXCFGRATE()
|
|||||||
_debugSerial->println(F("initPacketUBXCFGRATE: PANIC! RAM allocation failed!"));
|
_debugSerial->println(F("initPacketUBXCFGRATE: PANIC! RAM allocation failed!"));
|
||||||
return (false);
|
return (false);
|
||||||
}
|
}
|
||||||
packetUBXCFGRATE->automaticFlags.flags.all = 0;
|
packetUBXCFGRATE->automaticFlags.flags.all = 0; // Redundant
|
||||||
packetUBXCFGRATE->callbackPointer = NULL;
|
packetUBXCFGRATE->callbackPointer = NULL; // Redundant
|
||||||
packetUBXCFGRATE->callbackData = NULL;
|
packetUBXCFGRATE->callbackData = NULL; // Redundant
|
||||||
packetUBXCFGRATE->moduleQueried.moduleQueried.all = 0;
|
packetUBXCFGRATE->moduleQueried.moduleQueried.all = 0; // Mark all data as stale/read
|
||||||
return (true);
|
return (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9114,7 +9101,11 @@ boolean SFE_UBLOX_GNSS::setNavigationFrequency(uint8_t navFreq, uint16_t maxWait
|
|||||||
payloadCfg[0] = measurementRate & 0xFF; //measRate LSB
|
payloadCfg[0] = measurementRate & 0xFF; //measRate LSB
|
||||||
payloadCfg[1] = measurementRate >> 8; //measRate MSB
|
payloadCfg[1] = measurementRate >> 8; //measRate MSB
|
||||||
|
|
||||||
return ((sendCommand(&packetCfg, maxWait)) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
|
boolean result = ((sendCommand(&packetCfg, maxWait)) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
|
||||||
|
|
||||||
|
flushCFGRATE(); // Mark the polled measurement and navigation rate data as stale
|
||||||
|
|
||||||
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Get the rate at which the module is outputting nav solutions
|
//Get the rate at which the module is outputting nav solutions
|
||||||
@@ -9155,7 +9146,11 @@ boolean SFE_UBLOX_GNSS::setMeasurementRate(uint16_t rate, uint16_t maxWait)
|
|||||||
payloadCfg[0] = rate & 0xFF; //measRate LSB
|
payloadCfg[0] = rate & 0xFF; //measRate LSB
|
||||||
payloadCfg[1] = rate >> 8; //measRate MSB
|
payloadCfg[1] = rate >> 8; //measRate MSB
|
||||||
|
|
||||||
return ((sendCommand(&packetCfg, maxWait)) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
|
boolean result = ((sendCommand(&packetCfg, maxWait)) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
|
||||||
|
|
||||||
|
flushCFGRATE(); // Mark the polled measurement and navigation rate data as stale
|
||||||
|
|
||||||
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Return the elapsed time between GNSS measurements in milliseconds, which defines the rate
|
//Return the elapsed time between GNSS measurements in milliseconds, which defines the rate
|
||||||
@@ -9190,7 +9185,11 @@ boolean SFE_UBLOX_GNSS::setNavigationRate(uint16_t rate, uint16_t maxWait)
|
|||||||
payloadCfg[2] = rate & 0xFF; //navRate LSB
|
payloadCfg[2] = rate & 0xFF; //navRate LSB
|
||||||
payloadCfg[3] = rate >> 8; //navRate MSB
|
payloadCfg[3] = rate >> 8; //navRate MSB
|
||||||
|
|
||||||
return ((sendCommand(&packetCfg, maxWait)) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
|
boolean result = ((sendCommand(&packetCfg, maxWait)) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
|
||||||
|
|
||||||
|
flushCFGRATE(); // Mark the polled measurement and navigation rate data as stale
|
||||||
|
|
||||||
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Return the ratio between the number of measurements and the number of navigation solutions. Unit is cycles
|
//Return the ratio between the number of measurements and the number of navigation solutions. Unit is cycles
|
||||||
@@ -9208,6 +9207,13 @@ uint16_t SFE_UBLOX_GNSS::getNavigationRate(uint16_t maxWait)
|
|||||||
return (packetUBXCFGRATE->data.navRate);
|
return (packetUBXCFGRATE->data.navRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Mark the CFG RATE data as read/stale
|
||||||
|
void SFE_UBLOX_GNSS::flushCFGRATE()
|
||||||
|
{
|
||||||
|
if (packetUBXCFGRATE == NULL) return; // Bail if RAM has not been allocated (otherwise we could be writing anywhere!)
|
||||||
|
packetUBXCFGRATE->moduleQueried.moduleQueried.all = 0; //Mark all datums as stale (read before)
|
||||||
|
}
|
||||||
|
|
||||||
// ***** DOP Helper Functions
|
// ***** DOP Helper Functions
|
||||||
|
|
||||||
uint16_t SFE_UBLOX_GNSS::getGeometricDOP(uint16_t maxWait)
|
uint16_t SFE_UBLOX_GNSS::getGeometricDOP(uint16_t maxWait)
|
||||||
|
|||||||
@@ -936,6 +936,7 @@ public:
|
|||||||
uint16_t getMeasurementRate(uint16_t maxWait = defaultMaxWait); //Return the elapsed time between GNSS measurements in milliseconds
|
uint16_t getMeasurementRate(uint16_t maxWait = defaultMaxWait); //Return the elapsed time between GNSS measurements in milliseconds
|
||||||
boolean setNavigationRate(uint16_t rate, uint16_t maxWait = defaultMaxWait); //Set the ratio between the number of measurements and the number of navigation solutions. Unit is cycles. Max is 127
|
boolean setNavigationRate(uint16_t rate, uint16_t maxWait = defaultMaxWait); //Set the ratio between the number of measurements and the number of navigation solutions. Unit is cycles. Max is 127
|
||||||
uint16_t getNavigationRate(uint16_t maxWait = defaultMaxWait); //Return the ratio between the number of measurements and the number of navigation solutions. Unit is cycles
|
uint16_t getNavigationRate(uint16_t maxWait = defaultMaxWait); //Return the ratio between the number of measurements and the number of navigation solutions. Unit is cycles
|
||||||
|
void flushCFGRATE(); // Mark the measurement and navigation rate data as stale - used by the set rate functions
|
||||||
|
|
||||||
// Helper functions for DOP
|
// Helper functions for DOP
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user