Пример #1
0
        private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;

            Byte[] inData = new Byte[sp.BytesToRead];

            // read all available bytes from serial port in one chunk
            try
            {
                sp.Read(inData, 0, sp.BytesToRead);
            }
            catch (Exception ex)
            {
                WriteTxtLog($"Serial port read failed: {ex}");
                return;
            }

            // DEBUG: display bytes read
            Console.WriteLine("<= RX ({0}) [{1}]", inData.Length, ByteArrayToHexString(inData));

            // parse all bytes read through BGLib parser
            for (int i = 0; i < inData.Length; i++)
            {
                bglib.Parse(inData[i]);
            }
        }
        private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            var sp     = (SerialPort)sender;
            var inData = new byte[sp.BytesToRead];

            sp.Read(inData, 0, sp.BytesToRead);
            foreach (var t in inData)
            {
                _bglib.Parse(t);
            }
        }
Пример #3
0
        private void Run()
        {
            var buffer = new byte[128]; // The serial port normally only yields 1 byte at a time

            while (!_stopThread && _serialPort != null && _serialPort.IsOpen)
            {
                var readBytes = _serialPort.Read(buffer, 0, buffer.Length);
                for (var i = 0; i < readBytes; i++)
                {
                    _bgLib.Parse(buffer[i]);
                }
            }
        }
Пример #4
0
        private void StartSerialRxConsumerTask()
        {
            _serialRxConsumerTaskCTS = new CancellationTokenSource();
            var cancelToken = _serialRxConsumerTaskCTS.Token;

            _serialRxConsumerTask = Task.Factory.StartNew(() => {
                while (true)
                {
                    cancelToken.ThrowIfCancellationRequested();
                    if (_serialRxQueue.IsCompleted)
                    {
                        throw new Exception("SerialRxQueue has been completed");
                    }
                    if (IsDisposed)
                    {
                        return;
                    }

                    byte[] chunk;
                    var success = _serialRxQueue.TryTake(out chunk, 5, cancelToken);
                    if (success)
                    {
                        foreach (var b in chunk)
                        {
                            _bglib.Parse(b);
                        }
                    }
                }
            }, cancelToken,  // Recommendation via Stephen (Async man)
                             //    TaskCreationOptions.RunContinuationsAsynchronously
                             //  | TaskCreationOptions.HideScheduler
                             //   | TaskCreationOptions.DenyChildAttach
                                                          TaskCreationOptions.LongRunning,
                                                          TaskScheduler.Default
                                                          );
        }