diff --git a/Akari.Provider.WaveshareUART.csproj b/Akari.Provider.WaveshareUART.csproj index 8426d4e..0de7bce 100644 --- a/Akari.Provider.WaveshareUART.csproj +++ b/Akari.Provider.WaveshareUART.csproj @@ -93,6 +93,7 @@ + diff --git a/MQTTService.cs b/MQTTService.cs new file mode 100644 index 0000000..d13765a --- /dev/null +++ b/MQTTService.cs @@ -0,0 +1,88 @@ +using Akari.Provider.WaveshareUART.Users; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using WaveshareUARTFingerprintSensor; + +namespace Akari.Provider.WaveshareUART +{ + public class MQTTService + { + public FingerprintSensor FingerprintSensor => WaveshareUARTProvider.Instance.FingerprintSensor; + public UsersManager UsersManager => WaveshareUARTProvider.Instance.UsersManager; + + public MQTTService() + { + + } + + public void Start() + { + Console.WriteLine("Starting MQTT service..."); + + InitMQTT(); + + Console.WriteLine($"There is {UsersManager.Count} users registered"); + + FingerprintSensor.Waked += FingerprintSensor_Waked; + + FingerprintSensor.Sleep(); + + Console.WriteLine("Waiting for fingerprints..."); + + Thread.Sleep(-1); + + FingerprintSensor.Waked -= FingerprintSensor_Waked; + } + + private void InitMQTT() + { + // TODO + } + + private void SendAuth(User user) + { + // TODO + } + + private void FingerprintSensor_Waked(FingerprintSensor sender) + { + FingerprintSensor.Wake(); + + if (FingerprintSensor.TryComparison1N(out var userInfo)) + { + if (TryFindUser(userInfo.userID, out var user)) + { + Console.WriteLine($"{user.Name} fingerprint recognized"); + + SendAuth(user); + } + else + { + Console.WriteLine($"Found unknown fingerprint with id {userInfo.userID}"); + } + } + + FingerprintSensor.Sleep(); + } + + private bool TryFindUser(ushort userID, out User user) + { + ushort id = (ushort)((userID / UsersManager.RangeLength) * UsersManager.RangeLength + UsersManager.RangeStart); + + if (UsersManager[id] is User u) + { + user = u; + + return true; + } + + user = default; + + return false; + } + } +} diff --git a/Program.cs b/Program.cs index 5a78787..cae6c65 100644 --- a/Program.cs +++ b/Program.cs @@ -8,9 +8,6 @@ namespace Akari.Provider.WaveshareUART { static void Main(string[] args) { - // TODO - args = new[] { "-c" }; - if (args.Length > 0) { switch (args[0]) diff --git a/WaveshareUARTProvider.cs b/WaveshareUARTProvider.cs index e30c23d..f16725a 100644 --- a/WaveshareUARTProvider.cs +++ b/WaveshareUARTProvider.cs @@ -31,9 +31,11 @@ namespace Akari.Provider.WaveshareUART FingerprintSensor.Start(); } - internal void FingerprintLoop() + public void FingerprintLoop() { + InitSensor(); + new MQTTService().Start(); } } }