public CompassCorrection(MagneticContext context) { _context = context; MeansByMeasuredDegree = new RunningMean[360]; for (var i = 0; i < 360; i++) { MeansByMeasuredDegree[i] = new RunningMean() { S = i } } ; }
private void OnIncomingMessage(MessageBase message, DateTime messagetime) { // ReSharper disable once SwitchStatementMissingSomeCases switch (message.Name) { case MessageName.RMC: { var rmc = (RMC)message; if (rmc.SOG > MINIMUM_SPEED_FOR_VALID_CALCULATIONS) { Cog = rmc.TMG; Cog.Source = SourceType.External; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Cog")); Sog = rmc.SOG; Sog.Source = SourceType.External; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Sog")); OnUpdateCog(); } } break; case MessageName.HDG: { var hdg = (HDG)message; if (null != hdg.MagneticContext) { _magneticContext = hdg.MagneticContext; } } break; } if (message is IHaveHeading) { Heading = new QuantityWithMetadata <IMessageCompassValue>(_magneticContext.Magnetic((message as IHaveHeading).Heading)); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Heading")); } if (message is IHasPosition) { QuantityWithMetadata <Coordinate> c = (Coordinate)(message as IHasPosition).Position; c.Source = SourceType.External; c.Updated = messagetime; OnUpdatePosition(c); } UpdateLastMessageDictionary(message); }
public AutopilotControl(MagneticContext magneticContext, MessageSender messageSender) { _magneticContext = magneticContext; _apb = new APB("SN"); _heading = new MagneticMessageCompassValue(0); EnabledCommand = new DelegateCommand(() => Enabled = !Enabled); RightCommand = new DelegateCommand(Right); LeftCommand = new DelegateCommand(Left); MagneticCommand = new DelegateCommand(() => HeadingMagnetic = true); TrueCommand = new DelegateCommand(() => HeadingMagnetic = false); SetToHeadingCommand = new DelegateCommand(() => CopyCurrentHeading = !CopyCurrentHeading); _periodicalMessageSender = new RepeatingSender(messageSender, TimeSpan.FromMilliseconds(500), OnBeforeAPBSend) { Message = _apb }; }
internal HDG(string talkedId, string[] parts) : base(talkedId) { Heading = MessageCompassValueFactory.FromMessageParts(parts[0], true); if (string.IsNullOrWhiteSpace(parts[3])) { return; } double?deviation = null; if (!string.IsNullOrWhiteSpace(parts[1])) { deviation = GetCompassChange(parts[1], parts[2]); } MagneticContext = new MagneticContext(GetCompassChange(parts[3], parts[4]), deviation); }
public Stats(MagneticContext magneticContext, MessageReader reader) { _magneticContext = magneticContext; _reader = reader; _compassCorrection = new CompassCorrection(_magneticContext); _compassCorrectionPersister = new CompassCorrectionPersister(FilenameCompassCorrection); try { _compassCorrectionPersister.Read(_compassCorrection); } catch (JsonSerializationException) { // eat it } _reader.Message += OnIncomingMessage; var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) }; timer.Tick += TimerTick; timer.Start(); }
protected override IMessageCompassValue Convert(IMessageCompassValue compassValue) { return (MagneticContext.Magnetic(compassValue)); }