private void ParseCoordinates(StringBuilder completeMessage, GpggaMessage parsedMessage) { this.Invoke((MethodInvoker) delegate { richTextBox.AppendText(completeMessage.ToString() + Environment.NewLine); textBoxSzerokosc.Text = Convert(parsedMessage.Latitude); textBoxDlugosc.Text = Convert(parsedMessage.Longitude); textBoxSatelity.Text = parsedMessage?.NumberOfSatellites.ToString(); textBoxWysokosc.Text = parsedMessage?.Altitude.ToString(); }); }
private static string NmeaSenteceToJson(List <NmeaMessage> messages, int offsetInSeconds, int speedMultipler) { if (messages.Count != 2) { return(null); } GpggaMessage gpgga = messages[0] as GpggaMessage; GprmcMessage rmc = messages[1] as GprmcMessage; Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds + offsetInSeconds; // Longitude and Latitude needs to by formatted in the same way as for the project // Speed is in knots 1 knt = 1.852 km/h return(string.Format("{{\"quality\": 1, \"timestamp_us\": 0, \"timestamp\": {0}, \"altitude\": {1}, \"precision\": {2}, \"longitude\": {3}, \"latitude\": {4}, \"satellites\": {5}, \"speed\": {6}}}", unixTimestamp, gpgga.Altitude, gpgga.Hdop, gpgga.Longitude * 100, gpgga.Latitude * 100, gpgga.NumberOfSatellites, rmc.Speed * 1.852 * speedMultipler)); }
private void Connect(IAsyncResult result) { if (result.IsCompleted) { var data = bluetoothClient.GetStream(); while (true) { if (data.CanRead) { GpggaMessage parsedMessage = new GpggaMessage(); var message = new byte[256]; var completeMessage = new StringBuilder(); do { var numberOfBytesRead = data.Read(message, 0, message.Length); completeMessage.AppendFormat("{0}", Encoding.ASCII.GetString(message, 0, numberOfBytesRead)); }while (data.DataAvailable); try { var nmeaParser = new NmeaParser(); var messages = completeMessage.ToString(); parsedMessage = (GpggaMessage)nmeaParser.Parse(completeMessage.ToString()); if (parsedMessage != null) { ParseCoordinates(completeMessage, parsedMessage); } } catch { ; } } } } }