[fprint] Adding new driver

MOGANESHWARAN RAJASEGARAN moganesh at fkegraduate.utm.my
Wed Jan 25 13:08:31 PST 2012


Hi,

It should be libusb.h. I was working on libfprint-0.0.6 and got it working
there. And I changed it to libfprint-0.4.0 by just replacing the
usb_bulk_write and usb_bulk_read to libusb_bulk_transfer. I did remove some
redundant parts in the driver source file.

As for the following part which has been commented:

@@ -102,6 +108,7 @@ done
>  AM_CONDITIONAL([ENABLE_UPEKTS]**, [test "$enable_upekts" = "yes"])
>  AM_CONDITIONAL([ENABLE_UPEKE2]**, [test "$enable_upeke2" = "yes"])
>  #AM_CONDITIONAL([ENABLE_**UPEKTC], [test "$enable_upektc" = "yes"])
> +#AM_CONDITIONAL([ENABLE_**UPEKET], [test "$enable_upeket" = "yes"])
>

and

 #DRIVER_SRC += $(UPEKTC_SRC)

 #endif
> +#if ENABLE_UPEKET
> +#DRIVER_SRC += $(UPEKET_SRC)
>
  +#endif
  +
    if ENABLE_URU4000
    DRIVER_SRC += $(URU4000_SRC)
    endif

The eikon touch 300 scanner is like upek touchchip scanner. So I just
follow the upektc statement in fp_internal.h, Makefile.am, and configure.ac

The syntax is int libusb_bulk_transfer (struct libusb_device_handle
*dev_handle, unsigned char endpoint, unsigned char *data, int length, int
*transferred, unsigned int timeout).

Here it is used as libusb_bulk_transfer(dev->**udev, &msg1, &transferred,
1003);
 And the msg1 is defined as:

struct libusb_bulk_transfer msg1 = {
.endpoint = 2,
.data = pnRawString,
.length = 0x40,
};

I was unaware the upektc.c is obsolete with libfprint-0.4.0. Thank you for
the info. Actually I was hoping it could work well with libfprint-0.4.0. If
thats the case I have to start testing the upeket.c with libfprint-0.4.0.
Thank you for pointing me out.  I did not change to libfprint-0.4.0 cause I
have my programs written based on libfprint-0.0.6 and easier for me do the
testing. Will post the diff once got it working with libfprint-0.4.0

P.S: Bastian, please do not apply the patch first. Have to do some testing
first. Sorry for the trouble. Thank you.

Regards,
Moganesh


On Thu, Jan 26, 2012 at 2:31 AM, Patrick Marlier
<patrick.marlier at gmail.com>wrote:

