コード例 #1
0
        /// <summary>
        ///     Captures the <see cref="System.IO.Ports.SerialPort.DataReceived" /> event of a serial port and returns an
        ///     observable sequence of the events.
        /// </summary>
        /// <param name="port">The serial port that will act as the event source.</param>
        /// <returns><see cref="IObservable{Char}" /> - an observable sequence of events.</returns>
        public static IObservable <EventPattern <SerialDataReceivedEventArgs> > ObservableDataReceivedEvents(
            this ISerialPort port)
        {
            Contract.Requires(port != null);
            Contract.Ensures(Contract.Result <IObservable <EventPattern <SerialDataReceivedEventArgs> > >() != null);
            var portEvents = Observable.FromEventPattern <SerialDataReceivedEventHandler, SerialDataReceivedEventArgs>(
                handler =>
            {
                Log.Debug("Event: SerialDataReceived");
                return(handler.Invoke);
            },
                handler =>
            {
                // We must discard stale data when subscribing or it will pollute the first element of the sequence.
                port.DiscardInBuffer();
                port.DataReceived += handler;
                Log.Debug("Listening to DataReceived event");
            },
                handler =>
            {
                port.DataReceived -= handler;
                Log.Debug("Stopped listening to DataReceived event");
            });

            return(portEvents);
        }
コード例 #2
0
ファイル: SerialPortTransmitter.cs プロジェクト: esandre/Lib
 private void Write(byte[] bytes)
 {
     try
     {
         _serialPort.DiscardInBuffer();
         _serialPort.DiscardOutBuffer();
         _serialPort.Write(bytes, 0, bytes.Length);
     }
     catch (Exception e)
     {
         throw new TransmissionException(e);
     }
 }
コード例 #3
0
        private void ConfigurePort(ISerialPort serialPort)
        {
            serialPort.BaudRate = BAUD_RATE;
            serialPort.NewLine  = NEWLINE;
            serialPort.StopBits = STOP_BITS;
            serialPort.DataBits = DATA_BITS;
            serialPort.Parity   = PARITY;

            serialPort.Handshake    = HAND_SHAKE;
            serialPort.ReadTimeout  = READ_TIMEOUT;
            serialPort.WriteTimeout = WRITE_TIMEOUT;

            serialPort.Open();
            serialPort.DiscardInBuffer();
            serialPort.DiscardOutBuffer();
        }
コード例 #4
0
ファイル: SerialPortReceiver.cs プロジェクト: esandre/Lib
        /// <remarks>The port must be open before the call</remarks>
        public async Task <byte[]> ReadAsync(CancellationToken cancellationToken)
        {
            var received     = new List <byte>();
            var captureBegan = false;
            var captureEnd   = false;

            try
            {
                // ReSharper disable once LoopVariableIsNeverChangedInsideLoop
                while (!captureEnd)
                {
                    await Task.Run(() =>
                    {
                        var nextByte = _serialPort.ReadByte();

                        if (nextByte == -1)
                        {
                            captureEnd = true;
                            return;
                        }
                        if (nextByte == _packetBeginning)
                        {
                            captureBegan = true;
                        }
                        if (nextByte == _packetEnd && captureBegan)
                        {
                            captureEnd = true;
                        }

                        received.Add(Convert.ToByte(nextByte));
                    }, cancellationToken);
                }

                return(received.ToArray());
            }
            catch (Exception e)
            {
                throw new ReceptionException(e, received.ToArray());
            }
            finally
            {
                _serialPort.DiscardInBuffer();
                _serialPort.DiscardOutBuffer();
            }
        }
コード例 #5
0
        private void ConfigurePortForDiscovery(ISerialPort serialPort)
        {
            serialPort.ReadBufferSize  = READ_BUFFER_SIZE;
            serialPort.WriteBufferSize = WRITE_BUFFER_SIZE;

            serialPort.BaudRate = BAUD_RATE;
            serialPort.NewLine  = NEWLINE;
            serialPort.StopBits = STOP_BITS;
            serialPort.DataBits = DATA_BITS;
            serialPort.Parity   = PARITY;

            //Not sure why the following three are differnet during discovery.
            serialPort.Handshake    = Handshake.RequestToSendXOnXOff; //Because it works for either K24 or WK43
            serialPort.ReadTimeout  = 1000;
            serialPort.WriteTimeout = 1000;

            serialPort.Open();
            serialPort.DiscardInBuffer();
            serialPort.DiscardOutBuffer();
        }
コード例 #6
0
        public string ExecCommand(ISerialPort port, string command, int responseTimeout, string errorMessage)
        {
            try
            {
                port.DiscardOutBuffer();
                port.DiscardInBuffer();
                _receiveNow.Reset();
                port.Write(command + "\r");

                string input = ReadResponse(port, responseTimeout);
                if ((input.Length == 0) || ((!input.EndsWith("\r\n> ")) && (!input.EndsWith("\r\nOK\r\n"))))
                {
                    throw new ApplicationException("No success message was received.");
                }
                return(input);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #7
0
ファイル: IOThread.cs プロジェクト: NTThyssen/MissionControl
 private void Open()
 {
     //_session.IsTryingConnect = true;
     try
     {
         _port.Open();
         _port.DiscardInBuffer();
         _session.Connected = true;
         return;
     }
     catch (IOException e)
     {
         Console.WriteLine("Serial IO error in opening: {0}", e.Message);
         _session.Connected = false;
         StopConnection();
         return;
     }
     catch (InvalidOperationException e)
     {
         Console.WriteLine("Serial invalid operation error: {0}", e.Message);
     }
     StopConnection();
     _session.Connected = false;
 }
コード例 #8
0
 public void DiscardInBuffer()
 {
     _logged.DiscardInBuffer();
     _log.LogTrace("In buffer discarded");
 }