@@ -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
341341void 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+ }
0 commit comments