Beispiel #1
0
        public string ReadResponse(int timeout)
        {
            string buffer = string.Empty;

            try
            {
                do
                {
                    if (receiveNow.WaitOne(timeout, false))
                    {
                        string t = port.ReadExisting();
                        buffer += t;
                        //Thread.Sleep(100);
                    }
                    else
                    {
                        if (buffer.Length > 0)
                        {
                            throw new ApplicationException("Response received is incomplete.");
                        }
                        else
                        {
                            throw new ApplicationException("No data received from phone.");
                        }
                    }
                }while (!buffer.EndsWith("\r\nOK\r\n") && !buffer.EndsWith("\r\n> ") && !buffer.EndsWith("\r\nERROR\r\n"));
            }
            catch (Exception ex) { Log.Trace(ex.Message, ex.StackTrace, configuration.Verbose); }
            return(buffer);
        }
Beispiel #2
0
        private static void SpSteam_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string barcode = spSteam.ReadExisting();

            //string barcode = spSteam.ReadLine();
            Console.Write("<{0}>", barcode);
        }
Beispiel #3
0
        private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string data = serialPort.ReadExisting();

            try
            {
                if (data.Contains("ACK"))
                {
                    data = data.Substring(5);
                }
                data = data.Substring(data.IndexOf('#') + 1, data.IndexOf('$') - data.IndexOf('#') - 1);
            }
            catch (Exception)
            {
                // throw;
            }

            if (data.StartsWith("DONE:"))
            {
                serialPort.Write("#SEND$");
            }
            else if (data.StartsWith("MAC:"))
            {
                serialPort.WriteLine("#ACK$");
            }
            Console.WriteLine(data);
        }
Beispiel #4
0
        /// <summary>
        /// Data Received from Arduino event
        /// </summary>
        /// <param name="sender">Serial port - sender</param>
        /// <param name="e">Event arguments</param>
        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            _serialPort = (SerialPortStream)sender;
            string message = _serialPort.ReadExisting();

            if (!String.IsNullOrEmpty(message) && DataReceived != null)
            {
                DataReceived(message);
            }
        }
Beispiel #5
0
        internal static void OpenPort(
            string portLongName,
            int baudRate      = 9600,
            bool dtrEnable    = false,
            Parity parity     = Parity.None,
            StopBits stopBits = StopBits.One,
            int dataBits      = 8
            )
        {
            Match match = Plugin.ComNameRegex.Match(portLongName);

            if (!match.Success)
            {
                throw new Exception("Port must have 'COM' type.");
            }
            Plugin.HostInstance.log(nameof(Serial) + ": initializing port: " + portLongName);
            string portComName = match.Value;
            var    port        = new SerialPortStream {
                PortName  = portComName,
                BaudRate  = baudRate,
                DtrEnable = dtrEnable,
                Parity    = parity,
                StopBits  = stopBits,
                DataBits  = dataBits,
                Encoding  = Encoding.UTF8
            };

            port.Open();

            Plugin.OpenedPorts.Add(portLongName, port);

            Plugin.HostInstance.log(nameof(Serial) + ": subscribing for port: " + portLongName);
            port.DataReceived += delegate {
                // added try catch to fix crashing when closing VC
                try {
                    Plugin.PortMessage = DecodeHexMessage(port.ReadExisting());
                    if (!string.IsNullOrWhiteSpace(Plugin.PortMessage) &&
                        PluginOptions.GenEventOnReceive)
                    {
                        Plugin.HostInstance.triggerEvent(
                            "Serial.Received", new List <string> {
                            port.PortName,
                            Plugin.PortMessage
                        }
                            );
                    }
                }
                catch {
                    //
                }
            };

            SelectPort(portComName);
            Plugin.HostInstance.log(nameof(Serial) + ": opened port: " + portLongName);
        }
Beispiel #6
0
        private void DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            ReceivedData     = _arduinoPort.ReadExisting();
            _lastLineBuffer += ReceivedData;

            while (_lastLineBuffer.Contains(NEW_LINE_CHAR))
            {
                LastLine        = _lastLineBuffer.GetBefore(NEW_LINE_CHAR);
                _lastLineBuffer = _lastLineBuffer.GetAfter(NEW_LINE_CHAR);
                LineArrived?.Invoke(this, new EventArgs());
            }

            DataArrived?.Invoke(this, new EventArgs());
        }
