namespace Common.Hardware.Ports { using System; public class UniProSerialPort : SerialPortBase { public UniProSerialPort(SerialPortSettings settings) : base(settings) { } public override Byte[] Write(params Byte[] data) { var _data = new Byte[0]; if (data.TryParseToUniPro(out var bytes)) { var repeatsCount = 3; for (var i = 0; i < repeatsCount; i++) { this.Write(bytes, 0, bytes.Length, 50); var answerd = false; var buffer = new Byte[0]; var readsCount = 3; while (readsCount-- >= 0) { var _bytes = this.Read(); var bytesLength = _bytes.Length; var bufferLength = buffer.Length; Array.Resize(ref buffer, bufferLength + bytesLength); Array.Copy(_bytes, 0, buffer, bufferLength, bytesLength); if (buffer.TryParseFromUniPro(out _data)) { answerd = true; break; } else { this.LogMessage($"Cannot parse: {BitConverter.ToString(buffer)} - from UniPro message."); } } if (answerd) { break; } } } else { this.LogMessage($"Cannot convert: {BitConverter.ToString(bytes)} - to UniPro message."); } return _data; } } }