datasourcemodules/bluetoothgpspositioningmodule/btgpspsy/inc/Nmea/BTGPSNmeaParser.h
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datasourcemodules/bluetoothgpspositioningmodule/btgpspsy/inc/Nmea/BTGPSNmeaParser.h	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,152 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+
+#ifndef BTGPSNMEAPARSER_H
+#define BTGPSNMEAPARSER_H
+
+//  INCLUDES
+
+#include <e32base.h>
+#include <delimitedparser8.h>
+
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+*  NMEA sentence parser. This class detects the validity of NMEA sentence. It provides
+*  functions to get different field value and field data.
+*  
+*/
+class TBTGPSNmeaParser: public TDelimitedParserBase8
+    {
+    public: 
+
+        /**
+        * Construction.
+        */
+        TBTGPSNmeaParser();
+
+        /**
+        * Set NMEA sentence to parser. This function will check sentence validity.
+		* @param aNmea Reference to nmea sentences.
+        */
+        void SetNmeaSentence(const TDesC8& aNmea);
+        
+        /**
+        * Get NMEA Sentence
+        */
+        const TDesC8& NmeaSentence() const;
+
+        /**
+        * Check if the NMEA sentece is valid
+		* @return ETrue if the sentence is a valid NMEA sentence.
+        */
+        TBool IsValid() const;
+
+        /**
+        * Get NMEA message Id
+		* @return The NMEA sentence message id.
+        */
+        TInt MessageId() const;
+
+        /**
+        * Get the field block
+		* @param aFieldId Field id
+		* @param aField On return contains the field string.
+        * @return KErrNone if the field if found. Otherwise system
+        *                  wide error code
+        */
+        TInt GetFieldBlock(TInt aFieldId, TPtrC8& aField) const;
+
+        /**
+        * Check if filed is null field
+		* @param aFieldId Field id.
+		* @return ETrue if the field is NULL field.
+        */
+        TBool IsNullField(TInt aFieldId) const;
+        
+        /**
+        * Get field data.
+		* @param aFieldId Field id
+		* @param aData On return contain the field value
+		* @return KErrNone if the field is found and contain valid information, 
+		*         otherwise system wide error code.
+        */
+        template <class T> 
+        TInt GetFieldData(TInt aFieldId, T& aData) const;
+
+        /**
+        * Get next field data. This is iteration function that will get all field
+		* data
+		* @param aData On return contains next valid field value.
+		* @return KErrNone if next field data is retrieved. KErrNotFound if end of 
+		*         NMEA sentence is reached.
+        */
+        template <class T>
+        TInt NextFieldData(T& aData) const;
+
+    private:
+        /**
+        * Getmessage id
+        */
+        void GetMessageId();
+        
+        /**
+        * Check validity of NMEA sentence
+        */
+        TBool CheckValidity() const;
+
+        /**
+        * Remove '$', Checksum delimiter and check sum field
+        */
+        const TPtrC8 TrimSentence() const;
+
+        /**
+        * Verify checksum
+        */
+        TBool VerifyChecksum(const TDesC8& aSentence) const;
+
+        /**
+        * Convert char to nibble
+        */
+        TUint8 CharToNibble(const TUint8 aChar) const;
+
+
+    private:
+        //NMEA sentence
+        TPtrC8 iNmea;
+
+        //Message id. //ENmeaNull means message not valid
+        TInt iId;
+
+    };
+#endif
+// End of File
+