This commit is contained in:
parent
f2f856e227
commit
2057ab9c10
@ -54,7 +54,7 @@ ReturnValue_t GpsHyperionLinuxController::checkModeCommand(Mode_t mode, Submode_
|
|||||||
gainedNewFix.timeOut();
|
gainedNewFix.timeOut();
|
||||||
PoolReadGuard pg(&gpsSet);
|
PoolReadGuard pg(&gpsSet);
|
||||||
gpsSet.setValidity(false, true);
|
gpsSet.setValidity(false, true);
|
||||||
// There can't be a fix with a device that is off.
|
// The ctrl is off, so it cannot detect the data from the devices.
|
||||||
handleFixChangedEvent(GpsHyperion::FixMode::NOT_SEEN);
|
handleFixChangedEvent(GpsHyperion::FixMode::NOT_SEEN);
|
||||||
gpsSet.fixMode.value = GpsHyperion::FixMode::NOT_SEEN;
|
gpsSet.fixMode.value = GpsHyperion::FixMode::NOT_SEEN;
|
||||||
oneShotSwitches.reset();
|
oneShotSwitches.reset();
|
||||||
@ -215,15 +215,9 @@ ReturnValue_t GpsHyperionLinuxController::handleGpsReadData() {
|
|||||||
bool modeIsSet = true;
|
bool modeIsSet = true;
|
||||||
if (MODE_SET != (MODE_SET & gps.set)) {
|
if (MODE_SET != (MODE_SET & gps.set)) {
|
||||||
if (mode != MODE_OFF) {
|
if (mode != MODE_OFF) {
|
||||||
if (maxTimeToReachFix.hasTimedOut() and oneShotSwitches.cantGetFixSwitch) {
|
|
||||||
sif::warning << "GpsHyperionLinuxController: No mode could be set in allowed "
|
|
||||||
<< maxTimeToReachFix.getTimeoutMs() / 1000 << " seconds" << std::endl;
|
|
||||||
triggerEvent(GpsHyperion::CANT_GET_FIX, maxTimeToReachFix.getTimeoutMs());
|
|
||||||
oneShotSwitches.cantGetFixSwitch = false;
|
|
||||||
}
|
|
||||||
modeIsSet = false;
|
modeIsSet = false;
|
||||||
} else {
|
} else {
|
||||||
// GPS device is off anyway, so do other handling
|
// GPS ctrl is off anyway, so do other handling
|
||||||
return returnvalue::FAILED;
|
return returnvalue::FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -253,11 +247,17 @@ ReturnValue_t GpsHyperionLinuxController::handleCoreTelemetry(bool modeIsSet) {
|
|||||||
validFix = true;
|
validFix = true;
|
||||||
}
|
}
|
||||||
newFix = gps.fix.mode;
|
newFix = gps.fix.mode;
|
||||||
if (newFix == GpsHyperion::FixMode::NOT_SEEN or newFix == GpsHyperion::FixMode::NO_FIX) {
|
if (not validFix) {
|
||||||
if (maxTimeToReachFix.hasTimedOut()) {
|
if (maxTimeToReachFix.hasTimedOut()) {
|
||||||
// We are supposed to be on and functioning, but no fix was found
|
// We are supposed to be on and functioning, but no fix was found
|
||||||
// Set HK entries invalid
|
// Set HK entries invalid
|
||||||
gpsSet.setValidity(false, true);
|
gpsSet.setValidity(false, true);
|
||||||
|
if (oneShotSwitches.cantGetFixSwitch) {
|
||||||
|
sif::warning << "GpsHyperionLinuxController: No fix detected in allowed "
|
||||||
|
<< maxTimeToReachFix.getTimeoutMs() / 1000 << " seconds" << std::endl;
|
||||||
|
triggerEvent(GpsHyperion::CANT_GET_FIX, maxTimeToReachFix.getTimeoutMs());
|
||||||
|
oneShotSwitches.cantGetFixSwitch = false;
|
||||||
|
// Try resetting the devices
|
||||||
if (resetCallback != nullptr) {
|
if (resetCallback != nullptr) {
|
||||||
uint8_t chip = GpsHyperion::GnssChip::A_SIDE;
|
uint8_t chip = GpsHyperion::GnssChip::A_SIDE;
|
||||||
ReturnValue_t result = resetCallback(&chip, 1, resetCallbackArgs);
|
ReturnValue_t result = resetCallback(&chip, 1, resetCallbackArgs);
|
||||||
@ -273,6 +273,7 @@ ReturnValue_t GpsHyperionLinuxController::handleCoreTelemetry(bool modeIsSet) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (gpsSet.fixMode.value != newFix) {
|
if (gpsSet.fixMode.value != newFix) {
|
||||||
handleFixChangedEvent(newFix);
|
handleFixChangedEvent(newFix);
|
||||||
}
|
}
|
||||||
@ -290,9 +291,12 @@ ReturnValue_t GpsHyperionLinuxController::handleCoreTelemetry(bool modeIsSet) {
|
|||||||
}
|
}
|
||||||
satNotSetCounter = 0;
|
satNotSetCounter = 0;
|
||||||
} else {
|
} else {
|
||||||
|
if (satNotSetCounter < 10) {
|
||||||
satNotSetCounter++;
|
satNotSetCounter++;
|
||||||
if (gpsSet.satInUse.isValid() and satNotSetCounter >= 10) {
|
} else {
|
||||||
|
gpsSet.satInUse.value = 0;
|
||||||
gpsSet.satInUse.setValid(false);
|
gpsSet.satInUse.setValid(false);
|
||||||
|
gpsSet.satInView.value = 0;
|
||||||
gpsSet.satInView.setValid(false);
|
gpsSet.satInView.setValid(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -300,6 +304,7 @@ ReturnValue_t GpsHyperionLinuxController::handleCoreTelemetry(bool modeIsSet) {
|
|||||||
// LATLON is set for every message, no need for a counter
|
// LATLON is set for every message, no need for a counter
|
||||||
bool latValid = false;
|
bool latValid = false;
|
||||||
bool longValid = false;
|
bool longValid = false;
|
||||||
|
if (modeIsSet) {
|
||||||
if (LATLON_SET == (LATLON_SET & gps.set)) {
|
if (LATLON_SET == (LATLON_SET & gps.set)) {
|
||||||
if (std::isfinite(gps.fix.latitude)) {
|
if (std::isfinite(gps.fix.latitude)) {
|
||||||
// Negative latitude -> South direction
|
// Negative latitude -> South direction
|
||||||
@ -319,11 +324,13 @@ ReturnValue_t GpsHyperionLinuxController::handleCoreTelemetry(bool modeIsSet) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
gpsSet.latitude.setValid(latValid);
|
gpsSet.latitude.setValid(latValid);
|
||||||
gpsSet.longitude.setValid(longValid);
|
gpsSet.longitude.setValid(longValid);
|
||||||
|
|
||||||
// ALTITUDE is set for every message, no need for a counter
|
// ALTITUDE is set for every message, no need for a counter
|
||||||
bool altitudeValid = false;
|
bool altitudeValid = false;
|
||||||
|
if (modeIsSet) {
|
||||||
if (ALTITUDE_SET == (ALTITUDE_SET & gps.set) && std::isfinite(gps.fix.altitude)) {
|
if (ALTITUDE_SET == (ALTITUDE_SET & gps.set) && std::isfinite(gps.fix.altitude)) {
|
||||||
gpsSet.altitude.value = gps.fix.altitude;
|
gpsSet.altitude.value = gps.fix.altitude;
|
||||||
// As specified in gps.h: Only valid if mode == 3
|
// As specified in gps.h: Only valid if mode == 3
|
||||||
@ -331,14 +338,17 @@ ReturnValue_t GpsHyperionLinuxController::handleCoreTelemetry(bool modeIsSet) {
|
|||||||
altitudeValid = true;
|
altitudeValid = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
gpsSet.altitude.setValid(altitudeValid);
|
gpsSet.altitude.setValid(altitudeValid);
|
||||||
|
|
||||||
// SPEED is set for every message, no need for a counter
|
// SPEED is set for every message, no need for a counter
|
||||||
bool speedValid = false;
|
bool speedValid = false;
|
||||||
|
if (modeIsSet) {
|
||||||
if (SPEED_SET == (SPEED_SET & gps.set) && std::isfinite(gps.fix.speed)) {
|
if (SPEED_SET == (SPEED_SET & gps.set) && std::isfinite(gps.fix.speed)) {
|
||||||
gpsSet.speed.value = gps.fix.speed;
|
gpsSet.speed.value = gps.fix.speed;
|
||||||
speedValid = true;
|
speedValid = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
gpsSet.speed.setValid(speedValid);
|
gpsSet.speed.setValid(speedValid);
|
||||||
|
|
||||||
// TIME is set for every message, no need for a counter
|
// TIME is set for every message, no need for a counter
|
||||||
|
Loading…
Reference in New Issue
Block a user