mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2025-11-15 07:38:12 +00:00
Compare commits
24 Commits
V_0_99_0
...
wip/hadess
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
197edac702 | ||
|
|
66891274a7 | ||
|
|
f52276bd06 | ||
|
|
7dce8dbfaa | ||
|
|
3b757ee738 | ||
|
|
0a45ed7af6 | ||
|
|
1db2dc3f58 | ||
|
|
953c75575b | ||
|
|
8c7ff259af | ||
|
|
3e666130c2 | ||
|
|
2babfa0625 | ||
|
|
83af40679a | ||
|
|
ce31c1d704 | ||
|
|
b20a74a22c | ||
|
|
66461e4c81 | ||
|
|
6ba9439bbb | ||
|
|
6764ec79ae | ||
|
|
6f4c378933 | ||
|
|
b121fa2cc9 | ||
|
|
ca26e85fd4 | ||
|
|
0714380360 | ||
|
|
b9af7952a4 | ||
|
|
ea6820ed51 | ||
|
|
a1e46de462 |
@@ -473,8 +473,17 @@ libfprint_demo_window_init (LibfprintDemoWindow *window)
|
||||
setup_pollfds ();
|
||||
|
||||
discovered_devs = fp_discover_devs();
|
||||
if (!discovered_devs)
|
||||
if (!discovered_devs) {
|
||||
libfprint_demo_set_mode (window, ERROR_MODE);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Empty list? */
|
||||
if (discovered_devs[0] == NULL) {
|
||||
fp_dscv_devs_free (discovered_devs);
|
||||
libfprint_demo_set_mode (window, EMPTY_MODE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!fp_driver_supports_imaging(fp_dscv_dev_get_driver(discovered_devs[0]))) {
|
||||
libfprint_demo_set_mode (window, NOIMAGING_MODE);
|
||||
|
||||
@@ -71,10 +71,7 @@
|
||||
<title>Driver IDs</title>
|
||||
|
||||
<para>
|
||||
Each driver is assigned a unique ID by the project maintainer. These
|
||||
assignments are
|
||||
<ulink url="https://gitlab.freedesktop.org/libfprint/libfprint/blob/master/libfprint/drivers/driver_ids.h">
|
||||
documented in the sources</ulink> and will never change.
|
||||
Each driver is assigned a unique ID automatically based on the driver name.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
||||
@@ -17,7 +17,6 @@ private_headers = [
|
||||
'aes2660.h',
|
||||
'aes3k.h',
|
||||
'aesx660.h',
|
||||
'driver_ids.h',
|
||||
'elan.h',
|
||||
'upek_proto.h',
|
||||
'upeksonly.h',
|
||||
|
||||
@@ -45,8 +45,7 @@ struct fp_print_data *enroll(struct fp_dev *dev) {
|
||||
|
||||
do {
|
||||
struct fp_img *img = NULL;
|
||||
|
||||
sleep(1);
|
||||
|
||||
printf("\nScan your finger now.\n");
|
||||
|
||||
r = fp_enroll_finger_img(dev, &enrolled_print, &img);
|
||||
@@ -143,7 +142,10 @@ int main(void)
|
||||
if (!data)
|
||||
goto out_close;
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
r = fp_print_data_save(data, RIGHT_INDEX);
|
||||
#pragma GCC diagnostic pop
|
||||
if (r < 0)
|
||||
fprintf(stderr, "Data save failed, code %d\n", r);
|
||||
|
||||
|
||||
@@ -117,7 +117,10 @@ int main(void)
|
||||
printf("Opened device. Loading previously enrolled right index finger "
|
||||
"data...\n");
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
r = fp_print_data_load(dev, RIGHT_INDEX, &data);
|
||||
#pragma GCC diagnostic pop
|
||||
if (r != 0) {
|
||||
fprintf(stderr, "Failed to load fingerprint, error %d\n", r);
|
||||
fprintf(stderr, "Did you remember to enroll your right index finger "
|
||||
|
||||
@@ -43,7 +43,6 @@ struct fp_print_data *enroll(struct fp_dev *dev) {
|
||||
"complete the process.\n", fp_dev_get_nr_enroll_stages(dev));
|
||||
|
||||
do {
|
||||
sleep(1);
|
||||
printf("\nScan your finger now.\n");
|
||||
r = fp_enroll_finger(dev, &enrolled_print);
|
||||
if (r < 0) {
|
||||
|
||||
@@ -817,7 +817,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver aes1610_driver = {
|
||||
.driver = {
|
||||
.id = AES1610_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "AuthenTec AES1610",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -94,7 +94,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver aes1660_driver = {
|
||||
.driver = {
|
||||
.id = AES1660_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "AuthenTec AES1660",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -859,7 +859,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver aes2501_driver = {
|
||||
.driver = {
|
||||
.id = AES2501_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "AuthenTec AES2501",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -603,7 +603,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver aes2550_driver = {
|
||||
.driver = {
|
||||
.id = AES2550_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "AuthenTec AES2550/AES2810",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -97,7 +97,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver aes2660_driver = {
|
||||
.driver = {
|
||||
.id = AES2660_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "AuthenTec AES2660",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -162,7 +162,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver aes3500_driver = {
|
||||
.driver = {
|
||||
.id = AES3500_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "AuthenTec AES3500",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -159,7 +159,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver aes4000_driver = {
|
||||
.driver = {
|
||||
.id = AES4000_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "AuthenTec AES4000",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
/*
|
||||
* Driver IDs
|
||||
* Copyright (C) 2012 Vasily Khoruzhick <anarsoul@gmail.com>
|
||||
*
|
||||
* 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 __DRIVER_IDS
|
||||
#define __DRIVER_IDS
|
||||
|
||||
enum {
|
||||
UPEKTS_ID = 1,
|
||||
URU4000_ID = 2,
|
||||
AES4000_ID = 3,
|
||||
AES2501_ID = 4,
|
||||
UPEKTC_ID = 5,
|
||||
AES1610_ID = 6,
|
||||
FDU2000_ID = 7,
|
||||
VCOM5S_ID = 8,
|
||||
UPEKSONLY_ID = 9,
|
||||
VFS101_ID = 10,
|
||||
VFS301_ID = 11,
|
||||
AES2550_ID = 12,
|
||||
/* UPEKE2_ID = 13 */
|
||||
AES1660_ID = 14,
|
||||
AES2660_ID = 15,
|
||||
AES3500_ID = 16,
|
||||
UPEKTC_IMG_ID = 17,
|
||||
ETES603_ID = 18,
|
||||
VFS5011_ID = 19,
|
||||
VFS0050_ID = 20,
|
||||
ELAN_ID = 21,
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -383,6 +383,12 @@ static void elan_cmd_read(fpi_ssm *ssm, struct fp_img_dev *dev)
|
||||
return;
|
||||
}
|
||||
|
||||
if (elandev->dev_type == ELAN_0C42) {
|
||||
/* ELAN_0C42 sends an extra byte in one byte responses */
|
||||
if (elandev->cmd->response_len == 1)
|
||||
response_len = 2;
|
||||
}
|
||||
|
||||
if (elandev->cmd->cmd == get_image_cmd.cmd)
|
||||
/* raw data has 2-byte "pixels" and the frame is vertical */
|
||||
response_len =
|
||||
@@ -597,6 +603,14 @@ static int elan_need_calibration(struct elan_dev *elandev)
|
||||
|
||||
g_assert(frame_size != 0);
|
||||
|
||||
if (elandev->dev_type == ELAN_0C42) {
|
||||
if (calib_mean > 5500 ||
|
||||
calib_mean < 2500) {
|
||||
fp_dbg("Forcing needed recalibration");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < frame_size; i++)
|
||||
bg_mean += elandev->background[i];
|
||||
bg_mean /= frame_size;
|
||||
@@ -621,6 +635,14 @@ enum calibrate_states {
|
||||
CALIBRATE_NUM_STATES,
|
||||
};
|
||||
|
||||
static gboolean elan_supports_calibration(struct elan_dev *elandev)
|
||||
{
|
||||
if (elandev->dev_type == ELAN_0C42)
|
||||
return TRUE;
|
||||
|
||||
return elandev->fw_ver >= ELAN_MIN_CALIBRATION_FW;
|
||||
}
|
||||
|
||||
static void calibrate_run_state(fpi_ssm *ssm, struct fp_dev *_dev, void *user_data)
|
||||
{
|
||||
struct fp_img_dev *dev = user_data;
|
||||
@@ -634,7 +656,7 @@ static void calibrate_run_state(fpi_ssm *ssm, struct fp_dev *_dev, void *user_da
|
||||
break;
|
||||
case CALIBRATE_SAVE_BACKGROUND:
|
||||
elan_save_background(elandev);
|
||||
if (elandev->fw_ver < ELAN_MIN_CALIBRATION_FW) {
|
||||
if (!elan_supports_calibration(elandev)) {
|
||||
fp_dbg("FW does not support calibration");
|
||||
fpi_ssm_mark_completed(ssm);
|
||||
} else
|
||||
@@ -755,6 +777,14 @@ static void activate_run_state(fpi_ssm *ssm, struct fp_dev *_dev, void *user_dat
|
||||
elandev->frame_height = elandev->raw_frame_height =
|
||||
elandev->last_read[0];
|
||||
}
|
||||
/* Work-around sensors returning the sizes as zero-based index
|
||||
* rather than the number of pixels. */
|
||||
if ((elandev->frame_width % 2 == 1) &&
|
||||
(elandev->frame_height % 2 == 1)) {
|
||||
elandev->frame_width++;
|
||||
elandev->frame_height++;
|
||||
elandev->raw_frame_height = elandev->frame_height;
|
||||
}
|
||||
if (elandev->frame_height > ELAN_MAX_FRAME_HEIGHT)
|
||||
elandev->frame_height = ELAN_MAX_FRAME_HEIGHT;
|
||||
fp_dbg("sensor dimensions, WxH: %dx%d", elandev->frame_width,
|
||||
@@ -940,7 +970,6 @@ static void dev_deactivate(struct fp_img_dev *dev)
|
||||
|
||||
struct fp_img_driver elan_driver = {
|
||||
.driver = {
|
||||
.id = ELAN_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "ElanTech Fingerprint Sensor",
|
||||
.id_table = elan_id_table,
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
/* devices with quirks */
|
||||
#define ELAN_0907 (1 << 0)
|
||||
#define ELAN_0C03 (1 << 1)
|
||||
#define ELAN_0C42 (1 << 2)
|
||||
|
||||
/* devices which don't require frame rotation before assembling */
|
||||
#define ELAN_NOT_ROTATED ELAN_0C03
|
||||
@@ -55,7 +56,7 @@
|
||||
|
||||
/* number of frames to drop at the end of capture because frames captured
|
||||
* while the finger is being lifted can be bad */
|
||||
#define ELAN_SKIP_LAST_FRAMES 1
|
||||
#define ELAN_SKIP_LAST_FRAMES 2
|
||||
|
||||
#define ELAN_CMD_LEN 0x2
|
||||
#define ELAN_EP_CMD_OUT (0x1 | LIBUSB_ENDPOINT_OUT)
|
||||
@@ -207,6 +208,7 @@ static const struct usb_id elan_id_table[] = {
|
||||
{.vendor = ELAN_VEND_ID,.product = 0x0c31,.driver_data = ELAN_ALL_DEV},
|
||||
{.vendor = ELAN_VEND_ID,.product = 0x0c32,.driver_data = ELAN_ALL_DEV},
|
||||
{.vendor = ELAN_VEND_ID,.product = 0x0c33,.driver_data = ELAN_ALL_DEV},
|
||||
{.vendor = ELAN_VEND_ID,.product = 0x0c42,.driver_data = ELAN_0C42},
|
||||
{0, 0, 0,},
|
||||
};
|
||||
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
#define FP_COMPONENT "etes603"
|
||||
|
||||
#include "drivers_api.h"
|
||||
#include "driver_ids.h"
|
||||
|
||||
/* libusb defines */
|
||||
#define EP_IN 0x81
|
||||
@@ -1430,8 +1429,9 @@ static void dev_deactivate(struct fp_img_dev *idev)
|
||||
/* this can be called even if still activated. */
|
||||
if (dev->is_active == TRUE) {
|
||||
dev->is_active = FALSE;
|
||||
m_exit_start(idev);
|
||||
}
|
||||
|
||||
m_exit_start(idev);
|
||||
}
|
||||
|
||||
static int dev_open(struct fp_img_dev *idev, unsigned long driver_data)
|
||||
@@ -1477,7 +1477,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver etes603_driver = {
|
||||
.driver = {
|
||||
.id = ETES603_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "EgisTec ES603",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -302,7 +302,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver fdu2000_driver = {
|
||||
.driver = {
|
||||
.id = FDU2000_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "Secugen FDU 2000",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -1345,7 +1345,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver upeksonly_driver = {
|
||||
.driver = {
|
||||
.id = UPEKSONLY_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "UPEK TouchStrip Sensor-Only",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -460,7 +460,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver upektc_driver = {
|
||||
.driver = {
|
||||
.id = UPEKTC_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "UPEK TouchChip/Eikon Touch 300",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -628,7 +628,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver upektc_img_driver = {
|
||||
.driver = {
|
||||
.id = UPEKTC_IMG_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "Upek TouchChip Fingerprint Coprocessor",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -1421,7 +1421,6 @@ static const struct usb_id id_table[] = {
|
||||
};
|
||||
|
||||
struct fp_driver upekts_driver = {
|
||||
.id = UPEKTS_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "UPEK TouchStrip",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -710,7 +710,7 @@ static void imaging_run_state(fpi_ssm *ssm, struct fp_dev *_dev, void *user_data
|
||||
uint32_t key;
|
||||
uint8_t flags, num_lines;
|
||||
int i, r, to, dev2;
|
||||
char buf[5];
|
||||
unsigned char buf[5];
|
||||
|
||||
switch (fpi_ssm_get_cur_state(ssm)) {
|
||||
case IMAGING_CAPTURE:
|
||||
@@ -1340,6 +1340,9 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Disable loading p11-kit's user configuration */
|
||||
g_setenv ("P11_KIT_NO_USER_CONFIG", "1", TRUE);
|
||||
|
||||
/* Initialise NSS early */
|
||||
rv = NSS_NoDB_Init(".");
|
||||
if (rv != SECSuccess) {
|
||||
@@ -1425,7 +1428,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver uru4000_driver = {
|
||||
.driver = {
|
||||
.id = URU4000_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "Digital Persona U.are.U 4000/4000B/4500",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -357,7 +357,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver vcom5s_driver = {
|
||||
.driver = {
|
||||
.id = VCOM5S_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "Veridicom 5thSense",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -770,7 +770,6 @@ static const struct usb_id id_table[] = {
|
||||
struct fp_img_driver vfs0050_driver = {
|
||||
/* Driver specification */
|
||||
.driver = {
|
||||
.id = VFS0050_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "Validity VFS0050",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -1526,7 +1526,6 @@ struct fp_img_driver vfs101_driver =
|
||||
/* Driver specification */
|
||||
.driver =
|
||||
{
|
||||
.id = VFS101_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "Validity VFS101",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -268,7 +268,6 @@ struct fp_img_driver vfs301_driver =
|
||||
/* Driver specification */
|
||||
.driver =
|
||||
{
|
||||
.id = VFS301_ID,
|
||||
.name = FP_COMPONENT,
|
||||
.full_name = "Validity VFS301",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -879,6 +879,7 @@ static void dev_deactivate(struct fp_img_dev *dev)
|
||||
static const struct usb_id id_table[] = {
|
||||
{ .vendor = 0x138a, .product = 0x0010 /* Validity device from some Toshiba laptops */ },
|
||||
{ .vendor = 0x138a, .product = 0x0011 /* vfs5011 */ },
|
||||
{ .vendor = 0x138a, .product = 0x0015 /* Validity device from Lenovo Preferred Pro USB Fingerprint Keyboard KUF1256 */ },
|
||||
{ .vendor = 0x138a, .product = 0x0017 /* Validity device from Lenovo T440 laptops */ },
|
||||
{ .vendor = 0x138a, .product = 0x0018 /* one more Validity device */ },
|
||||
{ 0, 0, 0, },
|
||||
@@ -886,7 +887,6 @@ static const struct usb_id id_table[] = {
|
||||
|
||||
struct fp_img_driver vfs5011_driver = {
|
||||
.driver = {
|
||||
.id = VFS5011_ID,
|
||||
.name = "vfs5011",
|
||||
.full_name = "Validity VFS5011",
|
||||
.id_table = id_table,
|
||||
|
||||
@@ -34,6 +34,5 @@
|
||||
#include "fpi-usb.h"
|
||||
#include "fpi-img.h"
|
||||
#include "fpi-assembling.h"
|
||||
#include "drivers/driver_ids.h"
|
||||
|
||||
#endif
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
#include "fpi-dev-img.h"
|
||||
#include "fpi-data.h"
|
||||
#include "fpi-img.h"
|
||||
#include "drivers/driver_ids.h"
|
||||
|
||||
/* Global variables */
|
||||
extern libusb_context *fpi_usb_ctx;
|
||||
@@ -145,8 +144,6 @@ struct fp_img_dev {
|
||||
size_t identify_match_offset;
|
||||
};
|
||||
|
||||
/* fp_driver structure definition */
|
||||
|
||||
/* fp_img_driver structure definition */
|
||||
#define container_of(ptr, type, member) ({ \
|
||||
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
|
||||
|
||||
@@ -137,10 +137,13 @@ GSList *opened_devices = NULL;
|
||||
|
||||
static GSList *registered_drivers = NULL;
|
||||
|
||||
#define DRV_ID(drv) g_str_hash(drv->name)
|
||||
|
||||
static void register_driver(struct fp_driver *drv)
|
||||
{
|
||||
if (drv->id == 0) {
|
||||
fp_err("not registering driver %s: driver ID is 0", drv->name);
|
||||
if (drv->name == NULL ||
|
||||
strlen(drv->name) <= 2) {
|
||||
fp_err("not registering driver %s, name is too short or absent", drv->name);
|
||||
return;
|
||||
}
|
||||
registered_drivers = g_slist_prepend(registered_drivers, (gpointer) drv);
|
||||
@@ -270,10 +273,12 @@ static struct fp_dscv_dev *discover_dev(libusb_device *udev)
|
||||
* fp_discover_devs:
|
||||
*
|
||||
* Scans the system and returns a list of discovered devices. This is your
|
||||
* entry point into finding a fingerprint reader to operate.
|
||||
* entry point into finding a fingerprint reader to operate. Note that %NULL
|
||||
* is only returned on error. When there are no supported readers available,
|
||||
* an empty list is returned instead.
|
||||
*
|
||||
* Returns: a nul-terminated list of discovered devices. Must be freed with
|
||||
* fp_dscv_devs_free() after use.
|
||||
* Returns: a nul-terminated list of discovered devices or %NULL on error.
|
||||
* Must be freed with fp_dscv_devs_free() after use.
|
||||
*/
|
||||
API_EXPORTED struct fp_dscv_dev **fp_discover_devs(void)
|
||||
{
|
||||
@@ -344,6 +349,8 @@ API_EXPORTED void fp_dscv_devs_free(struct fp_dscv_dev **devs)
|
||||
*/
|
||||
API_EXPORTED struct fp_driver *fp_dscv_dev_get_driver(struct fp_dscv_dev *dev)
|
||||
{
|
||||
g_return_val_if_fail(dev, NULL);
|
||||
|
||||
return dev->drv;
|
||||
}
|
||||
|
||||
@@ -358,6 +365,8 @@ API_EXPORTED struct fp_driver *fp_dscv_dev_get_driver(struct fp_dscv_dev *dev)
|
||||
*/
|
||||
API_EXPORTED uint16_t fp_dscv_dev_get_driver_id(struct fp_dscv_dev *dev)
|
||||
{
|
||||
g_return_val_if_fail(dev, 0);
|
||||
|
||||
return fp_driver_get_driver_id(fp_dscv_dev_get_driver(dev));
|
||||
}
|
||||
|
||||
@@ -371,6 +380,8 @@ API_EXPORTED uint16_t fp_dscv_dev_get_driver_id(struct fp_dscv_dev *dev)
|
||||
*/
|
||||
API_EXPORTED uint32_t fp_dscv_dev_get_devtype(struct fp_dscv_dev *dev)
|
||||
{
|
||||
g_return_val_if_fail(dev, 0);
|
||||
|
||||
return dev->devtype;
|
||||
}
|
||||
|
||||
@@ -400,7 +411,10 @@ enum fp_print_data_type fpi_driver_get_data_type(struct fp_driver *drv)
|
||||
API_EXPORTED int fp_dscv_dev_supports_print_data(struct fp_dscv_dev *dev,
|
||||
struct fp_print_data *print)
|
||||
{
|
||||
return fpi_print_data_compatible(dev->drv->id, dev->devtype,
|
||||
g_return_val_if_fail(dev, 0);
|
||||
g_return_val_if_fail(print, 0);
|
||||
|
||||
return fpi_print_data_compatible(DRV_ID(dev->drv), dev->devtype,
|
||||
fpi_driver_get_data_type(dev->drv), print->driver_id, print->devtype,
|
||||
print->type);
|
||||
}
|
||||
@@ -420,7 +434,10 @@ API_EXPORTED int fp_dscv_dev_supports_print_data(struct fp_dscv_dev *dev,
|
||||
API_EXPORTED int fp_dscv_dev_supports_dscv_print(struct fp_dscv_dev *dev,
|
||||
struct fp_dscv_print *print)
|
||||
{
|
||||
return fpi_print_data_compatible(dev->drv->id, dev->devtype, 0,
|
||||
g_return_val_if_fail(dev, 0);
|
||||
g_return_val_if_fail(print, 0);
|
||||
|
||||
return fpi_print_data_compatible(DRV_ID(dev->drv), dev->devtype, 0,
|
||||
print->driver_id, print->devtype, 0);
|
||||
}
|
||||
|
||||
@@ -443,6 +460,9 @@ API_EXPORTED struct fp_dscv_dev *fp_dscv_dev_for_print_data(struct fp_dscv_dev *
|
||||
struct fp_dscv_dev *ddev;
|
||||
int i;
|
||||
|
||||
g_return_val_if_fail(devs, NULL);
|
||||
g_return_val_if_fail(print, NULL);
|
||||
|
||||
for (i = 0; (ddev = devs[i]); i++)
|
||||
if (fp_dscv_dev_supports_print_data(ddev, print))
|
||||
return ddev;
|
||||
@@ -468,6 +488,9 @@ API_EXPORTED struct fp_dscv_dev *fp_dscv_dev_for_dscv_print(struct fp_dscv_dev *
|
||||
struct fp_dscv_dev *ddev;
|
||||
int i;
|
||||
|
||||
g_return_val_if_fail(devs, NULL);
|
||||
g_return_val_if_fail(print, NULL);
|
||||
|
||||
for (i = 0; (ddev = devs[i]); i++) {
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
@@ -488,6 +511,8 @@ API_EXPORTED struct fp_dscv_dev *fp_dscv_dev_for_dscv_print(struct fp_dscv_dev *
|
||||
*/
|
||||
API_EXPORTED struct fp_driver *fp_dev_get_driver(struct fp_dev *dev)
|
||||
{
|
||||
g_return_val_if_fail(dev, NULL);
|
||||
|
||||
return dev->drv;
|
||||
}
|
||||
|
||||
@@ -502,6 +527,8 @@ API_EXPORTED struct fp_driver *fp_dev_get_driver(struct fp_dev *dev)
|
||||
*/
|
||||
API_EXPORTED int fp_dev_get_nr_enroll_stages(struct fp_dev *dev)
|
||||
{
|
||||
g_return_val_if_fail(dev, 0);
|
||||
|
||||
return dev->nr_enroll_stages;
|
||||
}
|
||||
|
||||
@@ -515,6 +542,8 @@ API_EXPORTED int fp_dev_get_nr_enroll_stages(struct fp_dev *dev)
|
||||
*/
|
||||
API_EXPORTED uint32_t fp_dev_get_devtype(struct fp_dev *dev)
|
||||
{
|
||||
g_return_val_if_fail(dev, 0);
|
||||
|
||||
return dev->devtype;
|
||||
}
|
||||
|
||||
@@ -530,7 +559,10 @@ API_EXPORTED uint32_t fp_dev_get_devtype(struct fp_dev *dev)
|
||||
API_EXPORTED int fp_dev_supports_print_data(struct fp_dev *dev,
|
||||
struct fp_print_data *data)
|
||||
{
|
||||
return fpi_print_data_compatible(dev->drv->id, dev->devtype,
|
||||
g_return_val_if_fail(dev, 0);
|
||||
g_return_val_if_fail(data, 0);
|
||||
|
||||
return fpi_print_data_compatible(DRV_ID(dev->drv), dev->devtype,
|
||||
fpi_driver_get_data_type(dev->drv), data->driver_id, data->devtype,
|
||||
data->type);
|
||||
}
|
||||
@@ -550,7 +582,10 @@ API_EXPORTED int fp_dev_supports_print_data(struct fp_dev *dev,
|
||||
API_EXPORTED int fp_dev_supports_dscv_print(struct fp_dev *dev,
|
||||
struct fp_dscv_print *print)
|
||||
{
|
||||
return fpi_print_data_compatible(dev->drv->id, dev->devtype,
|
||||
g_return_val_if_fail(dev, 0);
|
||||
g_return_val_if_fail(print, 0);
|
||||
|
||||
return fpi_print_data_compatible(DRV_ID(dev->drv), dev->devtype,
|
||||
0, print->driver_id, print->devtype, 0);
|
||||
}
|
||||
|
||||
@@ -564,6 +599,8 @@ API_EXPORTED int fp_dev_supports_dscv_print(struct fp_dev *dev,
|
||||
*/
|
||||
API_EXPORTED const char *fp_driver_get_name(struct fp_driver *drv)
|
||||
{
|
||||
g_return_val_if_fail(drv, NULL);
|
||||
|
||||
return drv->name;
|
||||
}
|
||||
|
||||
@@ -577,6 +614,8 @@ API_EXPORTED const char *fp_driver_get_name(struct fp_driver *drv)
|
||||
*/
|
||||
API_EXPORTED const char *fp_driver_get_full_name(struct fp_driver *drv)
|
||||
{
|
||||
g_return_val_if_fail(drv, NULL);
|
||||
|
||||
return drv->full_name;
|
||||
}
|
||||
|
||||
@@ -590,7 +629,9 @@ API_EXPORTED const char *fp_driver_get_full_name(struct fp_driver *drv)
|
||||
*/
|
||||
API_EXPORTED uint16_t fp_driver_get_driver_id(struct fp_driver *drv)
|
||||
{
|
||||
return drv->id;
|
||||
g_return_val_if_fail(drv, 0);
|
||||
|
||||
return DRV_ID(drv);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -603,6 +644,8 @@ API_EXPORTED uint16_t fp_driver_get_driver_id(struct fp_driver *drv)
|
||||
*/
|
||||
API_EXPORTED enum fp_scan_type fp_driver_get_scan_type(struct fp_driver *drv)
|
||||
{
|
||||
g_return_val_if_fail(drv, FP_SCAN_TYPE_PRESS);
|
||||
|
||||
return drv->scan_type;
|
||||
}
|
||||
|
||||
@@ -621,6 +664,8 @@ API_EXPORTED enum fp_scan_type fp_driver_get_scan_type(struct fp_driver *drv)
|
||||
*/
|
||||
API_EXPORTED int fp_driver_supports_imaging(struct fp_driver *drv)
|
||||
{
|
||||
g_return_val_if_fail(drv, 0);
|
||||
|
||||
return drv->capture_start != NULL;
|
||||
}
|
||||
|
||||
@@ -639,6 +684,8 @@ API_EXPORTED int fp_driver_supports_imaging(struct fp_driver *drv)
|
||||
*/
|
||||
API_EXPORTED int fp_dev_supports_imaging(struct fp_dev *dev)
|
||||
{
|
||||
g_return_val_if_fail(dev, 0);
|
||||
|
||||
return dev->drv->capture_start != NULL;
|
||||
}
|
||||
|
||||
@@ -654,6 +701,8 @@ API_EXPORTED int fp_dev_supports_imaging(struct fp_dev *dev)
|
||||
*/
|
||||
API_EXPORTED int fp_dev_supports_identification(struct fp_dev *dev)
|
||||
{
|
||||
g_return_val_if_fail(dev, 0);
|
||||
|
||||
return dev->drv->identify_start != NULL;
|
||||
}
|
||||
|
||||
@@ -671,6 +720,8 @@ API_EXPORTED int fp_dev_supports_identification(struct fp_dev *dev)
|
||||
*/
|
||||
API_EXPORTED int fp_dev_get_img_width(struct fp_dev *dev)
|
||||
{
|
||||
g_return_val_if_fail(dev, -1);
|
||||
|
||||
if (!dev->img_dev) {
|
||||
fp_dbg("get image width for non-imaging device");
|
||||
return -1;
|
||||
@@ -693,6 +744,8 @@ API_EXPORTED int fp_dev_get_img_width(struct fp_dev *dev)
|
||||
*/
|
||||
API_EXPORTED int fp_dev_get_img_height(struct fp_dev *dev)
|
||||
{
|
||||
g_return_val_if_fail(dev, -1);
|
||||
|
||||
if (!dev->img_dev) {
|
||||
fp_dbg("get image height for non-imaging device");
|
||||
return -1;
|
||||
|
||||
@@ -68,7 +68,6 @@ enum fp_driver_type {
|
||||
};
|
||||
|
||||
struct fp_driver {
|
||||
const uint16_t id;
|
||||
const char *name;
|
||||
const char *full_name;
|
||||
const struct usb_id * const id_table;
|
||||
|
||||
@@ -56,12 +56,15 @@ struct fpi_print_data_item_fp2 {
|
||||
*
|
||||
* This page documents the various operations you can do with a stored print.
|
||||
* Note that by default, "stored prints" are not actually stored anywhere
|
||||
* except in RAM. For the simple scenarios, libfprint provides a simple API
|
||||
* for you to save and load the stored prints referring to a single user in
|
||||
* their home directory. For more advanced users, libfprint provides APIs for
|
||||
* you to convert print data to a byte string, and to reconstruct stored prints
|
||||
* except in RAM. Storage needs to be handled by the API user by using the
|
||||
* fp_print_data_get_data() and fp_print_data_from_data(). This API allows
|
||||
* to convert print data into byte strings, and to reconstruct stored prints
|
||||
* from such data at a later point. You are welcome to store these byte strings
|
||||
* in any fashion that suits you.
|
||||
*
|
||||
* The provided API to store data on disk is deprecated and should not be
|
||||
* used anymore. This API stored the prints in the current user's home
|
||||
* directory.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -145,7 +148,7 @@ struct fp_print_data_item *fpi_print_data_item_new(size_t length)
|
||||
|
||||
struct fp_print_data *fpi_print_data_new(struct fp_dev *dev)
|
||||
{
|
||||
return print_data_new(dev->drv->id, dev->devtype,
|
||||
return print_data_new(fp_driver_get_driver_id(dev->drv), dev->devtype,
|
||||
fpi_driver_get_data_type(dev->drv));
|
||||
}
|
||||
|
||||
@@ -346,7 +349,7 @@ static char *__get_path_to_print(uint16_t driver_id, uint32_t devtype,
|
||||
|
||||
static char *get_path_to_print(struct fp_dev *dev, enum fp_finger finger)
|
||||
{
|
||||
return __get_path_to_print(dev->drv->id, dev->devtype, finger);
|
||||
return __get_path_to_print(fp_driver_get_driver_id(dev->drv), dev->devtype, finger);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -366,6 +369,10 @@ static char *get_path_to_print(struct fp_dev *dev, enum fp_finger finger)
|
||||
* directory beneath the current user's home directory.
|
||||
*
|
||||
* Returns: 0 on success, non-zero on error.
|
||||
*
|
||||
* Deprecated: Data storage should be handled outside of libfprint.
|
||||
* See <link linkend="libfprint-Stored-prints.description">stored prints description</link>
|
||||
* for more information.
|
||||
*/
|
||||
API_EXPORTED int fp_print_data_save(struct fp_print_data *data,
|
||||
enum fp_finger finger)
|
||||
@@ -478,6 +485,10 @@ static int load_from_file(char *path, struct fp_print_data **data)
|
||||
* obscure error conditions (e.g. corruption).
|
||||
*
|
||||
* Returns: 0 on success, non-zero on error
|
||||
*
|
||||
* Deprecated: Data storage should be handled outside of libfprint.
|
||||
* See <link linkend="libfprint-Stored-prints.description">stored prints description</link>
|
||||
* for more information.
|
||||
*/
|
||||
API_EXPORTED int fp_print_data_load(struct fp_dev *dev,
|
||||
enum fp_finger finger, struct fp_print_data **data)
|
||||
@@ -513,6 +524,10 @@ API_EXPORTED int fp_print_data_load(struct fp_dev *dev,
|
||||
* Removes a stored print from disk previously saved with fp_print_data_save().
|
||||
*
|
||||
* Returns: 0 on success, negative on error
|
||||
*
|
||||
* Deprecated: Data storage should be handled outside of libfprint.
|
||||
* See <link linkend="libfprint-Stored-prints.description">stored prints description</link>
|
||||
* for more information.
|
||||
*/
|
||||
API_EXPORTED int fp_print_data_delete(struct fp_dev *dev,
|
||||
enum fp_finger finger)
|
||||
|
||||
@@ -91,8 +91,6 @@ struct fpi_timeout {
|
||||
char *name;
|
||||
};
|
||||
|
||||
static gboolean fpi_poll_is_setup(void);
|
||||
|
||||
static int timeout_sort_fn(gconstpointer _a, gconstpointer _b)
|
||||
{
|
||||
fpi_timeout *a = (fpi_timeout *) _a;
|
||||
@@ -167,7 +165,6 @@ fpi_timeout *fpi_timeout_add(unsigned int msec,
|
||||
int r;
|
||||
|
||||
g_return_val_if_fail (dev != NULL, NULL);
|
||||
g_return_val_if_fail (fpi_poll_is_setup(), NULL);
|
||||
|
||||
fp_dbg("in %dms", msec);
|
||||
|
||||
@@ -210,26 +207,6 @@ void fpi_timeout_cancel(fpi_timeout *timeout)
|
||||
fpi_timeout_free(timeout);
|
||||
}
|
||||
|
||||
void
|
||||
fpi_timeout_cancel_for_dev(struct fp_dev *dev)
|
||||
{
|
||||
GSList *l;
|
||||
|
||||
g_return_if_fail (dev != NULL);
|
||||
|
||||
l = active_timers;
|
||||
while (l) {
|
||||
struct fpi_timeout *timeout = l->data;
|
||||
GSList *current = l;
|
||||
|
||||
l = l->next;
|
||||
if (timeout->dev == dev) {
|
||||
fpi_timeout_free (timeout);
|
||||
active_timers = g_slist_delete_link (active_timers, current);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* get the expiry time and optionally the timeout structure for the next
|
||||
* timeout. returns 0 if there are no expired timers, or 1 if the
|
||||
* timeval/timeout output parameters were populated. if the returned timeval
|
||||
@@ -487,12 +464,6 @@ void fpi_poll_exit(void)
|
||||
libusb_set_pollfd_notifiers(fpi_usb_ctx, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
fpi_poll_is_setup(void)
|
||||
{
|
||||
return (fd_added_cb != NULL && fd_removed_cb != NULL);
|
||||
}
|
||||
|
||||
void
|
||||
fpi_timeout_cancel_all_for_dev(struct fp_dev *dev)
|
||||
{
|
||||
|
||||
@@ -275,11 +275,13 @@ int fp_identify_finger(struct fp_dev *dev,
|
||||
|
||||
/* Data handling */
|
||||
int fp_print_data_load(struct fp_dev *dev, enum fp_finger finger,
|
||||
struct fp_print_data **data);
|
||||
struct fp_print_data **data) LIBFPRINT_DEPRECATED;
|
||||
int fp_print_data_from_dscv_print(struct fp_dscv_print *print,
|
||||
struct fp_print_data **data) LIBFPRINT_DEPRECATED;
|
||||
int fp_print_data_save(struct fp_print_data *data, enum fp_finger finger);
|
||||
int fp_print_data_delete(struct fp_dev *dev, enum fp_finger finger);
|
||||
int fp_print_data_save(struct fp_print_data *data, enum fp_finger finger)
|
||||
LIBFPRINT_DEPRECATED;
|
||||
int fp_print_data_delete(struct fp_dev *dev, enum fp_finger finger)
|
||||
LIBFPRINT_DEPRECATED;
|
||||
void fp_print_data_free(struct fp_print_data *data);
|
||||
size_t fp_print_data_get_data(struct fp_print_data *data, unsigned char **ret);
|
||||
struct fp_print_data *fp_print_data_from_data(unsigned char *buf,
|
||||
|
||||
@@ -1,40 +1,18 @@
|
||||
libfprint_sources = [
|
||||
'fp_internal.h',
|
||||
'nbis-helpers.h',
|
||||
'drivers_api.h',
|
||||
'fpi-async.c',
|
||||
'fpi-async.h',
|
||||
'fpi-assembling.c',
|
||||
'fpi-assembling.h',
|
||||
'fpi-core.c',
|
||||
'fpi-core.h',
|
||||
'fpi-data.c',
|
||||
'fpi-data.h',
|
||||
'fpi-dev.c',
|
||||
'fpi-dev.h',
|
||||
'fpi-dev-img.c',
|
||||
'fpi-dev-img.h',
|
||||
'fpi-img.c',
|
||||
'fpi-img.h',
|
||||
'fpi-log.h',
|
||||
'fpi-ssm.c',
|
||||
'fpi-ssm.h',
|
||||
'fpi-sync.c',
|
||||
'fpi-poll.h',
|
||||
'fpi-poll.c',
|
||||
'fpi-usb.h',
|
||||
'fpi-usb.c',
|
||||
'drivers/driver_ids.h',
|
||||
]
|
||||
|
||||
nbis_sources = [
|
||||
'nbis/include/bozorth.h',
|
||||
'nbis/include/bz_array.h',
|
||||
'nbis/include/defs.h',
|
||||
'nbis/include/lfs.h',
|
||||
'nbis/include/log.h',
|
||||
'nbis/include/morph.h',
|
||||
'nbis/include/sunrast.h',
|
||||
'nbis/bozorth3/bozorth3.c',
|
||||
'nbis/bozorth3/bz_alloc.c',
|
||||
'nbis/bozorth3/bz_drvrs.c',
|
||||
@@ -76,13 +54,13 @@ drivers_sources = []
|
||||
drivers_cflags = []
|
||||
foreach driver: drivers
|
||||
if driver == 'upekts'
|
||||
drivers_sources += [ 'drivers/upekts.c' ]
|
||||
drivers_sources += [ 'drivers/upekts.c', 'drivers/upek_proto.c' ]
|
||||
endif
|
||||
if driver == 'upektc'
|
||||
drivers_sources += [ 'drivers/upektc.c', 'drivers/upektc.h', 'drivers/upek_proto.c', 'drivers/upek_proto.h' ]
|
||||
drivers_sources += [ 'drivers/upektc.c' ]
|
||||
endif
|
||||
if driver == 'upeksonly'
|
||||
drivers_sources += [ 'drivers/upeksonly.c', 'drivers/upeksonly.h' ]
|
||||
drivers_sources += [ 'drivers/upeksonly.c' ]
|
||||
endif
|
||||
if driver == 'uru4000'
|
||||
drivers_sources += [ 'drivers/uru4000.c' ]
|
||||
@@ -92,20 +70,20 @@ foreach driver: drivers
|
||||
aeslib = true
|
||||
endif
|
||||
if driver == 'aes1660'
|
||||
drivers_sources += [ 'drivers/aes1660.c', 'drivers/aes1660.h' ]
|
||||
drivers_sources += [ 'drivers/aes1660.c' ]
|
||||
aeslib = true
|
||||
aesx660 = true
|
||||
endif
|
||||
if driver == 'aes2501'
|
||||
drivers_sources += [ 'drivers/aes2501.c', 'drivers/aes2501.h' ]
|
||||
drivers_sources += [ 'drivers/aes2501.c' ]
|
||||
aeslib = true
|
||||
endif
|
||||
if driver == 'aes2550'
|
||||
drivers_sources += [ 'drivers/aes2550.c', 'drivers/aes2550.h' ]
|
||||
drivers_sources += [ 'drivers/aes2550.c' ]
|
||||
aeslib = true
|
||||
endif
|
||||
if driver == 'aes2660'
|
||||
drivers_sources += [ 'drivers/aes2660.c', 'drivers/aes2660.h' ]
|
||||
drivers_sources += [ 'drivers/aes2660.c' ]
|
||||
aeslib = true
|
||||
aesx660 = true
|
||||
endif
|
||||
@@ -129,33 +107,33 @@ foreach driver: drivers
|
||||
drivers_sources += [ 'drivers/vfs101.c' ]
|
||||
endif
|
||||
if driver == 'vfs301'
|
||||
drivers_sources += [ 'drivers/vfs301.c', 'drivers/vfs301_proto.c', 'drivers/vfs301_proto.h', 'drivers/vfs301_proto_fragments.h' ]
|
||||
drivers_sources += [ 'drivers/vfs301.c', 'drivers/vfs301_proto.c' ]
|
||||
endif
|
||||
if driver == 'vfs5011'
|
||||
drivers_sources += [ 'drivers/vfs5011.c', 'drivers/vfs5011_proto.h' ]
|
||||
drivers_sources += [ 'drivers/vfs5011.c' ]
|
||||
endif
|
||||
if driver == 'upektc_img'
|
||||
drivers_sources += [ 'drivers/upektc_img.c', 'drivers/upektc_img.h', 'drivers/upek_proto.c', 'drivers/upek_proto.h' ]
|
||||
drivers_sources += [ 'drivers/upektc_img.c', 'drivers/upek_proto.c' ]
|
||||
endif
|
||||
if driver == 'etes603'
|
||||
drivers_sources += [ 'drivers/etes603.c' ]
|
||||
endif
|
||||
if driver == 'vfs0050'
|
||||
drivers_sources += [ 'drivers/vfs0050.c', 'drivers/vfs0050.h' ]
|
||||
drivers_sources += [ 'drivers/vfs0050.c' ]
|
||||
endif
|
||||
if driver == 'elan'
|
||||
drivers_sources += [ 'drivers/elan.c', 'drivers/elan.h' ]
|
||||
drivers_sources += [ 'drivers/elan.c' ]
|
||||
endif
|
||||
endforeach
|
||||
|
||||
if aeslib
|
||||
drivers_sources += [ 'drivers/aeslib.c', 'drivers/aeslib.h' ]
|
||||
drivers_sources += [ 'drivers/aeslib.c' ]
|
||||
endif
|
||||
if aesx660
|
||||
drivers_sources += ['drivers/aesx660.c', 'drivers/aesx660.h' ]
|
||||
drivers_sources += ['drivers/aesx660.c' ]
|
||||
endif
|
||||
if aes3k
|
||||
drivers_sources += ['drivers/aes3k.c', 'drivers/aes3k.h' ]
|
||||
drivers_sources += ['drivers/aes3k.c' ]
|
||||
endif
|
||||
|
||||
other_sources = []
|
||||
|
||||
@@ -17,7 +17,7 @@ option('x11-examples',
|
||||
option('gtk-examples',
|
||||
description: 'Whether to build GTK+ example applications',
|
||||
type: 'boolean',
|
||||
value: true)
|
||||
value: false)
|
||||
option('doc',
|
||||
description: 'Whether to build the API documentation',
|
||||
type: 'boolean',
|
||||
|
||||
Reference in New Issue
Block a user