未验证 提交 402cda01 编写于 作者: D Dimitrios Maragkos 提交者: GitHub

Made I2cDevice/SpiDevice ReadByte/WriteByte methods virtual (#1937)

上级 d7f6c148
......@@ -18,27 +18,11 @@ internal class UnixI2cDevice : I2cDevice
public override I2cConnectionSettings ConnectionSettings => new I2cConnectionSettings(_bus.BusId, _deviceAddress);
public override unsafe byte ReadByte()
{
Span<byte> toRead = stackalloc byte[1];
Read(toRead);
return toRead[0];
}
public override unsafe void Read(Span<byte> buffer)
{
_bus.Read(_deviceAddress, buffer);
}
public override unsafe void WriteByte(byte value)
{
Span<byte> toWrite = stackalloc byte[1]
{
value
};
Write(toWrite);
}
public override unsafe void Write(ReadOnlySpan<byte> buffer)
{
_bus.Write(_deviceAddress, buffer);
......
......@@ -35,7 +35,13 @@ public abstract partial class I2cDevice : IDisposable
/// Reads a byte from the I2C device.
/// </summary>
/// <returns>A byte read from the I2C device.</returns>
public abstract byte ReadByte();
public virtual unsafe byte ReadByte()
{
byte value = 0;
Span<byte> toRead = new Span<byte>(&value, 1);
Read(toRead);
return value;
}
/// <summary>
/// Reads data from the I2C device.
......@@ -50,7 +56,11 @@ public abstract partial class I2cDevice : IDisposable
/// Writes a byte to the I2C device.
/// </summary>
/// <param name="value">The byte to be written to the I2C device.</param>
public abstract void WriteByte(byte value);
public virtual unsafe void WriteByte(byte value)
{
ReadOnlySpan<byte> toWrite = new ReadOnlySpan<byte>(&value, 1);
Write(toWrite);
}
/// <summary>
/// Writes data to the I2C device.
......
......@@ -35,7 +35,13 @@ public abstract partial class SpiDevice : IDisposable
/// Reads a byte from the SPI device.
/// </summary>
/// <returns>A byte read from the SPI device.</returns>
public abstract byte ReadByte();
public virtual unsafe byte ReadByte()
{
byte value = 0;
Span<byte> toRead = new Span<byte>(&value, 1);
Read(toRead);
return value;
}
/// <summary>
/// Reads data from the SPI device.
......@@ -50,7 +56,11 @@ public abstract partial class SpiDevice : IDisposable
/// Writes a byte to the SPI device.
/// </summary>
/// <param name="value">The byte to be written to the SPI device.</param>
public abstract void WriteByte(byte value);
public virtual unsafe void WriteByte(byte value)
{
ReadOnlySpan<byte> toWrite = new ReadOnlySpan<byte>(&value, 1);
Write(toWrite);
}
/// <summary>
/// Writes data to the SPI device.
......
......@@ -25,12 +25,6 @@ namespace Iot.Device.Arduino
}
public override SpiConnectionSettings ConnectionSettings { get; }
public override byte ReadByte()
{
Span<byte> dummy = stackalloc byte[1];
Read(dummy);
return dummy[0];
}
public override void Read(Span<byte> buffer)
{
......@@ -38,16 +32,6 @@ namespace Iot.Device.Arduino
Board.Firmata.SpiTransfer(ConnectionSettings.ChipSelectLine, dummy, buffer);
}
public override void WriteByte(byte value)
{
ReadOnlySpan<byte> span = stackalloc byte[1]
{
value
};
Write(span);
}
public override void Write(ReadOnlySpan<byte> buffer)
{
Board.Firmata.SpiWrite(ConnectionSettings.ChipSelectLine, buffer, !Board.StreamUsesHardwareFlowControl);
......
......@@ -31,30 +31,12 @@ namespace Iot.Device.Ft232H
_i2cBus.Read(_deviceAddress, buffer);
}
/// <inheritdoc/>
public override byte ReadByte()
{
Span<byte> toRead = stackalloc byte[1];
Read(toRead);
return toRead[0];
}
/// <inheritdoc/>
public override void Write(ReadOnlySpan<byte> buffer)
{
_i2cBus.Write(_deviceAddress, buffer);
}
/// <inheritdoc/>
public override void WriteByte(byte value)
{
Span<byte> toWrite = stackalloc byte[1]
{
value
};
Write(toWrite);
}
/// <inheritdoc/>
public override void WriteRead(ReadOnlySpan<byte> writeBuffer, Span<byte> readBuffer)
{
......
......@@ -34,30 +34,12 @@ namespace Iot.Device.Ft4222
_i2cBus.Read(_deviceAddress, buffer);
}
/// <inheritdoc/>
public override byte ReadByte()
{
Span<byte> toRead = stackalloc byte[1];
Read(toRead);
return toRead[0];
}
/// <inheritdoc/>
public override void Write(ReadOnlySpan<byte> buffer)
{
_i2cBus.Write(_deviceAddress, buffer);
}
/// <inheritdoc/>
public override void WriteByte(byte value)
{
Span<byte> toWrite = stackalloc byte[1]
{
value
};
Write(toWrite);
}
/// <inheritdoc/>
public override void WriteRead(ReadOnlySpan<byte> writeBuffer, Span<byte> readBuffer)
{
......
......@@ -135,14 +135,6 @@ namespace Iot.Device.Ft4222
}
}
/// <inheritdoc/>
public override byte ReadByte()
{
Span<byte> toRead = stackalloc byte[1];
Read(toRead);
return toRead[0];
}
/// <inheritdoc/>
public override void TransferFullDuplex(ReadOnlySpan<byte> writeBuffer, Span<byte> readBuffer)
{
......@@ -168,16 +160,6 @@ namespace Iot.Device.Ft4222
}
}
/// <inheritdoc/>
public override void WriteByte(byte value)
{
Span<byte> toWrite = stackalloc byte[1]
{
value
};
Write(toWrite);
}
/// <inheritdoc/>
protected override void Dispose(bool disposing)
{
......
......@@ -220,22 +220,6 @@ namespace Iot.Device.Spi
/// <inheritdoc />
public override void Write(ReadOnlySpan<byte> data) => TransferWriteOnly(data);
/// <inheritdoc />
public override void WriteByte(byte data)
{
Span<byte> outData = stackalloc byte[1];
outData[0] = data;
Write(outData);
}
/// <inheritdoc />
public override byte ReadByte()
{
Span<byte> data = stackalloc byte[1];
Read(data);
return data[0];
}
/// <inheritdoc />
protected override void Dispose(bool disposing)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册