public TruPulse360(IProvideSentences nmeaProvider) { _nmeaProvider = nmeaProvider; _nmeaProvider.SentenceReceived += sentence => { Message message = _parser.Parse(sentence); if (message == null) { return; } Debug.WriteLine(message.Sentence); }; _nmeaProvider.Open(); }
public GpsUnit(IProvideSentences nmeaProvider) { MinimumFixForNotification = GpsFixType.ThreeD; CurrentLocation = new GeoPosition(0, 0, new Length(0, LengthUnit.Meter)); CurrentHeading = Heading.Unknown; _nmeaProvider = nmeaProvider; _nmeaProvider.SentenceReceived += sentence => { Message message = _parser.Parse(sentence); if (message == null) { return; } //NB set all values then raise all notifications if (message.Value is IProvideSatelliteInfo) { foreach (SatelliteInfo satellite in message.ValueAs<IProvideSatelliteInfo>() .Satellites) { _satellites[satellite.Prn] = satellite; } } if (message.Value is IProvideActiveSatellites) { _activeSatellitePrns.Clear(); foreach (int prn in message.ValueAs<IProvideActiveSatellites>() .ActiveSatellitePrns.Where(prn => prn != 0)) { _activeSatellitePrns.Add(prn); } } if (message.Value is IProvideFixType) { CurentFixType = message.ValueAs<IProvideFixType>() .CurrentFix; } if (message.Value is IProvideDilutionOfPrecision) { var dop = message.ValueAs<IProvideDilutionOfPrecision>(); _positionDop = dop.PositionDop; _horizontalDop = dop.HorizontalDop; _verticalDop = dop.VerticalDop; } if (message.Value is IProvideTime) { CurrentTime = message.ValueAs<IProvideTime>() .CurrentTime; } if (message.Value is IProvideTrajectory) { //NB heading and speed are correlated IProvideTrajectory trajectory = message.ValueAs<IProvideTrajectory>(); CurrentSpeed = trajectory.CurrentSpeed; // NB don't update heading when speed is near zero if (CurrentSpeed > MinimumSpeedForHeadingUpdate) { CurrentHeading = trajectory.CurrentHeading; } } if (message.Value is IProvideGeoPosition) { var newLocation = message.ValueAs<IProvideGeoPosition>() .CurrentLocation; CurrentLocation = newLocation.Altitude == null ? new GeoPosition(newLocation.Latitude, newLocation.Longitude, CurrentLocation.Altitude) : newLocation; RaiseLocationChanged(); } }; _nmeaProvider.Open(); }