/// <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); }
private void Write(byte[] bytes) { try { _serialPort.DiscardInBuffer(); _serialPort.DiscardOutBuffer(); _serialPort.Write(bytes, 0, bytes.Length); } catch (Exception e) { throw new TransmissionException(e); } }
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(); }
/// <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(); } }
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(); }
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; } }
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; }
public void DiscardInBuffer() { _logged.DiscardInBuffer(); _log.LogTrace("In buffer discarded"); }