private void serialPort_MessageReceived(object sender, MessageReceivedEventArgs args)
        {
            var message = BitConverter.ToString(args.Data);

            _logger.LogInfoMessage($"Serial port data arrived => {message}");
            MessageReceived?.Invoke(this, args.Data);
        }
Ejemplo n.º 2
0
        private async void Desktop_Startup(object sender, ControlledApplicationLifetimeStartupEventArgs e)
        {
            var version = Assembly.GetEntryAssembly()?.GetName().Version;

            _logger.LogInfoMessage($"App startup begin. version:{version}");
            var settings = _settingsManager.GetAppSettings();

            _logger.LogInfoMessage($"App starting with user settings => :\n{JsonConvert.SerializeObject(settings, Formatting.Indented)}");

            _logger.LogInfoMessage("Connect to UGCS");
            await _ugcsConnection.ConnectAsync(settings.UGCSHost, settings.UGCSPort, settings.UGCSLogin, settings.UGCSPassword);

            if (_ugcsConnection.ConnectionStatus == UgcsConnectionStatus.Connected)
            {
                _logger.LogInfoMessage("Connected to UGCS");

                _logger.LogInfoMessage("Initialize VehicleManager");
                await _vehiclesManager.Initialize();

                _logger.LogInfoMessage("VehicleManager initialized");
            }
            else
            {
                _logger.LogError("Not connected to UGCS");
            }

            _logger.LogInfoMessage("Initialize PTZ transport");
            // TODO
            //await _ptzTransport.Initialize();
            _ptzTransport.Initialize();
            _logger.LogInfoMessage("PTZ transport initialized");

            _logger.LogInfoMessage("App startup end");
        }
Ejemplo n.º 3
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.º 4
0
        public async Task <List <Vehicle> > GetVehiclesAsync()
        {
            _logger.LogInfoMessage("GetVehiclesAsync requested");

            var objRequestTask = Task <List <DomainObjectWrapper> > .Factory.StartNew(() => _connection.GetObjectList <Vehicle>());

            try
            {
                var responseObjects = await objRequestTask;
                _logger.LogInfoMessage($"GetVehiclesAsync got {responseObjects.Count} response objects");
                return(responseObjects.Select(x => x.Vehicle).ToList());
            }
            catch (Exception e)
            {
                _logger.LogException(e);
                throw;
            }
        }
