From 70e96a5055f68ff61c6367abc1a77ea97586f7be Mon Sep 17 00:00:00 2001 From: Eveldee Date: Tue, 1 Dec 2020 17:01:08 +0100 Subject: [PATCH] Update ReadData Now use a buffer and check how much bytes has been read Don't use a sleep anymore --- WaveshareUARTFingerprintSensor/FingerprintSensor.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/WaveshareUARTFingerprintSensor/FingerprintSensor.cs b/WaveshareUARTFingerprintSensor/FingerprintSensor.cs index 75f66af..08c5b8b 100644 --- a/WaveshareUARTFingerprintSensor/FingerprintSensor.cs +++ b/WaveshareUARTFingerprintSensor/FingerprintSensor.cs @@ -20,6 +20,7 @@ namespace WaveshareUARTFingerprintSensor public const string SecondarySerialPort = "/dev/ttyS0"; public const int DefaultTimeout = 10_000; public const int MaxUserID = 0xFFF; + public const int DataBufferSize = 4095; public event WakedEventHandler Waked; public delegate void WakedEventHandler(FingerprintSensor sender); @@ -166,9 +167,6 @@ namespace WaveshareUARTFingerprintSensor private byte[] ReadData(int length) { - // Needed to work - Thread.Sleep(150); - byte first = (byte)_serialPort.ReadByte(); if (first != PacketSeparator) @@ -178,7 +176,12 @@ namespace WaveshareUARTFingerprintSensor byte[] data = new byte[length]; - _serialPort.Read(data, 0, length); + int offset = 0; + do + { + int toRead = length - offset > DataBufferSize ? DataBufferSize : length - offset; + offset += _serialPort.Read(data, offset, toRead); + } while (offset < length); byte checksum = (byte)_serialPort.ReadByte(); byte separator = (byte)_serialPort.ReadByte();