Ejemplo n.º 1
0
        private void Run()
        {
            try
            {
                string workingBuffer = string.Empty;

                while (true)
                {
                    int bytesToRead = _port.BytesToRead;
                    if (bytesToRead > 0)
                    {
                        byte[] buffer = new byte[bytesToRead];
                        _port.Read(buffer, 0, buffer.Length);

                        string text = new string(Encoding.UTF8.GetChars(buffer));
                        workingBuffer += text.ToString();

                        int sentenceEndIndex;
                        while ((sentenceEndIndex = workingBuffer.IndexOf(CrLf)) != -1)
                        {
                            string sentence = workingBuffer.Substring(0, sentenceEndIndex);
                            if (sentence.IndexOf('$') != -1)
                            {
                                IGPSMessage message = GPSMessageParser.Parse(sentence);
                                if (message != null)
                                {
                                    if (message is FixedDataMessage)
                                    {
                                        GPSPosition position = ParsePosition(message as FixedDataMessage);
                                        if (PositionReceived != null)
                                        {
                                            PositionReceived(this, position);
                                        }
                                    }
                                }
                            }

                            if (sentenceEndIndex + CrLf.Length == workingBuffer.Length)
                            {
                                workingBuffer = string.Empty;
                            }
                            else
                            {
                                workingBuffer = workingBuffer.Substring(sentenceEndIndex + CrLf.Length, workingBuffer.Length - sentenceEndIndex - CrLf.Length);
                            }

                            sentenceEndIndex = workingBuffer.IndexOf(CrLf);
                        }

                        Thread.Sleep(100);
                    }
                }
            }
            catch (ThreadAbortException)
            {
            }
        }
Ejemplo n.º 2
0
        private GPSPosition ParsePosition(FixedDataMessage message)
        {
            GPSPosition position = new GPSPosition();

            position.HasFix = (message.PositionFix != PositionFixIndicator.Invalid);
            position.IsEstimate = (message.PositionFix == PositionFixIndicator.Estimated);

            if (position.HasFix)
            {
                position.Latitude = Convert.ToDouble(message.Latitude.Substring(0, 2)) + (Convert.ToDouble(message.Latitude.Substring(2, 7)) / 60);
                if (message.NSIndicator == 'S')
                    position.Latitude = -position.Latitude;

                position.Longitude = Convert.ToDouble(message.Longitude.Substring(0, 3)) + (Convert.ToDouble(message.Longitude.Substring(3, 7)) / 60);
                if (message.EWIndicator == 'W')
                    position.Longitude = -position.Longitude;
            }

            return position;
        }
Ejemplo n.º 3
0
        private GPSPosition ParsePosition(FixedDataMessage message)
        {
            GPSPosition position = new GPSPosition();

            position.HasFix     = (message.PositionFix != PositionFixIndicator.Invalid);
            position.IsEstimate = (message.PositionFix == PositionFixIndicator.Estimated);

            if (position.HasFix)
            {
                position.Latitude = Convert.ToDouble(message.Latitude.Substring(0, 2)) + (Convert.ToDouble(message.Latitude.Substring(2, 7)) / 60);
                if (message.NSIndicator == 'S')
                {
                    position.Latitude = -position.Latitude;
                }

                position.Longitude = Convert.ToDouble(message.Longitude.Substring(0, 3)) + (Convert.ToDouble(message.Longitude.Substring(3, 7)) / 60);
                if (message.EWIndicator == 'W')
                {
                    position.Longitude = -position.Longitude;
                }
            }

            return(position);
        }