this version has all of Jim's fixes for reading the GPS and IMU data synchronously

Dependencies:   MODSERIAL SDFileSystem mbed SDShell CRC CommHandler FP LinkedList LogUtil

Files at this revision

API Documentation at this revision

Comitter:
jekain314
Date:
Fri May 03 19:27:56 2013 +0000
Parent:
1:8e24e633f8d8
Child:
3:e1a884e5325a
Commit message:
Added an auto file-open when POSVEL message is received. Added auto-close when the elapsed time between POSVEL messages is > 60sec This reduces the necessary startup procedures on the PC side. Also prevents loss of data if the PC fails.

Changed in this revision

PCMessaging.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/PCMessaging.h	Tue Apr 30 19:59:43 2013 +0000
+++ b/PCMessaging.h	Fri May 03 19:27:56 2013 +0000
@@ -96,6 +96,7 @@
 
                 validMessage = true;
                 serBufChars = 0; //reset the character count to reset for next message
+                
     
                 //set programmatic action flags based on the message
                 switch(m)
@@ -105,6 +106,7 @@
                     break;
                     case POSVEL_MSG:
                         sendPosVel = true;  //send a posvel message back to PC
+                        timeFromPosVelMessageReceipt.reset();  //start time and close SD card file if too long
                     break;
                     case STARTDATA_MSG:  //start the data recording to the SD card
                         recordData = true;
@@ -228,6 +230,15 @@
         //perform the activities as a response to the commands
         if (sendPosVel)  //true if we want to return a position solution
         {
+            //if we are receiving POSVEL requests -- always open the file for storage and store the data
+            //th file is closed(in main) if we dont receive POSVAL messages for 60 secs
+            if (fpNav == NULL)
+            { 
+                toPC.printf(" opening the SD card file \n");
+                fpNav = fopen("/sd/Data/NAV.bin", "wb");
+                wait_ms(10);
+                recordData = true;
+            }
             sendPosVel=false; //set to true if a POSVEL is requested from the PC
             sendPosVelMessageToPC(posMsg, velMsg);
         }
@@ -261,7 +272,7 @@
                 {
                     toPC.printf(" opening the SD card file \n");
                     fpNav = fopen("/sd/Data/NAV.bin", "wb");
-                    wait_ms(1000);
+                    wait_ms(10);
                 }
                 if (fpNav != NULL)  //if the fie was already opened we will respond to the PC with a Y 
                 {
--- a/main.cpp	Tue Apr 30 19:59:43 2013 +0000
+++ b/main.cpp	Fri May 03 19:27:56 2013 +0000
@@ -26,6 +26,7 @@
 Serial toPC(USBTX, USBRX);      //connect the GPS TX, RX to p9 and p10
 
 Timer timeFromStart;
+Timer timeFromPosVelMessageReceipt;
 
 bool detectedGPS1PPS = false;       //flag set in the ISR and reset after processing the 1PPS event
 int PPSCounter = 0;                 //counts the 1PPS occurrences
@@ -232,6 +233,15 @@
         //read the USB serial data from the PC to check for commands
         //in the primary real-time portion, there are no bytes from the PC so this has no impact
         readFromPC();
+        
+        //this will close the fpNav file on the SD card if the file is open 
+        //and the elapsed time from PosVel messages is > 60 secs
+        //this prevents loosing the fpNav file if the PC goes down
+        if (fpNav && (timeFromPosVelMessageReceipt.read() < 60) )
+        {
+            sendRecData = true;
+            recordData  = false;
+        }
                 
         processPCmessages(fpNav, posMsg, velMsg);
         
@@ -241,7 +251,7 @@
             pre_fire = 0;  //pin30 (midbody of connector) set to zero
             wait(.01f);  //wait for 0.25 secs
             fire = 0; //fire the trigger using the tip connection
-            wait(1.0);
+            wait(0.10);
             fire = 1;
             pre_fire = 1;
             unsigned long triggerTime = GPSTimemsecs + PPSTimeOffset*1000 + timeFromPPS.read_us()/1000.0;