Ejemplo n.º 1
0
        private static async Task requestSetTilt(Options options, ushort tiltCoordinate, byte opCode = 0x73)
        {
            logInfo($"Try to request set tilt to {tiltCoordinate}...");

            var coordinateBytes = BitConverter.GetBytes(tiltCoordinate);

            var requestSetPanMessage = new PelcoDEMessage(options.PTZDeviceAddress, opCode, coordinateBytes[1], coordinateBytes[0]);

            try
            {
                var responseMessage = await SendMessage(requestSetPanMessage);

                if (responseMessage != null)
                {
                    logOk($"Request set tilt done");
                }
                else
                {
                    logError("Set tilt request got null response message");
                }
            }
            catch (TaskCanceledException)
            {
                logError("Set tilt request cancelled by timeout");
            }
            catch (Exception e)
            {
                Terminal.WriteLine("Set tilt request error! Check logs to details.", ConsoleColor.Red);
                _logger.LogException(e);
            }
        }
Ejemplo n.º 2
0
        private static async Task requestMaxPan(Options options)
        {
            logInfo("Try to request max pan...");

            var requestMaxPanMessage = new PelcoDEMessage(options.PTZDeviceAddress, 0x55);

            try
            {
                var responseMessage = await SendMessage(requestMaxPanMessage);

                if (responseMessage != null)
                {
                    _logger.LogInfoMessage($"Request max pan done, message={responseMessage}");
                    var maxPan = PelcoResponseDecoder.GetUInt16((PelcoDEMessage)responseMessage);
                    _maxPan = maxPan;

                    logOk($"Request max pan done, Max Pan={maxPan}");
                }
                else
                {
                    logError($"Request max pan got null response message");
                }
            }
            catch (TaskCanceledException)
            {
                logError("Max pan request cancelled by timeout");
            }
            catch (Exception e)
            {
                Terminal.WriteLine("Max pan request! Check logs to details.", ConsoleColor.Red);
                _logger.LogException(e);
            }
        }
Ejemplo n.º 3
0
        private static void _transport_MessageReceived(object sender, byte[] e)
        {
            var pelcoMessage = PelcoDEMessage.FromBytes(e);

            _logger.LogInfoMessage($"Pelco message received => {pelcoMessage?.ToString() ?? "<null>"}");
            if (pelcoMessage == null)
            {
                return;
            }

            _cts.Dispose();
            var trySetResult = _sendMessageTaskCompletionSource?.TrySetResult(pelcoMessage);

            _logger.LogInfoMessage($"Set async task result: {trySetResult}");
        }
Ejemplo n.º 4
0
        private void transport_MessageReceived(object sender, byte[] messageData)
        {
            var pelcoMessage = PelcoDEMessage.FromBytes(messageData);

            _logger.LogInfoMessage($"Pelco message received => {pelcoMessage?.ToString() ?? "<null>"}");
            if (pelcoMessage == null)
            {
                return;
            }

            var settings = _settingsManager.GetAppSettings();

            var responseType = _responseDecoder.GetResponseType(pelcoMessage);

            _logger.LogInfoMessage($"Pelco response type => {responseType?.ToString() ?? "<null>"}");

            switch (responseType)
            {
            case null:
                return;

            case PelcoDEMessageType.SetPanCompleteResponse:
                _panTaskCompletionSource?.TrySetResult(true);
                return;

            case PelcoDEMessageType.RequestPanResponse:
            {
                var panAngleToCoordinatesFactor = settings.PTZPanAngleToCoordinateFactor;
                var angle = PelcoResponseDecoder.GetUInt16(pelcoMessage) / panAngleToCoordinatesFactor / 100;
                _logger.LogDebugMessage($"Pelco RequestPanResponse received => angle: {angle}");
                _panRequestCTS.Dispose();
                _requestPanTaskCompletionSource?.TrySetResult(angle);
                return;
            }

            case PelcoDEMessageType.RequestTiltResponse:
            {
                var tiltAngleToCoordinatesFactor = settings.PTZTiltAngleToCoordinateFactor;
                var angle = PelcoResponseDecoder.GetUInt16(pelcoMessage) / tiltAngleToCoordinatesFactor / 100;
                _logger.LogDebugMessage($"Pelco RequestTiltResponse received => angle: {angle}");
                _tiltRequestCTS.Dispose();
                _requestTiltTaskCompletionSource?.TrySetResult(angle);
                return;
            }
            }
        }
Ejemplo n.º 5
0
        public static PelcoDEMessage FromBytes(byte[] dataBytes)
        {
            if (dataBytes == null)
            {
                return(null);
            }
            if (dataBytes.Length != 7)
            {
                return(null);
            }
            if (dataBytes[0] != 0xFF)
            {
                return(null);
            }

            var message  = new PelcoDEMessage(dataBytes);
            var checkSum = PelcoDEMessage.calcCheckSum(
                message.DeviceAddress,
                message.Command1, message.Command2,
                message.DataH, message.DataL
                );

            return(checkSum != dataBytes[6] ? null : message);
        }