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
Diff: OEM615.h
- Revision:
- 30:96d133f3008e
- Parent:
- 29:dead10cce6e9
--- a/OEM615.h Thu Jan 09 14:09:05 2014 +0000
+++ b/OEM615.h Mon Mar 03 13:19:31 2014 +0000
@@ -13,12 +13,12 @@
bool loadingMessageBuffer = false;
-const unsigned short maxGPSbytesPerSec = 512;
+const unsigned short maxGPSbytesPerSec = 2048;
int messagePerSecCounter = 0;
-unsigned char msgBuffer0[maxGPSbytesPerSec]; //array to contain one full second of GPS bytes
-unsigned char msgBuffer1[maxGPSbytesPerSec]; //array to contain one full second of GPS bytes
-unsigned char msgBuffer2[maxGPSbytesPerSec]; //array to contain one full second of GPS bytes
+char msgBuffer0[2048]; //array to contain one full second of GPS bytes
+char msgBuffer1[512]; //array to contain one full second of GPS bytes
+char msgBuffer2[512]; //array to contain one full second of GPS bytes
int GPSbyteCounter0 = 0;
int GPSbyteCounter1 = 0;
int GPSbyteCounter2 = 0;
@@ -26,6 +26,27 @@
bool message1Complete = false;
bool message2Complete = false;
+////////////////////////////////////////////////////////////
+//hotstart procedure
+////////////////////////////////////////////////////////////
+// Novatel OEM615 startup messages:
+// setapproxtime 1605 425384 // GPSWeek & GPSSeconds
+// setapproxpos 51.116 -114.038 0 //lat, lon, alt
+////////////////////////////////////////////////////////////
+// how to use?
+// Assumes a certain power-up sequence: WALDO_FCS must be running on the PC??
+// unlikely this start-up sequence will work!!
+// PC MAY generates a startUp message that is checked for before the GPS RX starts
+// mbed looks for the startup message for 1 sec.
+// startUp message contains: Last PCTime, lastLat, lastLon, LastAlt, LastGPSWeek, LastGPSSeconds
+// If it is found, send the startup messages to the receiver
+// if it is not found, then just start without the messages (cold start)
+// On the PC side, check for a startUp file stored within the .exe folder.
+// However, if the PC clock time between now and the lastStart is > 24 hours, ignore startup file
+// if the startUp file IS PRESENT, use it to send the startUp message
+// After reading the startUp file on the PC, always delete it.
+// Every time the system enters "FINESTEERING", save the StartUp file
+
void sendASCII(char* ASCI_message, int numChars)
{
/////////////////////////////////////////////////
@@ -62,19 +83,33 @@
if (messagePerSecCounter == 0) GPSbyteCounter0 = 0;
else if(messagePerSecCounter == 1) GPSbyteCounter1 = 0;
else if(messagePerSecCounter == 2) GPSbyteCounter2 = 0;
- loadingMessageBuffer = true;
+ //loadingMessageBuffer = true;
}
- if (messagePerSecCounter == 0) { msgBuffer0[GPSbyteCounter0 % maxGPSbytesPerSec] = synch0; GPSbyteCounter0++; }
- else if(messagePerSecCounter == 1) { msgBuffer1[GPSbyteCounter1 % maxGPSbytesPerSec] = synch0; GPSbyteCounter1++; }
- else if(messagePerSecCounter == 2) { msgBuffer2[GPSbyteCounter2 % maxGPSbytesPerSec] = synch0; GPSbyteCounter2++; }
+ if (messagePerSecCounter == 0) { msgBuffer0[GPSbyteCounter0 % 1024] = synch0; GPSbyteCounter0++; }
+ else if(messagePerSecCounter == 1) { msgBuffer1[GPSbyteCounter1 % 512] = synch0; GPSbyteCounter1++; }
+ else if(messagePerSecCounter == 2) { msgBuffer2[GPSbyteCounter2 % 512] = synch0; GPSbyteCounter2++; }
//stop storing the message when we get a LF
if (synch0 == 0x0a /* LF*/) //test for line feed
{
- if (messagePerSecCounter == 0) message0Complete = true;
- else if(messagePerSecCounter == 1) message1Complete = true;
- else if(messagePerSecCounter == 2) message2Complete = true;
+ //as further confirmation, we could test the prior byte for a CR = 0x0d;
+
+ if (messagePerSecCounter == 0)
+ {
+ if ( msgBuffer0[GPSbyteCounter0 - 2] == 0x0d) //ensure the two byte end of message
+ message0Complete = true;
+ }
+ else if(messagePerSecCounter == 1)
+ {
+ if ( msgBuffer0[GPSbyteCounter0 - 2] == 0x0d) //ensure the two byte end of message
+ message1Complete = true;
+ }
+ else if(messagePerSecCounter == 2)
+ {
+ if ( msgBuffer0[GPSbyteCounter0 - 2] == 0x0d) //ensure the two byte end of message
+ message2Complete = true;
+ }
messagePerSecCounter++; //count the messages per second
}
@@ -87,9 +122,3 @@
};
-
-
-
-
-
-