From b2b275d6382a2b6a6727c570fc64f5983d563438 Mon Sep 17 00:00:00 2001 From: Eveldee Date: Mon, 30 Nov 2020 07:54:16 +0100 Subject: [PATCH] Add AddFingerprint command --- .../Program.cs | 4 +-- .../FingerprintSensor.cs | 31 +++++++++++++++++++ .../UserPermission.cs | 9 ++++++ .../WaveshareUARTFingerprintSensor.csproj | 1 + 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 WaveshareUARTFingerprintSensor/UserPermission.cs diff --git a/WaveshareUARTFingerprintSensor.Sample/Program.cs b/WaveshareUARTFingerprintSensor.Sample/Program.cs index ceb7f0d..1766ee7 100644 --- a/WaveshareUARTFingerprintSensor.Sample/Program.cs +++ b/WaveshareUARTFingerprintSensor.Sample/Program.cs @@ -19,9 +19,9 @@ namespace WaveshareUARTFingerprintSensor.Sample sensor.Start(); - sensor.Waked += s => sensor.Wake(); + Console.WriteLine("Adding fingerprint"); - sensor.Sleep(); + var response = sensor.AddFingerprint(40, UserPermission.Level3); Console.WriteLine("End"); diff --git a/WaveshareUARTFingerprintSensor/FingerprintSensor.cs b/WaveshareUARTFingerprintSensor/FingerprintSensor.cs index 76fa339..5a71883 100644 --- a/WaveshareUARTFingerprintSensor/FingerprintSensor.cs +++ b/WaveshareUARTFingerprintSensor/FingerprintSensor.cs @@ -18,6 +18,7 @@ namespace WaveshareUARTFingerprintSensor public const string PrimarySerialPort = "/dev/ttyAMA0"; public const string SecondarySerialPort = "/dev/ttyS0"; public const int DefaultTimeout = 10_000; + public const int MaxUserID = 0xFFF; public event WakedEventHandler Waked; public delegate void WakedEventHandler(FingerprintSensor sender); @@ -177,6 +178,36 @@ namespace WaveshareUARTFingerprintSensor _rstPin.Write(GpioPinValue.High); } + public ResponseType AddFingerprint(ushort userID, UserPermission userPermission) + { + if (userID > MaxUserID) + { + return ResponseType.Full; + } + + CommandType[] commands = { CommandType.AddFingerprint1, CommandType.AddFingerprint2, CommandType.AddFingerprint3 }; + (byte idHigh, byte idLow) = Utils.Split(userID); + + foreach (var command in commands) + { + if (TrySendAndReceive(command, idHigh, idLow, (byte)userPermission, out var response)) + { + if (response.responseType != ResponseType.Success) + { + return response.responseType; + } + } + else + { + return ResponseType.Timeout; + } + + Thread.Sleep(50); + } + + return ResponseType.Success; + } + private void OnWake() { if (_wakePin.Read()) diff --git a/WaveshareUARTFingerprintSensor/UserPermission.cs b/WaveshareUARTFingerprintSensor/UserPermission.cs new file mode 100644 index 0000000..a9f57ff --- /dev/null +++ b/WaveshareUARTFingerprintSensor/UserPermission.cs @@ -0,0 +1,9 @@ +namespace WaveshareUARTFingerprintSensor +{ + public enum UserPermission + { + Level1 = 1, + Level2 = 2, + Level3 = 3 + } +} \ No newline at end of file diff --git a/WaveshareUARTFingerprintSensor/WaveshareUARTFingerprintSensor.csproj b/WaveshareUARTFingerprintSensor/WaveshareUARTFingerprintSensor.csproj index 93b814a..870a979 100644 --- a/WaveshareUARTFingerprintSensor/WaveshareUARTFingerprintSensor.csproj +++ b/WaveshareUARTFingerprintSensor/WaveshareUARTFingerprintSensor.csproj @@ -65,6 +65,7 @@ +