Skip to content

Commit 3d7485d

Browse files
committed
Merge branch 'release_candidate' into pcUpdates_RenameBluetoothBroadcast
2 parents 680f411 + c762be8 commit 3d7485d

19 files changed

+131
-45
lines changed

Firmware/RTK_Everywhere/AP-Config/index.html

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@
363363
</div>
364364
</div>
365365

366-
<div id="useMSM7Setting">
366+
<div id="lg290pGnssSettings">
367367
<div class="form-check mt-3">
368368
<label class="form-check-label" for="useMSM7">MSM7 RTCM Selection</label>
369369
<input class="form-check-input" type="checkbox" value="" id="useMSM7">
@@ -372,6 +372,21 @@
372372
<span class="icon-info-circle text-primary ms-2"></span>
373373
</span>
374374
</div>
375+
376+
<div class="form-group row" id="rtcmMinElevConfig">
377+
<div class="form-group row">
378+
<label for="rtcmMinElev" class="col-sm-4 col-6 col-form-label">Min SV Elevation for RTCM:
379+
<span class="tt" data-bs-placement="right"
380+
title="Minimum elevation in degrees for a GNSS satellite to be used for RTCM corrections.">
381+
<span class="icon-info-circle text-primary ms-2"></span>
382+
</span>
383+
</label>
384+
<div class="col-sm-4 col-6">
385+
<input type="number" class="form-control" id="rtcmMinElev">
386+
<p id="rtcmMinElevError" class="inlineError"></p>
387+
</div>
388+
</div>
389+
</div>
375390
</div>
376391

377392
<div class="form-check mt-3">

