1 /* 2 * Author: Stefan Andritoiu <stefan.andritoiu@intel.com> 3 * Copyright (c) 2015 Intel Corporation. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining 6 * a copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sublicense, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be 14 * included in all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 */ 24 25 //NOT TESTED!!! 26 public class ZFM20Sample { 27 28 static { 29 try { 30 System.loadLibrary("javaupm_zfm20"); 31 } catch (UnsatisfiedLinkError e) { 32 System.err.println("error in loading native library"); 33 System.exit(-1); 34 } 35 } 36 main(String[] args)37 public static void main(String[] args) throws InterruptedException { 38 // ! [Interesting] 39 // Instantiate a ZFM20 Fingerprint reader on UART 0 40 upm_zfm20.ZFM20 fp = new upm_zfm20.ZFM20(0); 41 42 // make sure port is initialized properly. 57600 baud is the default 43 if (!fp.setupTty()) { 44 System.err.println("Failed to setup tty port parameters"); 45 System.exit(-1); 46 } 47 48 // first, set the default password and address 49 fp.setPassword(upm_zfm20.javaupm_zfm20.ZFM20_DEFAULT_PASSWORD); 50 fp.setAddress(upm_zfm20.javaupm_zfm20.ZFM20_DEFAULT_ADDRESS); 51 52 // now verify the password. If this fails, any other commands 53 // will be ignored, so we just bail. 54 if (fp.verifyPassword()) { 55 System.out.println("Password verified."); 56 } else { 57 System.err.println("Password verification failed."); 58 System.exit(-1); 59 } 60 61 // how many valid stored templates (fingerprints) do we have? 62 System.out.println("Total stored templates: " + fp.getNumTemplates()); 63 64 // now spin waiting for a fingerprint to successfully image 65 System.out.println("Waiting for finger print..."); 66 while (fp.generateImage() == upm_zfm20.ZFM20.ZFM20_ERRORS_T.ERR_NO_FINGER.swigValue()); 67 68 // in theory, we have an image 69 System.out.println("Image captured, converting..."); 70 short rv = fp.image2Tz(1); 71 if (rv != upm_zfm20.ZFM20.ZFM20_ERRORS_T.ERR_OK.swigValue()) { 72 System.err.println("Image conversion failed with error code " + rv); 73 System.exit(-1); 74 } 75 System.out.println("Image conversion succeeded"); 76 77 // we search for a print matching slot 1, where we shored our last 78 // converted fingerprint 79 int[] id = new int[1]; 80 int[] score = new int[1]; 81 rv = fp.search(1, id, score); 82 if (rv != upm_zfm20.ZFM20.ZFM20_ERRORS_T.ERR_OK.swigValue()) { 83 if (rv == upm_zfm20.ZFM20.ZFM20_ERRORS_T.ERR_FP_NOTFOUND.swigValue()) { 84 System.out.println("Fingerprint not found"); 85 System.exit(0); 86 } else { 87 System.err.println("Search failed with error code " + rv); 88 System.exit(-1); 89 } 90 } 91 92 System.out.println("Fingerprint found!"); 93 System.out.println("ID: " + id + ", Score: " + score); 94 95 // ! [Interesting] 96 } 97 }