Skip to content

Commit ea9112e

Browse files
committed
Add test log generation
1 parent de89a18 commit ea9112e

File tree

4 files changed

+201
-17
lines changed

4 files changed

+201
-17
lines changed

Firmware/RTK_Surveyor/RTK_Surveyor.ino

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ int startCurrentLogTime_minutes = 0; //Mark when we start this specific log file
126126
//System crashes if two tasks access a file at the same time
127127
//So we use a semaphore to see if file system is available
128128
SemaphoreHandle_t sdCardSemaphore;
129-
const TickType_t fatSemaphore_shortWait_ms = 10 / portTICK_PERIOD_MS;
129+
TickType_t fatSemaphore_shortWait_ms = 50 / portTICK_PERIOD_MS;
130130
const TickType_t fatSemaphore_longWait_ms = 200 / portTICK_PERIOD_MS;
131131

132132
//Display used/free space in menu and config page
@@ -648,8 +648,10 @@ void updateLogs()
648648
}
649649
else if (online.logging == true && settings.enableLogging == true && (systemTime_minutes - startCurrentLogTime_minutes) >= settings.maxLogLength_minutes)
650650
{
651-
//Close down file. A new one will be created at the next calling of updateLogs().
652-
endSD(false, true);
651+
if (settings.runLogTest == false)
652+
endSD(false, true); //Close down file. A new one will be created at the next calling of updateLogs().
653+
else if (settings.runLogTest == true)
654+
updateLogTest();
653655
}
654656

655657
if (online.logging == true)
@@ -852,8 +854,8 @@ void updateRadio()
852854
rtcmPacketsSent++; //Assume this is the end of the RTCM frame
853855

854856
esp_now_send(0, (uint8_t *) &espnowOutgoing, espnowOutgoingSpot); //Send partial packet to all peers
855-
856-
if(!inMainMenu) log_d("ESPNOW transmitted %d RTCM bytes", espnowBytesSent + espnowOutgoingSpot);
857+
858+
if (!inMainMenu) log_d("ESPNOW transmitted %d RTCM bytes", espnowBytesSent + espnowOutgoingSpot);
857859
espnowBytesSent = 0;
858860
espnowOutgoingSpot = 0; //Reset
859861
}

Firmware/RTK_Surveyor/menuMessages.ino

