private void OpenPort()
 {
     Log.Log("Opening port...");
     _port.Open();
     Log.Log("Port was opened OK");
     //_port.ClearRtsControlToggle();
     //_port.SetRtsControlToggle();
     _port.DiscardInBuffer();
     _port.DiscardOutBuffer();
     SNetId = RetrieveSNetId(_openingTimeout);
     Log.Log("SNetId retreived");
 }
 public void DiscardInBuffer()
 {
     using (SerialPortStream serialSource = new SerialPortStream(SourcePort, 115200, 8, Parity.None, StopBits.One)) {
         serialSource.Open();
         serialSource.DiscardInBuffer();
     }
 }
        public async Task Disconnect()
        {
            await Task.Run(() =>
            {
                if (IoPort.IsOpen)
                {
                    State = ConnectionState.Disconnecting;
                    try
                    {
                        //IoPort.DataReceived -= serialPort_DataReceived;
                        IoPort.DiscardInBuffer();
                        IoPort.DiscardOutBuffer();
                        IoPort.Close();
                        Console.Out.WriteLine("Closed serialport.");
                    }
                    catch (Exception)
                    {
                        Console.Out.WriteLine("Failed to close serialport.");
                    }


                    State = ConnectionState.Disconnected;
                }
            });
        }
示例#4
0
 public override void CommClrBuff()
 {
     try
     {
         serial?.DiscardInBuffer();
         serial?.DiscardOutBuffer();
     }
     catch (Exception ex) { throw new Bsl430NetException(771, ex); }
 }
示例#5
0
 public void Open(string port, int baud)
 {
     IsOpen = true;
     _arduinoPort.PortName     = port;
     _arduinoPort.BaudRate     = baud;
     _arduinoPort.DtrEnable    = true;
     _arduinoPort.ReadTimeout  = 1;
     _arduinoPort.WriteTimeout = 1;
     _arduinoPort.Open();
     _arduinoPort.DiscardInBuffer();
     _arduinoPort.DiscardOutBuffer();
     _arduinoPort.DataReceived += DataRecieved;
 }
示例#6
0
 public void Close(bool auto)
 {
     if (com != null && com.IsOpen)
     {
         ComLogger.Log("com", string.Format("Close {0} [{1}]", com.PortName.ToUpper(), auto ? "CORE" : "USER"));
         Logger.LogMessage("CloseCom", "Close {0} [{1}]", com.PortName.ToUpper(), auto ? "CORE" : "USER");
         try { com.DiscardOutBuffer(); } catch { }
         try { com.DiscardInBuffer(); } catch { }
         try { com.Close(); } catch { }
         try { com.Dispose(); } catch { }
     }
     com = null;
 }
示例#7
0
        public async override Task ConnectAsync()
        {
            await _semaphoreSlimConnect.WaitAsync();

            // already connected
            if (Connected)
                return;

            serialPort.Open();

            // make sure we're in a halfway known state...
            var dxCommand = new StopDataAcquisitionCommand();
            await serialPort.WriteAsync(dxCommand.Command.Select(x => (byte)x).ToArray(), 0, dxCommand.Command.Length);

            await Task.Delay(100);
            serialPort.DiscardInBuffer();

            await WaitForStabilizedMotorSpeedAsync(TimeSpan.FromSeconds(10), throwOnFail: true);
            await UpdateDeviceInfoAsync();

            _semaphoreSlimConnect.Release();
        }     
示例#8
0
        public override async Task Send(string data)
        {
            await Task.Run(() =>
            {
                _serialStream.DiscardInBuffer();
                _serialStream.DiscardOutBuffer();

                var content = new List <byte>();
                content.AddRange(Encoding.ASCII.GetBytes(data));

                var buffer = content.ToArray();
                _serialStream.Write(buffer, 0, buffer.Length);

                DataSentObservable.OnNext(data);
            });
        }
