예제 #1
0
파일: NmeaReader.cs 프로젝트: qingqibing/aa
        /// <summary>
        /// Reads a single NMEA sentence then attempts to convert it into an object-oriented form.
        /// </summary>
        /// <returns></returns>
        public NmeaSentence ReadTypedSentence()
        {
            // First, read a valid sentence
            NmeaSentence sentence = ReadValidSentence();

            /* 5/4/07: The original design of GPS.NET 2.0 checked the entire command word to determine
             *         the sentence. However, the NMEA specification states that the first two letters of
             *         a sentence may change.  For example, for "$GPGSV" there may be variations such as
             *         "$__GSV" where the first two letters change.  As a result, we need only test the last three
             *         characters.
             */

            // Is this a GPRMC sentence?
            if (sentence.CommandWord.EndsWith("RMC", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return(new GprmcSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum));
            }
            if (sentence.CommandWord.EndsWith("RMF", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return(new PgrmfSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum));
            }
            if (sentence.CommandWord.EndsWith("GGA", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return(new GpggaSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum));
            }
            if (sentence.CommandWord.EndsWith("GLL", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return(new GpgllSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum));
            }
            if (sentence.CommandWord.EndsWith("GSV", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return(new GpgsvSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum));
            }
            if (sentence.CommandWord.EndsWith("GSA", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return(new GpgsaSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum));
            }
            if (sentence.CommandWord.EndsWith("VTG", StringComparison.Ordinal))
            {
                // Yes. Convert it using the fast pre-parseed constructor
                return(new GpvtgSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum));
            }
            if (sentence.CommandWord.EndsWith("HDT", StringComparison.Ordinal))
            {
                // Yes. Convert it using the fast pre-parseed constructor

                return(new GphdtSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum));
            }

            // Raise an event to try and parse this
            if (ResolveSentence != null)
            {
                NmeaSentenceResolverEventArgs e = new NmeaSentenceResolverEventArgs(sentence);
                ResolveSentence(this, e);

                // Was anything returned?
                if (e.Result != null)
                {
                    return(e.Result);
                }
            }

            // It's completely unrecognized, so return it as is
            return(sentence);
        }
예제 #2
0
        /// <summary>
        /// Reads a single NMEA sentence then attempts to convert it into an object-oriented form.
        /// </summary>
        /// <returns></returns>
        public NmeaSentence ReadTypedSentence()
        {
            // First, read a valid sentence
            NmeaSentence sentence = ReadValidSentence();

            /* 5/4/07: The original design of GPS.NET 2.0 checked the entire command word to determine
             *         the sentence. However, the NMEA specification states that the first two letters of
             *         a sentence may change.  For example, for "$GPGSV" there may be variations such as
             *         "$__GSV" where the first two letters change.  As a result, we need only test the last three
             *         characters.
             */

            // Is this a GPRMC sentence?
            if (sentence.CommandWord.EndsWith("RMC", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return new GprmcSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum);
            }
            if (sentence.CommandWord.EndsWith("RMF", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return new PgrmfSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum);
            }
            if (sentence.CommandWord.EndsWith("GGA", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return new GpggaSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum);
            }
            if (sentence.CommandWord.EndsWith("GLL", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return new GpgllSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum);
            }
            if (sentence.CommandWord.EndsWith("GSV", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return new GpgsvSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum);
            }
            if (sentence.CommandWord.EndsWith("GSA", StringComparison.Ordinal))
            {
                // Yes.  Convert it using the fast pre-parseed constructor
                return new GpgsaSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum);
            }
            if (sentence.CommandWord.EndsWith("VTG", StringComparison.Ordinal))
            {
                // Yes. Convert it using the fast pre-parseed constructor
                return new GpvtgSentence(sentence.Sentence, sentence.CommandWord, sentence.Words, sentence.ExistingChecksum);
            }

            // Raise an event to try and parse this
            if (ResolveSentence != null)
            {
                NmeaSentenceResolverEventArgs e = new NmeaSentenceResolverEventArgs(sentence);
                ResolveSentence(this, e);

                // Was anything returned?
                if (e.Result != null)
                    return e.Result;
            }

            // It's completely unrecognized, so return it as is
            return sentence;
        }