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:
- 21:37551baf69c6
- Parent:
- 1:8e24e633f8d8
- Child:
- 28:fcea53fcc712
--- a/OEM615.h Tue May 14 00:59:34 2013 +0000 +++ b/OEM615.h Tue May 14 23:32:15 2013 +0000 @@ -1,4 +1,5 @@ - +#include "crc.h" + #pragma pack(1) //this forces the structure to be packed on byte boundaries (with no byte filler) //set up the GPS message header in a structure to enable easy reading -- see the OEM615 manual (Table 4, page 24) struct MESSAGEHEADER @@ -121,88 +122,6 @@ unsigned short endByteForCRCcomputation[maxGPSMessagesPerSec]; bool completeMessageAvailable = false; -//this code was taken from the Novatel Firmware document page 35 -//#define CRC32_POLYNOMIAL 0xEDB88320L -/* -------------------------------------------------------------------------- -Calculate a CRC value to be used by CRC calculation functions. --------------------------------------------------------------------------- */ -/* -//////////////////////////////////////////// -//original code from the OEM615 manual -//////////////////////////////////////////// -unsigned long CRC32Value(int i) -{ - int j; - unsigned long ulCRC; - ulCRC = i; - for ( j = 8 ; j > 0; j-- ) - { - if ( ulCRC & 1 ) - ulCRC = ( ulCRC >> 1 ) ^ CRC32_POLYNOMIAL; - else - ulCRC >>= 1; - } - return ulCRC; -} -*/ - -#define CRC32_POLYNOMIAL 0xEDB88320L -void CRC32Value(unsigned long &CRC, unsigned char c) -{ - ///////////////////////////////////////////////////////////////////////////////////// - //CRC must be initialized as zero - //c is a character from the sequence that is used to form the CRC - //this code is a modification of the code from the Novatel OEM615 specification - ///////////////////////////////////////////////////////////////////////////////////// - unsigned long ulTemp1 = ( CRC >> 8 ) & 0x00FFFFFFL; - unsigned long ulCRC = ((int) CRC ^ c ) & 0xff ; - for (int j = 8 ; j > 0; j-- ) - { - if ( ulCRC & 1 ) - ulCRC = ( ulCRC >> 1 ) ^ CRC32_POLYNOMIAL; - else - ulCRC >>= 1; - } - CRC = ulTemp1 ^ ulCRC; -} - -/* -------------------------------------------------------------------------- -Calculates the CRC-32 of a block of data all at once -//the CRC is from the complete message (header plus data) -//but excluding (of course) the CRC at the end --------------------------------------------------------------------------- */ -unsigned long CalculateBlockCRC32( - unsigned long ulCount, /* Number of bytes in the data block */ - unsigned char *ucBuffer ) /* Data block */ -{ - ////////////////////////////////////////////////////////////////////// - //the below code tests the CRC32Value procedure used in a markov form - ////////////////////////////////////////////////////////////////////// - unsigned long CRC = 0; - for (int i = 0; i<ulCount; i++) CRC32Value( CRC, *ucBuffer++ ); - return CRC; -} - -/* -unsigned long CalculateBlockCRC32( - unsigned long ulCount, - unsigned char *ucBuffer ) -{ -//////////////////////////////////////////// -//original code from the OEM615 manual -//////////////////////////////////////////// - unsigned long ulTemp1; - unsigned long ulTemp2; - unsigned long ulCRC = 0; - while ( ulCount-- != 0 ) - { - ulTemp1 = ( ulCRC >> 8 ) & 0x00FFFFFFL; - ulTemp2 = CRC32Value( ((int) ulCRC ^ *ucBuffer++ ) & 0xff ); - ulCRC = ulTemp1 ^ ulTemp2; - } - return( ulCRC ); -} -*/ void sendASCII(char* ASCI_message, int numChars) { /////////////////////////////////////////////////