Пример #1
0
 private void StartGPS()
 {
     try
     {
         Logging.LogMethodCall(MethodBase.GetCurrentMethod().DeclaringType.Name);
         _stop = false;
         if (_isUdp)
         {
             using (_udpPort = new UdpClient(int.Parse(_port)))
             {
                 var endPoint = new IPEndPoint(IPAddress.IPv6Any, 0);
                 while (!_stop)
                 {
                     try
                     {
                         byte[] bytes = _udpPort.Receive(ref endPoint);
                         HandleMessage(bytes, bytes.Length);
                     }
                     catch (Exception ex)
                     {
                         GPSMessageRecieved?.Invoke(this, new GPSMessageRecievedEventArgs(ex, false));
                     }
                 }
             }
         }
         else
         {
             using (_serialPort = new SerialPort(_port, _baudRate))//, Parity.None, 8, StopBits.One
             {
                 _serialPort.Open();
                 byte[] read      = new byte[_serialPort.ReadBufferSize];
                 int    bytesRead = 0;
                 while (!_stop && _serialPort.IsOpen)
                 {
                     try
                     {
                         if ((bytesRead = _serialPort.Read(read, 0, read.Length)) > 0)
                         {
                             HandleMessage(read, bytesRead);
                         }
                     }
                     catch (Exception ex)
                     {
                         GPSMessageRecieved?.Invoke(this, new GPSMessageRecievedEventArgs(ex, false));
                     }
                 }
             }
         }
     }
     catch (Exception ex)
     {
         GPSMessageRecieved?.Invoke(this, new GPSMessageRecievedEventArgs(ex, true));
     }
 }
Пример #2
0
        private void HandleMessage(byte[] read, int bytesRead)
        {
            Logging.LogMethodCall(MethodBase.GetCurrentMethod().DeclaringType.Name, () => new Dictionary <String, Object> {
                { nameof(read), read },
                { nameof(bytesRead), bytesRead }
            });
            string message = Encoding.ASCII.GetString(read, 0, bytesRead);

            Logging.LogMessage(Logging.LogType.Info, "GPS Message Recieved - " + message);
            if (_gpsMessageBuilder == null)
            {
                _gpsMessageBuilder = new StringBuilder();
            }
            _gpsMessageBuilder.Append(message);
            int remove = -1;

            for (int i = 0; i < _gpsMessageBuilder.Length; i++)
            {
                if (GPS_MESSAGE_SPLITTERS.Contains(_gpsMessageBuilder[i]))
                {
                    Point  ret = null;
                    String msg = null;
                    if (remove >= 0)
                    {
                        msg = _gpsMessageBuilder.ToString(remove, i - remove + 1);
                    }
                    else
                    {
                        msg = _gpsMessageBuilder.ToString(0, i + 1);
                    }
                    ret = DecodeMessage(msg);
                    if (ret != null)
                    {
                        GPSMessageRecieved?.Invoke(this, new GPSMessageRecievedEventArgs(ret.Latitude, ret.Longitude, msg));
                    }
                    remove = i;
                }
            }
            if (remove >= 0)
            {
                _gpsMessageBuilder.Remove(0, remove + 1);
            }
        }