64 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|