63 lines
1.8 KiB
C#
63 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|