/// <summary>
 /// Move Azm axis with fixed or variable rate
 /// </summary>
 /// <param name="rate">Rate (deg/sec) or fixed rate * 10</param>
 /// <param name="isFixed"></param>
 public void MoveAxis(SlewAxes axis, double rate, bool isFixed = false)
 {
     if (!rate.Equals(0))
     {
         if (!isFixed)
         {
             this.ti.SlewHighRate(axis, rate);
         }
         else
         {
             this.ti.SlewFixedRate(axis, (int)rate);
         }
     }
 }
 public override void SlewVariableRate(SlewAxes axis, double rate)
 {
     var r = (int)Math.Abs(rate*4*3600);
     var devId = this.GetDeviceId(axis);
     //var com = new byte[] { (byte)'P', 3, devId, (byte)dir, (byte) (r/256), (byte) (r%256), 0, 0 };
     //SendBytes(com);
     var command = rate < 0 ? DeviceCommands.MC_SET_NEG_VARIABLE_GUIDERATE : DeviceCommands.MC_SET_POS_VARIABLE_GUIDERATE;
     this.SendCommandToDevice(devId, command, 0, (byte) (r/256), (byte) (r%256));
 }
 public override void SlewHighRate(SlewAxes axis, double rate)
 {
     var r = Math.Abs((long)(rate*3600*1024));
     var h = (byte) ((r/0x10000) & 0xff);
     var m = (byte) ((r/0x100) & 0xff);
     var l = (byte) (r & 0xff);
     var devId = this.GetDeviceId(axis);
     var command = rate < 0 ? DeviceCommands.MC_SET_NEG_VARIABLE_GUIDERATE : DeviceCommands.MC_SET_POS_VARIABLE_GUIDERATE;
     this.SendCommandToDevice(devId, command, 0, h, m, l);
 }
 public override void SlewFixedRate(SlewAxes axis, int rate)
 {
     var r = (byte)Math.Abs(rate);
     if (r > 9) throw new Exception("Wrong parameter");
     var devId = this.GetDeviceId(axis);
     var command = rate < 0 ? DeviceCommands.MC_SET_NEG_FIXED_GUIDERATE : DeviceCommands.MC_SET_POS_FIXED_GUIDERATE;
     //var com = new byte[] { (byte)'P', 2, DevId, (byte)dir, (byte)rate, 0, 0, 0 };
     this.SendCommandToDevice(devId, command, 0, r);
 }
        private void moveAxis(SlewAxes axis, double rate, bool isFixed = false)
        {
            this.CheckPark();
            if (this.telescopeMode != TelescopeMode.Normal && this.telescopeMode != TelescopeMode.MovingAxis) return;

            this.tp.IsAtHome = false;
            if (axis == SlewAxes.DecAlt) this.tp.MovingAltAxes = !rate.Equals(0);
            if (axis == SlewAxes.RaAzm) this.tp.MovingAzmAxes = !rate.Equals(0);
            if (!rate.Equals(0))
            {
                if (axis == SlewAxes.RaAzm)
                {
                    if (this.telescopeMode != TelescopeMode.MovingAxis)
                        this.moveAxisTrackingMode = this.tp.TrackingMode;
                    this.checkRateTrackingState();
                    //SetTracking(TrackingMode.Off);
                    //tp.TrackingMode = TrackingMode.Off;
                }
                this.two.MoveAxis(axis, rate, isFixed);
                this.telescopeMode = TelescopeMode.MovingAxis;
            }
            else // rate == 0
            {
                if (axis == SlewAxes.RaAzm)
                {
                    this.setTrackingRate(this.tp.TrackingRate, this.moveAxisTrackingMode);
                    this.tp.TrackingMode = this.moveAxisTrackingMode;
                }
                else
                {
                    this.setTrackingDec();
                }
                if (!this.tp.MovingAltAxes && !this.tp.MovingAzmAxes)
                {
                    this.telescopeMode = TelescopeMode.Normal;
                }
            }
        }
 /// <summary>
 /// MoveAxis with fixed or variable rate
 /// </summary>
 /// <param name="axis">SlewAxes</param>
 /// <param name="rate">Rate (deg/sec) or fixed rate * 10</param>
 /// <param name="isFixed"></param>
 public void MoveAxis(SlewAxes axis, double rate, bool isFixed = false)
 {
     lock (_sync)
     {
         moveAxis(axis, rate, isFixed);
     }
 }