Skip to content

Commit b3f590d

Browse files
committed
Add new js show/hide functions.
1 parent 11ecb14 commit b3f590d

File tree

4 files changed

+8410
-2132
lines changed

4 files changed

+8410
-2132
lines changed

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

Lines changed: 104 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
//var ws = new WebSocket("ws://192.168.1.228/ws"); //WiFi mode
2-
var ws = new WebSocket("ws://192.168.1.1/ws"); //AP Mode
1+
var ws = new WebSocket("ws://192.168.1.105/ws"); //WiFi mode
2+
//var ws = new WebSocket("ws://192.168.4.1/ws"); //AP Mode
33

44
ws.onmessage = function (msg) {
55
parseIncoming(msg.data);
@@ -24,19 +24,38 @@ function parseIncoming(msg) {
2424
if (id.includes("sdMounted")) {
2525
//Turn on/off SD area
2626
if (val == "false") {
27-
ge("sdMounted").style.display = "none";
27+
hide("sdMounted");
2828
}
2929
else if (val == "true") {
30-
ge("sdMounted").style.display = "block";
30+
show("sdMounted");
3131
}
3232
}
3333
else if (id == "platformPrefix") {
3434
platformPrefix = val;
35-
ge(id).innerHTML = "RTK " + val + " Setup";
36-
document.title = "RTK " + val + " Setup";
35+
document.title = "RTK " + platformPrefix + " Setup";
3736

38-
if (platformPrefix == "Surveyor") ge("dataPortChannelDropdown").style.display = "none";
39-
if (platformPrefix == "Express Plus") ge("muxChannel2").innerHTML = "Wheel/Dir Encoder";
37+
if (platformPrefix == "Surveyor") hide("dataPortChannelDropdown");
38+
if (platformPrefix == "Express Plus") {
39+
ge("muxChannel2").innerHTML = "Wheel/Dir Encoder";
40+
41+
hide("baseConfig"); //Hide Base Config section
42+
43+
hide("msgUBX_NAV_SVIN"); //Hide unsupported messages
44+
hide("msgUBX_RTCM_1005");
45+
hide("msgUBX_RTCM_1074");
46+
hide("msgUBX_RTCM_1077");
47+
hide("msgUBX_RTCM_1084");
48+
hide("msgUBX_RTCM_1087");
49+
50+
hide("msgUBX_RTCM_1094");
51+
hide("msgUBX_RTCM_1097");
52+
hide("msgUBX_RTCM_1124");
53+
hide("msgUBX_RTCM_1127");
54+
hide("msgUBX_RTCM_1230");
55+
56+
hide("msgUBX_RTCM_4072_0");
57+
hide("msgUBX_RTCM_4072_1");
58+
}
4059
}
4160
else if (id.includes("sdFreeSpace")
4261
|| id.includes("sdUsedSpace")
@@ -46,15 +65,15 @@ function parseIncoming(msg) {
4665
ge(id).innerHTML = val;
4766
}
4867
else if (id.includes("firmwareFileName")) {
49-
ge("firmwareAvailable").style.display = "block"; //Turn on firmware area
68+
show("firmwareAvailable"); //Turn on firmware area
5069

5170
ge(id).innerHTML = val;
52-
if (id.includes("0")) ge("firmwareFile0").style.display = "block";
53-
if (id.includes("1")) ge("firmwareFile1").style.display = "block";
54-
if (id.includes("2")) ge("firmwareFile2").style.display = "block";
55-
if (id.includes("3")) ge("firmwareFile3").style.display = "block";
56-
if (id.includes("4")) ge("firmwareFile4").style.display = "block";
57-
if (id.includes("5")) ge("firmwareFile5").style.display = "block";
71+
if (id.includes("0")) show("firmwareFile0");
72+
if (id.includes("1")) show("firmwareFile1");
73+
if (id.includes("2")) show("firmwareFile2");
74+
if (id.includes("3")) show("firmwareFile3");
75+
if (id.includes("4")) show("firmwareFile4");
76+
if (id.includes("5")) show("firmwareFile5");
5877
}
5978

6079
//Check boxes / radio buttons
@@ -67,20 +86,32 @@ function parseIncoming(msg) {
6786

6887
//All regular input boxes and values
6988
else {
70-
ge(id).value = val;
89+
try {
90+
ge(id).value = val;
91+
} catch (error) {
92+
console.log("Issue with ID: " + id)
93+
}
7194
}
7295
}
7396
//console.log("Settings loaded");
7497

7598
//Force element updates
76-
ge("measurementRateHz").dispatchEvent(new Event('change'));
77-
ge("baseTypeSurveyIn").dispatchEvent(new Event('change'));
78-
ge("baseTypeFixed").dispatchEvent(new Event('change'));
79-
ge("fixedBaseCoordinateTypeECEF").dispatchEvent(new Event('change'));
80-
ge("fixedBaseCoordinateTypeGeo").dispatchEvent(new Event('change'));
81-
ge("enableLogging").dispatchEvent(new Event('change'));
82-
ge("enableNtripServer").dispatchEvent(new Event('change'));
83-
ge("dataPortChannel").dispatchEvent(new Event('change'));
99+
ge("measurementRateHz").dispatchEvent(new CustomEvent('change'));
100+
ge("baseTypeSurveyIn").dispatchEvent(new CustomEvent('change'));
101+
ge("baseTypeFixed").dispatchEvent(new CustomEvent('change'));
102+
ge("fixedBaseCoordinateTypeECEF").dispatchEvent(new CustomEvent('change'));
103+
ge("fixedBaseCoordinateTypeGeo").dispatchEvent(new CustomEvent('change'));
104+
ge("enableLogging").dispatchEvent(new CustomEvent('change'));
105+
ge("enableNtripServer").dispatchEvent(new CustomEvent('change'));
106+
ge("dataPortChannel").dispatchEvent(new CustomEvent('change'));
107+
}
108+
109+
function hide(id) {
110+
ge(id).style.display = "none";
111+
}
112+
113+
function show(id) {
114+
ge(id).style.display = "block";
84115
}
85116

86117
//Create CSV of all setting data
@@ -120,15 +151,19 @@ function sendFirmwareFile() {
120151
}
121152

122153
function showError(id, errorText) {
123-
ge(id + 'Error').innerHTML = 'Error: ' + errorText;
154+
ge(id + 'Error').innerHTML = '<br>Error: ' + errorText;
124155
}
125156

126157
function clearError(id) {
127158
ge(id + 'Error').innerHTML = '';
128159
}
129160

130-
function successMessage(id, msgText) {
131-
ge(id + 'Error').innerHTML = '<p style="color:green; display:inline;"><b>' + msgText + '</b></p>';
161+
function showSuccess(id, msg) {
162+
ge(id + 'Success').innerHTML = '<br>Success: ' + msg;
163+
}
164+
165+
function clearSuccess(id) {
166+
ge(id + 'Success').innerHTML = '';
132167
}
133168

134169
var errorCount = 0;
@@ -142,8 +177,10 @@ function validateFields() {
142177
ge("collapseSystemConfig").classList.remove('show');
143178

144179
errorCount = 0;
180+
145181
//GNSS Config
146-
checkElementValue("measurementRateHz", 0.000122, 10, "Must be between 0.000122 and 10Hz", "collapseGNSSConfig");
182+
checkElementValue("measurementRateHz", 0.1, 10, "Must be between 0 and 10Hz", "collapseGNSSConfig");
183+
checkConstellations();
147184

148185
checkElementValue("UBX_NMEA_DTM", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
149186
checkElementValue("UBX_NMEA_GBS", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
@@ -161,30 +198,31 @@ function validateFields() {
161198
checkElementValue("UBX_NMEA_VTG", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
162199
checkElementValue("UBX_NMEA_ZDA", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
163200

201+
checkElementValue("UBX_NAV_ATT", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
164202
checkElementValue("UBX_NAV_CLOCK", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
165203
checkElementValue("UBX_NAV_DOP", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
166204
checkElementValue("UBX_NAV_EOE", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
167205
checkElementValue("UBX_NAV_GEOFENCE", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
168-
checkElementValue("UBX_NAV_HPPOSECEF", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
169206

207+
checkElementValue("UBX_NAV_HPPOSECEF", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
170208
checkElementValue("UBX_NAV_HPPOSLLH", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
171209
checkElementValue("UBX_NAV_ODO", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
172210
checkElementValue("UBX_NAV_ORB", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
173211
checkElementValue("UBX_NAV_POSECEF", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
174-
checkElementValue("UBX_NAV_POSLLH", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
175212

213+
checkElementValue("UBX_NAV_POSLLH", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
176214
checkElementValue("UBX_NAV_PVT", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
177215
checkElementValue("UBX_NAV_RELPOSNED", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
178216
checkElementValue("UBX_NAV_SAT", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
179217
checkElementValue("UBX_NAV_SIG", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
180-
checkElementValue("UBX_NAV_STATUS", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
181218

219+
checkElementValue("UBX_NAV_STATUS", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
182220
checkElementValue("UBX_NAV_SVIN", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
183221
checkElementValue("UBX_NAV_TIMEBDS", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
184222
checkElementValue("UBX_NAV_TIMEGAL", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
185223
checkElementValue("UBX_NAV_TIMEGLO", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
186-
checkElementValue("UBX_NAV_TIMEGPS", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
187224

225+
checkElementValue("UBX_NAV_TIMEGPS", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
188226
checkElementValue("UBX_NAV_TIMELS", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
189227
checkElementValue("UBX_NAV_TIMEUTC", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
190228
checkElementValue("UBX_NAV_VELECEF", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
@@ -227,12 +265,19 @@ function validateFields() {
227265
checkElementValue("UBX_RTCM_4072_0", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
228266
checkElementValue("UBX_RTCM_4072_1", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
229267

268+
checkElementValue("UBX_ESF_MEAS", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
269+
checkElementValue("UBX_ESF_RAW", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
270+
checkElementValue("UBX_ESF_STATUS", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
271+
checkElementValue("UBX_ESF_ALG", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
272+
checkElementValue("UBX_ESF_INS", 0, 20, "Must be between 0 and 20", "collapseGNSSConfigMsg");
273+
230274
//Base Config
231275
checkElementValue("observationSeconds", 60, 600, "Must be between 60 to 600", "collapseBaseConfig");
232276
checkElementValue("observationPositionAccuracy", 1, 5.1, "Must be between 1.0 to 5.0", "collapseBaseConfig");
233-
checkElementValue("fixedEcefX", -6400000, 6400000, "Must be -6400000 to 6400000", "collapseBaseConfig");
234-
checkElementValue("fixedEcefY", -6400000, 6400000, "Must be -6400000 to 6400000", "collapseBaseConfig");
235-
checkElementValue("fixedEcefZ", -6400000, 6400000, "Must be 6400000 to 6400000", "collapseBaseConfig");
277+
checkElementValue("fixedEcefX", -5000000, 5000000, "Must be -5000000 to 5000000", "collapseBaseConfig");
278+
checkElementValue("fixedEcefY", -5000000, 5000000, "Must be -5000000 to 5000000", "collapseBaseConfig");
279+
if (ge("fixedEcefZ").value == 0.0) ge("fixedEcefZ").value = 4084500;
280+
checkElementValue("fixedEcefZ", 4084500, 5000000, "Must be 4084500 to 5000000", "collapseBaseConfig");
236281
checkElementValue("fixedLat", -180, 180, "Must be -180 to 180", "collapseBaseConfig");
237282
checkElementValue("fixedLong", -180, 180, "Must be -180 to 180", "collapseBaseConfig");
238283
checkElementValue("fixedAltitude", 0, 8849, "Must be 0 to 8849", "collapseBaseConfig");
@@ -251,15 +296,32 @@ function validateFields() {
251296

252297
if (errorCount == 1) {
253298
showError('saveBtn', "Please clear " + errorCount + " error");
299+
clearSuccess('saveBtn');
254300
}
255301
else if (errorCount > 1) {
256302
showError('saveBtn', "Please clear " + errorCount + " errors");
303+
clearSuccess('saveBtn');
257304
}
258305
else {
259306
//Tell Arduino we're ready to save
260307
sendData();
261-
successMessage('saveBtn', "All saved");
308+
clearError('saveBtn');
309+
showSuccess('saveBtn', "All saved!");
310+
}
311+
}
312+
313+
function checkConstellations() {
314+
if (ge("ubxConstellationsGPS").checked == false
315+
&& ge("ubxConstellationsGalileo").checked == false
316+
&& ge("ubxConstellationsBeiDou").checked == false
317+
&& ge("ubxConstellationsGLONASS").checked == false
318+
) {
319+
ge("collapseGNSSConfig").classList.add('show');
320+
showError('ubxConstellations', "Please choose one constellation");
321+
errorCount++;
262322
}
323+
else
324+
clearError("ubxConstellations");
263325
}
264326

265327
function checkElementValue(id, min, max, errorText, collapseID) {
@@ -271,7 +333,7 @@ function checkElementValue(id, min, max, errorText, collapseID) {
271333
errorCount++;
272334
}
273335
else
274-
ge(id + 'Error').innerHTML = '';
336+
clearError(id);
275337
}
276338
function checkElementString(id, min, max, errorText, collapseID) {
277339
value = ge(id).value;
@@ -281,7 +343,7 @@ function checkElementString(id, min, max, errorText, collapseID) {
281343
errorCount++;
282344
}
283345
else
284-
ge(id + 'Error').innerHTML = '';
346+
clearError(id);
285347
}
286348

287349
function resetToFactoryDefaults() {
@@ -290,8 +352,8 @@ function resetToFactoryDefaults() {
290352
}
291353

292354
function exitConfig() {
293-
ge("exitPage").style.display = "block"; //Show
294-
ge("mainPage").style.display = "none"; //Hide main page
355+
show("exitPage");
356+
hide("mainPage");
295357
ws.send("exitToRoverMode,1,");
296358
}
297359

@@ -471,12 +533,10 @@ document.addEventListener("DOMContentLoaded", (event) => {
471533

472534
ge("dataPortChannel").addEventListener("change", function () {
473535
if (ge("dataPortChannel").value == 0) {
474-
//Show baud drop down
475-
ge("dataPortBaudDropdown").style.display = "block";
536+
show("dataPortBaudDropdown");
476537
}
477538
else {
478-
//Hide baud drop down
479-
ge("dataPortBaudDropdown").style.display = "none";
539+
hide("dataPortBaudDropdown");
480540
}
481541
});
482542
})

Firmware/RTK_Surveyor/Display.ino

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1074,10 +1074,11 @@ void displayWiFiConfig()
10741074
printTextCenter("IP:", yPos, 0, 1, false);
10751075

10761076
yPos = yPos + fontHeight + 1;
1077+
10771078
//char temp[50];
10781079
//sprintf(temp, "%s", WiFi.softAPIP());
10791080
//printTextCenter((const*)temp, yPos, 0, 1, false);
1080-
printTextCenter("192.168.1.1", yPos, 0, 1, false);
1081+
printTextCenter("192.168.4.1", yPos, 0, 1, false);
10811082
}
10821083

10831084
//When user does a factory reset, let us know

Firmware/RTK_Surveyor/Form.ino

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void startConfigAP()
4242
//Start in AP mode
4343
WiFi.mode(WIFI_AP);
4444

45-
IPAddress local_IP(192, 168, 1, 1); //Set static IP to match OLED width
45+
IPAddress local_IP(192, 168, 4, 1);
4646
IPAddress gateway(192, 168, 1, 1);
4747
IPAddress subnet(255, 255, 0, 0);
4848
WiFi.softAPConfig(local_IP, gateway, subnet);
@@ -57,8 +57,8 @@ void startConfigAP()
5757

5858
#ifdef LOCAL_WIFI_TESTING
5959
//Connect to local router
60-
#define WIFI_SSID "ATT672"
61-
#define WIFI_PASSWORD "6814167060"
60+
#define WIFI_SSID "TRex"
61+
#define WIFI_PASSWORD "parachutes"
6262
WiFi.mode(WIFI_STA);
6363

6464
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
@@ -86,34 +86,44 @@ void startConfigAP()
8686
request->send_P(200, "text/javascript", main_js);
8787
});
8888

89+
server.on("/src/bootstrap-icons.min.css", HTTP_GET, [](AsyncWebServerRequest * request) {
90+
request->send_P(200, "text/css", bootstrap_icons_min_css);
91+
});
92+
8993
server.on("/src/bootstrap.min.css", HTTP_GET, [](AsyncWebServerRequest * request) {
9094
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/css", bootstrap_css, sizeof(bootstrap_css));
9195
response->addHeader("Content-Encoding", "gzip");
9296
request->send(response);
9397
});
9498

9599
server.on("/src/bootstrap.min.js", HTTP_GET, [](AsyncWebServerRequest * request) {
96-
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/css", bootstrap_min_js, sizeof(bootstrap_min_js));
100+
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/javascript", bootstrap_min_js, sizeof(bootstrap_min_js));
97101
response->addHeader("Content-Encoding", "gzip");
98102
request->send(response);
99103
});
100104

101105
server.on("/src/jquery-3.6.0.min.js", HTTP_GET, [](AsyncWebServerRequest * request) {
102-
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/css", jquery_js, sizeof(jquery_js));
106+
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/javascript", jquery_js, sizeof(jquery_js));
103107
response->addHeader("Content-Encoding", "gzip");
104108
request->send(response);
105109
});
106110

107111
server.on("/favicon.ico", HTTP_GET, [](AsyncWebServerRequest * request) {
108-
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/css", favicon_ico, sizeof(favicon_ico));
112+
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/plain", favicon_ico, sizeof(favicon_ico));
113+
response->addHeader("Content-Encoding", "gzip");
114+
request->send(response);
115+
});
116+
117+
server.on("/src/rtk-setup.png", HTTP_GET, [](AsyncWebServerRequest * request) {
118+
AsyncWebServerResponse *response = request->beginResponse_P(200, "image/png", rtkSetup_png, sizeof(rtkSetup_png));
109119
response->addHeader("Content-Encoding", "gzip");
110120
request->send(response);
111121
});
112122

113-
//Handler for the firmware file /upload form POST
114-
server.on("/upload", HTTP_POST, [](AsyncWebServerRequest * request) {
115-
request->send(200);
116-
}, handleFirmwareFileUpload);
123+
server.on("/src/fonts/bootstrap-icons.woff2", HTTP_GET, [](AsyncWebServerRequest * request) {
124+
AsyncWebServerResponse *response = request->beginResponse_P(200, "font/woff2", bootstrap_icons_woff2, sizeof(bootstrap_icons_woff2));
125+
request->send(response);
126+
});
117127

118128
server.begin();
119129
#endif
@@ -185,7 +195,7 @@ static void handleFirmwareFileUpload(AsyncWebServerRequest *request, String file
185195
void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len)
186196
{
187197
if (type == WS_EVT_CONNECT) {
188-
char settingsCSV[2500];
198+
char settingsCSV[3000];
189199
memset(settingsCSV, 0, sizeof(settingsCSV));
190200
createSettingsString(settingsCSV);
191201
//Serial.printf("Sending command: %s\n\r", settingsCSV);

0 commit comments

Comments
 (0)