void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }

        DontDestroyOnLoad(this);

        /*string portName = CreateCSV.comPortNr;
         *
         *  if (portName != "")
         *  {
         *      portName = portName.Remove(0, 3);
         *
         *      int portNumber = int.Parse(portName);
         *
         *      if (portNumber < 10)
         *      portName = "COM" + portNumber;
         *      else
         *      portName = "\\\\.\\" + "COM" + portNumber;
         *  }
         *
         *
         * //portName = "COM3";// SelectComport.selectedPort;
         * serialDevice = new SerialPort(portName, baudRate); //initializes a serial port
         * if (serialDevice != null) serialDevice.Close(); //makes sure the device is closed before openning
         * serialDevice.Open(); //opens serial device*/
    }
示例#2
0
    void Start()
    {
        serialController = GetComponent <SerialControl>();   //loads the SerialControl script from this gameObject into serialController.

        if (startOnLoad)
        {
            StartCoroutines();
        }
    }
示例#3
0
        public void Connect(string port)
        {
            serial = SerialControl.Create(port);
            serial.AddThread(SerialProcessor, ThreadPriority.Highest);
            serial.AddThread(KeepAlive);

            Logger.Log("Connecting on " + port);
            serial.Open();
        }
示例#4
0
 private void KeepAlive(SerialControl serial)
 {
     connEstablished = false;
     while (!serial.Closed)
     {
         if (connEstablished && !keepAliveResponded)
         {
             Logger.Log("Timeout");
             ResetConn();
         }
         SendKeepAlive();
         Thread.Sleep(KeepAlivePeriod);
     }
 }
示例#5
0
 /// <summary>
 /// 打开
 /// </summary>
 public void Open()
 {
     if (SerialControl.IsOpen)
     {
         Close();
     }
     SerialControl.Parity   = Parity;
     SerialControl.BaudRate = BandRoate;
     SerialControl.StopBits = StopBit;
     SerialControl.PortName = PortName;
     SerialControl.DataBits = DataP;
     SerialControl.Head     = 0xee;
     SerialControl.End      = 0xff;
     SerialControl.Open();
 }
示例#6
0
        private void ReadPacket(SerialControl serial)
        {
            byte idx = serial.ReadByte();

            if (connEstablished)
            {
                if (idx != ++recvIdx)
                {
                    Logger.Log($"Packet Drop. Got {idx}, Expected {recvIdx}");
                    ResetConn();
                    return;
                }
            }

            int len = serial.ReadByte();

            if (!connEstablished)
            {
                if (len != KeepAliveLength)
                {
                    return;
                }

                recvIdx = idx;
            }

            var arr = new byte[len];

            serial.ReadBytes(arr);
            byte crcRecv  = serial.ReadByte();
            byte crcCheck = CRC.crc_update(0, idx);

            crcCheck = CRC.crc_update(crcCheck, (byte)len);
            crcCheck = CRC.crc_update(crcCheck, arr, 0, arr.Length);
            if (crcRecv != crcCheck)
            {
                if (connEstablished)
                {
                    Logger.Log($"CRC Failed. Recieved {crcRecv:02X}, Calculated {crcCheck:02X}");
                    ResetConn();
                }

                return;
            }

            HandlePacket(new BinaryReader(new MemoryStream(arr)));
        }
示例#7
0
 /// <summary>
 /// 关闭
 /// </summary>
 public void Close()
 {
     try
     {
         SerialControl.Close();
         SerialControl.Dispose();
         SerialControl = null;
     }
     catch (Exception ex)
     {
         Log.error("关闭串口失败", ex);
     }
     finally
     {
         SerialControl = new SerialControl();
     }
 }
示例#8
0
        private void SerialProcessor(SerialControl serial)
        {
#if SerialPortStream
            byte[] buf = new byte[2048];
            serial.port.InvokeEventsOnThreadPool = false;
            serial.port.DataReceived            += (s, args) => {
                if (args.EventType == SerialData.Chars)
                {
                }
                int len = serial.port.Read(buf, 0, buf.Length);
                for (int i = 0; i < len; i++)
                {
                    ReadByte(buf[i]);
                }
            };
#else
            try {
                var sb = new StringBuilder();
                while (true)
                {
                    byte b = serial.ReadByte();
                    if (b == '!')
                    {
                        ReadPacket(serial);
                    }
                    else if (!connEstablished)
                    {
                    }
                    else if (b == '\r')
                    {
                    }
                    else if (b == '\n')
                    {
                        var s = sb.ToString();
                        sb.Clear();
                        Logger.LogDirect(s);
                    }
                    else
                    {
                        sb.Append((char)b);
                    }
                }
            }
            catch (OperationCanceledException) {}
#endif
        }
示例#9
0
        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="command"></param>
        /// <param name="datas"></param>
        /// <returns></returns>
        private SerialResponse Send(Commands command, List <byte> datas)
        {
            try
            {
                SerialRequest serialRequest = SerialControl.CreateRequest();
                serialRequest.SetData((byte)command, datas);
                SerialResponse response = SerialControl.Send(serialRequest);

                if (response.SourceDatas == null || response.SourceDatas.Count() == 0)
                {
                    Log.error("异常,未接收到任何数据");
                    throw new Exception("异常,为接收到任何数据!");
                }
                if (response.UserDatas[0] != 0x00)
                {
                    Log.error(string.Format("操作命令异常 : 命令关键字 - {0}, 错误吗 - {1}, 实际接收的全部数据 - {2}"
                                            , serialRequest.KeyWorld.ToString("x2"), response.UserDatas[0].ToString("x2"), response.SourceDatas.JoinToString(",", b =>
                                                                                                                                                             b.ToString("X2")
                                                                                                                                                             )));
                    throw new Exception(string.Format("操作命令异常 : 命令关键字 - {0}, 错误吗 - {1}, 实际接收的全部数据 - {2}"
                                                      , serialRequest.KeyWorld.ToString("x2"), response.UserDatas[0].ToString("x2"), response.SourceDatas.JoinToString(",", b =>
                                                                                                                                                                       b.ToString("X2")
                                                                                                                                                                       )));
                }
                else
                {
                    Log.log("接受数据 : ", response.SourceDatas.JoinToString(",", b =>
                                                                         b.ToString("X2")
                                                                         ));
                    return(response);
                }
            }
            catch (Exception ex)
            {
                Log.error("发送数据问题:" + ex.Message);
                return(null);
            }
        }
示例#10
0
 void Start()
 {
     serialController = SerialControl.instance;
 }
示例#11
0
 void Awake()
 {
     serialController = SerialControl.instance;
 }
示例#12
0
    public string messageToSend;//message to be sent to serial device


    // Use this for initialization
    void Start()
    {
        serialController = GetComponent <SerialControl>();   //loads the SerialControl script from this gameObject into serialController.
    }
示例#13
0
 public void Disconnect()
 {
     Logger.Log("Closing " + serial.port.PortName);
     serial.Close();
     serial = null;
 }