Beispiel #7
0
        public FanController(string portPath)
        {
            uint l = 0;

            _port = new SerialPortStream(portPath, baudrate);
            _port.Open();

            //Wait until data arrived, we expect 15 bytes
            l = 0;
            while (_port.BytesToRead == 0)
            {
                Thread.Sleep(10);
                l++;
                if (l == timeout)
                {
                    _port.Close();
                    _port.Dispose();
                    _port = null;
                    throw new OperationCanceledException("Timeout");
                }
            }

            string ident = _port.ReadExisting();

            Console.WriteLine("--- Hello message start --- ");
            Console.WriteLine(ident);
            Console.WriteLine("--- Hello message end --- ");

            if (!ident.Contains(IDMSG))
            {
                _port.Close();
                _port.Dispose();
                _port = null;
                throw new OperationCanceledException("Not a fan controller!");
            }
        }
        public void ReadToResetWithMbcs3()
        {
            using (SerialPortStream src = new SerialPortStream(SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = TimeOut; src.ReadTimeout = TimeOut;
                    dst.WriteTimeout = TimeOut; dst.ReadTimeout = TimeOut;
                    src.Open(); Assert.That(src.IsOpen, Is.True);
                    dst.Open(); Assert.That(dst.IsOpen, Is.True);

                    src.Write(new byte[] { 0xE2, 0x82, 0xAC, 0x40, 0x41, 0x62 }, 0, 6);
                    Assert.That(() => { dst.ReadLine(); }, Throws.Exception.TypeOf <TimeoutException>());

                    Assert.That(dst.ReadChar(), Is.EqualTo((int)'€'));
                    Assert.That(dst.ReadByte(), Is.EqualTo(0x40));
                    Assert.That(dst.ReadExisting(), Is.EqualTo("Ab"));
                }
        }
        public void ReadToResetWithMbcs2()
        {
            using (SerialPortStream src = new SerialPortStream(SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = TimeOut; src.ReadTimeout = TimeOut;
                    dst.WriteTimeout = TimeOut; dst.ReadTimeout = TimeOut;
                    src.Open(); Assert.That(src.IsOpen, Is.True);
                    dst.Open(); Assert.That(dst.IsOpen, Is.True);

                    src.Write(new byte[] { 0xE2, 0x82, 0xAC, 0x40, 0x41, 0x62 }, 0, 6);
                    Assert.That(() => { dst.ReadLine(); }, Throws.Exception.TypeOf <TimeoutException>());

                    // So now we should have data in the character cache, but we'll ready a byte.
                    Assert.That(dst.ReadByte(), Is.EqualTo(0xE2));
                    Assert.That(dst.ReadExisting(), Is.EqualTo("��@Ab"));
                }
        }
Beispiel #10
0
        public void SendReceive(ArduinoCommand cmd, out ArduinoCommand resp)
        {
            const long timeout = 2000;

            byte[] packet = cmd.Build();
            port.ReadExisting();
            log.Info("Отправляем команду: {0}", Encoding.ASCII.GetString(packet));
            port.Write(packet, 0, packet.Length);

            if (!ReadPort(packet, 3, timeout))
            {
                log.Error("Не удалось прочитать заголовок команды");
                port.Flush();
                throw new IOException();
            }
            if (packet[0] != ':')
            {
                log.Error("Заголовок команды содержит неверный стартовый символ");
                port.Flush();
                throw new IOException();
            }
            string strLen  = Encoding.ASCII.GetString(packet, 1, 2);
            int    len     = int.Parse(strLen, NumberStyles.AllowHexSpecifier);
            string strResp = "";

            if (len > 0)
            {
                packet = new byte[len];
                if (!ReadPort(packet, len, timeout))
                {
                    log.Error("Не удалось прочитать команду: неправильная длина");
                    port.Flush();
                    throw new IOException();
                }
                strResp = Encoding.ASCII.GetString(packet, 1, packet.Length - 2);
            }
            resp = new ArduinoCommand
            {
                Command    = Encoding.ASCII.GetString(packet, 0, 1)[0],
                Parameters = new List <string>(strResp.Split(new  [] { ',' }, StringSplitOptions.RemoveEmptyEntries))
            };

            log.Info("Получена команда {0} {1}", resp.Command, strResp);
        }
        public void SerialPortStream_ReadTo_Normal()
        {
            using (SerialPortStream src = new SerialPortStream(c_SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(c_DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = c_Timeout; src.ReadTimeout = c_Timeout;
                    dst.WriteTimeout = c_Timeout; dst.ReadTimeout = c_Timeout;
                    src.Open(); Assert.IsTrue(src.IsOpen);
                    dst.Open(); Assert.IsTrue(dst.IsOpen);

                    string s;

                    src.Write("superfoobar");
                    s = dst.ReadTo("foo");
                    Assert.AreEqual("super", s);

                    s = dst.ReadExisting();
                    Assert.AreEqual("bar", s);
                }
        }
        public void ReadToNormal()
        {
            using (SerialPortStream src = new SerialPortStream(SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = TimeOut; src.ReadTimeout = TimeOut;
                    dst.WriteTimeout = TimeOut; dst.ReadTimeout = TimeOut;
                    src.Open(); Assert.That(src.IsOpen, Is.True);
                    dst.Open(); Assert.That(dst.IsOpen, Is.True);

                    string s;

                    src.Write("superfoobar");
                    s = dst.ReadTo("foo");
                    Assert.That(s, Is.EqualTo("super"));

                    // Sleep for 100ms to allow all data to be sent and received. Else we might not receive the
                    // entire string, and sometimes only get it partially.
                    Thread.Sleep(100);
                    s = dst.ReadExisting();
                    Assert.That(s, Is.EqualTo("bar"));
                }
        }
Beispiel #13
0
        private void SerialPortAutoDiscover(object sender, SerialDataReceivedEventArgs e)
        {
            Console.WriteLine("AutoDiscover readline");
            Console.WriteLine(autoDiscoverPort);
            int nodeid = 0;
            //TODO try catch serial disconnected/notfound
            string data = autoDiscoverPort.ReadExisting();

            if (SerialMessageParser.Parse(data).StartsWith("NodeMcu"))
            {
                data = SerialMessageParser.Parse(data);
                int.TryParse(SerialMessageParser.GetValue(data), out nodeid);
                Console.WriteLine(data);
            }

            if (nodeid != 0)
            {
                Console.WriteLine("NodeMCU found");
                autoDiscoverPort.Write(SerialMessageParser.Encode("ACK"));
                trackers.Add(autoDiscoverPort.PortName, nodeid);
                autoDiscoverPort.Close();
            }
            Console.WriteLine("yeet");
        }
Beispiel #14
0
 private void DataRecieved(object sender, RJCP.IO.Ports.SerialDataReceivedEventArgs e)
 {
     LastRecieved = _arduinoPort.ReadExisting().Replace('\n'.ToString(), "");;
     DataArrived?.Invoke(this, new EventArgs());
 }
Beispiel #15
0
 private void SerialPort_DataReceieved(object sender, SerialDataReceivedEventArgs e)
 {
     Console.Write(SerialPort.ReadExisting());
 }
        public void SerialPortStream_ReadTo_Normal()
        {
            using (SerialPortStream src = new SerialPortStream(c_SourcePort, 115200, 8, Parity.None, StopBits.One))
            using (SerialPortStream dst = new SerialPortStream(c_DestPort, 115200, 8, Parity.None, StopBits.One)) {
                src.WriteTimeout = c_Timeout; src.ReadTimeout = c_Timeout;
                dst.WriteTimeout = c_Timeout; dst.ReadTimeout = c_Timeout;
                src.Open(); Assert.IsTrue(src.IsOpen);
                dst.Open(); Assert.IsTrue(dst.IsOpen);

                string s;

                src.Write("superfoobar");
                s = dst.ReadTo("foo");
                Assert.AreEqual("super", s);

                s = dst.ReadExisting();
                Assert.AreEqual("bar", s);
            }
        }