fp_internal.h 6.39 KB
Newer Older
1 2
/*
 * Internal/private definitions for libfprint
3
 * Copyright (C) 2007-2008 Daniel Drake <dsd@gentoo.org>
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#ifndef __FPRINT_INTERNAL_H__
#define __FPRINT_INTERNAL_H__

Daniel Drake's avatar
Daniel Drake committed
23
#include <config.h>
24

25
#include <stdint.h>
26
#include <errno.h>
Daniel Drake's avatar
Daniel Drake committed
27
#include <glib.h>
28
#include <libusb.h>
29

30
#include "fprint.h"
31
#include "fpi-dev.h"
32 33
#include "fpi-core.h"
#include "fpi-log.h"
34
#include "fpi-dev-img.h"
35
#include "fpi-data.h"
36
#include "fpi-img.h"
37
#include "drivers/driver_ids.h"
38

Bastien Nocera's avatar
Bastien Nocera committed
39 40 41 42
/* Global variables */
extern libusb_context *fpi_usb_ctx;
extern GSList *opened_devices;

43 44 45 46 47 48 49 50 51 52 53 54 55
/* fp_print_data structure definition */
enum fp_print_data_type {
	PRINT_DATA_RAW = 0, /* memset-imposed default */
	PRINT_DATA_NBIS_MINUTIAE
};

struct fp_print_data {
	uint16_t driver_id;
	uint32_t devtype;
	enum fp_print_data_type type;
	GSList *prints;
};

Bastien Nocera's avatar
Bastien Nocera committed
56
/* fp_dev structure definition */
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
enum fp_dev_state {
	DEV_STATE_INITIAL = 0,
	DEV_STATE_ERROR,
	DEV_STATE_INITIALIZING,
	DEV_STATE_INITIALIZED,
	DEV_STATE_DEINITIALIZING,
	DEV_STATE_DEINITIALIZED,
	DEV_STATE_ENROLL_STARTING,
	DEV_STATE_ENROLLING,
	DEV_STATE_ENROLL_STOPPING,
	DEV_STATE_VERIFY_STARTING,
	DEV_STATE_VERIFYING,
	DEV_STATE_VERIFY_DONE,
	DEV_STATE_VERIFY_STOPPING,
	DEV_STATE_IDENTIFY_STARTING,
	DEV_STATE_IDENTIFYING,
	DEV_STATE_IDENTIFY_DONE,
	DEV_STATE_IDENTIFY_STOPPING,
75 76 77 78
	DEV_STATE_CAPTURE_STARTING,
	DEV_STATE_CAPTURING,
	DEV_STATE_CAPTURE_DONE,
	DEV_STATE_CAPTURE_STOPPING,
79 80
};

81
struct fp_dev {
82
	struct fp_driver *drv;
83
	uint32_t devtype;
Daniel Drake's avatar
Daniel Drake committed
84

85 86
	/* only valid if drv->type == DRIVER_IMAGING */
	struct fp_img_dev *img_dev;
87 88
	/* Link to the instance specific struct */
	void *instance_data;
89

Daniel Drake's avatar
Daniel Drake committed
90
	int nr_enroll_stages;
Daniel Drake's avatar
Daniel Drake committed
91

92 93 94
	/* FIXME: This will eventually have a bus type */
	libusb_device_handle *udev;

95 96 97 98 99
	/* read-only to drivers */
	struct fp_print_data *verify_data;

	/* drivers should not mess with any of the below */
	enum fp_dev_state state;
Daniel Drake's avatar
Daniel Drake committed
100
	int __enroll_stage;
101
	int unconditional_capture;
102 103 104 105 106

	/* async I/O callbacks and data */
	/* FIXME: convert this to generic state operational data mechanism? */
	fp_dev_open_cb open_cb;
	void *open_cb_data;
107
	fp_operation_stop_cb close_cb;
108 109 110
	void *close_cb_data;
	fp_enroll_stage_cb enroll_stage_cb;
	void *enroll_stage_cb_data;
111
	fp_operation_stop_cb enroll_stop_cb;
112
	void *enroll_stop_cb_data;
113
	fp_img_operation_cb verify_cb;
114
	void *verify_cb_data;
115
	fp_operation_stop_cb verify_stop_cb;
116
	void *verify_stop_cb_data;
117
	fp_identify_cb identify_cb;
118
	void *identify_cb_data;
119
	fp_operation_stop_cb identify_stop_cb;
120
	void *identify_stop_cb_data;
121
	fp_img_operation_cb capture_cb;
122
	void *capture_cb_data;
123
	fp_operation_stop_cb capture_stop_cb;
124
	void *capture_stop_cb_data;
125 126 127

	/* FIXME: better place to put this? */
	struct fp_print_data **identify_gallery;
128 129
};

