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

64 lines
1.9 KiB
C#

namespace Common.Hardware.Ports
{
using System;
public class IrdaSerialPort : SerialPortBase
{
public IrdaSerialPort(SerialPortSettings settings) : base(settings)
{
}
public override Byte[] Write(params Byte[] bytes)
{
var plainBytes = new Byte[0];
if (bytes.TryParseToIrda(out var irdaBytes))
{
var repeatsCount = 3;
for (var i = 0; i < repeatsCount; i++)
{
this.Write(new Byte[] { 0x01, 0x01, 0x01, 0x01 }, 0, 4, 25);
this.Write(irdaBytes, 0, irdaBytes.Length);
var answerd = false;
var buffer = new Byte[0];
var readsCount = 100;
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.TryParseFromIrda(out plainBytes))
{
answerd = true;
break;
}
else
{
this.LogMessage($"Cannot parse: {BitConverter.ToString(buffer)} - from IRDA message.");
}
}
if (answerd)
{
break;
}
}
}
else
{
this.LogMessage($"Cannot convert: {BitConverter.ToString(irdaBytes)} - to IRDA message.");
}
return plainBytes;
}
}
}