Coder Social home page Coder Social logo

ckgt / nematode Goto Github PK

View Code? Open in Web Editor NEW
126.0 11.0 75.0 41 KB

C++ 11 NMEA Parser and GPS Interface

License: Other

C++ 95.69% C 0.75% CMake 3.55%
gps-data nmea-sentences gps-nmea-sentences custom-sentences gcc cross-platform c-plus-plus-11 nmea

nematode's People

Contributors

ckgt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nematode's Issues

Plus sign in NMEA sentences not supported.

I am using a modem Cypress CTM-200 and processing the GPS coordinates with Nematode.

I am getting the following sentences from the modem. Unfortunately a plus sign is included before the altitude field in the GPGGA sentence. Plus sign is not supported and the sentence cannot be processed.

$PMID,353968095226388,35396809522638810
$GPGGA,194045.00,4531.6094,N,07331.1947,W,1,11,01.1,+00053,M,,M,,0000
6B
$GPRMC,194045.00,A,4531.6094,N,07331.1947,W,000.2,000.0,160519,,*21

Throws Error When Checksum is 0

First off, thank you for this great tool, it works really well.

The only problem I have occurs when I use a gps that sends checksums. Sometimes I receive a valid NMEA checksum of 0, and the parser treats that as an invalid checksum and throws an error. An example sentence from my GPS:
$GPRMC,173138.000,V,3145.5214,N,09704.5057,W,000.0,000.0,170318,000.0,E,N*00

I get the error:
GPS Data Bad Format [$GPRMC] :: Checksum is invalid

GPSTimestamp getTime() is Off by One Month

The month of year field in $GPRMC sentences is indexed 1-12. This is also how it it is stored in the month class member of GPSTimestamp. In getTime(), however mktime() is called, which expects months be 0-11.

This results in the timestamp returned by getTime being off by one month.

Licensing

Hey, would you mind putting the actual text of the zlib license in your License file, along with your copyright? I'd like to use the library but don't want to violate zlib by not properly attributing you.

GN*** sentences not recognized

Hello,

Even though this is not really a big issue, I would like to point out that the code is not suitable for GN*** or GL*** sentences.

I tried to adapt it, and make it work for all prefixes of NMEA sentences but I did not succeed.

Has anyone made an attempt at this before ?

Thank you.

Non-GPS Messages

According to https://anavs.com/knowledgebase/nmea-format/ there are additional message formats:

  • GP for GPS only solutions
  • GL for GLONASS only solutions
  • GA for GALILEO only solutions
  • GN for multi GNSS solutions

The GPS messages are supported, while the others are not, limiting the usability of the library.

I'll do a fork and add the other formats (as long as I have test data for them) as described in #4 .

And do a pull request later.

member variable checksum should be unsigned char in NMEACommand

otherwise NMEACommand::addChecksum() will add wrong checksum string if checksum>=0x80

#include <string>
#include <iostream>
#include <iomanip>
#include <sstream>

int main()
{
    char checksum = 0x80;
    unsigned char uchecksum = 0x80;
    std::stringstream ss1, ss2;
    ss1  << std::hex << std::uppercase << std::internal << std::setfill('0') << std::setw(2) << (int)checksum;
    ss2  << std::hex << std::uppercase << std::internal << std::setfill('0') << std::setw(2) << (int)uchecksum;
    std::cout<< ss1.str() << ", "<< ss2.str()<<std::endl;
}

result in

FFFFFF80, 80

Warnings on member initialisation order in NMEAParser and NMEASentence

NMEASentence and NMEAParser constructors cause warnings on member variable initialisation order; I suggest changing from:

NMEASentence::NMEASentence() 
: isvalid(false)
, checksumIsCalculated(false)
, calculatedChecksum(0)
, parsedChecksum(0)
{ }

to

NMEASentence::NMEASentence() 
: isvalid(false)
, checksumIsCalculated(false)
, parsedChecksum(0)
, calculatedChecksum(0)
{ }

and from

NMEAParser::NMEAParser() 
: log(false)
, maxbuffersize(NMEA_PARSER_MAX_BUFFER_SIZE)
, fillingbuffer(false)
{ }

to

NMEAParser::NMEAParser()
: fillingbuffer(false)
, maxbuffersize(NMEA_PARSER_MAX_BUFFER_SIZE)
, log(false)
{ }

or use non-static member initialisation where they're declared.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.