Bastien Nocera's avatar
Bastien Nocera committed
130
/* fp_img_dev structure definition */
131
struct fp_img_dev {
132 133
	struct fp_dev *parent;

134 135 136 137
	enum fp_imgdev_action action;
	int action_state;

	struct fp_print_data *acquire_data;
138
	struct fp_print_data *enroll_data;
139
	struct fp_img *acquire_img;
140
	int enroll_stage;
141 142 143 144
	int action_result;

	/* FIXME: better place to put this? */
	size_t identify_match_offset;
145 146
};

Bastien Nocera's avatar
Bastien Nocera committed
147
/* fp_driver structure definition */
148

Bastien Nocera's avatar
Bastien Nocera committed
149 150 151 152 153 154
/* fp_img_driver structure definition */
#define container_of(ptr, type, member) ({                      \
        const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
        (type *)( (char *)__mptr - offsetof(type,member) );})
#define fpi_driver_to_img_driver(drv) \
	container_of((drv), struct fp_img_driver, driver)
155

Bastien Nocera's avatar
Bastien Nocera committed
156
/* fp_dscv_dev structure definition */
157
struct fp_dscv_dev {
158
	struct libusb_device *udev;
159
	struct fp_driver *drv;
160
	unsigned long driver_data;
161
	uint32_t devtype;
162 163
};

Bastien Nocera's avatar
Bastien Nocera committed
164
/* fp_dscv_print structure definition */
Daniel Drake's avatar
Daniel Drake committed
165 166 167 168 169 170 171
struct fp_dscv_print {
	uint16_t driver_id;
	uint32_t devtype;
	enum fp_finger finger;
	char *path;
};

Bastien Nocera's avatar
Bastien Nocera committed
172
/* fp_minutia structure definition */
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
struct fp_minutia {
	int x;
	int y;
	int ex;
	int ey;
	int direction;
	double reliability;
	int type;
	int appearing;
	int feature_id;
	int *nbrs;
	int *ridge_counts;
	int num_nbrs;
};

Bastien Nocera's avatar
Bastien Nocera committed
188
/* fp_minutiae structure definition */
189 190 191 192 193 194
struct fp_minutiae {
	int alloc;
	int num;
	struct fp_minutia **list;
};

Bastien Nocera's avatar
Bastien Nocera committed
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
/* Defined in fpi-dev-img.c */
void fpi_img_driver_setup(struct fp_img_driver *idriver);
int fpi_imgdev_get_img_width(struct fp_img_dev *imgdev);
int fpi_imgdev_get_img_height(struct fp_img_dev *imgdev);

/* Exported for use in command-line tools
 * Defined in fpi-core.c */
struct fp_driver **fprint_get_drivers (void);

/* Defined in fpi-core.c */
enum fp_print_data_type fpi_driver_get_data_type(struct fp_driver *drv);

/* Defined in fpi-data.c */
void fpi_data_exit(void);
gboolean fpi_print_data_compatible(uint16_t driver_id1, uint32_t devtype1,
	enum fp_print_data_type type1, uint16_t driver_id2, uint32_t devtype2,
	enum fp_print_data_type type2);

/* Defined in fpi-img.c */
214
gboolean fpi_img_is_sane(struct fp_img *img);
215
int fpi_img_to_print_data(struct fp_img_dev *imgdev, struct fp_img *img,
216
	struct fp_print_data **ret);
217 218
int fpi_img_compare_print_data(struct fp_print_data *enrolled_print,
	struct fp_print_data *new_print);
219
int fpi_img_compare_print_data_to_gallery(struct fp_print_data *print,
220
	struct fp_print_data **gallery, int match_threshold, size_t *match_offset);
221

Bastien Nocera's avatar
Bastien Nocera committed
222
/* Defined in fpi-poll.c */
223
void fpi_timeout_cancel_all_for_dev(struct fp_dev *dev);
Daniel Drake's avatar
Daniel Drake committed
224
void fpi_poll_init(void);
225 226
void fpi_poll_exit(void);

227 228 229 230 231 232 233 234 235 236 237
/* Defined in fpi-async.c */
void fpi_drvcb_capture_started(struct fp_dev *dev, int status);
void fpi_drvcb_report_capture_result(struct fp_dev *dev, int result,
	struct fp_img *img);
void fpi_drvcb_capture_stopped(struct fp_dev *dev);

void fpi_drvcb_identify_started(struct fp_dev *dev, int status);
void fpi_drvcb_report_identify_result(struct fp_dev *dev, int result,
	size_t match_offset, struct fp_img *img);
void fpi_drvcb_identify_stopped(struct fp_dev *dev);

Bastien Nocera's avatar
Bastien Nocera committed
238 239
#include "drivers_definitions.h"

240
#endif