/// <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"); } }
///// <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); } }
/// <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); } }