From 5ea54f91c54902c2958a7131e785abaa7e72935f Mon Sep 17 00:00:00 2001 From: PaulZC Date: Thu, 6 Feb 2025 12:13:39 +0000 Subject: [PATCH] Store previousIP. Print previous and current IP in menuMain Print RX name, version and S/N in menuMain Print oscillatorType in menuMain --- Firmware/GNSSDO_Firmware/Begin.ino | 4 ++++ Firmware/GNSSDO_Firmware/GNSS.ino | 12 +++++----- Firmware/GNSSDO_Firmware/GNSSDO_Firmware.ino | 21 +++++++++++++--- Firmware/GNSSDO_Firmware/NVM.ino | 3 +++ Firmware/GNSSDO_Firmware/States.ino | 3 +++ Firmware/GNSSDO_Firmware/Tasks.ino | 8 +++++++ Firmware/GNSSDO_Firmware/menuMain.ino | 25 ++++++++++++++++---- Firmware/GNSSDO_Firmware/settings.h | 1 + 8 files changed, 64 insertions(+), 13 deletions(-) diff --git a/Firmware/GNSSDO_Firmware/Begin.ino b/Firmware/GNSSDO_Firmware/Begin.ino index c13126f..f58f547 100644 --- a/Firmware/GNSSDO_Firmware/Begin.ino +++ b/Firmware/GNSSDO_Firmware/Begin.ino @@ -535,6 +535,7 @@ void beginTCXO(TwoWire *i2cBus) } systemPrintln("Using STP3593LF OCXO"); + strncpy(oscillatorType, "STP3593LF OCXO", sizeof(oscillatorType)); } else if (presentSIT5811) { @@ -553,6 +554,7 @@ void beginTCXO(TwoWire *i2cBus) } systemPrintln("Using SiT5811 OCXO"); + strncpy(oscillatorType, "SiT5811 OCXO", sizeof(oscillatorType)); } else if (presentSIT5358) { @@ -571,10 +573,12 @@ void beginTCXO(TwoWire *i2cBus) } systemPrintln("Using SiT5358 TCXO"); + strncpy(oscillatorType, "SiT5358 TCXO", sizeof(oscillatorType)); } else { // No TCXO present! + strncpy(oscillatorType, "NONE", sizeof(oscillatorType)); return; } diff --git a/Firmware/GNSSDO_Firmware/GNSS.ino b/Firmware/GNSSDO_Firmware/GNSS.ino index c4761dd..49fb72d 100644 --- a/Firmware/GNSSDO_Firmware/GNSS.ino +++ b/Firmware/GNSSDO_Firmware/GNSS.ino @@ -84,15 +84,15 @@ bool sendWithResponse(String message, const char *reply, unsigned long timeout, //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Begin GNSS -// Ensure GNSS is communicating on COM4. Request IPStatus +// Ensure GNSS is communicating on COM4. Request IPStatus+ReceiverSetup void beginGNSS() { if (!inMainMenu) - systemPrintln("Begin GNSS - requesting IPStatus"); + systemPrintln("Begin GNSS - requesting IPStatus+ReceiverSetup"); int retries = 20; // The mosaic takes a few seconds to wake up after power on - while (!sendWithResponse("esoc, COM1, IPStatus\n\r", "SBFOnce") && (retries > 0)) + while (!sendWithResponse("esoc, COM1, IPStatus+ReceiverSetup\n\r", "SBFOnce") && (retries > 0)) { systemPrintln("No response from mosaic. Retrying - with escape sequence..."); sendWithResponse("SSSSSSSSSSSSSSSSSSSS\n\r", "COM4>"); // Send escape sequence @@ -106,9 +106,9 @@ void beginGNSS() // Module could be stuck in "Ready for SUF Download ...". Send a soft reset to unstick it sendWithResponse("erst,soft,none\n\r", "ResetReceiver"); - retries = 20; + retries = 30; - while (!sendWithResponse("esoc, COM1, IPStatus\n\r", "SBFOnce") && (retries > 0)) + while (!sendWithResponse("esoc, COM1, IPStatus+ReceiverSetup\n\r", "SBFOnce") && (retries > 0)) { systemPrintln("No response from mosaic. Retrying - with escape sequence..."); sendWithResponse("SSSSSSSSSSSSSSSSSSSS\n\r", "COM4>"); // Send escape sequence @@ -123,7 +123,7 @@ void beginGNSS() } if (!inMainMenu) - systemPrintln("GNSS online. IPStatus requested"); + systemPrintln("GNSS online. IPStatus+ReceiverSetup requested"); online.gnss = true; } diff --git a/Firmware/GNSSDO_Firmware/GNSSDO_Firmware.ino b/Firmware/GNSSDO_Firmware/GNSSDO_Firmware.ino index dd70342..18472f1 100644 --- a/Firmware/GNSSDO_Firmware/GNSSDO_Firmware.ino +++ b/Firmware/GNSSDO_Firmware/GNSSDO_Firmware.ino @@ -20,6 +20,12 @@ mosaic COM3 TX (TX3) to ESP32 GPIO 34 mosaic COM3 RX (RX3) to ESP32 GPIO 23 1.2: Add support for SiT5811 and STP3593LF oscillators + 1.3: Enable Ethernet by default + 1.4: Include a soft reset to work around "Ready for SUF Download" + 1.5: Print an ERROR if the display is not detected, but allow firmware to continue + Print mosaic-T version, S/N, Ethernet MAC + IP in menuMain + Store previousIP in NVM - updated once per hour + Print oscillator type in menuMain */ // This is passed in from compiler extra flags @@ -136,8 +142,14 @@ uint8_t gnssError = 255; // Unknown double gnssClockBias_ms = 0.0; // IPStatus 4058 +uint8_t ethernetMACAddress[6] = { 0,0,0,0,0,0 }; // Display this address in the system menu IPAddress gnssIP = IPAddress((uint32_t)0); +// ReceiverSetup 5902 +char RxSerialNumber[21] = {0}; +char RxVersion[21] = {0}; +char ProductName[41] = {0}; + // FugroTimeOffset 4255 // fugroTimeSystem fugroTimeSystems[] is in settings.h @@ -209,6 +221,8 @@ DisplayType displayType = DISPLAY_MAX_NONE; //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= GNSSDO_TCXO *myTCXO; +char oscillatorType[20] = {0}; + //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Low frequency tasks @@ -230,8 +244,8 @@ const int buttonTaskStackSize = 2000; // Global variables //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -uint8_t wifiMACAddress[6]; // Display this address in the system menu -char deviceName[70]; // The serial string that is broadcast. Ex: 'Surveyor Base-BC61' +uint8_t wifiMACAddress[6] = { 0,0,0,0,0,0 }; // Display this address in the system menu +char deviceName[70]; const uint16_t menuTimeout = 60 * 10; // Menus will exit/timeout after this number of seconds int systemTime_minutes = 0; // Used to test if logging is less than max minutes bool inMainMenu = false; // Set true when in the serial config menu system. @@ -391,7 +405,8 @@ void setup() systemPrintf("Boot time: %d\r\n", millis()); if (settings.enableTCPServer) - systemPrintf("TCP Server is enabled. Please connect on port %d to view the console\r\n", settings.tcpServerPort); + systemPrintf("TCP Server is enabled. Please connect on port %d to view the console\r\n", + settings.tcpServerPort); beginConsole(115200, true); // Swap to Alt pins if TCP is enabled } diff --git a/Firmware/GNSSDO_Firmware/NVM.ino b/Firmware/GNSSDO_Firmware/NVM.ino index d8cc651..d6d9a29 100644 --- a/Firmware/GNSSDO_Firmware/NVM.ino +++ b/Firmware/GNSSDO_Firmware/NVM.ino @@ -101,6 +101,7 @@ void recordSystemSettingsToFile(File *settingsFile) settingsFile->printf("%s=%d\r\n", "preferNonCompositeGalileoBias", settings.preferNonCompositeGalileoBias); settingsFile->printf("%s=%d\r\n", "enableTCPServer", settings.enableTCPServer); settingsFile->printf("%s=%d\r\n", "tcpServerPort", settings.tcpServerPort); + settingsFile->printf("%s=%d\r\n", "previousIP", settings.previousIP); //settingsFile->printf("%s=%d\r\n", "", settings.); @@ -376,6 +377,8 @@ bool parseLine(char *str, Settings *settings) settings->enableTCPServer = d; else if (strcmp(settingName, "tcpServerPort") == 0) settings->tcpServerPort = d; + else if (strcmp(settingName, "previousIP") == 0) + settings->previousIP = d; //else if (strcmp(settingName, "") == 0) // settings-> = d; diff --git a/Firmware/GNSSDO_Firmware/States.ino b/Firmware/GNSSDO_Firmware/States.ino index 995bac8..2768af0 100644 --- a/Firmware/GNSSDO_Firmware/States.ino +++ b/Firmware/GNSSDO_Firmware/States.ino @@ -147,6 +147,9 @@ void updateSystemState() { tcxoUpdates = 0; settings.tcxoControl = getFrequencyControlWord(); + + settings.previousIP = gnssIP; + recordSystemSettings(); systemPrint("TCXO Control Word saved to LFS: "); diff --git a/Firmware/GNSSDO_Firmware/Tasks.ino b/Firmware/GNSSDO_Firmware/Tasks.ino index 5d9d09f..622bd6f 100644 --- a/Firmware/GNSSDO_Firmware/Tasks.ino +++ b/Firmware/GNSSDO_Firmware/Tasks.ino @@ -662,12 +662,20 @@ void processConsumerMessage(PARSE_STATE *parse, uint8_t type) } else if ((parse->message & 0x1FFF) == 4058) // IPStatus { + for (int i = 0; i < 6; i++) + ethernetMACAddress[i] = parse->buffer[i + 14]; uint32_t theIP = ((uint32_t)parse->buffer[32]) << 0; theIP |= ((uint32_t)parse->buffer[33]) << 8; theIP |= ((uint32_t)parse->buffer[34]) << 16; theIP |= ((uint32_t)parse->buffer[35]) << 24; gnssIP = IPAddress(theIP); } + else if ((parse->message & 0x1FFF) == 5902) // ReceiverSetup + { + strncpy(RxSerialNumber, (const char *)&parse->buffer[156], sizeof(RxSerialNumber)); + strncpy(RxVersion, (const char *)&parse->buffer[196], sizeof(RxVersion)); + strncpy(ProductName, (const char *)&parse->buffer[328], sizeof(ProductName)); + } else if ((parse->message & 0x1FFF) == 4255) // FugroTimeOffset { int N = parse->buffer[14]; // Number of FugroTOSub sub-blocks in this block diff --git a/Firmware/GNSSDO_Firmware/menuMain.ino b/Firmware/GNSSDO_Firmware/menuMain.ino index b63ba97..82cd55d 100644 --- a/Firmware/GNSSDO_Firmware/menuMain.ino +++ b/Firmware/GNSSDO_Firmware/menuMain.ino @@ -21,12 +21,27 @@ void menuMain() systemPrintln(); char versionString[21]; getFirmwareVersion(versionString, sizeof(versionString)); - systemPrintf("SparkPNT %s %s\r\n", platformPrefix, versionString); + systemPrintf("SparkPNT %s Firmware %s\r\n", platformPrefix, versionString); systemPrint("ESP32 WiFi MAC Address: "); systemPrintf("%02X:%02X:%02X:%02X:%02X:%02X\r\n", wifiMACAddress[0], wifiMACAddress[1], wifiMACAddress[2], wifiMACAddress[3], wifiMACAddress[4], wifiMACAddress[5]); + systemPrintf("Oscillator: %s\r\n", oscillatorType); + + systemPrintf("GNSS: %s version %s S/N %s\r\n", ProductName, RxVersion, RxSerialNumber); + + systemPrint("Ethernet MAC Address: "); + systemPrintf("%02X:%02X:%02X:%02X:%02X:%02X\r\n", ethernetMACAddress[0], ethernetMACAddress[1], ethernetMACAddress[2], + ethernetMACAddress[3], ethernetMACAddress[4], ethernetMACAddress[5]); + + systemPrintf("Previous IP address: %s\r\n", IPAddress(settings.previousIP).toString().c_str()); + + systemPrintf("Current IP address: %s\r\n", gnssIP.toString().c_str()); + + if (settings.enableTCPServer) + systemPrintf("TCP Server is enabled: TCP Port %d\r\n", settings.tcpServerPort); + // Display the uptime uint64_t uptimeMilliseconds = millis(); uint32_t uptimeDays = 0; @@ -46,13 +61,14 @@ void menuMain() uptimeSeconds = uptimeMilliseconds / MILLISECONDS_IN_A_SECOND; uptimeMilliseconds %= MILLISECONDS_IN_A_SECOND; - systemPrint("System Uptime: "); + systemPrint("System Uptime: "); systemPrintf("%d %02d:%02d:%02d.%03lld\r\n", uptimeDays, uptimeHours, uptimeMinutes, uptimeSeconds, uptimeMilliseconds); - systemPrintf("Rejected by parser: %d NMEA / %d RTCM / %d SBF\r\n", failedParserMessages_NMEA, + systemPrintf("Rejected by parser: %d NMEA / %d RTCM / %d SBF\r\n", failedParserMessages_NMEA, failedParserMessages_RTCM, failedParserMessages_SBF); + systemPrintln(); systemPrintln("Menu: Main"); systemPrintln("c) Configure operation"); @@ -94,7 +110,8 @@ void menuMain() configureGNSSTCPServer(); // Configure TCP if (settings.enableTCPServer) - systemPrintf("TCP Server is enabled. Please connect on port %d to view the console\r\n", settings.tcpServerPort); + systemPrintf("TCP Server is enabled. Please connect on %s:%d to view the console\r\n", + gnssIP.toString().c_str(), settings.tcpServerPort); beginConsole(115200, true); // Swap to Alt pins if TCP is enabled diff --git a/Firmware/GNSSDO_Firmware/settings.h b/Firmware/GNSSDO_Firmware/settings.h index 06b7ede..53b37e4 100644 --- a/Firmware/GNSSDO_Firmware/settings.h +++ b/Firmware/GNSSDO_Firmware/settings.h @@ -291,6 +291,7 @@ typedef struct bool preferNonCompositeGalileoBias = false; // Prefer non-composite Galileo bias - if available. Mutex with preferNonCompositeGPSBias bool enableTCPServer = false; // Enable and configure mosaic-T IPS1 for TCP2way for the ESP32 console uint16_t tcpServerPort = 28785; + uint32_t previousIP = 0; // Store the previous IP address // Add new settings above <------------------------------------------------------------>