diff --git a/Firmware/RTK_Everywhere/AP-Config/index.html b/Firmware/RTK_Everywhere/AP-Config/index.html index f6b381e36..7022277ca 100644 --- a/Firmware/RTK_Everywhere/AP-Config/index.html +++ b/Firmware/RTK_Everywhere/AP-Config/index.html @@ -363,7 +363,7 @@ -
+
@@ -372,6 +372,21 @@
+ +
+
+ +
+ +

+
+
+
diff --git a/Firmware/RTK_Everywhere/AP-Config/src/main.js b/Firmware/RTK_Everywhere/AP-Config/src/main.js index 2e98cde03..ea8b2fa4d 100644 --- a/Firmware/RTK_Everywhere/AP-Config/src/main.js +++ b/Firmware/RTK_Everywhere/AP-Config/src/main.js @@ -112,7 +112,7 @@ function parseIncoming(msg) { hide("externalPortOptions"); show("logToSDCard"); hide("galileoHasSetting"); - hide("useMSM7Setting"); + hide("lg290pGnssSettings"); hide("tiltConfig"); hide("beeperControl"); show("measurementRateInput"); @@ -146,7 +146,7 @@ function parseIncoming(msg) { show("externalPortOptions"); show("logToSDCard"); hide("galileoHasSetting"); - hide("useMSM7Setting"); + hide("lg290pGnssSettings"); hide("tiltConfig"); hide("beeperControl"); show("measurementRateInput"); @@ -167,7 +167,7 @@ function parseIncoming(msg) { show("externalPortOptions"); show("logToSDCard"); hide("galileoHasSetting"); - hide("useMSM7Setting"); + hide("lg290pGnssSettings"); hide("tiltConfig"); hide("beeperControl"); hide("measurementRateInput"); @@ -257,8 +257,8 @@ function parseIncoming(msg) { show("externalPortOptions"); show("logToSDCard"); - hide("galileoHasSetting"); - show("useMSM7Setting"); + show("galileoHasSetting"); + show("lg290pGnssSettings"); hide("tiltConfig"); hide("beeperControl"); @@ -273,8 +273,8 @@ function parseIncoming(msg) { show("constellationNavic"); hide("dynamicModelDropdown"); //Not supported on LG290P - hide("minElevConfig"); //Not supported on LG290P - hide("minCNOConfig"); //Not supported on LG290P + show("minElevConfig"); + show("minCNOConfig"); ge("rtcmRateInfoText").setAttribute('data-bs-original-title', 'RTCM is transmitted by the base at a default of 1Hz for messages 1005, 1074, 1084, 1094, 1114, 1124, 1134. This can be lowered for radios with low bandwidth or tailored to transmit any/all RTCM messages. Limits: 0 to 20. Note: The measurement rate is overridden to 1Hz when in Base mode.'); @@ -327,8 +327,8 @@ function parseIncoming(msg) { hide("constellationSbas"); //Not supported on LG290P show("constellationNavic"); - hide("galileoHasSetting"); //Not supported on LG290P - show("useMSM7Setting"); + show("galileoHasSetting"); + show("lg290pGnssSettings"); hide("tiltConfig"); //Not supported on Torch X2 show("measurementRateInput"); @@ -341,8 +341,8 @@ function parseIncoming(msg) { hide("enableNmeaOnRadio"); hide("dynamicModelDropdown"); //Not supported on LG290P - hide("minElevConfig"); //Not supported on LG290P - hide("minCNOConfig"); //Not supported on LG290P + show("minElevConfig"); + show("minCNOConfig"); ge("rtcmRateInfoText").setAttribute('data-bs-original-title', 'RTCM is transmitted by the base at a default of 1Hz for messages 1005, 1074, 1084, 1094, 1124, and 0.1Hz for 1033. This can be lowered for radios with low bandwidth or tailored to transmit any/all RTCM messages. Limits: 0 to 20. Note: The measurement rate is overridden to 1Hz when in Base mode.'); @@ -714,6 +714,13 @@ function show(id) { ge(id).style.display = "block"; } +function isElementShown(id) { + if (ge(id).style.display == "block") { + return (true); + } + return (false); +} + //Create CSV of all setting data function sendData() { var settingCSV = ""; @@ -841,6 +848,9 @@ function validateFields() { checkElementValue("minElev", 0, 90, "Must be between 0 and 90", "collapseGNSSConfig"); checkElementValue("minCNO", 0, 90, "Must be between 0 and 90", "collapseGNSSConfig"); + if (isElementShown("lg290pGnssSettings") == true) { + checkElementValue("rtcmMinElev", -90, 90, "Must be between -90 and 90", "collapseGNSSConfig"); + } if (ge("enableNtripClient").checked == true) { checkElementString("ntripClientCasterHost", 1, 45, "Must be 1 to 45 characters", "collapseGNSSConfig"); diff --git a/Firmware/RTK_Everywhere/GNSS_LG290P.ino b/Firmware/RTK_Everywhere/GNSS_LG290P.ino index bc8e432f1..025cdfae5 100644 --- a/Firmware/RTK_Everywhere/GNSS_LG290P.ino +++ b/Firmware/RTK_Everywhere/GNSS_LG290P.ino @@ -116,7 +116,8 @@ void GNSS_LG290P::begin() lg290pFirmwareVersion, gnssFirmwareVersion); // Determine if the "LG290P03AANR01A03S_PPP_TEMP0812 2025/08/12" firmware is present - // This version has support for testing out E6/HAS PPP, but confusingly was released after v05. + // Or "LG290P03AANR01A06S_PPP_TEMP0829 2025/08/29 17:08:39" + // The 03S_PPP_TEMP version has support for testing out E6/HAS PPP, but confusingly was released after v05. if (strstr(gnssFirmwareVersion, "PPP_TEMP") != nullptr) { present.galileoHasCapable = true; @@ -793,6 +794,8 @@ bool GNSS_LG290P::enableRTCMBase() int portNumber = 1; + int minimumRtcmRate = 1000; + while (portNumber < 4) { for (int messageNumber = 0; messageNumber < MAX_LG290P_RTCM_MSG; messageNumber++) @@ -843,7 +846,12 @@ bool GNSS_LG290P::enableRTCMBase() // If any message is enabled, enable RTCM output if (settings.lg290pMessageRatesRTCMBase[messageNumber] > 0) + { enableRTCM = true; + // Capture the message with the lowest rate + if (settings.lg290pMessageRatesRTCMBase[messageNumber] < minimumRtcmRate) + minimumRtcmRate = settings.lg290pMessageRatesRTCMBase[messageNumber]; + } } } @@ -857,11 +865,14 @@ bool GNSS_LG290P::enableRTCMBase() if (enableRTCM == true) { if (settings.debugGnss) - systemPrintln("Enabling Base RTCM output"); + systemPrintf("Enabling Base RTCM MSM%c output with rate of %d\r\n", + settings.useMSM7 ? '7' : '4', minimumRtcmRate); // PQTMCFGRTCM fails to respond with OK over UART2 of LG290P, so don't look for it char cfgRtcm[40]; - snprintf(cfgRtcm, sizeof(cfgRtcm), "PQTMCFGRTCM,W,%c,0,-90,07,06,2,1", settings.useMSM7 ? '7' : '4'); + snprintf(cfgRtcm, sizeof(cfgRtcm), "PQTMCFGRTCM,W,%c,0,%d,07,06,2,%d", + settings.useMSM7 ? '7' : '4', settings.rtcmMinElev, + minimumRtcmRate); _lg290p->sendOkCommand( cfgRtcm); // Enable MSM4/7, output regular intervals, interval (seconds) } @@ -1016,15 +1027,16 @@ bool GNSS_LG290P::enableRTCMRover() if (enableRTCM == true) { if (settings.debugCorrections) - systemPrintf("Enabling Rover RTCM MSM output with rate of %d\r\n", minimumRtcmRate); + systemPrintf("Enabling Rover RTCM MSM%c output with rate of %d\r\n", + settings.useMSM7 ? '7' : '4', minimumRtcmRate); // Enable MSM4/7 (for faster PPP CSRS results), output at a rate equal to the minimum RTCM rate (EPH Mode = 2) // PQTMCFGRTCM, W, , , , , , , // Set MSM_ElevThd to 15 degrees from rftop suggestion char msmCommand[40] = {0}; - snprintf(msmCommand, sizeof(msmCommand), "PQTMCFGRTCM,W,%c,0,15,07,06,2,%d", - settings.useMSM7 ? '7' : '4', minimumRtcmRate); + snprintf(msmCommand, sizeof(msmCommand), "PQTMCFGRTCM,W,%c,0,%d,07,06,2,%d", + settings.useMSM7 ? '7' : '4', settings.rtcmMinElev, minimumRtcmRate); // PQTMCFGRTCM fails to respond with OK over UART2 of LG290P, so don't look for it _lg290p->sendOkCommand(msmCommand); @@ -1921,6 +1933,8 @@ void GNSS_LG290P::menuMessages() if (namedSettingAvailableOnPlatform("useMSM7")) // Redundant - but good practice for code reuse systemPrintf("13) MSM Selection: MSM%c\r\n", settings.useMSM7 ? '7' : '4'); + if (namedSettingAvailableOnPlatform("rtcmMinElev")) // Redundant - but good practice for code reuse + systemPrintf("14) Minimum Elevation for RTCM: %d\r\n", settings.rtcmMinElev); systemPrintln("x) Exit"); @@ -1997,6 +2011,17 @@ void GNSS_LG290P::menuMessages() } else if ((incoming == 13) && (namedSettingAvailableOnPlatform("useMSM7"))) // Redundant - but good practice for code reuse) settings.useMSM7 ^= 1; + else if ((incoming == 14) && (namedSettingAvailableOnPlatform("rtcmMinElev"))) + { + systemPrintf("Enter minimum elevation for RTCM: "); + + int elevation = getUserInputNumber(); // Returns EXIT, TIMEOUT, or long + + if (elevation >= -90 && elevation <= 90) + { + settings.rtcmMinElev = elevation; + } + } else if (incoming == INPUT_RESPONSE_GETNUMBER_EXIT) break; @@ -2353,7 +2378,7 @@ bool GNSS_LG290P::setHighAccuracyService(bool enableGalileoHas) { bool result = true; - // E6 reception requires version v03 with 'PPP_TEMP' in firmware title + // E6 reception requires version v03/v06 with 'PPP_TEMP' in firmware title // Present is set during LG290P begin() if (present.galileoHasCapable == false) return (result); // We are unable to set this setting to report success diff --git a/Firmware/RTK_Everywhere/HTTP_Client.ino b/Firmware/RTK_Everywhere/HTTP_Client.ino index 9ef212ed3..03bb8a7b5 100644 --- a/Firmware/RTK_Everywhere/HTTP_Client.ino +++ b/Firmware/RTK_Everywhere/HTTP_Client.ino @@ -693,7 +693,7 @@ void httpClientUpdate() } // Periodically display the HTTP client state - if (PERIODIC_DISPLAY(PD_HTTP_CLIENT_STATE)) + if (PERIODIC_DISPLAY(PD_HTTP_CLIENT_STATE) && !inMainMenu) { const char *line = ""; httpClientEnabled(&line); diff --git a/Firmware/RTK_Everywhere/MQTT_Client.ino b/Firmware/RTK_Everywhere/MQTT_Client.ino index 41836db86..63bdf2352 100644 --- a/Firmware/RTK_Everywhere/MQTT_Client.ino +++ b/Firmware/RTK_Everywhere/MQTT_Client.ino @@ -1169,7 +1169,7 @@ void mqttClientUpdate() } // Periodically display the MQTT client state - if (PERIODIC_DISPLAY(PD_MQTT_CLIENT_STATE)) + if (PERIODIC_DISPLAY(PD_MQTT_CLIENT_STATE) && !inMainMenu) { const char *line = ""; mqttClientEnabled(&line); diff --git a/Firmware/RTK_Everywhere/NTP.ino b/Firmware/RTK_Everywhere/NTP.ino index 33f8dabfe..ee392b811 100644 --- a/Firmware/RTK_Everywhere/NTP.ino +++ b/Firmware/RTK_Everywhere/NTP.ino @@ -963,7 +963,7 @@ void ntpServerUpdate() } // Periodically display the NTP server state - if (PERIODIC_DISPLAY(PD_NTP_SERVER_STATE)) + if (PERIODIC_DISPLAY(PD_NTP_SERVER_STATE) && !inMainMenu) { const char * line = ""; if (NEQ_RTK_MODE(ntpServerMode)) diff --git a/Firmware/RTK_Everywhere/NtripClient.ino b/Firmware/RTK_Everywhere/NtripClient.ino index 1f633c1f3..8ef050044 100644 --- a/Firmware/RTK_Everywhere/NtripClient.ino +++ b/Firmware/RTK_Everywhere/NtripClient.ino @@ -955,7 +955,7 @@ void ntripClientUpdate() } // Periodically display the NTRIP client state - if (PERIODIC_DISPLAY(PD_NTRIP_CLIENT_STATE)) + if (PERIODIC_DISPLAY(PD_NTRIP_CLIENT_STATE) && !inMainMenu) { systemPrintf("NTRIP Client state: %s%s\r\n", ntripClientStateName[ntripClientState], line); PERIODIC_CLEAR(PD_NTRIP_CLIENT_STATE); diff --git a/Firmware/RTK_Everywhere/NtripServer.ino b/Firmware/RTK_Everywhere/NtripServer.ino index 4a800b747..39ffc4ff9 100644 --- a/Firmware/RTK_Everywhere/NtripServer.ino +++ b/Firmware/RTK_Everywhere/NtripServer.ino @@ -845,7 +845,7 @@ void ntripServerUpdate(int serverIndex) } // Periodically display the state - if (PERIODIC_DISPLAY(PD_NTRIP_SERVER_STATE)) + if (PERIODIC_DISPLAY(PD_NTRIP_SERVER_STATE) && !inMainMenu) { systemPrintf("NTRIP Server %d state: %s%s\r\n", serverIndex, ntripServerStateName[ntripServer->state], line); diff --git a/Firmware/RTK_Everywhere/PointPerfectLibrary.ino b/Firmware/RTK_Everywhere/PointPerfectLibrary.ino index a09968d15..ee8bbdf1e 100644 --- a/Firmware/RTK_Everywhere/PointPerfectLibrary.ino +++ b/Firmware/RTK_Everywhere/PointPerfectLibrary.ino @@ -13,7 +13,7 @@ void updatePplTask(void *e) while (task.updatePplTaskStopRequest == false) { // Display an alive message - if (PERIODIC_DISPLAY(PD_TASK_UPDATE_PPL)) + if (PERIODIC_DISPLAY(PD_TASK_UPDATE_PPL) && !inMainMenu) { PERIODIC_CLEAR(PD_TASK_UPDATE_PPL); systemPrintln("UpdatePplTask running"); diff --git a/Firmware/RTK_Everywhere/States.ino b/Firmware/RTK_Everywhere/States.ino index ce314d703..54ab9569b 100644 --- a/Firmware/RTK_Everywhere/States.ino +++ b/Firmware/RTK_Everywhere/States.ino @@ -773,10 +773,11 @@ typedef struct _RTK_MODE_ENTRY } RTK_MODE_ENTRY; const RTK_MODE_ENTRY stateModeTable[] = {{"Rover", STATE_ROVER_NOT_STARTED, STATE_ROVER_RTK_FIX}, + {"Base Caster", STATE_BASE_CASTER_NOT_STARTED, STATE_BASE_CASTER_NOT_STARTED}, {"Base", STATE_BASE_NOT_STARTED, STATE_BASE_FIXED_TRANSMITTING}, - {"Setup", STATE_DISPLAY_SETUP, STATE_PROFILE}, - {"ESPNOW Pairing", STATE_ESPNOW_PAIRING_NOT_STARTED, STATE_ESPNOW_PAIRING}, + {"Setup", STATE_DISPLAY_SETUP, STATE_PROFILE}, // Covers SETUP, WEB_CONFIG, TEST {"Provisioning", STATE_KEYS_REQUESTED, STATE_KEYS_REQUESTED}, + {"ESPNOW Pairing", STATE_ESPNOW_PAIRING_NOT_STARTED, STATE_ESPNOW_PAIRING}, {"NTP", STATE_NTPSERVER_NOT_STARTED, STATE_NTPSERVER_SYNC}, {"Shutdown", STATE_SHUTDOWN, STATE_SHUTDOWN}}; const int stateModeTableEntries = sizeof(stateModeTable) / sizeof(stateModeTable[0]); diff --git a/Firmware/RTK_Everywhere/System.ino b/Firmware/RTK_Everywhere/System.ino index 20cf524c7..94f67353c 100644 --- a/Firmware/RTK_Everywhere/System.ino +++ b/Firmware/RTK_Everywhere/System.ino @@ -414,6 +414,16 @@ void printReports() if (bluetoothCommandIsConnected() == true) return; + if (inMainMenu) + return; + + // Periodically display the firmware mode + if (PERIODIC_DISPLAY(PD_FIRMWARE_MODE)) + { + PERIODIC_CLEAR(PD_FIRMWARE_MODE); + systemPrintf("Firmware mode: %s\r\n", stateToRtkMode(systemState)); + } + // Periodically print the position if (settings.enablePrintPosition && ((millis() - lastPrintPosition) > 15000)) { diff --git a/Firmware/RTK_Everywhere/Tasks.ino b/Firmware/RTK_Everywhere/Tasks.ino index 3b4c4c8f0..3f6eabc9a 100644 --- a/Firmware/RTK_Everywhere/Tasks.ino +++ b/Firmware/RTK_Everywhere/Tasks.ino @@ -166,7 +166,7 @@ void btReadTask(void *e) while (task.btReadTaskStopRequest == false) { // Display an alive message - if (PERIODIC_DISPLAY(PD_TASK_BLUETOOTH_READ)) + if (PERIODIC_DISPLAY(PD_TASK_BLUETOOTH_READ) && !inMainMenu) { PERIODIC_CLEAR(PD_TASK_BLUETOOTH_READ); systemPrintln("btReadTask running"); @@ -236,7 +236,7 @@ void btReadTask(void *e) } // End btPrintEcho == false && bluetoothRxDataAvailable() - if (PERIODIC_DISPLAY(PD_BLUETOOTH_DATA_RX)) + if (PERIODIC_DISPLAY(PD_BLUETOOTH_DATA_RX) && !inMainMenu) { PERIODIC_CLEAR(PD_BLUETOOTH_DATA_RX); systemPrintf("Bluetooth received %d bytes\r\n", rxBytes); @@ -415,7 +415,7 @@ void gnssReadTask(void *e) while (task.gnssReadTaskStopRequest == false) { // Display an alive message - if (PERIODIC_DISPLAY(PD_TASK_GNSS_READ)) + if (PERIODIC_DISPLAY(PD_TASK_GNSS_READ) && !inMainMenu) { PERIODIC_CLEAR(PD_TASK_GNSS_READ); systemPrintln("gnssReadTask running"); @@ -426,7 +426,7 @@ void gnssReadTask(void *e) // Display the RX byte count static uint32_t totalRxByteCount = 0; - if (PERIODIC_DISPLAY(PD_GNSS_DATA_RX_BYTE_COUNT)) + if (PERIODIC_DISPLAY(PD_GNSS_DATA_RX_BYTE_COUNT) && !inMainMenu) { PERIODIC_CLEAR(PD_GNSS_DATA_RX_BYTE_COUNT); systemPrintf("gnssReadTask total byte count: %d\r\n", totalRxByteCount); @@ -1345,7 +1345,7 @@ void handleGnssDataTask(void *e) while (task.handleGnssDataTaskStopRequest == false) { // Display an alive message - if (PERIODIC_DISPLAY(PD_TASK_HANDLE_GNSS_DATA)) + if (PERIODIC_DISPLAY(PD_TASK_HANDLE_GNSS_DATA) && !inMainMenu) { PERIODIC_CLEAR(PD_TASK_HANDLE_GNSS_DATA); systemPrintln("handleGnssDataTask running"); @@ -1414,7 +1414,7 @@ void handleGnssDataTask(void *e) maxMillis[RBC_BLUETOOTH] = deltaMillis; // Display the data movement - if (PERIODIC_DISPLAY(PD_BLUETOOTH_DATA_TX)) + if (PERIODIC_DISPLAY(PD_BLUETOOTH_DATA_TX) && !inMainMenu) { PERIODIC_CLEAR(PD_BLUETOOTH_DATA_TX); systemPrintf("Bluetooth: %d bytes written\r\n", bytesToSend); @@ -1760,7 +1760,7 @@ void handleGnssDataTask(void *e) // Display the millisecond values for the different ring buffer consumers //---------------------------------------------------------------------- - if (PERIODIC_DISPLAY(PD_RING_BUFFER_MILLIS)) + if (PERIODIC_DISPLAY(PD_RING_BUFFER_MILLIS) && !inMainMenu) { int milliseconds; int seconds; @@ -1991,7 +1991,7 @@ void buttonCheckTask(void *e) while (task.buttonCheckTaskStopRequest == false) { // Display an alive message - if (PERIODIC_DISPLAY(PD_TASK_BUTTON_CHECK)) + if (PERIODIC_DISPLAY(PD_TASK_BUTTON_CHECK) && !inMainMenu) { PERIODIC_CLEAR(PD_TASK_BUTTON_CHECK); systemPrintln("ButtonCheckTask running"); @@ -2486,7 +2486,7 @@ void sdSizeCheckTask(void *e) while (task.sdSizeCheckTaskStopRequest == false) { // Display an alive message - if (PERIODIC_DISPLAY(PD_TASK_SD_SIZE_CHECK)) + if (PERIODIC_DISPLAY(PD_TASK_SD_SIZE_CHECK) && !inMainMenu) { PERIODIC_CLEAR(PD_TASK_SD_SIZE_CHECK); systemPrintln("sdSizeCheckTask running"); @@ -2567,7 +2567,7 @@ void bluetoothCommandTask(void *pvParameters) while (task.bluetoothCommandTaskStopRequest == false) { // Display an alive message - if (PERIODIC_DISPLAY(PD_TASK_BLUETOOTH_READ)) + if (PERIODIC_DISPLAY(PD_TASK_BLUETOOTH_READ) && !inMainMenu) { PERIODIC_CLEAR(PD_TASK_BLUETOOTH_READ); systemPrintln("bluetoothCommandTask running"); @@ -2590,7 +2590,7 @@ void bluetoothCommandTask(void *pvParameters) } } - if (PERIODIC_DISPLAY(PD_BLUETOOTH_DATA_RX)) + if (PERIODIC_DISPLAY(PD_BLUETOOTH_DATA_RX) && !inMainMenu) { PERIODIC_CLEAR(PD_BLUETOOTH_DATA_RX); systemPrintf("Bluetooth received %d bytes\r\n", rxSpot); diff --git a/Firmware/RTK_Everywhere/TcpClient.ino b/Firmware/RTK_Everywhere/TcpClient.ino index 1e2ff2706..690e872ac 100644 --- a/Firmware/RTK_Everywhere/TcpClient.ino +++ b/Firmware/RTK_Everywhere/TcpClient.ino @@ -571,7 +571,7 @@ void tcpClientUpdate() } // Periodically display the TCP client state - if (PERIODIC_DISPLAY(PD_TCP_CLIENT_STATE)) + if (PERIODIC_DISPLAY(PD_TCP_CLIENT_STATE) && !inMainMenu) { systemPrintf("TCP Client state: %s%s\r\n", tcpClientStateName[tcpClientState], line); diff --git a/Firmware/RTK_Everywhere/WiFi.ino b/Firmware/RTK_Everywhere/WiFi.ino index 77967ac0a..9eacc55d5 100644 --- a/Firmware/RTK_Everywhere/WiFi.ino +++ b/Firmware/RTK_Everywhere/WiFi.ino @@ -1198,7 +1198,7 @@ void wifiStationUpdate() } // Periodically display the WiFi state - if (PERIODIC_DISPLAY(PD_WIFI_STATE)) + if (PERIODIC_DISPLAY(PD_WIFI_STATE) && !inMainMenu) { systemPrintf("WiFi station state: %s%s\r\n", wifiStationStateName[wifiStationState], reason); PERIODIC_CLEAR(PD_WIFI_STATE); diff --git a/Firmware/RTK_Everywhere/menuMain.ino b/Firmware/RTK_Everywhere/menuMain.ino index e9db3dc93..7f28a8db5 100644 --- a/Firmware/RTK_Everywhere/menuMain.ino +++ b/Firmware/RTK_Everywhere/menuMain.ino @@ -126,6 +126,7 @@ void menuMain() firmwareVersionGet(versionString, sizeof(versionString), true); RTKBrandAttribute *brandAttributes = getBrandAttributeFromBrand(present.brand); systemPrintf("%s RTK %s %s\r\n", brandAttributes->name, platformPrefix, versionString); + systemPrintf("Mode: %s\r\n", stateToRtkMode(systemState)); #ifdef COMPILE_BT diff --git a/Firmware/RTK_Everywhere/menuMessages.ino b/Firmware/RTK_Everywhere/menuMessages.ino index 611120311..f7730f1ab 100644 --- a/Firmware/RTK_Everywhere/menuMessages.ino +++ b/Firmware/RTK_Everywhere/menuMessages.ino @@ -232,6 +232,8 @@ void menuMessagesBaseRTCM() if (namedSettingAvailableOnPlatform("useMSM7")) systemPrintf("4) MSM Selection: MSM%c\r\n", settings.useMSM7 ? '7' : '4'); + if (namedSettingAvailableOnPlatform("rtcmMinElev")) + systemPrintf("5) Minimum Elevation for RTCM: %d\r\n", settings.rtcmMinElev); systemPrintln("x) Exit"); @@ -261,6 +263,18 @@ void menuMessagesBaseRTCM() settings.useMSM7 ^= 1; restartBase = true; } + else if ((incoming == 5) && (namedSettingAvailableOnPlatform("rtcmMinElev"))) + { + systemPrintf("Enter minimum elevation for RTCM: "); + + int elevation = getUserInputNumber(); // Returns EXIT, TIMEOUT, or long + + if (elevation >= -90 && elevation <= 90) + { + settings.rtcmMinElev = elevation; + restartBase = true; + } + } else if (incoming == INPUT_RESPONSE_GETNUMBER_EXIT) break; @@ -872,7 +886,7 @@ void checkGNSSArrayDefaults() } else if (present.gnss_lg290p) { - // settings.minCNO = 10; // Not yet supported + settings.minCNO = 10; // Default 10 dBHz settings.surveyInStartingAccuracy = 2.0; // Default 2m settings.measurementRateMs = 500; // Default 2Hz. } diff --git a/Firmware/RTK_Everywhere/menuPP.ino b/Firmware/RTK_Everywhere/menuPP.ino index f491ab1c3..76028074c 100644 --- a/Firmware/RTK_Everywhere/menuPP.ino +++ b/Firmware/RTK_Everywhere/menuPP.ino @@ -1626,7 +1626,7 @@ void provisioningUpdate() } // Periodically display the provisioning state - if (PERIODIC_DISPLAY(PD_PROVISIONING_STATE)) + if (PERIODIC_DISPLAY(PD_PROVISIONING_STATE) && !inMainMenu) { systemPrintf("Provisioning state: %s%s\r\n", provisioningStateName[provisioningState], line); PERIODIC_CLEAR(PD_PROVISIONING_STATE); diff --git a/Firmware/RTK_Everywhere/menuSystem.ino b/Firmware/RTK_Everywhere/menuSystem.ino index f51a3daf2..4729e01f3 100644 --- a/Firmware/RTK_Everywhere/menuSystem.ino +++ b/Firmware/RTK_Everywhere/menuSystem.ino @@ -1224,6 +1224,9 @@ void menuPeriodicPrint() systemPrint("27) RTK correction source: "); systemPrintf("%s\r\n", PERIODIC_SETTING(PD_CORRECTION_SOURCE) ? "Enabled" : "Disabled"); + systemPrint("28) Firmware mode: "); + systemPrintf("%s\r\n", PERIODIC_SETTING(PD_FIRMWARE_MODE) ? "Enabled" : "Disabled"); + systemPrintln("------ Clients -----"); systemPrint("40) NTP server data: "); systemPrintf("%s\r\n", PERIODIC_SETTING(PD_NTP_SERVER_DATA) ? "Enabled" : "Disabled"); @@ -1356,6 +1359,8 @@ void menuPeriodicPrint() settings.enablePrintStates ^= 1; else if (incoming == 27) PERIODIC_TOGGLE(PD_CORRECTION_SOURCE); + else if (incoming == 28) + PERIODIC_TOGGLE(PD_FIRMWARE_MODE); else if (incoming == 40) PERIODIC_TOGGLE(PD_NTP_SERVER_DATA); diff --git a/Firmware/RTK_Everywhere/settings.h b/Firmware/RTK_Everywhere/settings.h index 33efb9b1a..687efc033 100644 --- a/Firmware/RTK_Everywhere/settings.h +++ b/Firmware/RTK_Everywhere/settings.h @@ -372,6 +372,8 @@ enum PeriodDisplayValues PD_WEB_SERVER_STATE, // 39 PD_OTA_STATE, // 40 + + PD_FIRMWARE_MODE, // 41 // Add new values before this line }; @@ -695,6 +697,7 @@ struct Settings // ZED (it has separate messages for MSM4 vs. MSM7) // UM980 (it has separate messages for MSM4 vs. MSM7) bool useMSM7 = false; + int rtcmMinElev = -90; // LG290P - minimum elevation for RTCM (PQTMCFGRTCM) // Battery bool enablePrintBatteryMessages = true; @@ -1021,7 +1024,7 @@ struct Settings bool enableImuCompensationDebug = false; bool enableImuDebug = false; // Turn on to display IMU library debug messages bool enableTiltCompensation = true; // Allow user to disable tilt compensation on the models that have an IMU - bool enableGalileoHas = true; // Allow E6 corrections if possible + bool enableGalileoHas = true; // Allow E6 corrections if possible. Also needed on LG290P #ifdef COMPILE_UM980 uint8_t um980Constellations[MAX_UM980_CONSTELLATIONS] = {254}; // Mark first record with key so defaults will be applied. float um980MessageRatesNMEA[MAX_UM980_NMEA_MSG] = {254}; // Mark first record with key so defaults will be applied. @@ -1201,6 +1204,7 @@ typedef enum ALL = (1 << 5) - 1, // ALL - must be the highest single variant ZED = ZF9 | ZX2, // Hybrids are possible (enums don't have to be consecutive) MSM = L29, // Platforms which require parameter selection of MSM7 over MSM4 + HAS = L29, // Platforms which support Galileo HAS } Facet_Flex_Variant; typedef bool (* AFTER_CMD)(int cmdIndex); @@ -1321,7 +1325,7 @@ const RTK_Settings_Entry rtkSettingsEntries[] = // n a f t s o B c F h // f n f E a r a a l // i d i v V i c n r e X -// g s x k 2 c h d d x 2 Type Qual Variable Name +// g s x k 2 c h d d x 2 Type Qual Variable Name afterSetCmd // Antenna { 1, 1, 0, 1, 1, 1, 1, 1, 1, ALL, 1, _int16_t, 0, & settings.antennaHeight_mm, "antennaHeight_mm", nullptr, }, @@ -1343,6 +1347,7 @@ const RTK_Settings_Entry rtkSettingsEntries[] = { 1, 1, 0, 1, 1, 1, 1, 1, 1, ALL, 1, _float, 2, & settings.observationPositionAccuracy, "observationPositionAccuracy", nullptr, }, { 0, 1, 0, 1, 1, 0, 1, 1, 1, ALL, 1, _float, 1, & settings.surveyInStartingAccuracy, "surveyInStartingAccuracy", nullptr, }, { 0, 1, 0, 0, 0, 0, 0, 0, 1, MSM, 1, _bool, 0, & settings.useMSM7, "useMSM7", nullptr, }, + { 0, 1, 0, 0, 0, 0, 0, 0, 1, MSM, 1, _int, 0, & settings.rtcmMinElev, "rtcmMinElev", nullptr, }, // Battery { 0, 0, 0, 0, 1, 1, 1, 1, 1, ALL, 1, _bool, 0, & settings.enablePrintBatteryMessages, "enablePrintBatteryMessages", nullptr, }, @@ -1780,7 +1785,7 @@ const RTK_Settings_Entry rtkSettingsEntries[] = // g s x k 2 c h d d x 2 Type Qual Variable Name afterSetCmd // UM980 GNSS Receiver - TODO these apply to more than UM980 - { 1, 1, 0, 0, 0, 0, 1, 0, 1, NON, 1, _bool, 0, & settings.enableGalileoHas, "enableGalileoHas", nullptr, }, + { 1, 1, 0, 0, 0, 0, 1, 0, 1, HAS, 1, _bool, 0, & settings.enableGalileoHas, "enableGalileoHas", nullptr, }, { 1, 1, 0, 0, 0, 0, 1, 0, 0, ALL, 0, _bool, 3, & settings.enableMultipathMitigation, "enableMultipathMitigation", nullptr, }, { 0, 0, 0, 0, 0, 0, 1, 0, 0, ALL, 0, _bool, 0, & settings.enableImuCompensationDebug, "enableImuCompensationDebug", nullptr, }, { 0, 0, 0, 0, 0, 0, 1, 0, 0, ALL, 0, _bool, 0, & settings.enableImuDebug, "enableImuDebug", nullptr, },