Ejemplo n.º 5
0
        static async Task Main(string[] args)
        {
            setupLogConfig();

            _logger.LogInfoMessage($"App started => args:{args.ToJson()}");

            Terminal.WriteLine("UGCS DroneTracker - PTZ Probe tool", ConsoleColor.Yellow);

            // create a new instance of the class that we want to parse the arguments into
            var options = new Options();

            // if everything went out fine the ParseArguments method will return true
            ArgumentParser.Current.ParseArguments(args, options);
            _logger.LogInfoMessage($"Options parsed => options:\n{options.ToJson()}");

            _transport = options.TransportType == PTZDeviceTransportType.Udp
                ? (IPTZDeviceMessagesTransport) new UdpPTZMessagesTransport(options.PTZUdpHost, options.PTZUdpPort)
                : new SerialPortPTZMessagesTransport(options.PTZSerialPortName, options.PTZSerialPortSpeed);

            logInfo("Initialize transport...");
            try
            {
                // TODO
                // await _transport.Initialize();
                _transport.Initialize();
                logOk("Transport initialized");
            }
            catch (Exception e)
            {
                _logger.LogException(e);
                Terminal.WriteLine("Transport initialize error! Check logs to details.", ConsoleColor.Red);

                Terminal.WriteLine("Press enter to exit...");
                Terminal.ReadLine();

                Environment.Exit(1);
            }

            logInfo("Create PTZ device controller");

            _settingsManager = new ApplicationSettingsManager(null);

            _defaultCoreOptions = _settingsManager.GetAppSettings();

            _requestBuilder  = new PelcoRequestBuilder(_defaultCoreOptions.PelcoCodesMapping);
            _responseDecoder = new PelcoResponseDecoder(_defaultCoreOptions.PelcoCodesMapping);

            _controller = new PelcoDeviceController(_transport, _settingsManager, _requestBuilder, _responseDecoder);

            logInfo("PTZ device controller created");

            await requestCurrentPan(options);

            await requestCurrentTilt(options);

            _transport.MessageSending  += _transport_MessageSending;
            _transport.MessageReceived += _transport_MessageReceived;

            await requestMaxPan(options);

            await requestMaxTilt(options);

            logInfo("Try to set pan by 0x71 opCode");
            if (_maxPan.HasValue)
            {
                await requestSetPan(options, (ushort)(_maxPan.Value / 2));
                await requestSetPan(options, (ushort)(_maxPan.Value));
                await requestSetPan(options, 0);
                await requestSetPan(options, (ushort)(_initialPan * 100));
            }
            else
            {
                await requestSetPan(options, 9000);
                await requestSetPan(options, 18000);
                await requestSetPan(options, 0);
                await requestSetPan(options, (ushort)(_initialPan * 100));
            }

            logInfo("Try to set pan by 0x4B opCode");
            byte pelcoSetPanCode = 0x4b;

            if (_maxPan.HasValue)
            {
                await requestSetPan(options, (ushort)(_maxPan.Value / 2), pelcoSetPanCode);
                await requestSetPan(options, (ushort)(_maxPan.Value), pelcoSetPanCode);
                await requestSetPan(options, 0, pelcoSetPanCode);
                await requestSetPan(options, (ushort)(_initialPan * 100), pelcoSetPanCode);
            }
            else
            {
                await requestSetPan(options, 9000, pelcoSetPanCode);
                await requestSetPan(options, 0, pelcoSetPanCode);
                await requestSetPan(options, (ushort)(_initialPan * 100), pelcoSetPanCode);
            }


            logInfo("Try to set tilt by 0x73 opCode");
            if (_maxTilt.HasValue)
            {
                await requestSetTilt(options, (ushort)(_maxTilt.Value / 2));
                await requestSetTilt(options, (ushort)(_maxTilt.Value));
                await requestSetTilt(options, 0);
                await requestSetTilt(options, (ushort)(_initialTilt * 100));
            }
            else
            {
                await requestSetTilt(options, 4500);
                await requestSetTilt(options, 0);
                await requestSetTilt(options, (ushort)(_initialTilt * 100));
            }

            byte pelcoSetTiltCode = 0x4d;

            logInfo("Try to set tilt by 0x4D opCode");
            if (_maxTilt.HasValue)
            {
                await requestSetTilt(options, (ushort)(_maxTilt.Value / 2), pelcoSetTiltCode);
                await requestSetTilt(options, (ushort)(_maxTilt.Value), pelcoSetTiltCode);
                await requestSetTilt(options, 0, pelcoSetTiltCode);
                await requestSetTilt(options, (ushort)(_initialTilt * 100), pelcoSetTiltCode);
            }
            else
            {
                await requestSetTilt(options, 4500, pelcoSetTiltCode);
                await requestSetTilt(options, 0, pelcoSetTiltCode);
                await requestSetTilt(options, (ushort)(_initialPan * 100), pelcoSetTiltCode);
            }


            _logger.LogInfoMessage($"Done. Waiting user to exit.");

            Terminal.WriteLine();
            Terminal.WriteLine("Done.", ConsoleColor.Yellow);
            Terminal.WriteLine("Press enter to exit...", ConsoleColor.Yellow);

            _transport.Teardown();

            Terminal.ReadLine();
        }
Ejemplo n.º 6
0
 private void _udpClient_ClientStopped(object sender, AsyncNet.Udp.Client.Events.UdpClientStoppedEventArgs e)
 {
     _logger.LogInfoMessage("UDP client stopped");
     OnConnectionStatusChanged(isConnected: false);
 }