<div dir="ltr">Hi everybody,<div><br></div><div>Base on the new info I got I've updated the driver in a few places:</div><div><br></div><div>1. Frames are cropped to 30px by height. I've received some examples of images from 96px readers and it seems that the assembling procedure just doesn't work for frames of greater height. I _think_ this is largely because the skin stretches and deforms in a non-uniform way when you swipe. E.g. the same part of the print is slightly different when it's near the bottom of the frame than when it's near the top. Plus, there often seem to be sensor artifacts near the edges, so.</div><div><br></div><div>2. Sensor reset is out. Devices do it when they power up. I'm not entirely sure that it's absolutely not needed, though. I'm thinking about suspend & resume, for one. But anyway, I've used my reader for long without any reset and I'm suspending all the time and I haven't had any problems because of it.</div><div><br></div><div>3. Some changes around calibration. You can get a calibration status of 0x01 (ongoing) and 0x03 (completed) from the device. But I've noticed that very often the first response I get is 0x03, which later (~100 ms) changes to 0x01, then back to 0x03. So now to make sure it actually completes, the driver first wants to see 0x01 at least once and then it waits for 0x03.</div><div><br></div><div>4. KT has recommended a different frame extraction algo. First we subtract the background which we got during calibration. This helps quite significantly. Then we split values into 3 groups and apply a different transformation to each group (see comments for detail). And this seems to give slightly worse results on my reader than simple linear scaling like there was before. So I've left both methods and it's possible to configure the method for each device. YMMV.</div><div><br></div><div>Please see if it now works better/same/worse for you. I think verification is now slightly better on my device but I need to use it for a couple of days to know.</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jan 30, 2018 at 8:31 PM Igor Filatov <<a href="mailto:ia.filatov@gmail.com">ia.filatov@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Timo,<div><br></div><div>Sure, give it a shot! And as I said earlier, remember that you don't need a generic algo for any 2 fingerprints. The prints always come from the same device.</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jan 30, 2018 at 8:16 PM TeEmZe <<a href="mailto:timo@teemze.de" target="_blank">timo@teemze.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="en-DE" link="#0563C1" vlink="#954F72"><div class="m_-3953533672820915529m_-5223216061559909629WordSection1"><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB">Hi,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB">I'll give it a shot in C, but will switch to Java before desperation.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB">I'll try to implement the <i>Fingerprint Identification Using Cross Correlation of Field Orientation</i> – there are a few papers online.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB">I’ll write a library which receives two images (the enrolled and the one to verify) and returns a number between 0 and 100 (the percentage of the match), while above 70 is considered a match.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB">This might take a little bit of time, but I think I should be able to tackle this.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB">Later I’ll need a few people to test it, obviously, and maybe a bit of help including it into the main project.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB">Kind regards,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-GB">Timo<u></u><u></u></span></p></div></div><div lang="en-DE" link="#0563C1" vlink="#954F72"><div class="m_-3953533672820915529m_-5223216061559909629WordSection1"><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="EN-US">-----Original Message-----<br>From: Hans de Goede [mailto:<a href="mailto:hdegoede@redhat.com" target="_blank">hdegoede@redhat.com</a>] <br>Sent: Tuesday, 30 January 2018 10:39<br>To: TeEmZe <<a href="mailto:timo@teemze.de" target="_blank">timo@teemze.de</a>>; 'Igor Filatov' <<a href="mailto:ia.filatov@gmail.com" target="_blank">ia.filatov@gmail.com</a>><br>Cc: <a href="mailto:konachan.700@gmail.com" target="_blank">konachan.700@gmail.com</a>; 'Sebastien Bechet' <<a href="mailto:sebastien.bechet@osinix.com" target="_blank">sebastien.bechet@osinix.com</a>>; <a href="mailto:fprint@lists.freedesktop.org" target="_blank">fprint@lists.freedesktop.org</a><br>Subject: Re: [fprint] elan patch + poc 0x903 and 0x0C03</span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">Hi,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">On 29-01-18 21:52, TeEmZe wrote:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> Hi,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> Let’s assume I’d like to take a look at it (I am indeed quite interested).<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> Would I have to write the algorithm in C (I am, as mentioned, not quite good in C and I don’t think that C is the perfect language for algorithmic)?<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> And would I have to rewrite the existing code or could I just replace a library?<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">Ideally it would be in C and it would be stand-alone so that it can be added to libfprint as a second algorithm to use on low-res fp readers. But we don't need to get there in one step. If you are interested in working on this, and you can write something in say python which does a good job of matching and add some docs / comments clearly explaining all the steps of the algorithm you've come up with, then someone else can use that to implement the same algorithm in say C.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">We should probably also consider adding an external (C-lib) dependency for this to libfprint, rather then implementing everything needed from scratch, but that is all something to worry about later really. First we need a clearly described / documented algorithm which does a good job of matching (with example code please). Once we have that we can worry about integrating it into libfprint (IMHO).<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">Regards,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">Hans<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE"><u></u> <u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> Kind regards,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> Timo<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> *From:*Igor Filatov [<a href="mailto:ia.filatov@gmail.com" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:ia.filatov@gmail.com</span></a>]<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> *Sent:* Monday, 29 January 2018 20:26<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> *To:* Hans de Goede <<a href="mailto:hdegoede@redhat.com" target="_blank"><span style="color:windowtext;text-decoration:none">hdegoede@redhat.com</span></a>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> *Cc:* <a href="mailto:konachan.700@gmail.com" target="_blank"><span style="color:windowtext;text-decoration:none">konachan.700@gmail.com</span></a>; Sebastien Bechet <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <<a href="mailto:sebastien.bechet@osinix.com" target="_blank"><span style="color:windowtext;text-decoration:none">sebastien.bechet@osinix.com</span></a>>; TeEmZe <<a href="mailto:timo@teemze.de" target="_blank"><span style="color:windowtext;text-decoration:none">timo@teemze.de</span></a>>; <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <a href="mailto:fprint@lists.freedesktop.org" target="_blank"><span style="color:windowtext;text-decoration:none">fprint@lists.freedesktop.org</span></a><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> *Subject:* Re: [fprint] elan patch + poc 0x903 and 0x0C03<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> Well yes, treating these readers as swipe devices does seem awkward. But that was the only way of making it work short of implementing a new recognition algo, which seemed like too much at the time. In fact, the current one is also a 3rd party lib. The authors of libfprint have considered an alternative approach for smaller sensors but there weren't any usable libs (<a href="https://www.freedesktop.org/wiki/Software/fprint/libfprint/Imaging_performance/#possiblesolutions" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.freedesktop.org/wiki/Software/fprint/libfprint/Imaging_performance/#possiblesolutions</span></a>).<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> As for the stitching code, it assumes that frame height is small. A couple of px originally but works for a couple dozen px as well (but not *that* well). 96px is probably too much but you can try tweaking the frame margin. The height needs to be narrow enough for the stitching to work and wide enough to make sure there are no gaps, given the device's "frame rate". But even if that works, we're left with 96px of width which means you really need to make sure you enroll the same area of the finger which you verify...<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> With a bit of getting used to, my 144x64 scanner works more or less ok for me. Could be better, but still. This is why I decided to keep working on this driver. But then, there's a driver for a 64x64 device (<a href="https://www.freedesktop.org/wiki/Software/fprint/libfprint/aes4000/" target="_blank"><span style="color:windowtext;text-decoration:none">https://www.freedesktop.org/wiki/Software/fprint/libfprint/aes4000/</span></a>) so why not?<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> On Mon, Jan 29, 2018 at 5:38 PM Hans de Goede <<a href="mailto:hdegoede@redhat.com%20%3cmailto:hdegoede@redhat.com" target="_blank"><span style="color:windowtext;text-decoration:none">hdegoede@redhat.com <mailto:hdegoede@redhat.com</span></a>>> wrote:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     Hi,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     On 23-01-18 22:58, Igor Filatov wrote:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      > I've updated the driver to support the devices known so far. Please see if it works for you. Please send me your logs if not. I've enabled all commands for all devices (except 0x4031 which I've enabled only on my 0x0907 -- no idea what it does, but the response is 0x01).<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      > There's a bit mask in each command which you can use to enable/disable commands for a particular device.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      > As for calibration, the driver doesn't expect 0x03 because not all devices seem to return 0x03 or 0x01. Instead it will retry *only* if the response is 0x03 and until it's different.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      > I've enabled reset & fuse load for my device. Although I haven't seen it done by the original driver, it doesn't seem to hurt. So please see if it cause problems for you. Let's disable it only for devices where it does.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      > <a href="https://github.com/iafilatov/libfprint" target="_blank"><span style="color:windowtext;text-decoration:none">https://github.com/iafilatov/libfprint</span></a><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     This works for me with both the 0c16 and 0c26 readers I've access too.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     But we really need someone (any takers?) to implement a different type<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     of recognition algorithm for these, not using minutia and then not treat<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     them as swipe readers. Basically what we need is some form of image correlation<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     algorithm. Perhaps the stitching code (which does not seem to do a very good<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     job IMHO) can be used, to see if 2 images can be made to mostly overlap<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     with an acceptable shift.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     Note that when I last looking into this I did a quick duckduckgo search<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     on low resolution fingerprint recognition and there are a number of<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     academic papers on how this can be done using image correlation, so<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     ideally some-one would go and implement something like this.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     Regards,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>     Hans<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      > On Fri, Jan 19, 2018 at 3:33 PM TeEmZe <<a href="mailto:timo@teemze.de%20%3cmailto:timo@teemze.de" target="_blank"><span style="color:windowtext;text-decoration:none">timo@teemze.de <mailto:timo@teemze.de</span></a>> <<a href="mailto:timo@teemze.de%20%3cmailto:timo@teemze.de" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:timo@teemze.de <mailto:timo@teemze.de</span></a>>>> wrote:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Hi,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Sadly I won't be able to get the data until next week, as I currently don't have access to the Laptop. I'll notify you as soon as I manage to get the data.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Regards,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Timo<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     -----Original Message-----<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     From: Hans de Goede [<a href="mailto:hdegoede@redhat.com%20%3cmailto:hdegoede@redhat.com%3e%20%3cmailto:hdegoede@redhat.com%20%3cmailto:hdegoede@redhat.com%3e%3e" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:hdegoede@redhat.com <mailto:hdegoede@redhat.com> <mailto:hdegoede@redhat.com <mailto:hdegoede@redhat.com>></span></a>]<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Sent: Thursday, 18 January 2018 16:14<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     To: Sebastien Bechet <<a href="mailto:sebastien.bechet@osinix.com%20%3cmailto:sebastien.bechet@osinix.com" target="_blank"><span style="color:windowtext;text-decoration:none">sebastien.bechet@osinix.com <mailto:sebastien.bechet@osinix.com</span></a>> <<a href="mailto:sebastien.bechet@osinix.com%20%3cmailto:sebastien.bechet@osinix.com" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:sebastien.bechet@osinix.com <mailto:sebastien.bechet@osinix.com</span></a>>>>; Igor Filatov <<a href="mailto:ia.filatov@gmail.com%20%3cmailto:ia.filatov@gmail.com" target="_blank"><span style="color:windowtext;text-decoration:none">ia.filatov@gmail.com <mailto:ia.filatov@gmail.com</span></a>> <<a href="mailto:ia.filatov@gmail.com%20%3cmailto:ia.filatov@gmail.com" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:ia.filatov@gmail.com <mailto:ia.filatov@gmail.com</span></a>>>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Cc: TeEmZe <<a href="mailto:timo@teemze.de%20%3cmailto:timo@teemze.de" target="_blank"><span style="color:windowtext;text-decoration:none">timo@teemze.de <mailto:timo@teemze.de</span></a>> <<a href="mailto:timo@teemze.de%20%3cmailto:timo@teemze.de" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:timo@teemze.de <mailto:timo@teemze.de</span></a>>>>; <a href="mailto:konachan.700@gmail.com" target="_blank"><span style="color:windowtext;text-decoration:none">konachan.700@gmail.com</span></a> <<a href="mailto:konachan.700@gmail.com" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:konachan.700@gmail.com</span></a>> <<a href="mailto:konachan.700@gmail.com%20%3cmailto:konachan.700@gmail.com" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:konachan.700@gmail.com <mailto:konachan.700@gmail.com</span></a>>>; <a href="mailto:fprint@lists.freedesktop.org" target="_blank"><span style="color:windowtext;text-decoration:none">fprint@lists.freedesktop.org</span></a> <<a href="mailto:fprint@lists.freedesktop.org" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:fprint@lists.freedesktop.org</span></a>> <<a href="mailto:fprint@lists.freedesktop.org%20%3cmailto:fprint@lists.freedesktop.org" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:fprint@lists.freedesktop.org <mailto:fprint@lists.freedesktop.org</span></a>>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Subject: Re: [fprint] elan patch + poc 0x903 and 0x0C03<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Hi,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     On 18-01-18 16:03, Sebastien Bechet wrote:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      > Thank you Igor. Hans, you can try again with last version.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Not tested, but looking at the code, it will loop in the calibration, my 2 devices both need a:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     if (result == 0x03) break;<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Directly after the:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     printf("Calibration Status: 0x%x\n", result);<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Line, currently the code only checks for result == 0x03 for the result of the get_cmd_status command, while it should check (for my devices) the result of the get_cmd_calibration command.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Regards,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >     Hans<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      > I also tried to remove reset+fuseload then calibration not working<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      > anymore for 0x0903. It seems it is a part for calibration (same pdf<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      > file for reset _and_ calibration or .... reset _then_ calibration?).<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      > <a href="https://github.com/sbechet/elanfp" target="_blank"><span style="color:windowtext;text-decoration:none">https://github.com/sbechet/elanfp</span></a><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      > Konata and timo, can you give us width, height, firmware version and<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      > calibration status using elanfp.c please?<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      > Le jeudi 18 janvier 2018 à 14:02 +0000, Igor Filatov a écrit :<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> square and seems to contain the image 3 times<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >> Could be because convert is hardcoded at 96x96.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >> On Thu, 18 Jan 2018, 12:04 Hans de Goede, <<a href="mailto:hdegoede@redhat.com%20%3cmailto:hdegoede@redhat.com" target="_blank"><span style="color:windowtext;text-decoration:none">hdegoede@redhat.com <mailto:hdegoede@redhat.com</span></a>> <<a href="mailto:hdegoede@redhat.com%20%3cmailto:hdegoede@redhat.com" target="_blank"><span style="color:windowtext;text-decoration:none">mailto:hdegoede@redhat.com <mailto:hdegoede@redhat.com</span></a>>>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >> wrote:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> Hi,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> On 18-01-18 10:48, Sébastien Béchet wrote:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>> On 17-01-18 19:21, Igor Filatov wrote:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>>> We didn't have the spec before so I had no idea how different<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> devices worked. Especially given that some commands which worked<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> fine for me produced errors one other devices. Now that we have the<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> docs I'll work on adapting the driver. Naturally, any info you have<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> is welcome and so is any help with testing.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>> I have done the [synthesis](<a href="https://github.com/sbechet/elanfp/blo" target="_blank"><span style="color:windowtext;text-decoration:none">https://github.com/sbechet/elanfp/blo</span></a><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> b/master/README.md) about all informations we have a prepare<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> questions for KT.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> My 0x0c16 id reader has firmware version 1.56, resolution 96x96<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> I also have bought a stand-alone USB reader for when I would find<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> time to work on this, this has an usb-id of: 0x0c26.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> After aking these changes:<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> --- elanfp.c~   2018-01-18 10:58:59.919912347 +0100<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> +++ elanfp.c    2018-01-18 11:01:50.346280668 +0100<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> @@ -71,7 +71,8 @@<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>                    (desc.idVendor == 0x04f3) && (desc.idProduct ==<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> 0x0903) ||<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>                    (desc.idVendor == 0x04f3) && (desc.idProduct ==<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> 0x0907) ||<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>                    (desc.idVendor == 0x04f3) && (desc.idProduct ==<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> 0x0c03) ||<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> -                (desc.idVendor == 0x04f3) && (desc.idProduct ==<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> 0x0c16) ) {<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> +                (desc.idVendor == 0x04f3) && (desc.idProduct ==<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> 0x0c16) ||<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> +                (desc.idVendor == 0x04f3) && (desc.idProduct ==<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> 0x0c26) ) {<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>                    r0 = 0;<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>                    printf("Device with vid %x pid %x found.\n",<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> desc.idVendor, desc.idProduct);<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>                    break;<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> @@ -156,7 +157,7 @@<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>            printf("CMD Get Image Size sent\n");<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>        }<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>        r0 = libusb_bulk_transfer(handle, BULK_EP3_IN, img_buf, 4,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> &transferred, 0);<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> -    printf("Width x height = %dx%d\n", img_buf[0], img_buf[2]);<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> +    printf("Width x height = %dx%d\n", (unsigned char)img_buf[0],<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> (unsigned char)img_buf[2]);<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>        /* calibration */<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> @@ -180,6 +181,7 @@<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>            }<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>            r0 = libusb_bulk_transfer(handle, BULK_EP3_IN, &result,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> 1, &transferred, 0);<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>            printf("Calibration Status: 0x%x\n", result);<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> +        if (result == 0x03) break;<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>            r0 = libusb_bulk_transfer(handle, BULK_EP1_OUT,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> get_cmd_status, 2, &transferred, 0);<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>>            if((r0 == 0) && (transferred == 2)) {<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> This one works with the POC too, although for some reason the<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> generated out.png is square and seems to contain the image 3 times?<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> This one has firmware version 1.64, resolution 64x144 and as shown<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> in the necessary changes this one does report a calibration status<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> of 0x03 when it is done with the calibration, I think we should add<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> an extra column for this to the hardware report table.<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> Regards,<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      >      >>> Hans<u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">>      ><u></u><u></u></span></p><p class="m_-3953533672820915529m_-5223216061559909629MsoPlainText"><span lang="en-DE">> <u></u><u></u></span></p></div></div></blockquote></div></blockquote></div></div>