Add ReadData

This commit is contained in:
2020-11-30 08:45:05 +01:00
parent 6ea11cb368
commit ca04700291

View File

@@ -75,6 +75,18 @@ namespace WaveshareUARTFingerprintSensor
return checksum;
}
private byte ComputeChecksumData(byte[] data, int length)
{
byte checksum = 0;
for (int i = 1; i < length + 1; i++)
{
checksum ^= data[i];
}
return checksum;
}
private (byte first, byte second, ResponseType responseType) SendAndReceive(CommandType commandType, byte first, byte second, byte third, int timeout = DefaultTimeout)
{
if (_sleeping)
@@ -152,6 +164,30 @@ namespace WaveshareUARTFingerprintSensor
return true;
}
private byte[] ReadData(int length)
{
byte first = (byte)_serialPort.ReadByte();
if (first != PacketSeparator)
{
throw new InvalidDataException("Invalid response from the sensor");
}
byte[] data = new byte[length];
_serialPort.Read(data, 0, length);
byte checksum = (byte)_serialPort.ReadByte();
byte separator = (byte)_serialPort.ReadByte();
if (separator != PacketSeparator || checksum != ComputeChecksumData(data, length))
{
throw new InvalidDataException("Invalid checksum");
}
return data;
}
public uint QuerySerialNumber()
{
(byte first, byte second, byte third) = SendAndReceiveRaw(CommandType.QuerySerialNumber, 0, 0, 0);