Lines changed: 165 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -340,27 +340,43 @@ uint8_t getMessageRate(uint8_t msgClass, uint8_t msgID, uint8_t portID)
340340
//Based on GPS data/time, create a log file in the format SFE_Surveyor_YYMMDD_HHMMSS.ubx
341341
void beginLogging()
342342
{
343+
beginLogging("");
344+
}
345+
346+
void beginLogging(const char *customFileName)
347+
{
348+
if (online.microSD == false)
349+
beginSD();
350+
343351
if (online.logging == false)
344352
{
345353
if (online.microSD == true && settings.enableLogging == true && online.rtc == true) //We can't create a file until we have date/time
346354
{
347355
char fileName[66 + 6 + 40] = "";
348356

349-
if (reuseLastLog == true) //attempt to use previous log
357+
if (strlen(customFileName) == 0)
350358
{
351-
if (findLastLog(fileName) == false)
352-
log_d("Failed to find last log. Making new one.");
353-
else
354-
log_d("Using last log file.");
355-
}
359+
//Generate a standard log file name
360+
if (reuseLastLog == true) //attempt to use previous log
361+
{
362+
if (findLastLog(fileName) == false)
363+
log_d("Failed to find last log. Making new one.");
364+
else
365+
log_d("Using last log file.");
366+
}
356367

357-
if (strlen(fileName) == 0)
368+
if (strlen(fileName) == 0)
369+
{
370+
sprintf(fileName, "%s_%02d%02d%02d_%02d%02d%02d.ubx", //SdFat library
371+
platformFilePrefix,
372+
rtc.getYear() - 2000, rtc.getMonth() + 1, rtc.getDay(), //ESP32Time returns month:0-11
373+
rtc.getHour(true), rtc.getMinute(), rtc.getSecond() //ESP32Time getHour(true) returns hour:0-23
374+
);
375+
}
376+
}
377+
else
358378
{
359-
sprintf(fileName, "%s_%02d%02d%02d_%02d%02d%02d.ubx", //SdFat library
360-
platformFilePrefix,
361-
rtc.getYear() - 2000, rtc.getMonth() + 1, rtc.getDay(), //ESP32Time returns month:0-11
362-
rtc.getHour(true), rtc.getMinute(), rtc.getSecond() //ESP32Time getHour(true) returns hour:0-23
363-
);
379+
strcpy(fileName, customFileName);
364380
}
365381

366382
//Allocate the ubxFile
@@ -651,3 +667,140 @@ void setLoggingType()
651667
}
652668
}
653669
}
670+
671+
//During the logging test, we have to modify the messages and rate of the device
672+
void setLogTestFrequencyMessages(int rate, int messages)
673+
{
674+
//Set measurement frequency
675+
setMeasurementRates(1.0 / rate); //Convert Hz to seconds. This will set settings.measurementRate and settings.navigationRate
676+
677+
//Set messages
678+
setGNSSMessageRates(settings.ubxMessages, 0); //Turn off all messages
679+
if (messages == 5)
680+
{
681+
setMessageRateByName("UBX_NMEA_GGA", 1);
682+
setMessageRateByName("UBX_NMEA_GSA", 1);
683+
setMessageRateByName("UBX_NMEA_GST", 1);
684+
setMessageRateByName("UBX_NMEA_GSV", rate); //One report per second
685+
setMessageRateByName("UBX_NMEA_RMC", 1);
686+
687+
log_d("Messages: Surveying Defaults (NMEAx5)");
688+
}
689+
else if (messages == 7)
690+
{
691+
setMessageRateByName("UBX_NMEA_GGA", 1);
692+
setMessageRateByName("UBX_NMEA_GSA", 1);
693+
setMessageRateByName("UBX_NMEA_GST", 1);
694+
setMessageRateByName("UBX_NMEA_GSV", rate); //One report per second
695+
setMessageRateByName("UBX_NMEA_RMC", 1);
696+
setMessageRateByName("UBX_RXM_RAWX", 1);
697+
setMessageRateByName("UBX_RXM_SFRBX", 1);
698+
699+
log_d("Messages: PPP NMEAx5+RXMx2");
700+
}
701+
else
702+
log_d("Unknown message amount");
703+
704+
705+
//Apply these message rates to both UART1 and USB
706+
configureGNSSMessageRates(COM_PORT_UART1, settings.ubxMessages);
707+
configureGNSSMessageRates(COM_PORT_USB, settings.ubxMessages);
708+
}
709+
710+
//The log test allows us to record a series of different system configurations into
711+
//one file. At the same time, we log the output of the ZED via the USB connection.
712+
//Once complete, the SD log is compared against the USB log to verify both are identical.
713+
//Be sure to set maxLogLength_minutes before running test. maxLogLength_minutes will
714+
//set the length of each test.
715+
void updateLogTest()
716+
{
717+
//Log is complete, run next text
718+
int rate = 4;
719+
int messages = 5;
720+
int semaphoreWait = 10;
721+
722+
logTestState++; //Advance to next state
723+
724+
switch (logTestState)
725+
{
726+
case (LOGTEST_4HZ_5MSG_10MS):
727+
//During the first test, create the log file
728+
reuseLastLog = false;
729+
char fileName[100];
730+
sprintf(fileName, "%s_LogTest_%02d%02d%02d_%02d%02d%02d.ubx", //SdFat library
731+
platformFilePrefix,
732+
rtc.getYear() - 2000, rtc.getMonth() + 1, rtc.getDay(), //ESP32Time returns month:0-11
733+
rtc.getHour(true), rtc.getMinute(), rtc.getSecond() //ESP32Time getHour(true) returns hour:0-23
734+
);
735+
endSD(false, true); //End previous log
736+
737+
beginLogging(fileName);
738+
739+
i2cGNSS.setPortOutput(COM_PORT_USB, COM_TYPE_NMEA | COM_TYPE_UBX | COM_TYPE_RTCM3); //Duplicate UART1
740+
741+
rate = 4;
742+
messages = 5;
743+
semaphoreWait = 10;
744+
break;
745+
case (LOGTEST_4HZ_7MSG_10MS):
746+
rate = 4;
747+
messages = 7;
748+
semaphoreWait = 10;
749+
break;
750+
case (LOGTEST_10HZ_5MSG_10MS):
751+
rate = 10;
752+
messages = 5;
753+
semaphoreWait = 10;
754+
break;
755+
case (LOGTEST_10HZ_7MSG_10MS):
756+
rate = 10;
757+
messages = 7;
758+
semaphoreWait = 10;
759+
break;
760+
case (LOGTEST_4HZ_5MSG_50MS):
761+
rate = 4;
762+
messages = 5;
763+
semaphoreWait = 50;
764+
break;
765+
case (LOGTEST_4HZ_7MSG_50MS):
766+
rate = 4;
767+
messages = 7;
768+
semaphoreWait = 50;
769+
break;
770+
case (LOGTEST_10HZ_5MSG_50MS):
771+
rate = 10;
772+
messages = 5;
773+
semaphoreWait = 50;
774+
break;
775+
case (LOGTEST_10HZ_7MSG_50MS):
776+
rate = 10;
777+
messages = 7;
778+
semaphoreWait = 50;
779+
break;
780+
781+
case (LOGTEST_END):
782+
//Reduce rate
783+
rate = 4;
784+
messages = 5;
785+
semaphoreWait = 50;
786+
setLogTestFrequencyMessages(rate, messages); //Set messages and rate for both UART1 and USB ports
787+
log_d("Log Test Complete");
788+
break;
789+
790+
default:
791+
logTestState = LOGTEST_END;
792+
settings.runLogTest = false;
793+
break;
794+
}
795+
796+
if (settings.runLogTest == true)
797+
{
798+
setLogTestFrequencyMessages(rate, messages); //Set messages and rate for both UART1 and USB ports
799+
800+
fatSemaphore_shortWait_ms = semaphoreWait / portTICK_PERIOD_MS; //Update variable
801+
802+
startCurrentLogTime_minutes = millis() / 1000L / 60; //Mark now as start of logging
803+
804+
log_d("Running log test: %dHz, %dMsg, %dMS", rate, messages, semaphoreWait);
805+
}
806+
}