示例#9
0
        public string ExecCommand(string command, int responseTimeout, string errorMessage)
        {
            try
            {
                port.DiscardOutBuffer();
                port.DiscardInBuffer();
                receiveNow.Reset();
                port.Write(command + "\r");

                string input = ReadResponse(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) { Log.Trace(ex.Message, ex.StackTrace, configuration.Verbose); }
            return("");
        }
示例#10
0
        public SerialPortStream OpenPort(string portName)
        {
            SerialPortStream serialPort = null;

            var retries = 3;

            while (retries > 0)
            {
                try
                {
                    serialPort = new SerialPortStream(portName, 9600, 8, Parity.None, StopBits.One);
                    serialPort.DiscardInBuffer();
                    serialPort.DiscardOutBuffer();
                    serialPort.ReadTimeout = 1000;
                    serialPort.Open();
                    break;
                }
                catch (Exception e)
                {
                    if (serialPort != null)
                    {
                        if (serialPort.IsOpen)
                        {
                            serialPort.Close();
                        }
                        serialPort.Dispose();
                        serialPort = null;
                    }

                    Console.WriteLine("Exception in OpenPort " + e.Message);
                    retries--;
                }
            }

            return(serialPort);
        }
        private bool DeviceAction(Action <SerialPortStream, CancellationToken> action)
        {
            CancellationToken token = new CancellationToken();
            DateTime          start = DateTime.Now;
            var task = Task.Factory.StartNew(() =>
            {
                try
                {
                    if (serialPort == null || !serialPort.IsOpen)
                    {
                        if (serialPort != null && serialPort.IsOpen)
                        {
                            performClose();
                        }

                        serialPort = new SerialPortStream(this.portName);
                        serialPort.Open();
                        Start(serialPort);
                    }


                    // discard the input buffer after
                    if (serialPort.ReadBufferSize > 0)
                    {
                        try
                        {
                            serialPort.DiscardInBuffer();
                        }
                        catch (Exception exp)
                        {
                            logger.Warn(exp, "Failed to clear in buffer for NTI XL2 on port {0}", portName);
                        }
                    }
                    if (serialPort.WriteBufferSize > 0)
                    {
                        try
                        {
                            serialPort.DiscardOutBuffer();
                        }
                        catch (Exception exp)
                        {
                            logger.Warn(exp, "Failed to clear in buffer for NTI XL2 on port {0}", portName);
                        }
                    }

                    action(serialPort, token);
                    OnConnectionStatus(true);
                }
                catch (Exception exp)
                {
                    OnConnectionStatus(false);
                    logger.Error(exp, "Failed to execute NTI XL2 action on port {0}.", portName);
                    performClose();
                    return(false);
                }

                return(true);
            }, token);

            if (!task.Wait(this.TimeToTimeOut, token))
            {
                timeouts++;
                logger.Error("NTI XL2 device communication timed out after {0} ms.", (DateTime.Now - start).TotalMilliseconds);
                OnConnectionStatus(false);
                token = new CancellationToken();
                if (timeouts >= 2)
                {
                    timeouts = 0;
                    var closeTask = Task.Factory.StartNew(() =>
                    {
                        performClose(true);
                    }, token);
                    if (!closeTask.Wait(this.TimeToTimeOut, token))
                    {
                        logger.Trace("Time out trying to close the connection after a time out.");
                    }
                }
                return(false);
            }
            return(task.Result);
        }
示例#12
0
 public void ClearInputBuffer()
 {
     myserial.DiscardInBuffer();
 }
示例#13
0
        public void Open()
        {
            if (!IsOpen)
            {
                try { Close(true); }
                catch { }

                try
                {
                    com              = new SerialPortStream();
                    com.PortName     = mPortName;
                    com.BaudRate     = mBaudRate;
                    com.DataBits     = 8;
                    com.Parity       = Parity.None;
                    com.StopBits     = StopBits.One;
                    com.Handshake    = Handshake.None;
                    com.NewLine      = "\n";
                    com.WriteTimeout = 1000;                     //se si blocca in write

                    com.DtrEnable = Settings.GetObject("HardReset Grbl On Connect", false);
                    com.RtsEnable = Settings.GetObject("HardReset Grbl On Connect", false);

                    if (Settings.GetObject("Firmware Type", Firmware.Grbl) == Firmware.Marlin)
                    {
                        com.DtrEnable = true;
                    }

                    ComLogger.Log("com", string.Format("Open {0} @ {1} baud {2}", com.PortName.ToUpper(), com.BaudRate, GetResetDiagnosticString()));
                    Logger.LogMessage("OpenCom", "Open {0} @ {1} baud {2}", com.PortName.ToUpper(), com.BaudRate, GetResetDiagnosticString());

                    com.Open();

                    com.DiscardOutBuffer();
                    com.DiscardInBuffer();
                }
                catch (System.IO.IOException ioex)
                {
                    if (char.IsDigit(mPortName[mPortName.Length - 1]) && char.IsDigit(mPortName[mPortName.Length - 2]))                     //two digits port like COM23
                    {
                        //FIX https://github.com/arkypita/LaserGRBL/issues/31

                        try
                        {
                            com.PortName = mPortName.Substring(0, mPortName.Length - 1);                             //remove last digit and try again

                            ComLogger.Log("com", string.Format("Open {0} @ {1} baud {2}", com.PortName.ToUpper(), com.BaudRate, GetResetDiagnosticString()));
                            Logger.LogMessage("OpenCom", "Retry opening {0} as {1} (issue #31)", mPortName.ToUpper(), com.PortName.ToUpper());

                            com.Open();
                            com.DiscardOutBuffer();
                            com.DiscardInBuffer();
                        }
                        catch
                        {
                            com = null;
                            throw ioex;                             //throw the original ex - not the new one!
                        }
                    }
                    else
                    {
                        com = null;
                    }
                }
            }
        }
示例#14
0
 protected override Task <MBusFrame> ReadFrame()
 {
     _stream.DiscardInBuffer();
     return(ReadFrameInternal());
 }