{"id":31631183,"url":"https://github.com/hellfirehd/dkw-nmea","last_synced_at":"2026-05-17T15:39:01.439Z","repository":{"id":152809555,"uuid":"159784843","full_name":"hellfirehd/dkw-nmea","owner":"hellfirehd","description":"Very fast NMEA parser","archived":false,"fork":false,"pushed_at":"2026-02-21T23:59:55.000Z","size":186,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-22T06:30:13.995Z","etag":null,"topics":["dotnet-core","gps","nmea","span"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hellfirehd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-11-30T07:25:25.000Z","updated_at":"2026-02-21T23:59:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"d0e7f89d-3213-43f6-9acf-7a69f08399c2","html_url":"https://github.com/hellfirehd/dkw-nmea","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hellfirehd/dkw-nmea","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellfirehd%2Fdkw-nmea","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellfirehd%2Fdkw-nmea/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellfirehd%2Fdkw-nmea/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellfirehd%2Fdkw-nmea/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hellfirehd","download_url":"https://codeload.github.com/hellfirehd/dkw-nmea/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hellfirehd%2Fdkw-nmea/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33143642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet-core","gps","nmea","span"],"created_at":"2025-10-06T22:40:12.934Z","updated_at":"2026-05-17T15:39:01.434Z","avatar_url":"https://github.com/hellfirehd.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DKW NMEA\n\n[![Build status](https://ci.appveyor.com/api/projects/status/w3xw1uk3mpvnranb/branch/master?svg=true)](https://ci.appveyor.com/project/dougkwilson/dkw-nmea/branch/master)\n\n\n\nA very fast [NMEA](https://en.wikipedia.org/wiki/NMEA_0183) parser.  The speed is achieved by \nusing `System.Buffers`, `System.IO.Pipelines`, `Span\u003cT\u003e` and related bits and pieces\navoiding as many allocations as possible.\n\n(This is my first foray into Buffers and Pipelines... Be Gentle!)\n\n## Usage\n\nSynchronous:\n\n```csharp\nusing (var nr = new NmeaReader(File.Open(\"track2.nmea\")))\n{\n  while (true)\n  {\n    var message = nr.ReadNext();\n    if (message == null)\n    {\n      break;\n    }\n    Console.WriteLine(message);\n  }\n}\n```\n\nAsynchronous:\n\n```csharp\nusing (var nr = new NmeaReader(File.Open(\"track2.nmea\")))\n{\n  while (true)\n  {\n    var message = await nr.ReadNextAsync().ConfigureAwait(false);\n    if (message == null)\n    {\n      break;\n    }\n    Console.WriteLine(message);\n  }\n}\n```\n\nBloody freaking crazy Asynchronous:\n```csharp\nvar nsr = NmeaStreamReader.Create();\nusing (var reader = File.Open(\"track1.nmea\"))\n{\n  await nsr.ParseStreamAsync(reader, (s) =\u003e\n  {\n    Console.WriteLine(message);\n  }).ConfigureAwait(false);\n}\n```\n\n\n## Filtering\n\nIf you are only interested in a specific NMEA sentence then build the `NmeaStreamReader` yourself:\n\n```csharp\nvar nsr = new NmeaStreamReader().Register(new GGA());\n```\n\nParsers are available for:\n\n* GPGGA\n* GPGLL\n* GPGSA\n* GPGSV\n* GPRMC\n\nBut don't despair!  It's easy to add new sentences.\n\n```csharp\npublic class GLL : NmeaMessage\n{\n  private static readonly ReadOnlyMemory\u003cByte\u003e KEY = Encoding.UTF8.GetBytes(\"$GPGLL\").AsMemory();\n  protected override ReadOnlyMemory\u003cByte\u003e Key =\u003e KEY;\n\n  public Double Latitude { get; private set; }\n  public Double Longitude { get; private set; }\n  public TimeSpan FixTime { get; private set; }\n  public Char DataActive { get; private set; }\n\n  public override String ToString() =\u003e $\"GPGLL {Latitude} {Longitude} {FixTime} {DataActive}\";\n\n  public override NmeaMessage Parse(ReadOnlySequence\u003cByte\u003e sentence)\n  {\n    var lexer = new Lexer(sentence);\n\n    if (lexer.NextString() != \"GPGLL\")\n    {\n      throw lexer.Error();\n    }\n\n    return new GLL()\n    {\n      Latitude = lexer.NextLatitude(),\n      Longitude = lexer.NextLongitude(),\n      FixTime = lexer.NextTimeSpan(),\n      DataActive = lexer.NextChar(),\n      Checksum = lexer.NextChecksum()\n    };\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhellfirehd%2Fdkw-nmea","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhellfirehd%2Fdkw-nmea","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhellfirehd%2Fdkw-nmea/lists"}