public CompassCorrection(MagneticContext context)
 {
     _context = context;
     MeansByMeasuredDegree = new RunningMean[360];
     for (var i = 0; i < 360; i++)
     {
         MeansByMeasuredDegree[i] = new RunningMean()
         {
             S = i
         }
     }
     ;
 }
Example #2
0
        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
            };
        }
Example #4
0
        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);
        }
Example #5
0
        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();
        }
Example #6
0
 protected override IMessageCompassValue Convert(IMessageCompassValue compassValue)
 {
     return
         (MagneticContext.Magnetic(compassValue));
 }