示例#1
0
        /// <summary>
        /// Initialize
        /// </summary>
        private void Initialize()
        {
            var canHomeCmda = new CmdCapabilities(MountQueue.NewId);
            var mountinfo   = (MountInfo)MountQueue.GetCommandResult(canHomeCmda).Result;

            if (!canHomeCmda.Successful && canHomeCmda.Exception != null)
            {
                throw canHomeCmda.Exception;
            }
            if (!mountinfo.CanHomeSensors)
            {
                throw new Exception("Home sensor not supported");
            }
        }
示例#2
0
        ///// <summary>
        ///// get current step count
        ///// </summary>
        ///// <param name="axis"></param>
        ///// <returns></returns>
        //private int GetEncoderCount(Axis axis)
        //{
        //    var stepsCmd = new CmdAxisSteps(MountQueue.NewId);
        //    var steps = (int[])MountQueue.GetCommandResult(stepsCmd).Result;
        //    if (!stepsCmd.Successful && stepsCmd.Exception != null) throw stepsCmd.Exception;
        //    switch (axis)
        //    {
        //        case Axis.Axis1:
        //            return steps[0];
        //        case Axis.Axis2:
        //            return steps[1];
        //        default:
        //            throw new ArgumentOutOfRangeException(nameof(axis), axis, null);
        //    }
        //}

        /// <summary>
        /// Gets the direction to home sensor or if null then TripPosition was set
        /// </summary>
        /// <param name="axis"></param>
        /// <returns></returns>
        private bool?GetHomeSensorStatus(Axis axis)
        {
            var sensorStatusCmd = new CmdHomeSensor(MountQueue.NewId, axis);
            var sensorStatus    = (int)MountQueue.GetCommandResult(sensorStatusCmd).Result;

            switch (sensorStatus)
            {
            case 16777215:
                return(false);

            case 0:
                return(true);

            default:
                TripPosition = sensorStatus;
                return(null);
            }
        }
示例#3
0
        /// <summary>
        /// Process queue items monitor the pulse
        /// </summary>
        /// <param name="entry"></param>
        private static void ProcessPulseStatusQueue(PulseStatusEntry entry)
        {
            try
            {
                if (!SkyServer.Tracking || SkyServer.IsSlewing)
                {
                    ResetGuiding(entry);
                    return;
                }
                entry.ProcessDateTime = HiResDateTime.UtcNow;

                bool pulseRunning;
                switch (SkySettings.Mount)
                {
                case MountType.Simulator:
                    if (entry.Axis == 0)
                    {
                        var statuscmd = new CmdPulseRaRunning(MountQueue.NewId);
                        pulseRunning = Convert.ToBoolean(MountQueue.GetCommandResult(statuscmd).Result);
                    }
                    else
                    {
                        var statuscmd = new CmdPulseDecRunning(MountQueue.NewId);
                        pulseRunning = Convert.ToBoolean(MountQueue.GetCommandResult(statuscmd).Result);
                    }
                    break;

                case MountType.SkyWatcher:
                    if (entry.Axis == 0)
                    {
                        var statussky = new SkyPulseRaRunning(SkyQueue.NewId);
                        pulseRunning = Convert.ToBoolean(SkyQueue.GetCommandResult(statussky).Result);
                    }
                    else
                    {
                        var statussky = new SkyPulseDecRunning(SkyQueue.NewId);
                        pulseRunning = Convert.ToBoolean(SkyQueue.GetCommandResult(statussky).Result);
                    }
                    break;

                default:
                    pulseRunning = false;
                    break;
                }
                ResetGuiding(entry.Axis, pulseRunning);

                var curtime     = HiResDateTime.UtcNow;
                var processtime = (int)(curtime - entry.ProcessDateTime).TotalMilliseconds;
                var alltime     = (int)(curtime - entry.CreateDateTime).TotalMilliseconds;
                var monitorItem = new MonitorEntry
                {
                    Datetime = curtime, Device = MonitorDevice.Telescope, Category = MonitorCategory.Mount, Type = MonitorType.Data, Method = MethodBase.GetCurrentMethod().Name, Thread = Thread.CurrentThread.ManagedThreadId, Message = $"Complete,{alltime},{processtime}-{entry.Duration}={processtime - entry.Duration}"
                };
                MonitorLog.LogToMonitor(monitorItem);
            }
            catch (Exception ex)
            {
                ResetGuiding(entry.Axis, false);

                var monitorItem = new MonitorEntry
                {
                    Datetime = HiResDateTime.UtcNow, Device = MonitorDevice.Telescope, Category = MonitorCategory.Mount, Type = MonitorType.Error, Method = MethodBase.GetCurrentMethod().Name, Thread = Thread.CurrentThread.ManagedThreadId, Message = $"{ex.Message}"
                };
                MonitorLog.LogToMonitor(monitorItem);
            }
        }