public static async Task Main(string[] args) { var portName = PromptForSerialPort(); if (string.IsNullOrEmpty(portName)) { return; } using (var reader = new FingerprintReader()) { $"Opening port '{portName}' . . .".Info(); await reader.OpenAsync(portName); while (true) { #region Main Menu ConsoleKeyInfo selectedOption; var menuOption = Terminal.ReadPrompt("Select an option", ActionOptions, "Exit this program"); if (menuOption.Key == ConsoleKey.Q) { selectedOption = Terminal.ReadPrompt("Select an option", ModuleActionOptions, "Exit this prompt"); } else if (menuOption.Key == ConsoleKey.W) { selectedOption = Terminal.ReadPrompt("Select an option", UsersActionOptions, "Exit this prompt"); } else if (menuOption.Key == ConsoleKey.E) { selectedOption = Terminal.ReadPrompt("Select an option", MatchingActionOptions, "Exit this prompt"); } else { break; } #endregion #region Action Options switch (selectedOption.Key) { case ConsoleKey.V: { var result = await reader.GetDspVersionNumber(); break; } case ConsoleKey.M: { var result = await reader.GetRegistrationMode(); break; } case ConsoleKey.J: { var result = await reader.GetAllUsers(); if (result != null && result.IsSuccessful) { foreach (var kvp in result.Users) { $"User: {kvp.Key,4} Privilege: {kvp.Value,4}".Info(); } } break; } case ConsoleKey.U: { var userId = Terminal.ReadNumber("Enter User Id", 1); var result = await reader.GetUserProperties(userId); $"User: {result.UserId} Privilege: {result.UserPrivilege} Eigenvalues: {(result.Eigenvalues != null ? result.Eigenvalues.Length : 0)} bytes" .Info(); break; } case ConsoleKey.B: { var baseChar = 65; var baudRates = Enum.GetNames(typeof(BaudRate)) .ToDictionary(p => (ConsoleKey)baseChar++, v => v); var baudSelection = Terminal.ReadPrompt( $"Select new Baud Rate - Current Rate is {reader.SerialPort.BaudRate}", baudRates, "Exit this prompt"); if (baudRates.ContainsKey(baudSelection.Key)) { var newBaudRate = (BaudRate)Enum.Parse(typeof(BaudRate), baudRates[baudSelection.Key]); await reader.SetBaudRate(newBaudRate); } break; } case ConsoleKey.Y: { var userId = Terminal.ReadNumber("Enter User Id", 1); var privilege = Terminal.ReadNumber("Enter Privilege", 1); var eigenvaluesResult = await reader.AcquireImageEigenvalues(); var result = await reader.SetUserProperties(userId, privilege, eigenvaluesResult.Eigenvalues); break; } case ConsoleKey.F3: { "Place your finger on the sensor to produce some eigenvalues".Info(); var eigenvaluesResult = await reader.AcquireImageEigenvalues(); "Place your finger on the sensor once again to compare the eigenvalues".Info(); var result = await reader.MatchImageToEigenvalues(eigenvaluesResult.Eigenvalues); break; } case ConsoleKey.F4: { var userId = Terminal.ReadNumber("Enter User Id", 1); "Place your finger on the sensor to produce some eigenvalues".Info(); var eigenvaluesResult = await reader.AcquireImageEigenvalues(); "Place your finger on the sensor once again to compare the eigenvalues".Info(); var result = await reader.MatchUserToEigenvalues(userId, eigenvaluesResult.Eigenvalues); break; } case ConsoleKey.F5: { "Place your finger on the sensor to produce some eigenvalues".Info(); var eigenvaluesResult = await reader.AcquireImageEigenvalues(); var result = await reader.MatchEigenvaluesToUser(eigenvaluesResult.Eigenvalues); break; } case ConsoleKey.P: { var userId = Terminal.ReadNumber("Enter User Id", 1); var result = await reader.GetUserPrivilege(userId); break; } case ConsoleKey.L: { var result = await reader.GetMatchingLevel(); break; } case ConsoleKey.K: { var matchingLevel = Terminal.ReadNumber("Enter Matching Level (0 to 9)", 5); if (matchingLevel < 0) { matchingLevel = 0; } if (matchingLevel > 9) { matchingLevel = 9; } var result = await reader.SetMatchingLevel(matchingLevel); break; } case ConsoleKey.G: { var timeout = Terminal.ReadNumber("Enter CaptureTimeout (0 to 255)", 0); if (timeout < 0) { timeout = 0; } if (timeout > 255) { timeout = 255; } var result = await reader.SetCaptureTimeout(timeout); break; } case ConsoleKey.T: { await reader.GetCaptureTimeout(); break; } case ConsoleKey.C: { var result = await reader.GetUserCount(); $"User count: {result.UserCount}".Info(); break; } case ConsoleKey.F6: { var result = await reader.AcquireImage(); break; } case ConsoleKey.F7: { var result = await reader.AcquireImageEigenvalues(); break; } case ConsoleKey.Q: { var userId = Terminal.ReadNumber("Enter User Id", 1); var result = await reader.MatchOneToOne(userId); break; } case ConsoleKey.W: { var result = await reader.MatchOneToN(); $"Successful: {result.IsSuccessful}".Info(); break; } case ConsoleKey.R: { var mode = Terminal.ReadNumber("Enter Registration Mode - 1 disallows repeated fingerprints", 1); var result = await reader.SetRegistrationMode(mode == 1); break; } case ConsoleKey.A: { var userId = Terminal.ReadNumber("Enter User Id", 1); var privilege = Terminal.ReadNumber("Enter Privilege", 1); "Place your finger on the sensor".Info(); var fp1 = await reader.AddFingerprint(1, userId, privilege); if (fp1 != null && fp1.IsSuccessful) { "Place your finger on the sensor again".Info(); var fp2 = await reader.AddFingerprint(2, userId, privilege); if (fp2 != null && fp2.IsSuccessful) { "Place your finger on the sensor once again".Info(); var fp3 = await reader.AddFingerprint(3, userId, privilege); if (fp3 != null && fp3.IsSuccessful) { "User added successfully".Info(); } else { "Failed on acquisition 3".Error(); } } else { "Failed on acquisition 2".Error(); } } else { "Failed on acquisition 1".Error(); } break; } default: { switch (selectedOption.Key) { case ConsoleKey.W: { var userId = Terminal.ReadNumber("Enter User Id", 1); var result = await reader.DeleteUser(userId); break; } case ConsoleKey.Z: { var result = await reader.DeleteAllUsers(); break; } case ConsoleKey.S: { var result = await reader.Sleep(); break; } } break; } } #endregion Console.WriteLine("Press any key to continue . . ."); Console.ReadKey(true); } } }