public void ParseMessageWithAlternativeSymbols() { var data = @"KB9VBR-N>APDG03,TCPIP*,qAC,T2INDIANA:!4456.70ND08937.08W&/A=000000440 MMDVM Voice 431.50000MHz +0.0000MHz, KB9VBR_Pi-Star KD9GCX-S>APDG01,TCPIP*,qAC,KD9GCX-GS:;KD9GCX B 160126z4415.63ND08817.60Wa/A=000010RNG0001 440 Voice 433.00000MHz +0.0000MHz WE9C0M-8>APN391,qAR,K9FR:!4541.60NS09120.85W#PHG6560 W3, In honor to Bill W9NNS KD9GCX-B>APDG02,TCPIP,qAC,KD9GCX-BS:!4415.63ND08817.60W&/A=000010RNG0001 440 Voice 433.00000MHz +0.0000MHz"; var messages = data.Split(new[] { Environment.NewLine }, StringSplitOptions.None); var first = PacketInfo.Parse(messages[0]); Assert.AreEqual("KB9VBR-N", first.Callsign); Assert.AreEqual(Skyhop.Aprs.Client.Enums.DataType.PositionWithoutTimestampNoAprsMessaging, first.DataType); Assert.AreEqual(new Latitude(44, 56, 42, LatitudeHemisphere.North).ToString(), first.Latitude.ToString()); Assert.AreEqual(new Longitude(89, 37, 4.8, LongitudeHemisphere.West).ToString(), first.Longitude.ToString()); //Assert.AreEqual(Skyhop.Aprs.Client.Enums.Symbol.HfGateway, first.Symbol); var second = PacketInfo.Parse(messages[1]); Assert.IsNotNull(second); var third = PacketInfo.Parse(messages[2]); Assert.IsNotNull(third); var fourth = PacketInfo.Parse(messages[3]); Assert.IsNotNull(fourth); }
private void OnReceive(string data) { if (String.IsNullOrEmpty(data)) { return; } DataReceived?.Invoke(this, new AprsDataReceivedEventArgs(data)); if (PacketReceived == null) { return; } AprsMessage packetInfo; try { packetInfo = PacketInfo.Parse(data); } catch (Exception ex) { Trace.TraceInformation(ex.ToString()); return; } // Usually the case when the packet is corrupt or something like that. if (packetInfo == null) { return; } PacketReceived.Invoke(this, new PacketReceivedEventArgs(packetInfo)); }
public void TestSouthernHemisphereMessage() { var data = "FLRDDFAD6>APRS,qAS,PoloCL:/103453h3322.80S/07035.00W'000/000/A=002266 !W64! id06DDFAD6 +020fpm +0.0rot 22.2dB 0e -2.5kHz gps4x7"; var result = PacketInfo.Parse(data); Assert.IsNotNull(result); }
/// <summary> /// The entry point of the program, where the program control starts and ends. /// </summary> /// <param name="args">The command-line arguments.</param> static async Task Main(string[] args) { Console.Title = "APRS Client Example"; Listener listener = new Listener(new Config { Callsign = @"7CB0DBG", Password = "******", Uri = "aprs.glidernet.org", UseOgnAdditives = true, Port = 14580 }); //listener.Disconnected += (sender, e) => { // Console.WriteLine(" -- Disconnected"); //}; StreamWriter w = File.AppendText("positions.txt"); w.AutoFlush = true; listener.DataReceived += (sender, e) => { AprsMessage message = null; try { message = PacketInfo.Parse(e.Data); } catch { } if (message == null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(e.Data); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(e.Data); Console.ResetColor(); } }; //listener.PacketReceived += (sender, eventArgs) => //{ // // Please note it is faster to use the `listener.DataReceived` event if you only want the raw data. // Console.WriteLine(eventArgs.AprsMessage.RawData); // w.Write($"{DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture)} {eventArgs.AprsMessage.RawData}"); //}; await listener.Open(); Console.ReadKey(); listener.Stop(); }
public void TestFanetMessageParsing() { var message = "FNT110C70>OGNFNT,qAS,Letzi:/151029h4703.62N/00827.16Eg347/011/A=004364 !W13! id1E110C70 +354fpm FNT11 18.3dB -10.6kHz"; var result = PacketInfo.Parse(message); Assert.IsTrue(result != null); Assert.IsTrue(result.Altitude.FeetAboveSeaLevel == 4364); Assert.IsTrue(result.Callsign == "FNT110C70"); Assert.IsTrue(result.ClimbRate == 354); Assert.IsTrue(result.DataType == Skyhop.Aprs.Client.Enums.DataType.PositionWithTimestampNoAprsMessaging); Assert.IsTrue(result.Direction.Degrees == 347); Assert.IsTrue(result.Latitude.AbsoluteValue == 47.060333333333332); Assert.IsTrue(result.Longitude.AbsoluteValue == 8.4526666666666657); Assert.IsTrue(result.MicEMessageType == Skyhop.Aprs.Client.Enums.MicEMessageType.OffDuty); Assert.IsTrue(result.Speed.Knots == 11); Assert.IsTrue(result.StationRoute[0] == "OGNFNT"); Assert.IsTrue(result.StationRoute[1] == "qAS"); Assert.IsTrue(result.StationRoute[2] == "Letzi"); Assert.IsTrue(result.Symbol == Skyhop.Aprs.Client.Enums.Symbol.Glider); Assert.IsTrue(result.TurnRate == 0); }
private void ProcessString() { if (IsRunning) { return; } IsRunning = true; string content; string[] chunks; bool endsWithNewLine; while (!_queue.IsEmpty) { _queue.TryDequeue(out string dequeue); stringBuffer.Append(dequeue); } content = stringBuffer.ToString(); // ToDo: Test this thing with multiple cultures. Maybe just fix the /r/n split? endsWithNewLine = content.EndsWith(Environment.NewLine, StringComparison.Ordinal); stringBuffer.Clear(); chunks = content.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); // Add the last part of previous message to the buffer if (!endsWithNewLine) { stringBuffer.Append(chunks.Length - 1); } var parts = chunks.Length - (endsWithNewLine ? 0 : 1); for (int i = 0; i < parts; i++) { string message = chunks[i]; try { DataReceived?.Invoke(this, new AprsDataReceivedEventArgs(message)); } catch { } if (PacketReceived == null) { continue; } AprsMessage packetInfo; try { packetInfo = PacketInfo.Parse(message); } catch (Exception ex) { Trace.TraceInformation(ex.ToString()); return; } // Usually the case when the packet is corrupt or something like that. if (packetInfo == null) { continue; } try { PacketReceived.Invoke(this, new PacketReceivedEventArgs(packetInfo)); } catch { } } IsRunning = false; }
/// <summary> /// The entry point of the program, where the program control starts and ends. /// </summary> /// <param name="args">The command-line arguments.</param> static async Task Main(string[] args) { Settings settings = new Settings(true); settings.Save(); string Title = "AA5JC APRS Telemetry Monitor"; Console.Title = Title; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(Title + "\r\n"); if (string.IsNullOrEmpty(settings.Callsign)) { Console.BackgroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Settings file not found. Creating new settings.json. Please answer the following questions to set up:"); Console.ResetColor(); settings.Callsign = Settings.Ask("Callsign"); settings.Password = Settings.Ask("Password"); settings.ServerAddress = Settings.Ask("ServerAddress"); string strPort = Settings.Ask("ServerPort"); if (!int.TryParse(strPort, out settings.ServerPort)) { settings.ServerPort = 14580; } settings.Filter = Settings.Ask("Filter"); settings.RegExForParsingTelemetryData = "([a-zA-Z0-9]{1,3}[0123456789][a-zA-Z0-9]{0,3}[a-zA-Z].*)>APTT4,.*:T\\#(...),(...),(...),(...),(...),(...),(........)"; settings.OutputFile = "repeaterTelemetry.json"; settings.Save(); } ReadSettingsAndListen: Repeaters repeaters = new Repeaters(settings.OutputFile); Config config = new Config(); config.Callsign = settings.Callsign; config.Password = settings.Password; config.Uri = settings.ServerAddress; config.UseOgnAdditives = false; config.Port = settings.ServerPort; config.SoftwareName = Console.Title; config.SoftwareVersion = "1.1_05"; config.Filter = settings.Filter; Listener listener = new Listener(config); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write(String.Format(@" Server: {0}:{1} Filter: {2} Login callsign: {4} Login password: {5} Output file: {6} * Press ESC for settings, CTRL-C to quit * ", settings.ServerAddress, settings.ServerPort, settings.Filter, settings.RegExForParsingTelemetryData, settings.Callsign, settings.Password, settings.OutputFile)); Console.ResetColor(); listener.Connected += (sender, e) => { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(" -- Connected"); Console.ResetColor(); }; listener.Disconnected += (sender, e) => { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(" -- Disconnected"); Console.ResetColor(); }; listener.DataReceived += (sender, e) => { AprsMessage message = null; try { message = PacketInfo.Parse(e.Data); } catch { } if (message == null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(e.Data); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(e.Data); Regex regex = new Regex(settings.RegExForParsingTelemetryData); if (regex.IsMatch(e.Data)) { Match m = regex.Match(e.Data); Repeater repeater = new Repeater(m.Groups[1].Value, m.Groups[2].Value, m.Groups[3].Value, m.Groups[4].Value, m.Groups[5].Value, m.Groups[6].Value, m.Groups[7].Value, m.Groups[8].Value); repeaters.Add(repeater); repeaters.Save(); } Console.ResetColor(); } }; bool interruptReceived = false; Console.CancelKeyPress += delegate { Console.WriteLine("** Interrupt received **"); interruptReceived = true; System.Environment.Exit(0); }; await listener.Open(); while (Console.ReadKey().Key != ConsoleKey.Escape) { // Just keep swimming, just keep swimming.. } listener.Stop(); ShowMenu: Console.WriteLine("\r\n"); Console.WriteLine(@" /--------------------------------------------------------------------------\ "); Console.WriteLine(@" |" + Console.Title.PadBoth(75)); Console.WriteLine(@" |" + "MENU".PadBoth(75)); Console.WriteLine(@" | "); Console.WriteLine(" | 1. Change callsign"); Console.WriteLine(" | 2. Change password"); Console.WriteLine(" | 3. Change server address"); Console.WriteLine(" | 4. Change server port"); Console.WriteLine(" | 5. Change APRS filter"); Console.WriteLine(" | 6. Change regex for parsing telemetry"); Console.WriteLine(" | 7. Change output file"); Console.WriteLine(" | S. Save and restart program"); Console.WriteLine(" | Q. Quit program"); Console.WriteLine(@" | "); Console.WriteLine(@" \--------------------------------------------------------------------------/ "); Console.WriteLine(""); Console.Write("> "); switch (Console.ReadKey().Key) { case ConsoleKey.D1: settings.Callsign = Settings.Ask("Callsign"); break; case ConsoleKey.D2: settings.Password = Settings.Ask("Password"); break; case ConsoleKey.D3: settings.ServerAddress = Settings.Ask("ServerAddress"); break; case ConsoleKey.D4: string strPort = Settings.Ask("ServerPort"); if (!int.TryParse(strPort, out settings.ServerPort)) { settings.ServerPort = 14580; } break; case ConsoleKey.D5: settings.Filter = Settings.Ask("Filter"); break; case ConsoleKey.D6: settings.RegExForParsingTelemetryData = Settings.Ask("RegExForParsingTelemetryData"); break; case ConsoleKey.D7: settings.OutputFile = Settings.Ask("OutputFile"); break; case ConsoleKey.S: settings.Save(); goto ReadSettingsAndListen; //break; case ConsoleKey.Q: System.Environment.Exit(0); break; default: break; } goto ShowMenu; }
public void TestMultipleMessages() { string messages = @"# aprsc 2.1.2-gc90ee9c # No user-specified filters on this port # logresp SHCOGN unverified, server GLIDERN1 ICA400EBD>APRS,qAS,UKUPW:/103446h5237.32N\00026.43W^186/051/A=000630 !W23! id21400EBD -355fpm +1.0rot 3.5dB 5e -4.9kHz gps2x3 ICA400ED8>APRS,qAS,UKUPW:/103446h5241.52N\00025.75W^113/110/A=002352 !W57! id21400ED8 -1029fpm +0.3rot 11.0dB 0e -8.8kHz gps1x2 ICA400EAD>APRS,qAS,Stoke:/103453h5231.95N\00046.59W^155/098/A=000869 !W28! id21400EAD -157fpm -4.2rot 22.2dB 0e -9.5kHz gps2x3 ICA400ED8>APRS,qAS,Stoke:/103453h5241.42N\00025.45W^124/104/A=002214 !W57! id21400ED8 -1266fpm +0.1rot 5.0dB 0e -9.4kHz gps1x1 ICA405761>APRS,qAS,Burn:/103453h5345.04N/00104.93W'000/000/A=000020 !W77! id05405761 -019fpm +0.0rot 14.2dB 0e +16.3kHz gps1x1 +10.0dBm FLRDD91F2>APRS,qAS,LOLH:/103453h4743.22N/01404.11EX273/038/A=008233 !W06! id0EDD91F2 -098fpm +3.4rot 5.5dB 0e -0.7kHz gps3x5 ICA3D1062>APRS,qAS,EDLE:/103453h5051.87N/00617.97E'015/128/A=004582 !W66! id053D1062 -395fpm -0.4rot 4.2dB 1e +1.5kHz gps1x1 ICA4B2FCB>OGFLR,qAS,LSZF:/103453h4726.72N\00812.93E^006/070/A=001752 !W84! id214B2FCB +871fpm +1.2rot 41.2dB 0e -10.6kHz gps1x2 ICA4403CA>APRS,qAS,LOIJ:/103453h4731.20N/01226.98E'167/005/A=002348 !W34! id094403CA -019fpm +4.1rot 40.2dB 0e -5.9kHz gps1x2 FNT11006A>APRS,qAS,FNB11006A:/103459h4720.10N/00935.36Eg161/000/A=001199 !W24! id1E11006A -01fpm OGN395F39>OGNTRK,qAS,Barton:/103452h5145.94N/00111.50W'000/001/A=000315 !W88! id07395F39 -058fpm +0.0rot FL000.00 48.0dB 0e +3.7kHz gps3x5 FLRDDDBC3>APRS,qAS,UKTIB:/103452h5227.49N/00109.31E'000/000/A=000167 !W08! id06DDDBC3 +020fpm +0.0rot 26.5dB 0e +0.1kHz gps2x3 ICA400EB6>APRS,qAS,Topcliffe:/103453h5403.98N\00114.13W^208/052/A=000515 !W10! id21400EB6 -613fpm +0.3rot 2.0dB 6e -8.6kHz gps1x2 ICA400EDC>APRS,qAS,Topcliffe:/103453h5404.98N\00113.07W^219/096/A=000748 !W98! id21400EDC -197fpm -0.2rot 5.0dB 0e -7.1kHz gps1x2 ICA400EB6>APRS,qAS,UKRUF:/103453h5403.98N\00114.12W^208/052/A=000518 !W19! id21400EB6 -613fpm +0.3rot 4.5dB 2e -8.8kHz gps1x2 s6.40 h44 rDF0D8B ICA400EDC>APRS,qAS,UKRUF:/103453h5404.98N\00113.07W^219/096/A=000751 !W97! id21400EDC -197fpm -0.2rot 17.0dB 0e -7.2kHz gps1x2 FLRDF12CB>APRS,qAS,FATP:/103453h2902.35S/02610.18E'000/000/A=004536 !W57! id06DF12CB -019fpm +0.0rot 44.0dB 0e -14.1kHz gps3x6 +11.1dBm OGNCFEF59>APRS,qAS,LHTL:/103453h4719.10N/01901.86E'126/065/A=002831 !W51! id07CFEF59 -098fpm -0.3rot FL033.99 3.2dB 5e -7.4kHz gps4x6 ICA4B2FCB>OGFLR,qAS,Letzi:/103453h4726.72N\00812.93E^006/070/A=001752 !W84! id214B2FCB +871fpm +1.2rot 15.2dB 0e -11.4kHz gps1x2 ICA400EAA>APRS,qAS,Crowland:/103453h5246.35N\00017.18W^077/056/A=003772 !W47! id21400EAA -9285fpm -3.1rot 17.5dB 0e -7.5kHz gps4x5 ICA400ED8>APRS,qAS,Crowland:/103453h5241.42N\00025.45W^124/104/A=002207 !W47! id21400ED8 -1266fpm +0.1rot 4.5dB 1e -9.4kHz gps1x1 PAW406D47>APRS,qAS,PWOrwell:/103500h5208.11N/00000.64W'000/000/A=000137 !W48! id07406D47 +000fpm +0.0rot 20.0dB 0e -6.0kHz gps1x1 PAW406D47>APRS,qAS,PWOrwell2:/103512h5208.11N/00000.64W'000/000/A=000137 !W48! id07406D47 +000fpm +0.0rot 20.0dB 0e -6.0kHz gps1x1 EDCI>APRS,TCPIP*,qAC,GLIDERN2:/103500h5116.55NI01430.82E&/A=000485 EDCI>APRS,TCPIP*,qAC,GLIDERN2:>103500h v0.2.6.ARM CPU:0.4 RAM:691.0/972.2MB NTP:0.9ms/-1.2ppm +49.2C 0/0Acfts[1h] RF:+0+0.1ppm/-1.59dB/+1.7dB@10km[100221]/+3.5dB@10km[1/1] FLRDDFAD6>APRS,qAS,PoloCL:/103453h3322.80S/07035.00W'000/000/A=002266 !W64! id06DDFAD6 +020fpm +0.0rot 22.2dB 0e -2.5kHz gps4x7 FLRDDD5F3>APRS,qAS,LECI1:/103453h4239.03N/00041.29W'202/132/A=006517 !W80! id0ADDD5F3 -791fpm -0.2rot 4.2dB 2e -5.9kHz gps1x2 ICA4053C6>APRS,qAS,Bicester:/103454h5154.82N/00108.38W'000/000/A=000259 !W11! id054053C6 +000fpm +0.0rot 15.2dB 0e -4.4kHz gps2x3 FLRDD91F2>APRS,qAS,LOLH:/103454h4743.22N/01404.10EX281/039/A=008233 !W40! id0EDD91F2 +020fpm +2.6rot 6.5dB 0e -0.8kHz gps3x5 OGN295B24>APRS,qAS,Keszeg1:/103450h4750.27N/01914.99EO147/000/A=000840 !W77! id2F295B24 +000fpm +0.0rot 36.0dB 0e +5.2kHz gps4x6 ICA400EAD>APRS,qAS,Stoke:/103454h5231.93N\00046.56W^144/103/A=000866 !W08! id21400EAD -157fpm -3.0rot 20.0dB 0e -9.5kHz gps2x3 ICA400EDC>APRS,qAS,Topcliffe:/103454h5404.96N\00113.10W^217/095/A=000738 !W87! id21400EDC -355fpm -0.4rot 7.0dB 0e -7.1kHz gps1x2 FLRDF07D3>APRS,qAS,LSZX:/103454h4710.17N/00902.39Ez000/000/A=001355 !W58! id02DF07D3 -019fpm +0.0rot 52.8dB 0e -5.0kHz gps1x1 OGN7D0229>APRS,qAS,LHPP:/103454h4559.26N/01828.56E'174/062/A=003460 !W17! id077D0229 -078fpm +0.1rot 14.8dB 0e -4.6kHz gps4x6 FLRDDEEE3>APRS,qAS,EHGR:/103451h5133.19N/00457.22E'189/033/A=000958 !W66! id06DDEEE3 -296fpm -0.5rot 13.2dB 0e +11.6kHz gps1x1 ICA4403CA>APRS,qAS,LOIJ:/103454h4731.20N/01226.98E'180/005/A=002348 !W14! id094403CA -019fpm +3.6rot 41.8dB 0e -6.7kHz gps1x2 ICA4053C6>APRS,qAS,UKBIC:/103454h5154.82N/00108.38W'000/000/A=000262 !W21! id054053C6 +000fpm +0.0rot 39.5dB 0e -5.3kHz gps2x3 ICA405612>APRS,qAS,Burn:/103455h5345.05N/00104.90W'000/000/A=000016 !W73! id05405612 +000fpm +0.0rot 9.5dB 0e +14.1kHz gps0x1 +9.3dBm ICA400EAA>APRS,qAS,Crowland:/103454h5246.36N\00017.14W^064/092/A=003615 !W36! id21400EAA -9899fpm -6.1rot 19.5dB 0e -7.5kHz gps4x5 ICA400EBD>APRS,qAS,Crowland:/103454h5237.22N\00026.49W^214/043/A=000587 !W35! id21400EBD -454fpm +1.5rot 4.0dB 4e -5.5kHz gps2x3 ICA3D1062>APRS,qAS,EDLE:/103455h5051.94N/00618.00E'016/128/A=004576 !W62! id053D1062 -078fpm +0.1rot 4.0dB 3e +1.4kHz gps1x1 +12.8dBm ICA3FF435>APRS,qAS,EDLB:/103455h5146.82N/00717.42E'274/009/A=000164 !W34! id053FF435 -019fpm +1.8rot 42.5dB 0e +2.6kHz gps1x1 ICA400EAA>APRS,qAS,TippsEnd:/103455h5246.38N\00017.11W^052/136/A=003470 !W60! id21400EAA -7998fpm -1.7rot 3.8dB 0e -7.3kHz gps4x5 FLRDD9B1A>APRS,qAS,EBKH:/103455h5110.67N/00512.93E'000/000/A=000105 !W22! id06DD9B1A +000fpm +0.0rot 31.0dB 0e +1.3kHz gps6x9 LOLT>APRS,TCPIP*,qAC,GLIDERN3:/103501h4803.09NI01439.67E&/A=001076 LOLT>APRS,TCPIP*,qAC,GLIDERN3:>103501h v0.2.6.ARM CPU:0.4 RAM:765.6/972.2MB NTP:0.6ms/-14.4ppm +28.2C 1/1Acfts[1h] RF:+0-1.2ppm/-1.27dB/+13.9dB@10km[67168]/+24.2dB@10km[1/1] ICA4403CA>APRS,qAS,LOIJ:/103455h4731.20N/01226.98E'183/005/A=002348 !W03! id094403CA -019fpm +2.5rot 42.8dB 0e -5.8kHz gps1x2 EPRU>APRS,TCPIP*,qAC,GLIDERN1:/103501h5053.35NI01912.22E&/A=000869 EPRU>APRS,TCPIP*,qAC,GLIDERN1:>103501h v0.2.6.RPI-GPU CPU:0.7 RAM:225.9/456.4MB NTP:1.2ms/-7.7ppm +44.4C 0/0Acfts[1h] RF:+58-1.7ppm/+5.17dB/-0.3dB@10km[1925] FLRDDACA6>APRS,qAS,OMB:/103455h4937.85N/01059.52E'194/082/A=002988 !W57! id0ADDACA6 -197fpm +0.0rot 8.0dB 0e -3.0kHz gps3x5 ICA3DE5C9>APRS,qAS,EDTD:/103454h4757.88N/00830.94E'146/069/A=002490 !W06! id053DE5C9 -078fpm -0.8rot 34.2dB 0e -6.1kHz gps1x3 ICA400EDC>APRS,qAS,UKRUF:/103454h5404.96N\00113.10W^217/095/A=000741 !W86! id21400EDC -355fpm -0.4rot 15.8dB 0e -7.2kHz gps1x2 ICA4B43C7>APRS,qAS,LSTZ:/103455h4636.71N/00722.29EX188/120/A=004353 !W61! id0D4B43C7 +554fpm -0.5rot 10.0dB 0e +10.6kHz gps4x5 OGNCFEF59>APRS,qAS,LHTL:/103455h4719.08N/01901.90E'123/064/A=002824 !W54! id07CFEF59 -098fpm -0.5rot FL033.96 4.8dB 3e -7.4kHz gps4x6 ICA400EAA>APRS,qAS,Crowland:/103455h5246.38N\00017.11W^052/136/A=003464 !W61! id21400EAA -7998fpm -1.7rot 20.0dB 0e -7.5kHz gps4x5 OGN2A4B49>APRS,qAS,Keszeg1:/103455h4750.28N/01915.01E'313/000/A=000781 !W60! id072A4B49 +000fpm +0.0rot 29.0dB 0e +8.2kHz gps3x5 ICA400EAD>APRS,qAS,UKGRL2:/103451h5232.00N\00046.62W^181/090/A=000869 !W59! id21400EAD +396fpm -4.9rot 11.2dB 4e -8.9kHz gps1x3 FNT11006A>APRS,qAS,FNB11006A:/103501h4720.10N/00935.36Eg161/000/A=001199 !W24! id1E11006A +07fpm SoloStdby>APRS,TCPIP*,qAC,GLIDERN3:/103502h4712.67NI00731.89E&/A=001509 SoloStdby>APRS,TCPIP*,qAC,GLIDERN3:>103502h v0.2.6.ARM CPU:0.2 RAM:766.2/970.5MB NTP:0.8ms/-10.2ppm +34.9C 0/0Acfts[1h] RF:-5+0.3ppm/+0.50dB/+13.3dB@10km[114144]/+15.6dB@10km[7/13] Lahr>APRS,TCPIP*,qAC,GLIDERN3:/103502h4817.34NI00749.53E&/A=000676 Lahr>APRS,TCPIP*,qAC,GLIDERN3:>103502h v0.2.6.RPI-GPU CPU:0.7 RAM:659.4/972.4MB NTP:0.3ms/-7.7ppm +45.1C 0/0Acfts[1h] RF:+50-0.6ppm/+0.26dB/+5.5dB@10km[91042] UKDUN2>APRS,TCPIP*,qAC,GLIDERN2:/103502h5152.29NI00032.81W&/A=000535 UKDUN2>APRS,TCPIP*,qAC,GLIDERN2:>103502h v0.2.6.ARM CPU:0.3 RAM:770.3/972.2MB NTP:1.0ms/-3.6ppm +39.0C 1/1Acfts[1h] RF:+53+0.1ppm/-0.20dB/+17.8dB@10km[282006]/+19.1dB@10km[8/16] PAW48AC45>APRS,qAS,PWWilmcot:/103502h5213.04N\00145.49W^000/001/A=000209 !W45! id2348AC45 +000fpm +0.0rot 20.0dB 0e -6.0kHz gps1x1 EDPK>APRS,TCPIP*,qAC,GLIDERN3:/103502h4802.89NI01230.17E&/A=001788 EDPK>APRS,TCPIP*,qAC,GLIDERN3:>103502h v0.2.6.ARM CPU:0.5 RAM:742.1/970.5MB NTP:0.4ms/-4.9ppm +25.0C 2/2Acfts[1h] RF:-1+0.4ppm/+1.36dB/+22.5dB@10km[684]/+25.0dB@10km[2/3] Scandido>APRS,TCPIP*,qAC,GLIDERN3:/103502h4644.00NI01216.53E&/A=003890 Scandido>APRS,TCPIP*,qAC,GLIDERN3:>103502h v0.2.6.RPI-GPU CPU:1.3 RAM:241.0/456.4MB NTP:1.0ms/-7.2ppm +44.4C 0/0Acfts[1h] RF:+49-0.2ppm/+8.87dB FAWC>APRS,TCPIP*,qAC,GLIDERN3:/103502h3339.85SI01925.14E&/A=000689 FAWC>APRS,TCPIP*,qAC,GLIDERN3:>103502h v0.2.6.RPI-GPU CPU:0.4 RAM:553.0/972.4MB NTP:0.6ms/-0.9ppm +60.1C 2/2Acfts[1h] RF:+24-0.9ppm/+5.01dB/+12.4dB@10km[1852]/+12.5dB@10km[1/2] OGN295B24>APRS,RELAY*,qAS,Keszeg2:/103452h4750.27N/01914.99EO147/000/A=000840 !W77! id2F295B24 +000fpm +0.0rot gps3x5 ICA4B43D2>APRS,qAS,Malvaglia:/103455h4628.13N/00854.21EX156/149/A=007032 !W96! id0D4B43D2 -870fpm +0.1rot 9.0dB 0e -2.7kHz gps3x3 ICA400EDC>APRS,qAS,UKPOC:/103456h5404.92N\00113.15W^215/094/A=000735 !W58! id21400EDC -435fpm -0.5rot 4.5dB 1e -7.0kHz gps1x2 ICA400EAD>APRS,qAS,Stoke:/103456h5231.88N\00046.49W^132/108/A=000859 !W96! id21400EAD -078fpm -1.1rot 22.8dB 0e -9.6kHz gps2x3 ICA3FF435>APRS,qAS,EDLB:/103456h5146.82N/00717.42E'282/008/A=000164 !W50! id053FF435 +020fpm +2.6rot 44.2dB 0e +2.6kHz gps1x1 FLRDD9B1A>APRS,qAS,EBKH:/103456h5110.67N/00512.93E'000/000/A=000089 !W22! id06DD9B1A -019fpm +0.0rot 31.5dB 0e +0.1kHz gps5x8 ICA4403CA>APRS,qAS,LOIJ:/103456h4731.19N/01226.98E'197/005/A=002348 !W83! id094403CA +000fpm +2.8rot 40.5dB 0e -5.9kHz gps1x2 FLRDDAA12>APRS,qAS,edbk:/103456h5254.99N/01226.02E'000/000/A=000187 !W33! id06DDAA12 +020fpm +0.0rot 54.5dB 0e -2.7kHz gps6x6 ICA400EAA>APRS,qAS,TippsEnd:/103456h5246.41N\00017.05W^048/163/A=003375 !W59! id21400EAA -4197fpm -0.4rot 5.0dB 7e -7.3kHz gps4x5 ICA400ED8>APRS,qAS,UKGRL:/103456h5241.37N\00025.33W^124/105/A=002148 !W58! id21400ED8 -1464fpm +0.0rot 2.8dB 1e -8.6kHz gps1x1 FLRDD4F25>APRS,qAS,LFRI:/103456h4642.08N/00122.50W'281/050/A=000295 !W97! id0ADD4F25 -019fpm +0.1rot 36.0dB 0e +0.1kHz gps4x5 ICA400EAD>APRS,qAS,UKGRL2:/103453h5231.95N\00046.59W^155/098/A=000872 !W27! id21400EAD -157fpm -4.2rot 9.2dB 0e -8.7kHz gps2x3 ICA400EBD>APRS,qAS,UKGRL2:/103453h5237.23N\00026.48W^210/043/A=000604 !W33! id21400EBD -454fpm +1.3rot 11.0dB 0e -4.6kHz gps2x3 ICA400ED8>APRS,qAS,UKGRL2:/103453h5241.42N\00025.45W^124/104/A=002217 !W56! id21400ED8 -1266fpm +0.1rot 23.2dB 0e -8.5kHz gps1x1 FLRDDD591>APRS,qAS,LECI1:/103456h4239.58N/00042.37W'173/054/A=011598 !W85! id06DDD591 +317fpm -0.1rot 3.2dB 4e -0.8kHz gps1x1 FLRDDD5F3>APRS,qAS,LECI1:/103456h4238.93N/00041.34W'202/132/A=006471 !W52! id0ADDD5F3 -1108fpm +0.0rot 2.2dB 2e -5.9kHz gps1x2 ZwolleN>APRS,TCPIP*,qAC,GLIDERN2:/103503h5231.97NI00606.08E&/A=000092 ZwolleN>APRS,TCPIP*,qAC,GLIDERN2:>103503h v0.2.6.ARM CPU:0.3 RAM:803.3/1018.1MB NTP:0.7ms/-9.4ppm +33.8C 0/0Acfts[1h] RF:+0-0.4ppm/+3.46dB PAW401FF2>APRS,qAS,PWRedhill:/103503h5113.13N\00008.53W^000/001/A=000193 !W00! id23401FF2 +000fpm +0.0rot 20.0dB 0e -6.0kHz gps1x1 ICA400EAA>APRS,qAS,Crowland:/103456h5246.41N\00017.05W^048/163/A=003369 !W49! id21400EAA -4197fpm -0.4rot 21.5dB 0e -7.5kHz gps4x5 PAW72C3AA>APRS,qAS,PWEGBW:/103503h5211.46N\00137.10Wn000/000/A=000170 !W00! id3F72C3AA +000fpm +0.0rot 20.0dB 0e -6.0kHz gps1x1 VITACURA2>OGNSDR,TCPIP*,qAC,GLIDERN4:/103503h3322.79SI07034.80W&/A=002329 Contact: [email protected], [email protected] VITACURA2>OGNSDR,TCPIP*,qAC,GLIDERN4:>103503h v0.2.7.RPI-GPU CPU:0.6 RAM:766.6/970.5MB NTP:0.2ms/-1.4ppm +51.5C 2/2Acfts[1h] RF:+0-0.8ppm/-1.48dB/-0.6dB@10km[26722]/-0.2dB@10km[9/17] FLRDDACA6>APRS,qAS,OMB:/103456h4937.83N/01059.51E'195/083/A=002982 !W39! id0ADDACA6 -197fpm -0.1rot 4.0dB 3e -3.0kHz gps3x5 FLRDDF944>OGFLR,qAS,VITACURA2:/103456h3322.78S/07034.83W'000/000/A=002227 !W85! id06DDF944 -019fpm +0.0rot 23.5dB 0e -3.5kHz gps3x5 s6.42 h05 ICA3D1062>APRS,qAS,EDLE:/103457h5052.01N/00618.03E'017/128/A=004569 !W53! id053D1062 -712fpm +0.0rot 2.8dB 4e +1.4kHz gps1x1"; foreach (var line in messages.Split(new[] { Environment.NewLine }, StringSplitOptions.None)) { var result = PacketInfo.Parse(line); Console.WriteLine(result); } // At least it didn't crash:wq }