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