1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
| #include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <libfprint/fprint.h>
/********************************************************
* DEFINES and CONST
*******************************************************/
/********************************************************
* global var
*******************************************************/
/********************************************************
* function prototype
*******************************************************/
struct fp_dscv_dev *discover_device(struct fp_dscv_dev **disc_devs);
struct fp_print_data *enroll(struct fp_dev *dev);
/********************************************************
* function implementation
*******************************************************/
/************ main *************************************/
int main(int argc, char **argv)
{
struct fp_dscv_dev *ddev=NULL;
struct fp_dscv_dev **devlist=NULL;
struct fp_dev *dev=NULL;
struct fp_print_data *data=NULL;
int r=1;
if(fp_init()!=0)
{
fprintf(stderr,"Libfprint Init error\n");
return EXIT_FAILURE;
}
devlist = fp_discover_devs();
if(devlist==NULL)
{
fprintf(stdout,"No scan finger devices found\n");
fp_exit();
return EXIT_FAILURE;
}
ddev=discover_device(devlist);
if(ddev==NULL)
{
fprintf(stderr,"No Devices detected.\n");
fp_dscv_devs_free(devlist);
fp_exit();
return EXIT_FAILURE;
}
dev=fp_dev_open(ddev);
fp_dscv_devs_free(devlist);
if(dev==NULL)
{
fprintf(stderr,"Could not open device\n");
fp_exit();
return EXIT_FAILURE;
}
fprintf(stdout,"Let enroll your RIGHT INDEX.\n\n");
data=enroll(dev);
if(data==NULL)
goto out;
r=fp_print_data_save(data,RIGHT_INDEX);
if(r<0)
fprintf(stderr,"Data save failed, code %d\n",r);
fp_print_data_free(data);
out:
fp_dev_close(dev);
fp_exit();
return EXIT_SUCCESS;
}
/************ discover device *************************************/
struct fp_dscv_dev *discover_device(struct fp_dscv_dev **disc_devs)
{
struct fp_dscv_dev *ddev=disc_devs[0];
struct fp_driver *drv;
if(!ddev)
return NULL;
drv=fp_dscv_dev_get_driver(ddev);
fprintf(stdout,"Found Device claimed by %s driver\n",fp_driver_get_full_name(drv));
return ddev;
}
/************ enroll *************************************/
struct fp_print_data *enroll(struct fp_dev *dev)
{
struct fp_print_data *enrolled_print=NULL;
int r,num=1;
int stg=fp_dev_get_nr_enroll_stages(dev);
fprintf(stdout,"You will need to successfully scann your finder %d time%c to"
"complete the process.\n",stg,(stg>1)?'s':' ');
do
{
struct fp_img *img=NULL;
sleep(1);
fprintf(stdout,"Scan your finger %d/%d\n",num,stg);
r=fp_enroll_finger_img(dev,&enrolled_print,&img);
fprintf(stdout,"r=%d\n",r);
if(img)
{
fp_img_save_to_file(img,"enrolled.pgm");
fprintf(stdout,"Wrote scanned image to enrolled.pgm\n");
fp_img_free(img);
}
if(r<0)
{
fprintf(stderr,"Enroll Failed with error %d\n",r);
return NULL;
}
++num;
switch(r)
{
case FP_ENROLL_COMPLETE:
fprintf(stdout,"Enroll complete!\n");
break;
case FP_ENROLL_FAIL:
fprintf(stdout,"Enroll failed, something wen't wrong\n");
return enrolled_print;
case FP_ENROLL_PASS:
fprintf(stdout,"Scan OK\n");
break;
case FP_ENROLL_RETRY:
--num;
fprintf(stdout,"Please try again\n");
break;
case FP_ENROLL_RETRY_TOO_SHORT:
--num;
fprintf(stdout,"Your swipe was too short,Please try again\n");
break;
case FP_ENROLL_RETRY_CENTER_FINGER:
--num;
fprintf(stdout,"Didn't catch, Please center your finger on sensor and try again\n");
break;
case FP_ENROLL_RETRY_REMOVE_FINGER:
--num;
fprintf(stdout,"Scan failed Please remove your finger and then try again\n");
break;
}
}
while(r != FP_ENROLL_COMPLETE);
if(enrolled_print==NULL)
{
fprintf(stderr,"Enroll complete but no print?\n");
return NULL;
}
fprintf(stdout,"Enrollment successfully completed!\n\n");
return enrolled_print;
} |
Partager