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*/ }
void Start() { serialController = GetComponent <SerialControl>(); //loads the SerialControl script from this gameObject into serialController. if (startOnLoad) { StartCoroutines(); } }
public void Connect(string port) { serial = SerialControl.Create(port); serial.AddThread(SerialProcessor, ThreadPriority.Highest); serial.AddThread(KeepAlive); Logger.Log("Connecting on " + port); serial.Open(); }
private void KeepAlive(SerialControl serial) { connEstablished = false; while (!serial.Closed) { if (connEstablished && !keepAliveResponded) { Logger.Log("Timeout"); ResetConn(); } SendKeepAlive(); Thread.Sleep(KeepAlivePeriod); } }
/// <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(); }
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))); }
/// <summary> /// 关闭 /// </summary> public void Close() { try { SerialControl.Close(); SerialControl.Dispose(); SerialControl = null; } catch (Exception ex) { Log.error("关闭串口失败", ex); } finally { SerialControl = new SerialControl(); } }
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 }
/// <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); } }
void Start() { serialController = SerialControl.instance; }
void Awake() { serialController = SerialControl.instance; }
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. }
public void Disconnect() { Logger.Log("Closing " + serial.port.PortName); serial.Close(); serial = null; }