BOOL RMA::Parse( const SENTENCE& sentence ) { ASSERT_VALID( this ); /* ** RMA - Recommended Minimum Navigation Information ** 12 ** 1 2 3 4 5 6 7 8 9 10 11| ** | | | | | | | | | | | | ** $--RMA,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,x.x,x.x,x.x,a*hh<CR><LF> ** ** Field Number: ** 1) Blink Warning ** 2) Latitude ** 3) N or S ** 4) Longitude ** 5) E or W ** 6) Time Difference A, uS ** 7) Time Difference B, uS ** 8) Speed Over Ground, Knots ** 9) Track Made Good, degrees true ** 10) Magnetic Variation, degrees ** 11) E or W ** 12) Checksum */ /* ** First we check the checksum... */ NMEA0183_BOOLEAN check = sentence.IsChecksumBad( 12 ); if ( check == True ) { SetErrorMessage( "Invalid Checksum" ); return( FALSE ); } if ( check == Unknown ) { SetErrorMessage( "Missing Checksum" ); return( FALSE ); } IsDataValid = sentence.Boolean( 1 ); Position.Parse( 2, 3, 4, 5, sentence ); TimeDifferenceA = sentence.Double( 6 ); TimeDifferenceB = sentence.Double( 7 ); SpeedOverGroundKnots = sentence.Double( 8 ); TrackMadeGoodDegreesTrue = sentence.Double( 9 ); MagneticVariation = sentence.Double( 10 ); MagneticVariationDirection = sentence.EastOrWest( 11 ); return( TRUE ); }
bool HDG::Parse( const SENTENCE& sentence ) { /* ** HDG - Heading - Deviation & Variation ** ** 1 2 3 4 5 6 ** | | | | | | ** $--HDG,x.x,x.x,a,x.x,a*hh<CR><LF> ** ** Field Number: ** 1) Magnetic Sensor heading in degrees ** 2) Magnetic Deviation, degrees ** 3) Magnetic Deviation direction, E = Easterly, W = Westerly ** 4) Magnetic Variation degrees ** 5) Magnetic Variation direction, E = Easterly, W = Westerly ** 6) Checksum */ /* ** First we check the checksum... */ if ( sentence.IsChecksumBad( 6 ) == TRUE ) { SetErrorMessage( _T("Invalid Checksum") ); return( FALSE ); } MagneticSensorHeadingDegrees = sentence.Double( 1 ); MagneticDeviationDegrees = sentence.Double( 2 ); MagneticDeviationDirection = sentence.EastOrWest( 3 ); MagneticVariationDegrees = sentence.Double( 4 ); MagneticVariationDirection = sentence.EastOrWest( 5 ); return( TRUE ); }
bool RMC::Parse( const SENTENCE& sentence ) { // ASSERT_VALID( this ); /* ** RMC - Recommended Minimum Navigation Information ** ** Version 2.0 Format ** 12 ** 1 2 3 4 5 6 7 8 9 10 11| ** | | | | | | | | | | | | ** $--RMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,xxxx,x.x,a*hh<CR><LF> ** ** Field Number: ** 1) UTC Time ** 2) Status, V = Navigation receiver warning ** 3) Latitude ** 4) N or S ** 5) Longitude ** 6) E or W ** 7) Speed over ground, knots ** 8) Track made good, degrees true ** 9) Date, ddmmyy ** 10) Magnetic Variation, degrees ** 11) E or W ** Version 2.0 ** 12) Checksum ** Version 2.3 ** 12) Mode (D or A), optional, may be NULL ** 13) Checksum */ /* ** First we check the checksum... */ NMEA0183_BOOLEAN check = sentence.IsChecksumBad( 12 ); if ( check == NTrue ) { /* ** This may be an NMEA Version 2.3 sentence, with "Mode" field */ wxString checksum_in_sentence = sentence.Field( 12 ); if(checksum_in_sentence.StartsWith(_T("*"))) // Field is a valid erroneous checksum { SetErrorMessage( _T("Invalid Checksum") ); return( FALSE ); } else { check = sentence.IsChecksumBad( 13 ); if( check == NTrue) { SetErrorMessage( _T("Invalid Checksum") ); return( FALSE ); } } } /* if ( check == Unknown0183 ) { SetErrorMessage( _T("Missing Checksum") ); return( FALSE ); } */ UTCTime = sentence.Field( 1 ); IsDataValid = sentence.Boolean( 2 ); Position.Parse( 3, 4, 5, 6, sentence ); SpeedOverGroundKnots = sentence.Double( 7 ); TrackMadeGoodDegreesTrue = sentence.Double( 8 ); Date = sentence.Field( 9 ); MagneticVariation = sentence.Double( 10 ); MagneticVariationDirection = sentence.EastOrWest( 11 ); return( TRUE ); }