Firmware/RTK_Surveyor/menuSystem.ino

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,9 @@ void menuDebug()
388388
Serial.print("28) NTRIP server message parser: ");
389389
Serial.printf("%s\r\n", settings.enableNtripServerMessageParsing ? "Enabled" : "Disabled");
390390

391+
Serial.print("29) Run Logging Test: ");
392+
Serial.printf("%s\r\n", settings.runLogTest ? "Enabled" : "Disabled");
393+
391394
Serial.println("t) Enter Test Screen");
392395

393396
Serial.println("e) Erase LittleFS");
@@ -570,6 +573,15 @@ void menuDebug()
570573
{
571574
settings.enableNtripServerMessageParsing ^= 1;
572575
}
576+
else if (incoming == 29)
577+
{
578+
settings.runLogTest ^= 1;
579+
580+
logTestState = LOGTEST_START; //Start test
581+
582+
//Mark current log file as complete to force test start
583+
startCurrentLogTime_minutes = systemTime_minutes - settings.maxLogLength_minutes;
584+
}
573585
else
574586
printUnknown(incoming);
575587
}

Firmware/RTK_Surveyor/settings.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,22 @@ typedef enum BluetoothRadioType_e
177177
BLUETOOTH_RADIO_OFF,
178178
} BluetoothRadioType_e;
179179

180+
enum LogTestState
181+
{
182+
LOGTEST_START = 0,
183+
LOGTEST_4HZ_5MSG_10MS,
184+
LOGTEST_4HZ_7MSG_10MS,
185+
LOGTEST_10HZ_5MSG_10MS,
186+
LOGTEST_10HZ_7MSG_10MS,
187+
LOGTEST_4HZ_5MSG_50MS,
188+
LOGTEST_4HZ_7MSG_50MS,
189+
LOGTEST_10HZ_5MSG_50MS,
190+
LOGTEST_10HZ_7MSG_50MS,
191+
192+
LOGTEST_END,
193+
} ;
194+
uint8_t logTestState = LOGTEST_END;
195+
180196
//Radio status LED goes from off (LED off), no connection (blinking), to connected (solid)
181197
enum BTState
182198
{
@@ -474,6 +490,7 @@ typedef struct {
474490
uint8_t espnowPeerCount;
475491
bool enableNtripServerMessageParsing = false;
476492
BluetoothRadioType_e bluetoothRadioType = BLUETOOTH_RADIO_SPP;
493+
bool runLogTest = false; //When set to true, device will create a series of test logs
477494
} Settings;
478495
Settings settings;
479496

0 commit comments

Comments
 (0)