00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __FPRINT_H__
00021 #define __FPRINT_H__
00022
00023 #include <stdint.h>
00024 #include <sys/time.h>
00025
00026
00027 struct fp_dscv_dev;
00028 struct fp_dscv_print;
00029 struct fp_dev;
00030 struct fp_driver;
00031 struct fp_print_data;
00032 struct fp_img;
00033
00034
00035
00041 enum fp_finger {
00042 LEFT_THUMB = 1,
00043 LEFT_INDEX,
00044 LEFT_MIDDLE,
00045 LEFT_RING,
00046 LEFT_LITTLE,
00047 RIGHT_THUMB,
00048 RIGHT_INDEX,
00049 RIGHT_MIDDLE,
00050 RIGHT_RING,
00051 RIGHT_LITTLE,
00052 };
00053
00054
00055 const char *fp_driver_get_name(struct fp_driver *drv);
00056 const char *fp_driver_get_full_name(struct fp_driver *drv);
00057 uint16_t fp_driver_get_driver_id(struct fp_driver *drv);
00058
00059
00060 struct fp_dscv_dev **fp_discover_devs(void);
00061 void fp_dscv_devs_free(struct fp_dscv_dev **devs);
00062 struct fp_driver *fp_dscv_dev_get_driver(struct fp_dscv_dev *dev);
00063 uint32_t fp_dscv_dev_get_devtype(struct fp_dscv_dev *dev);
00064 int fp_dscv_dev_supports_print_data(struct fp_dscv_dev *dev,
00065 struct fp_print_data *print);
00066 int fp_dscv_dev_supports_dscv_print(struct fp_dscv_dev *dev,
00067 struct fp_dscv_print *print);
00068 struct fp_dscv_dev *fp_dscv_dev_for_print_data(struct fp_dscv_dev **devs,
00069 struct fp_print_data *print);
00070 struct fp_dscv_dev *fp_dscv_dev_for_dscv_print(struct fp_dscv_dev **devs,
00071 struct fp_dscv_print *print);
00072
00073 static inline uint16_t fp_dscv_dev_get_driver_id(struct fp_dscv_dev *dev)
00074 {
00075 return fp_driver_get_driver_id(fp_dscv_dev_get_driver(dev));
00076 }
00077
00078
00079 struct fp_dscv_print **fp_discover_prints(void);
00080 void fp_dscv_prints_free(struct fp_dscv_print **prints);
00081 uint16_t fp_dscv_print_get_driver_id(struct fp_dscv_print *print);
00082 uint32_t fp_dscv_print_get_devtype(struct fp_dscv_print *print);
00083 enum fp_finger fp_dscv_print_get_finger(struct fp_dscv_print *print);
00084 int fp_dscv_print_delete(struct fp_dscv_print *print);
00085
00086
00087 struct fp_dev *fp_dev_open(struct fp_dscv_dev *ddev);
00088 void fp_dev_close(struct fp_dev *dev);
00089 struct fp_driver *fp_dev_get_driver(struct fp_dev *dev);
00090 int fp_dev_get_nr_enroll_stages(struct fp_dev *dev);
00091 uint32_t fp_dev_get_devtype(struct fp_dev *dev);
00092 int fp_dev_supports_print_data(struct fp_dev *dev, struct fp_print_data *data);
00093 int fp_dev_supports_dscv_print(struct fp_dev *dev, struct fp_dscv_print *print);
00094
00095 int fp_dev_supports_imaging(struct fp_dev *dev);
00096 int fp_dev_img_capture(struct fp_dev *dev, int unconditional,
00097 struct fp_img **image);
00098 int fp_dev_get_img_width(struct fp_dev *dev);
00099 int fp_dev_get_img_height(struct fp_dev *dev);
00100
00109 enum fp_enroll_result {
00112 FP_ENROLL_COMPLETE = 1,
00115 FP_ENROLL_FAIL,
00117 FP_ENROLL_PASS,
00120 FP_ENROLL_RETRY = 100,
00123 FP_ENROLL_RETRY_TOO_SHORT,
00126 FP_ENROLL_RETRY_CENTER_FINGER,
00130 FP_ENROLL_RETRY_REMOVE_FINGER,
00131 };
00132
00133 int fp_enroll_finger_img(struct fp_dev *dev, struct fp_print_data **print_data,
00134 struct fp_img **img);
00135
00147 static inline int fp_enroll_finger(struct fp_dev *dev,
00148 struct fp_print_data **print_data)
00149 {
00150 return fp_enroll_finger_img(dev, print_data, NULL);
00151 }
00152
00160 enum fp_verify_result {
00165 FP_VERIFY_NO_MATCH = 0,
00169 FP_VERIFY_MATCH = 1,
00172 FP_VERIFY_RETRY = FP_ENROLL_RETRY,
00174 FP_VERIFY_RETRY_TOO_SHORT = FP_ENROLL_RETRY_TOO_SHORT,
00177 FP_VERIFY_RETRY_CENTER_FINGER = FP_ENROLL_RETRY_CENTER_FINGER,
00180 FP_VERIFY_RETRY_REMOVE_FINGER = FP_ENROLL_RETRY_REMOVE_FINGER,
00181 };
00182
00183 int fp_verify_finger_img(struct fp_dev *dev,
00184 struct fp_print_data *enrolled_print, struct fp_img **img);
00185
00196 static inline int fp_verify_finger(struct fp_dev *dev,
00197 struct fp_print_data *enrolled_print)
00198 {
00199 return fp_verify_finger_img(dev, enrolled_print, NULL);
00200 }
00201
00202 int fp_dev_supports_identification(struct fp_dev *dev);
00203 int fp_identify_finger_img(struct fp_dev *dev,
00204 struct fp_print_data **print_gallery, size_t *match_offset,
00205 struct fp_img **img);
00206
00222 static inline int fp_identify_finger(struct fp_dev *dev,
00223 struct fp_print_data **print_gallery, size_t *match_offset)
00224 {
00225 return fp_identify_finger_img(dev, print_gallery, match_offset, NULL);
00226 }
00227
00228
00229 int fp_print_data_load(struct fp_dev *dev, enum fp_finger finger,
00230 struct fp_print_data **data);
00231 int fp_print_data_from_dscv_print(struct fp_dscv_print *print,
00232 struct fp_print_data **data);
00233 int fp_print_data_save(struct fp_print_data *data, enum fp_finger finger);
00234 int fp_print_data_delete(struct fp_dev *dev, enum fp_finger finger);
00235 void fp_print_data_free(struct fp_print_data *data);
00236 size_t fp_print_data_get_data(struct fp_print_data *data, unsigned char **ret);
00237 struct fp_print_data *fp_print_data_from_data(unsigned char *buf,
00238 size_t buflen);
00239 uint16_t fp_print_data_get_driver_id(struct fp_print_data *data);
00240 uint32_t fp_print_data_get_devtype(struct fp_print_data *data);
00241
00242
00243
00245 struct fp_minutia {
00246 int x;
00247 int y;
00248 int ex;
00249 int ey;
00250 int direction;
00251 double reliability;
00252 int type;
00253 int appearing;
00254 int feature_id;
00255 int *nbrs;
00256 int *ridge_counts;
00257 int num_nbrs;
00258 };
00259
00260 int fp_img_get_height(struct fp_img *img);
00261 int fp_img_get_width(struct fp_img *img);
00262 unsigned char *fp_img_get_data(struct fp_img *img);
00263 int fp_img_save_to_file(struct fp_img *img, char *path);
00264 void fp_img_standardize(struct fp_img *img);
00265 struct fp_img *fp_img_binarize(struct fp_img *img);
00266 struct fp_minutia **fp_img_get_minutiae(struct fp_img *img, int *nr_minutiae);
00267 void fp_img_free(struct fp_img *img);
00268
00269
00270
00271 struct fp_pollfd {
00272 int fd;
00273 short events;
00274 };
00275
00276 int fp_handle_events_timeout(struct timeval *timeout);
00277 int fp_handle_events(void);
00278 size_t fp_get_pollfds(struct fp_pollfd **pollfds);
00279 int fp_get_next_timeout(struct timeval *tv);
00280
00281 typedef void (*fp_pollfd_added_cb)(int fd, short events);
00282 typedef void (*fp_pollfd_removed_cb)(int fd);
00283 void fp_set_pollfd_notifiers(fp_pollfd_added_cb added_cb,
00284 fp_pollfd_removed_cb removed_cb);
00285
00286
00287 int fp_init(void);
00288 void fp_exit(void);
00289
00290
00291
00292 typedef void (*fp_dev_open_cb)(struct fp_dev *dev, int status, void *user_data);
00293 int fp_async_dev_open(struct fp_dscv_dev *ddev, fp_dev_open_cb callback,
00294 void *user_data);
00295
00296 typedef void (*fp_dev_close_cb)(struct fp_dev *dev, void *user_data);
00297 void fp_async_dev_close(struct fp_dev *dev, fp_dev_close_cb callback,
00298 void *user_data);
00299
00300 typedef void (*fp_enroll_stage_cb)(struct fp_dev *dev, int result,
00301 struct fp_print_data *print, struct fp_img *img, void *user_data);
00302 int fp_async_enroll_start(struct fp_dev *dev, fp_enroll_stage_cb callback,
00303 void *user_data);
00304
00305 typedef void (*fp_enroll_stop_cb)(struct fp_dev *dev, void *user_data);
00306 int fp_async_enroll_stop(struct fp_dev *dev, fp_enroll_stop_cb callback,
00307 void *user_data);
00308
00309 typedef void (*fp_verify_cb)(struct fp_dev *dev, int result,
00310 struct fp_img *img, void *user_data);
00311 int fp_async_verify_start(struct fp_dev *dev, struct fp_print_data *data,
00312 fp_verify_cb callback, void *user_data);
00313
00314 typedef void (*fp_verify_stop_cb)(struct fp_dev *dev, void *user_data);
00315 int fp_async_verify_stop(struct fp_dev *dev, fp_verify_stop_cb callback,
00316 void *user_data);
00317
00318 typedef void (*fp_identify_cb)(struct fp_dev *dev, int result,
00319 size_t match_offset, struct fp_img *img, void *user_data);
00320 int fp_async_identify_start(struct fp_dev *dev, struct fp_print_data **gallery,
00321 fp_identify_cb callback, void *user_data);
00322
00323 typedef void (*fp_identify_stop_cb)(struct fp_dev *dev, void *user_data);
00324 int fp_async_identify_stop(struct fp_dev *dev, fp_identify_stop_cb callback,
00325 void *user_data);
00326
00327 #endif
00328