public bool Attach(ViscaCameraId id, ViscaCamera camera)
 {
     if (_cameras.ContainsKey(id))
     {
         return(false);
     }
     _cameras.Add(id, camera);
     return(true);
 }
 /// <summary>
 /// Process Visca byte stream
 /// </summary>
 /// <remark>
 /// process byte stream as it comes from source, splits into individual packets
 /// </remark>
 /// <prarm name="data">bytes recived from visca interface</param>
 private ViscaCamera getCameraAction(ViscaCameraId cameraId)
 {
     return(_cameras[cameraId]);
 }
 public ViscaCamera this[ViscaCameraId cameraId]
 {
     get { return(_getCameraAction(cameraId)); }
 }
예제 #4
0
        public ViscaCamera(ViscaCameraId id, ViscaCameraParameters parameters, ViscaProtocolProcessor visca)
        {
            _id = id;

            if (parameters == null)
            {
                _parameters = new ViscaCameraDefaultParameters();
            }
            else
            {
                _parameters = parameters;
            }

            _visca = visca;

            _pollCommands = new List <ViscaInquiry>();

#if SSHARP
            _pollTimer = new CTimer((o) =>
#else
            _pollTimer = new Timer((o) =>
#endif
            {
                Poll();
            }, null, Timeout.Infinite, Timeout.Infinite);

            #region AE Commands Constructors

            _aeCmd     = new ViscaAEMode((byte)id, AEMode.FullAuto);
            _aeInquiry = new ViscaAEInquiry((byte)id, new Action <AEMode>(mode => { updateAE(mode); }));

            #endregion AE Commands Constructors

            #region Aperture Commands Constructors

            _apertureCmd      = new ViscaAperture((byte)id, UpDownMode.Up);
            _apertureValueCmd = new ViscaApertureValue((byte)id, 0);
            _apertureInquiry  = new ViscaApertureInquiry((byte)id, new Action <int>(position => { updateAperture(position); }));

            #endregion Aperture Commands Constructors

            #region BackLight Commands Constructors

            _backLightCmd     = new ViscaBackLight((byte)id, OnOffMode.On);
            _backLightInquiry = new ViscaBackLightInquiry((byte)id, new Action <OnOffMode>(mode => { updateBackLight(mode); }));

            #endregion BackLight Commands Constructors

            #region BGain Commands Constructors

            _bGainCmd      = new ViscaBGain((byte)id, UpDownMode.Up);
            _bGainValueCmd = new ViscaBGainValue((byte)id, 0);
            _bGainInquiry  = new ViscaBGainInquiry((byte)id, new Action <int>(position => { updateBGain(position); }));

            #endregion Gain Commands Constructors

            #region ExpComp Commands Constructors

            _expCompCmd      = new ViscaExpComp((byte)id, UpDownMode.Up);
            _expCompValueCmd = new ViscaExpCompValue((byte)id, 0);
            _expCompInquiry  = new ViscaExpCompInquiry((byte)id, new Action <int>(position => { updateExpComp(position); }));

            #endregion ExpComp Commands Constructors

            #region Focus Commands Constructors

            _focusStopCmd          = new ViscaFocusStop((byte)id);
            _focusFarCmd           = new ViscaFocusFar((byte)id);
            _focusNearCmd          = new ViscaFocusNear((byte)id);
            _focusSpeed            = new ViscaFocusSpeed(_parameters.FocusSpeedLimits);
            _focusFarWithSpeedCmd  = new ViscaFocusFarWithSpeed((byte)id, _focusSpeed);
            _focusNearWithSpeedCmd = new ViscaFocusNearWithSpeed((byte)id, _focusSpeed);
            _focusTriggerCmd       = new ViscaFocusTrigger((byte)id);
            _focusInfinityCmd      = new ViscaFocusInfinity((byte)id);

            _focusNearLimitCmd = new ViscaFocusNearLimit((byte)id, 0x1000);

            _focusAutoCmd       = new ViscaFocusAuto((byte)id, OnOffMode.On);
            _focusAutoToggleCmd = new ViscaFocusAutoToggle((byte)id);
            _focusAutoInquiry   = new ViscaFocusAutoInquiry((byte)id, new Action <OnOffMode>(mode => { updateFocusAuto(mode); }));

            _focusPositionCmd     = new ViscaFocusPosition((byte)id, 0);
            _focusPositionInquiry = new ViscaFocusPositionInquiry((byte)id, new Action <int>(position => { updateFocusPosition(position); }));

            #endregion Focus Commands Constructors

            #region Gain Commands Constructors

            _gainCmd      = new ViscaGain((byte)id, UpDownMode.Up);
            _gainValueCmd = new ViscaGainValue((byte)id, 0);
            _gainInquiry  = new ViscaGainInquiry((byte)id, new Action <int>(position => { updateGain(position); }));

            #endregion Gain Commands Constructors

            #region Iris Commands Constructors

            _irisCmd      = new ViscaIris((byte)id, UpDownMode.Up);
            _irisValueCmd = new ViscaIrisValue((byte)id, 0);
            _irisInquiry  = new ViscaIrisInquiry((byte)id, new Action <int>(position => { updateIris(position); }));

            #endregion Gain Commands Constructors

            #region Memory Commands Constructors

            _memorySetCmd    = new ViscaMemorySet((byte)id, 0);
            _memoryRecallCmd = new ViscaMemoryRecall((byte)id, 0);

            #endregion Memory Commands Constructors

            #region Mute Commands Constructors

            _muteCmd     = new ViscaMute((byte)id, OnOffMode.On);
            _muteInquiry = new ViscaMuteInquiry((byte)id, new Action <OnOffMode>(mode => { updateMute(mode); }));

            #endregion Mute Commands Constructors

            #region Power Commands Constructors

            _powerCmd     = new ViscaPower((byte)id, OnOffMode.On);
            _powerInquiry = new ViscaPowerInquiry((byte)id, new Action <OnOffMode>(mode => { updatePower(mode); }));

            #endregion Power Commands Constructors

            #region PTZ Commands Constructors

            _ptzHome            = new ViscaPTZHome((byte)id);
            _ptzPanSpeed        = new ViscaPanSpeed(_parameters.PanSpeedLimits);
            _ptzTiltSpeed       = new ViscaTiltSpeed(_parameters.TiltSpeedLimits);
            _ptzStop            = new ViscaPTZStop((byte)id, _ptzPanSpeed, _ptzTiltSpeed);
            _ptzUp              = new ViscaPTZUp((byte)id, _ptzPanSpeed, _ptzTiltSpeed);
            _ptzDown            = new ViscaPTZDown((byte)id, _ptzPanSpeed, _ptzTiltSpeed);
            _ptzLeft            = new ViscaPTZLeft((byte)id, _ptzPanSpeed, _ptzTiltSpeed);
            _ptzRight           = new ViscaPTZRight((byte)id, _ptzPanSpeed, _ptzTiltSpeed);
            _ptzUpLeft          = new ViscaPTZUpLeft((byte)id, _ptzPanSpeed, _ptzTiltSpeed);
            _ptzUpRight         = new ViscaPTZUpRight((byte)id, _ptzPanSpeed, _ptzTiltSpeed);
            _ptzDownLeft        = new ViscaPTZDownLeft((byte)id, _ptzPanSpeed, _ptzTiltSpeed);
            _ptzDownRight       = new ViscaPTZDownRight((byte)id, _ptzPanSpeed, _ptzTiltSpeed);
            _ptzAbsolute        = new ViscaPTZPosition((byte)id, false, _ptzPanSpeed, _ptzTiltSpeed, 0, 0);
            _ptzRelative        = new ViscaPTZPosition((byte)id, true, _ptzPanSpeed, _ptzTiltSpeed, 0, 0);
            _ptzPositionInquiry = new ViscaPTZPositionInquiry((byte)id, new Action <int, int>((panPosition, tiltPosition) => { updatePTZPosition(panPosition, tiltPosition); }));

            #endregion PTZ Commands Constructors

            #region RGain Commands Constructors

            _rGainCmd      = new ViscaRGain((byte)id, UpDownMode.Up);
            _rGainValueCmd = new ViscaRGainValue((byte)id, 0);
            _rGainInquiry  = new ViscaRGainInquiry((byte)id, new Action <int>(position => { updateRGain(position); }));

            #endregion RGain Commands Constructors

            #region Shutter Commands Constructors

            _shutterCmd      = new ViscaShutter((byte)id, UpDownMode.Up);
            _shutterValueCmd = new ViscaShutterValue((byte)id, 0);
            _shutterInquiry  = new ViscaShutterInquiry((byte)id, new Action <int>(position => { updateShutter(position); }));

            #endregion Gain Commands Constructors

            #region Title Commands Constructors

            _titleCmd     = new ViscaTitle((byte)id, OnOffMode.On);
            _titleInquiry = new ViscaTitleInquiry((byte)id, new Action <OnOffMode>(mode => { updateTitle(mode); }));

            #endregion Power Commands Constructors

            #region WB Commands Constructors

            _wbCmd     = new ViscaWBMode((byte)id, WBMode.Auto);
            _wbInquiry = new ViscaWBInquiry((byte)id, new Action <WBMode>(mode => { updateWB(mode); }));

            #endregion WB Commands Constructors

            #region WideDynamic Commands Constructors

            _wideDynamicCmd     = new ViscaWideDynamicMode((byte)id, OnOffMode.On);
            _wideDynamicInquiry = new ViscaWideDynamicInquiry((byte)id, new Action <OnOffMode>(mode => { updateWideDynamicMode(mode); }));

            #endregion WideDynamic Commands Constructors

            #region Zoom Commands Constructors

            _zoomStopCmd          = new ViscaZoomStop((byte)id);
            _zoomTeleCmd          = new ViscaZoomTele((byte)id);
            _zoomWideCmd          = new ViscaZoomWide((byte)id);
            _zoomSpeed            = new ViscaZoomSpeed(_parameters.ZoomSpeedLimits);
            _zoomTeleWithSpeedCmd = new ViscaZoomTeleWithSpeed((byte)id, _zoomSpeed);
            _zoomWideWithSpeedCmd = new ViscaZoomWideWithSpeed((byte)id, _zoomSpeed);
            _zoomPositionCmd      = new ViscaZoomPosition((byte)id, 0);
            _zoomPositionInquiry  = new ViscaZoomPositionInquiry((byte)id, new Action <int>(position => { updateZoomPosition(position); }));

            #endregion Zoom Commands Constructors

            _pollCommands.Add(_aeInquiry);
            _pollCommands.Add(_apertureInquiry);
            _pollCommands.Add(_backLightInquiry);
            _pollCommands.Add(_bGainInquiry);
            _pollCommands.Add(_expCompInquiry);
            _pollCommands.Add(_gainInquiry);
            _pollCommands.Add(_focusAutoInquiry);
            _pollCommands.Add(_focusPositionInquiry);
            _pollCommands.Add(_irisInquiry);
            _pollCommands.Add(_muteInquiry);
            _pollCommands.Add(_powerInquiry);
            _pollCommands.Add(_ptzPositionInquiry);
            _pollCommands.Add(_rGainInquiry);
            _pollCommands.Add(_shutterInquiry);
            _pollCommands.Add(_titleInquiry);
            _pollCommands.Add(_wbInquiry);
            _pollCommands.Add(_wideDynamicInquiry);
            _pollCommands.Add(_zoomPositionInquiry);
        }