Esempio n. 1
0
        public void SetPositionLimitsMode(PTPositionLimitsMode mode)
        {
            switch (mode)
            {
            case PTPositionLimitsMode.Disabled:

                Byte result1 = _c.GetByte(PTCommand.SetPositionLimitsDisabled);
                ValidateResult(result1);

                break;

            case PTPositionLimitsMode.Factory:

                Byte result2 = _c.GetByte(PTCommand.SetPositionLimitsEnabled);
                ValidateResult(result2);

                break;

            case PTPositionLimitsMode.User:

                String response = AsciiExchange(PTAsciiCommand.SetPositionLimitsUser, _defaultTimeout);
                ValidateResult(response);

                break;
            }
        }
Esempio n. 2
0
        public void Initialize()
        {
            _c.ResetParser();

            _c.SetTimeout(_defaultTimeout);

            this.SetSpeedMode(PTSpeedControlMode.Independent);
            this.SetCommandMode(PTCommandMode.Immediate);

            _panResolution  = this.GetPanPositionResolutionArcs();
            _tiltResolution = this.GetTiltPositionResolutionArcs();

            _panStepMode  = this.GetPanStepMode();
            _tiltStepMode = this.GetTiltStepMode();

            _limitsMode = this.GetPositionLimitsMode();
        }
Esempio n. 3
0
        /// <summary>Determines the current position limits mode by toying with the unit. This method is blocking.</summary>
        public PTPositionLimitsMode GetPositionLimitsMode()
        {
            // if disabled, return

            // record the current position limits
            // then explicitly set to factory
            // record the limits
            // then explicitly set to user
            // record the limits
            // see which limits refer to the original limits
            // then set the position limits mode to what it was originally

            if (!GetPositionLimitsEnabled())
            {
                return(PTPositionLimitsMode.Disabled);
            }

            short oPanMin = GetPanPositionLimitMin();
            short oPanMax = GetPanPositionLimitMax();
            short oTilMin = GetTiltPositionLimitMin();
            short oTilMax = GetTiltPositionLimitMax();

            SetPositionLimitsMode(PTPositionLimitsMode.User);

            short uPanMin = GetPanUserPositionLimitMin();
            short uPanMax = GetPanUserPositionLimitMax();
            short uTilMin = GetTiltUserPositionLimitMin();
            short uTilMax = GetTiltUserPositionLimitMax();

            SetPositionLimitsMode(PTPositionLimitsMode.Factory);

            short fPanMin = GetPanPositionLimitMin();
            short fPanMax = GetPanPositionLimitMax();
            short fTilMin = GetTiltPositionLimitMin();
            short fTilMax = GetTiltPositionLimitMax();

            ///////////////////////////////////

            PTPositionLimitsMode mode = PTPositionLimitsMode.Disabled;

            // note that this approach falls apart if user limits are enabled, and user limits equal the factory limits
            // because switching between user mode and factory mode yields the same limits, so there is no way to know
            // oo-er!

            // the only way I can think of is to explicitly set a user limit to a known value, then compare, then restore

            if (oPanMin == fPanMin &&
                oPanMax == fPanMax &&
                oTilMin == fTilMin &&
                oTilMax == fTilMax)
            {
                // user mode
                mode = PTPositionLimitsMode.Factory;
            }
            else if (
                oPanMin == uPanMin &&
                oPanMax == uPanMax &&
                oTilMin == uTilMin &&
                oTilMax == uTilMax)
            {
                mode = PTPositionLimitsMode.User;
            }
            else
            {
                SetPositionLimitsMode(mode);
                throw new PTControllerException("Could not determine position limits mode");
            }

            SetPositionLimitsMode(mode);

            return(mode);
        }