common/Hardware/Common.Hardware.Ports/UniProSerialPort.cs
2026-04-23 17:50:07 +02:00

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;
}
}
}