Firmware/RTK_Everywhere/AP-Config/src/main.js

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ function parseIncoming(msg) {
112112
hide("externalPortOptions");
113113
show("logToSDCard");
114114
hide("galileoHasSetting");
115-
hide("useMSM7Setting");
115+
hide("lg290pGnssSettings");
116116
hide("tiltConfig");
117117
hide("beeperControl");
118118
show("measurementRateInput");
@@ -146,7 +146,7 @@ function parseIncoming(msg) {
146146
show("externalPortOptions");
147147
show("logToSDCard");
148148
hide("galileoHasSetting");
149-
hide("useMSM7Setting");
149+
hide("lg290pGnssSettings");
150150
hide("tiltConfig");
151151
hide("beeperControl");
152152
show("measurementRateInput");
@@ -167,7 +167,7 @@ function parseIncoming(msg) {
167167
show("externalPortOptions");
168168
show("logToSDCard");
169169
hide("galileoHasSetting");
170-
hide("useMSM7Setting");
170+
hide("lg290pGnssSettings");
171171
hide("tiltConfig");
172172
hide("beeperControl");
173173
hide("measurementRateInput");
@@ -257,8 +257,8 @@ function parseIncoming(msg) {
257257
show("externalPortOptions");
258258
show("logToSDCard");
259259

260-
hide("galileoHasSetting");
261-
show("useMSM7Setting");
260+
show("galileoHasSetting");
261+
show("lg290pGnssSettings");
262262
hide("tiltConfig");
263263
hide("beeperControl");
264264

@@ -273,8 +273,8 @@ function parseIncoming(msg) {
273273
show("constellationNavic");
274274

275275
hide("dynamicModelDropdown"); //Not supported on LG290P
276-
hide("minElevConfig"); //Not supported on LG290P
277-
hide("minCNOConfig"); //Not supported on LG290P
276+
show("minElevConfig");
277+
show("minCNOConfig");
278278

279279
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.');
280280

@@ -327,8 +327,8 @@ function parseIncoming(msg) {
327327

328328
hide("constellationSbas"); //Not supported on LG290P
329329
show("constellationNavic");
330-
hide("galileoHasSetting"); //Not supported on LG290P
331-
show("useMSM7Setting");
330+
show("galileoHasSetting");
331+
show("lg290pGnssSettings");
332332
hide("tiltConfig"); //Not supported on Torch X2
333333

334334
show("measurementRateInput");
@@ -341,8 +341,8 @@ function parseIncoming(msg) {
341341
hide("enableNmeaOnRadio");
342342

343343
hide("dynamicModelDropdown"); //Not supported on LG290P
344-
hide("minElevConfig"); //Not supported on LG290P
345-
hide("minCNOConfig"); //Not supported on LG290P
344+
show("minElevConfig");
345+
show("minCNOConfig");
346346

347347
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.');
348348

@@ -714,6 +714,13 @@ function show(id) {
714714
ge(id).style.display = "block";
715715
}
716716

717+
function isElementShown(id) {
718+
if (ge(id).style.display == "block") {
719+
return (true);
720+
}
721+
return (false);
722+
}
723+
717724
//Create CSV of all setting data
718725
function sendData() {
719726
var settingCSV = "";
@@ -841,6 +848,9 @@ function validateFields() {
841848

842849
checkElementValue("minElev", 0, 90, "Must be between 0 and 90", "collapseGNSSConfig");
843850
checkElementValue("minCNO", 0, 90, "Must be between 0 and 90", "collapseGNSSConfig");
851+
if (isElementShown("lg290pGnssSettings") == true) {
852+
checkElementValue("rtcmMinElev", -90, 90, "Must be between -90 and 90", "collapseGNSSConfig");
853+
}
844854

845855
if (ge("enableNtripClient").checked == true) {
846856
checkElementString("ntripClientCasterHost", 1, 45, "Must be 1 to 45 characters", "collapseGNSSConfig");

Firmware/RTK_Everywhere/GNSS_LG290P.ino

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ void GNSS_LG290P::begin()
116116
lg290pFirmwareVersion, gnssFirmwareVersion);
117117

118118
// Determine if the "LG290P03AANR01A03S_PPP_TEMP0812 2025/08/12" firmware is present
119-
// This version has support for testing out E6/HAS PPP, but confusingly was released after v05.
119+
// Or "LG290P03AANR01A06S_PPP_TEMP0829 2025/08/29 17:08:39"
120+
// The 03S_PPP_TEMP version has support for testing out E6/HAS PPP, but confusingly was released after v05.
120121
if (strstr(gnssFirmwareVersion, "PPP_TEMP") != nullptr)
121122
{
122123
present.galileoHasCapable = true;
@@ -793,6 +794,8 @@ bool GNSS_LG290P::enableRTCMBase()
793794

794795
int portNumber = 1;
795796

797+
int minimumRtcmRate = 1000;
798+
796799
while (portNumber < 4)
797800
{
798801
for (int messageNumber = 0; messageNumber < MAX_LG290P_RTCM_MSG; messageNumber++)
@@ -843,7 +846,12 @@ bool GNSS_LG290P::enableRTCMBase()
843846

844847
// If any message is enabled, enable RTCM output
845848
if (settings.lg290pMessageRatesRTCMBase[messageNumber] > 0)
849+
{
846850
enableRTCM = true;
851+
// Capture the message with the lowest rate
852+
if (settings.lg290pMessageRatesRTCMBase[messageNumber] < minimumRtcmRate)
853+
minimumRtcmRate = settings.lg290pMessageRatesRTCMBase[messageNumber];
854+
}
847855
}
848856
}
849857

@@ -857,11 +865,14 @@ bool GNSS_LG290P::enableRTCMBase()
857865
if (enableRTCM == true)
858866
{
859867
if (settings.debugGnss)
860-
systemPrintln("Enabling Base RTCM output");
868+
systemPrintf("Enabling Base RTCM MSM%c output with rate of %d\r\n",
869+
settings.useMSM7 ? '7' : '4', minimumRtcmRate);
861870

862871
// PQTMCFGRTCM fails to respond with OK over UART2 of LG290P, so don't look for it
863872
char cfgRtcm[40];
864-
snprintf(cfgRtcm, sizeof(cfgRtcm), "PQTMCFGRTCM,W,%c,0,-90,07,06,2,1", settings.useMSM7 ? '7' : '4');
873+
snprintf(cfgRtcm, sizeof(cfgRtcm), "PQTMCFGRTCM,W,%c,0,%d,07,06,2,%d",
874+
settings.useMSM7 ? '7' : '4', settings.rtcmMinElev,
875+
minimumRtcmRate);
865876
_lg290p->sendOkCommand(
866877
cfgRtcm); // Enable MSM4/7, output regular intervals, interval (seconds)
867878
}
@@ -1016,15 +1027,16 @@ bool GNSS_LG290P::enableRTCMRover()
10161027
if (enableRTCM == true)
10171028
{
10181029
if (settings.debugCorrections)
1019-
systemPrintf("Enabling Rover RTCM MSM output with rate of %d\r\n", minimumRtcmRate);
1030+
systemPrintf("Enabling Rover RTCM MSM%c output with rate of %d\r\n",
1031+
settings.useMSM7 ? '7' : '4', minimumRtcmRate);
10201032

10211033
// Enable MSM4/7 (for faster PPP CSRS results), output at a rate equal to the minimum RTCM rate (EPH Mode = 2)
10221034
// PQTMCFGRTCM, W, <MSM_Type>, <MSM_Mode>, <MSM_ElevThd>, <Reserved>, <Reserved>, <EPH_Mode>, <EPH_Interval>
10231035
// Set MSM_ElevThd to 15 degrees from rftop suggestion
10241036

10251037
char msmCommand[40] = {0};
1026-
snprintf(msmCommand, sizeof(msmCommand), "PQTMCFGRTCM,W,%c,0,15,07,06,2,%d",
1027-
settings.useMSM7 ? '7' : '4', minimumRtcmRate);
1038+
snprintf(msmCommand, sizeof(msmCommand), "PQTMCFGRTCM,W,%c,0,%d,07,06,2,%d",
1039+
settings.useMSM7 ? '7' : '4', settings.rtcmMinElev, minimumRtcmRate);
10281040

10291041
// PQTMCFGRTCM fails to respond with OK over UART2 of LG290P, so don't look for it
10301042
_lg290p->sendOkCommand(msmCommand);
@@ -1921,6 +1933,8 @@ void GNSS_LG290P::menuMessages()
19211933

19221934
if (namedSettingAvailableOnPlatform("useMSM7")) // Redundant - but good practice for code reuse
19231935
systemPrintf("13) MSM Selection: MSM%c\r\n", settings.useMSM7 ? '7' : '4');
1936+
if (namedSettingAvailableOnPlatform("rtcmMinElev")) // Redundant - but good practice for code reuse
1937+
systemPrintf("14) Minimum Elevation for RTCM: %d\r\n", settings.rtcmMinElev);
19241938

19251939
systemPrintln("x) Exit");
19261940

@@ -1997,6 +2011,17 @@ void GNSS_LG290P::menuMessages()
19972011
}
19982012
else if ((incoming == 13) && (namedSettingAvailableOnPlatform("useMSM7"))) // Redundant - but good practice for code reuse)
19992013
settings.useMSM7 ^= 1;
2014+
else if ((incoming == 14) && (namedSettingAvailableOnPlatform("rtcmMinElev")))
2015+
{
2016+
systemPrintf("Enter minimum elevation for RTCM: ");
2017+
2018+
int elevation = getUserInputNumber(); // Returns EXIT, TIMEOUT, or long
2019+
2020+
if (elevation >= -90 && elevation <= 90)
2021+
{
2022+
settings.rtcmMinElev = elevation;
2023+
}
2024+
}
20002025

20012026
else if (incoming == INPUT_RESPONSE_GETNUMBER_EXIT)
20022027
break;
@@ -2353,7 +2378,7 @@ bool GNSS_LG290P::setHighAccuracyService(bool enableGalileoHas)
23532378
{
23542379
bool result = true;
23552380

2356-
// E6 reception requires version v03 with 'PPP_TEMP' in firmware title
2381+
// E6 reception requires version v03/v06 with 'PPP_TEMP' in firmware title
23572382
// Present is set during LG290P begin()
23582383
if (present.galileoHasCapable == false)
23592384
return (result); // We are unable to set this setting to report success

Firmware/RTK_Everywhere/HTTP_Client.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ void httpClientUpdate()
693693
}
694694

695695
// Periodically display the HTTP client state
696-
if (PERIODIC_DISPLAY(PD_HTTP_CLIENT_STATE))
696+
if (PERIODIC_DISPLAY(PD_HTTP_CLIENT_STATE) && !inMainMenu)
697697
{
698698
const char *line = "";
699699
httpClientEnabled(&line);

Firmware/RTK_Everywhere/MQTT_Client.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1169,7 +1169,7 @@ void mqttClientUpdate()
11691169
}
11701170

11711171
// Periodically display the MQTT client state
1172-
if (PERIODIC_DISPLAY(PD_MQTT_CLIENT_STATE))
1172+
if (PERIODIC_DISPLAY(PD_MQTT_CLIENT_STATE) && !inMainMenu)
11731173
{
11741174
const char *line = "";
11751175
mqttClientEnabled(&line);

Firmware/RTK_Everywhere/NTP.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -963,7 +963,7 @@ void ntpServerUpdate()
963963
}
964964

965965
// Periodically display the NTP server state
966-
if (PERIODIC_DISPLAY(PD_NTP_SERVER_STATE))
966+
if (PERIODIC_DISPLAY(PD_NTP_SERVER_STATE) && !inMainMenu)
967967
{
968968
const char * line = "";
969969
if (NEQ_RTK_MODE(ntpServerMode))

Firmware/RTK_Everywhere/NtripClient.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,7 @@ void ntripClientUpdate()
955955
}
956956

957957
// Periodically display the NTRIP client state
958-
if (PERIODIC_DISPLAY(PD_NTRIP_CLIENT_STATE))
958+
if (PERIODIC_DISPLAY(PD_NTRIP_CLIENT_STATE) && !inMainMenu)
959959
{
960960
systemPrintf("NTRIP Client state: %s%s\r\n", ntripClientStateName[ntripClientState], line);
961961
PERIODIC_CLEAR(PD_NTRIP_CLIENT_STATE);

Firmware/RTK_Everywhere/NtripServer.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -845,7 +845,7 @@ void ntripServerUpdate(int serverIndex)
845845
}
846846

847847
// Periodically display the state
848-
if (PERIODIC_DISPLAY(PD_NTRIP_SERVER_STATE))
848+
if (PERIODIC_DISPLAY(PD_NTRIP_SERVER_STATE) && !inMainMenu)
849849
{
850850
systemPrintf("NTRIP Server %d state: %s%s\r\n", serverIndex,
851851
ntripServerStateName[ntripServer->state], line);

Firmware/RTK_Everywhere/PointPerfectLibrary.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ void updatePplTask(void *e)
1313
while (task.updatePplTaskStopRequest == false)
1414
{
1515
// Display an alive message
16-
if (PERIODIC_DISPLAY(PD_TASK_UPDATE_PPL))
16+
if (PERIODIC_DISPLAY(PD_TASK_UPDATE_PPL) && !inMainMenu)
1717
{
1818
PERIODIC_CLEAR(PD_TASK_UPDATE_PPL);
1919
systemPrintln("UpdatePplTask running");

Firmware/RTK_Everywhere/States.ino

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -772,10 +772,11 @@ typedef struct _RTK_MODE_ENTRY
772772
} RTK_MODE_ENTRY;
773773

774774
const RTK_MODE_ENTRY stateModeTable[] = {{"Rover", STATE_ROVER_NOT_STARTED, STATE_ROVER_RTK_FIX},
775+
{"Base Caster", STATE_BASE_CASTER_NOT_STARTED, STATE_BASE_CASTER_NOT_STARTED},
775776
{"Base", STATE_BASE_NOT_STARTED, STATE_BASE_FIXED_TRANSMITTING},
776-
{"Setup", STATE_DISPLAY_SETUP, STATE_PROFILE},
777-
{"ESPNOW Pairing", STATE_ESPNOW_PAIRING_NOT_STARTED, STATE_ESPNOW_PAIRING},
777+
{"Setup", STATE_DISPLAY_SETUP, STATE_PROFILE}, // Covers SETUP, WEB_CONFIG, TEST
778778
{"Provisioning", STATE_KEYS_REQUESTED, STATE_KEYS_REQUESTED},
779+
{"ESPNOW Pairing", STATE_ESPNOW_PAIRING_NOT_STARTED, STATE_ESPNOW_PAIRING},
779780
{"NTP", STATE_NTPSERVER_NOT_STARTED, STATE_NTPSERVER_SYNC},
780781
{"Shutdown", STATE_SHUTDOWN, STATE_SHUTDOWN}};
781782
const int stateModeTableEntries = sizeof(stateModeTable) / sizeof(stateModeTable[0]);

0 commit comments

Comments
 (0)