diff --git a/CHANGELOG.md b/CHANGELOG.md index 5631578e..31057e8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ will consitute of a breaking change warranting a new major release: ## Fixed +- GPS fix loss was not reported if mode is unset. - Star Tracker: OFF to NORMAL transition now posssible. Requires FSFW bump which sets transition source modes properly for those transitions. FSFW PR: https://egit.irs.uni-stuttgart.de/eive/fsfw/pulls/131 diff --git a/fsfw b/fsfw index 1b7493f9..7f6ba5f4 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 1b7493f945302b3785ceba6e7a34a727e3898a13 +Subproject commit 7f6ba5f40b47bc32802efdc4ed41b4bad4b8071b diff --git a/linux/devices/GpsHyperionLinuxController.cpp b/linux/devices/GpsHyperionLinuxController.cpp index 3beb0d87..18461c14 100644 --- a/linux/devices/GpsHyperionLinuxController.cpp +++ b/linux/devices/GpsHyperionLinuxController.cpp @@ -214,16 +214,14 @@ ReturnValue_t GpsHyperionLinuxController::handleGpsReadData() { } bool validFix = false; + uint8_t newFix = 0; if (modeIsSet) { // 0: Not seen, 1: No fix, 2: 2D-Fix, 3: 3D-Fix if (gps.fix.mode == 2 or gps.fix.mode == 3) { validFix = true; } - if (gpsSet.fixMode.value != gps.fix.mode) { - triggerEvent(GpsHyperion::GPS_FIX_CHANGE, gpsSet.fixMode.value, gps.fix.mode); - } - gpsSet.fixMode.value = gps.fix.mode; - if (gps.fix.mode == 0 or gps.fix.mode == 1) { + newFix = gps.fix.mode; + if (newFix == 0 or newFix == 1) { if (modeCommanded and maxTimeToReachFix.hasTimedOut()) { // We are supposed to be on and functioning, but no fix was found if (mode == MODE_ON or mode == MODE_NORMAL) { @@ -233,6 +231,10 @@ ReturnValue_t GpsHyperionLinuxController::handleGpsReadData() { } } } + if (gpsSet.fixMode.value != newFix) { + triggerEvent(GpsHyperion::GPS_FIX_CHANGE, gpsSet.fixMode.value, newFix); + } + gpsSet.fixMode = newFix; gpsSet.fixMode.setValid(modeIsSet); // Only set on specific messages, so only set a valid flag to invalid