> On 01/24/2012 01:31 PM, MOGANESHWARAN RAJASEGARAN wrote:
>
>> Thank you for the guide in creating the unified diff. I hope this is
>> correct.
>>
>
> The diff seems ok (weird http://?) and thanks for sharing your work and
> contributing.
>
> Main general concerns from my point of view (even if I am not either the
> owner of such device and either a libfprint developer): our driver is based
> on upektc which is obsolete AFAIU and make your driver obsolete too... Did
> you manage to get it work with the current libfprint (0.4)?
>
> libfprint maintainers/developers, do not hesitate to correct me if I am
> wrong.
>
> I don't know a lot of libfprint/libusb but some comments are inlined
> (mainly related to obsolete functions):
>
>
>  @@ -102,6 +108,7 @@ done
>>  AM_CONDITIONAL([ENABLE_UPEKTS]**, [test "$enable_upekts" = "yes"])
>>  AM_CONDITIONAL([ENABLE_UPEKE2]**, [test "$enable_upeke2" = "yes"])
>>  #AM_CONDITIONAL([ENABLE_**UPEKTC], [test "$enable_upektc" = "yes"])
>> +#AM_CONDITIONAL([ENABLE_**UPEKET], [test "$enable_upeket" = "yes"])
>>
>
> Why there is a # here? you don't want your driver to be enabled?
>
>
>   AM_CONDITIONAL([ENABLE_**UPEKSONLY], [test "$enable_upeksonly" = "yes"])
>>  AM_CONDITIONAL([ENABLE_VCOM5S]**, [test "$enable_vcom5s" = "yes"])
>>  AM_CONDITIONAL([ENABLE_**URU4000], [test "$enable_uru4000" = "yes"])
>>
>
>  @@ -100,6 +102,10 @@ endif
>>  #DRIVER_SRC += $(UPEKTC_SRC)
>>  #endif
>> +#if ENABLE_UPEKET
>> +#DRIVER_SRC += $(UPEKET_SRC)
>>
>
> Again here?
>
>  +#endif
>> +
>>  if ENABLE_URU4000
>>  DRIVER_SRC += $(URU4000_SRC)
>>  endif
>> diff --git a/libfprint/drivers/upeket.c b/libfprint/drivers/upeket.c
>> new file mode 100644
>> index 0000000..e5c12d2
>> --- /dev/null
>> +++ b/libfprint/drivers/upeket.c
>> @@ -0,0 +1,720 @@
>> +/*
>> + * Copyright (C) 2012 Moganeshwaran Rajasegaran
>> <moganeshwaran at gmail.com <mailto:moganeshwaran at gmail.**com<moganeshwaran at gmail.com>
>> >>
>>
>> + * UPEK EikonTouch300 driver for libfprint
>> +
>> + * Heavily based on UPEK TouchChip driver for libfprint
>> + * Copyright (C) 2007 Jan-Michael Brummer <buzz2 at gmx.de
>> <mailto:buzz2 at gmx.de>>
>>
>> + *
>> + * 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
>> + */
>> +
>> +#define FP_COMPONENT "upeket"
>> +
>> +#include <errno.h>
>> +#include <string.h>
>> +
>> +#include <glib.h>
>> +#include <usb.h>
>>
>
> usb.h ? which version of libusb do you use? I pretty sure it should be
> libusb.h
>
>  +
>> +#include <fp_internal.h>
>> +
>> +#define SENSOR_FULL_IMAGE59904
>> +#define WAIT_COUNT5
>> +
>> +typedef char sint8;
>> +typedef unsigned char uint8;
>> +typedef int sint32;
>> +typedef unsigned int uint32;
>> +
>> +/** scan command */
>> +static const unsigned char anScanCommand[ 0x40 ] = {
>> +0x0e, 0x00, 0x03, 0xa8, 0x00, 0xb6, 0xbb, 0xbb,
>> +0xb8, 0xb7, 0xb8, 0xb5, 0xb8, 0xb9, 0xb8, 0xb9,
>> +0xbb, 0xbb, 0xbe, 0xbb, 0x4e, 0x16, 0xf4, 0x77,
>> +0xa8, 0x07, 0x32, 0x00, 0x6a, 0x16, 0xf4, 0x77,
>> +0x78, 0x24, 0x61, 0x00, 0xc8, 0x00, 0xec, 0x00,
>> +0x01, 0x00, 0x00, 0x00, 0x3c, 0xf3, 0x2f, 0x01,
>> +0x05, 0x90, 0xf6, 0x77, 0x84, 0xf5, 0x2f, 0x01,
>> +0x05, 0x90, 0xf6, 0x00, 0xc8, 0x00, 0xec, 0x00
>>
>> +};
>> +
>> +
>> +/**
>> + * \brief Common interaktion routine for the sensor device
>> + * \param dev fingerprint image device pointer
>> + * \param pnRawString raw data string
>> + * \param nLen length we want to read, if 0 do not read at all
>> + * \param pnBuffer buffer pointer we want to store the read buffer
>> + * \return error code
>> + */
>> +static sint32 askScanner( struct fp_img_dev *dev, const unsigned char
>> *pnRawString, sint32 nLen, sint8 *pnBuffer ) {
>> +    sint8 anBuf[ 65535 ];
>> +sint32 nRet;
>> +int transferred;
>> +struct libusb_bulk_transfer msg1 = {
>> +.endpoint = 2,
>> +.data = pnRawString,
>> +.length = 0x40,
>> +};
>> +struct libusb_bulk_transfer msg2 = {
>> +.endpoint = 0x81,
>> +.data = anBuf,
>> +.length = nLen,
>> +};
>> +
>> +nRet = libusb_bulk_transfer(dev->**udev, &msg1, &transferred, 1003);
>>
>
> Humm.. Seems a odd libusb version. The definition I have is this one for
> libusb 1.0 (AFAIK current version used in libfprint):
>
> int libusb_bulk_transfer (struct libusb_device_handle *dev_handle,
> unsigned char endpoint, unsigned char *data, int length, int *transferred,
> unsigned int timeout)
>
> --
> Patrick Marlier.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/fprint/attachments/20120126/4b8c4eb9/attachment.htm>


More information about the fprint mailing list