示例#1
0
        private async Task ReadDataAsync(SerialPort serialPort)
        {
            var        buffer         = new byte[4096];
            Task <int> readStringTask = serialPort.BaseStream.ReadAsync(buffer, 0, 4096);

            var bytesRead = await readStringTask;

            _rawData += Encoding.ASCII.GetString(buffer, 0, bytesRead);

            // Check if a newline has received, indicating that a complete message should have read
            var lastIndexOfPrintln = _rawData.LastIndexOf("\r\n", StringComparison.Ordinal);

            if (lastIndexOfPrintln == -1)
            {
                return;
            }

            var completeMessages = _rawData.Substring(0, lastIndexOfPrintln);

            _rawData = _rawData.Remove(0, lastIndexOfPrintln);

            // Split message if more than one have been received
            var messages = completeMessages.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var message in messages)
            {
                _nrf24State.CountOfReceivedMessages++;
                SendRawMessage(message);

                // Every message has three parts splitted by a space
                // - record length & message type
                // - serial header
                // - packet data
                var parts = message.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                if (parts.Count() != 3)
                {
                    continue;
                }

                var nrf24Structure = new NRF24Structure
                {
                    DateTime      = DateTime.Now,
                    TypeAndLength = parts[0],
                    Header        = parts[1],
                    Data          = parts[2]
                };

                // Create the NRF24Header part
                nrf24Structure.NRF24Header = NRF24Hub.CreateNRF24Header(nrf24Structure);

                // Create the NRF24Data part
                nrf24Structure.NRF24Data = CreateNRF24Data(nrf24Structure);

                SendObject(nrf24Structure);
            }
        }
示例#2
0
        public NRF24Controller(
            IConnectionManager connectionManager,
            IOptions<GeneralSettings> generalSettings,
            NRF24State nrf24State,
            VeraSettings veraSettings)
        {
            // Make sure the serial capture process is only running once
            if (nrf24State.Started)
                return;

            nrf24State.Started = true;

            var hub = new NRF24Hub(connectionManager, generalSettings.Value, nrf24State, veraSettings);
            new Thread(() =>
            {
                Thread.CurrentThread.IsBackground = true;
                hub.StartSerialClient();
            }).Start();
        }
示例#3
0
        public NRF24Controller(
            IConnectionManager connectionManager,
            IOptions<GeneralSettings> generalSettings,
            NRF24State nrf24State,
            VeraSettings veraSettings)
        {
            // Make sure the serial capture process is only running once
            if (nrf24State.Started)
                return;

            nrf24State.Started = true;

            var hub = new NRF24Hub(connectionManager, generalSettings.Value, nrf24State, veraSettings);
            new Thread(() =>
            {
                Thread.CurrentThread.IsBackground = true;
                hub.StartSerialClient();
            }).Start();
        }