From 4287e00665d2929d8e2bdae1ebefbe2c00b0c12f Mon Sep 17 00:00:00 2001 From: Eveldee Date: Mon, 30 Nov 2020 08:53:15 +0100 Subject: [PATCH] Add AddFingerprintAndAcquireEigenvalues command --- .../FingerprintSensor.cs | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/WaveshareUARTFingerprintSensor/FingerprintSensor.cs b/WaveshareUARTFingerprintSensor/FingerprintSensor.cs index b41bd71..803e408 100644 --- a/WaveshareUARTFingerprintSensor/FingerprintSensor.cs +++ b/WaveshareUARTFingerprintSensor/FingerprintSensor.cs @@ -253,6 +253,54 @@ namespace WaveshareUARTFingerprintSensor return ResponseType.Success; } + public (ResponseType responseType, byte[] eigenvalues) AddFingerprintAndAcquireEigenvalues(ushort userID, UserPermission userPermission) + { + if (userID > MaxUserID) + { + return (ResponseType.Full, null); + } + + CommandType[] commands = { CommandType.AddFingerprint1, CommandType.AddFingerprint2 }; + (byte idHigh, byte idLow) = Utils.Split(userID); + + foreach (var command in commands) + { + if (TrySendAndReceive(command, idHigh, idLow, (byte)userPermission, out var loopResponse)) + { + if (loopResponse.responseType != ResponseType.Success) + { + return (loopResponse.responseType, null); + } + } + else + { + return (ResponseType.Timeout, null); + } + + Thread.Sleep(50); + } + + if (TrySendAndReceive(CommandType.AddAndAcquireFingerprint, 0, 0, 0, out var response)) + { + if (response.responseType != ResponseType.Success) + { + return (response.responseType, null); + } + + ushort length = Utils.Merge(response.first, response.second); + + var data = ReadData(length); + var eigenvalues = data.Skip(3).ToArray(); + + return (ResponseType.Success, eigenvalues); + } + else + { + return (ResponseType.Timeout, null); + } + } + + private void OnWake() { if (_wakePin.Read())