diff --git a/Firmware/RTK_mosaic-T_Firmware/Display.ino b/Firmware/RTK_mosaic-T_Firmware/Display.ino index 11743c0..997a112 100644 --- a/Firmware/RTK_mosaic-T_Firmware/Display.ino +++ b/Firmware/RTK_mosaic-T_Firmware/Display.ino @@ -219,7 +219,7 @@ void displayGNSSFail(uint16_t displayTime) void displayBadBias(uint16_t displayTime) { - displayMessage("Bad RxClkBias. Restarting...", displayTime); + displayMessage("Bad RxClkBias ---------- Restarting", displayTime); } void displayNoRingBuffer(uint16_t displayTime) diff --git a/Firmware/RTK_mosaic-T_Firmware/GNSS.ino b/Firmware/RTK_mosaic-T_Firmware/GNSS.ino index 8812fa4..ccf873b 100644 --- a/Firmware/RTK_mosaic-T_Firmware/GNSS.ino +++ b/Firmware/RTK_mosaic-T_Firmware/GNSS.ino @@ -108,15 +108,33 @@ void beginGNSS() online.gnss = true; } -// Kickstart the GNSS timing system - e.g. to resync on bad bias -bool setTimingSystem() +// Kickstart the GNSS - e.g. to resync on bad bias +bool gnssSoftReset() { if (!online.gnss) return false; int retries = 3; // GNSS is already begun. We shouldn't need to retry. - while (!sendWithResponse("sts,auto\n\r", "TimingSystem") && (retries > 0)) // Set timing system to auto + while (!sendWithResponse("erst,Soft,PVTData\n\r", "ResetReceiver") && (retries > 0)) // Soft reset - erase PVT data + { + systemPrintln("No response from mosaic. Retrying - with escape sequence..."); + sendWithResponse("SSSSSSSSSSSSSSSSSSSS\n\r", "COM4>"); // Send escape sequence + retries--; + } + + return (retries > 0); +} + +// Revert to boot configuration +bool gnssHardReset() +{ + if (!online.gnss) + return false; + + int retries = 3; // GNSS is already begun. We shouldn't need to retry. + + while (!sendWithResponse("erst,Hard\n\r", "ResetReceiver") && (retries > 0)) // Hard reset - revert to boot configuration { systemPrintln("No response from mosaic. Retrying - with escape sequence..."); sendWithResponse("SSSSSSSSSSSSSSSSSSSS\n\r", "COM4>"); // Send escape sequence diff --git a/Firmware/RTK_mosaic-T_Firmware/States.ino b/Firmware/RTK_mosaic-T_Firmware/States.ino index 856b97d..1eddaff 100644 --- a/Firmware/RTK_mosaic-T_Firmware/States.ino +++ b/Firmware/RTK_mosaic-T_Firmware/States.ino @@ -122,8 +122,8 @@ void updateSystemState() { clkBiasLimitCount = 0; // Reset the counts before changing state badBiasCount = 0; - displayBadBias(1000); - setTimingSystem(); // Kickstart the timing system + displayBadBias(2000); + gnssSoftReset(); // Kickstart the timing system changeState(STATE_GNSS_CONFIGURED); } } diff --git a/Firmware/RTK_mosaic-T_Firmware/menuMain.ino b/Firmware/RTK_mosaic-T_Firmware/menuMain.ino index f884b6f..00c831c 100644 --- a/Firmware/RTK_mosaic-T_Firmware/menuMain.ino +++ b/Firmware/RTK_mosaic-T_Firmware/menuMain.ino @@ -102,6 +102,8 @@ void factoryReset(bool alreadyHasSemaphore) { displaySytemReset(); // Display friendly message on OLED + gnssHardReset(); // Probably redundant as initializeGNSS() will be called on restart + tasksStopUART1(); systemPrintln("Formatting internal file system..."); diff --git a/Firmware/RTK_mosaic-T_Firmware/menuSystem.ino b/Firmware/RTK_mosaic-T_Firmware/menuSystem.ino index 3534aa6..a3e1c03 100644 --- a/Firmware/RTK_mosaic-T_Firmware/menuSystem.ino +++ b/Firmware/RTK_mosaic-T_Firmware/menuSystem.ino @@ -335,6 +335,8 @@ void menuDebugSoftware() { recordSystemSettings(); + gnssHardReset(); + ESP.restart(); } else if (incoming == 'x')