banianitc / ft9201-fingerprint-driver

FT9201 linux kernel module
GNU Lesser General Public License v2.1
40 stars 3 forks source link

Cannot read data from the sensor #3

Open elCaxper opened 11 months ago

elCaxper commented 11 months ago

I have compiled the driver and loaded it but when I try to read data from the endpoint created in /dev/fpreader0 I don't get any data.

insmod ft9201.ko

[ 1688.853717] usbcore: registered new interface driver ft9201

When the device is connected:

[ 1731.995992] usb 1-1: new full-speed USB device number 4 using xhci-hcd
[ 1732.154078] ft9201 1-1:1.0: USB fpreader device now attached to fpreader192
[ 1732.161146] ft9201 1-1:1.0: ioctl initialize
[ 1732.224003] usb 1-1: Prepare for mcu status check done
[ 1732.252745] ft9201 1-1:1.0: Read AFE at index 0x16: 0x00000000
[ 1732.259010] ft9201 1-1:1.0: Read AFE at index 0x17: 0x00000000
[ 1732.264901] ft9201 1-1:1.0: afe sum: 0000
[ 1732.269065] ft9201 1-1:1.0: AFE Chip ID = 0x0, FT93xx = UNKNOWN (0)
[ 1732.275802] ft9201 1-1:1.0: Read AFE at index 0x1a: 0x00000000
[ 1732.282107] ft9201 1-1:1.0: Read AFE at index 0x3c: 0x00000000
[ 1732.288081] ft9201 1-1:1.0: fw version = 0 agc version = 0
[ 1732.294016] ft9201 1-1:1.0: Read AFE at index 0x14: 0x00000000
[ 1732.300350] ft9201 1-1:1.0: Read AFE at index 0x15: 0x00000000
[ 1732.484343] ft9201 1-1:1.0: Read AFE at index 0x1d: 0x00000000
[ 1732.490576] ft9201 1-1:1.0: Device initialization successful

./ft9201_util /dev/fpreader0

[ 1758.564677] ft9201 open
[ 1758.567323] ft9201 ioctl, cmd: 17921
[ 1758.570998] ft9201 1-1:1.0: ioctl initialize
[ 1758.627993] usb 1-1: Prepare for mcu status check done
[ 1758.652737] ft9201 1-1:1.0: Read AFE at index 0x16: 0x00000000
[ 1758.659000] ft9201 1-1:1.0: Read AFE at index 0x17: 0x00000000
[ 1758.664865] ft9201 1-1:1.0: afe sum: 0000
[ 1758.668909] ft9201 1-1:1.0: AFE Chip ID = 0x0, FT93xx = UNKNOWN (0)
[ 1758.675584] ft9201 1-1:1.0: Read AFE at index 0x1a: 0x00000000
[ 1758.681838] ft9201 1-1:1.0: Read AFE at index 0x3c: 0x00000000
[ 1758.687691] ft9201 1-1:1.0: fw version = 0 agc version = 0
[ 1758.693597] ft9201 1-1:1.0: Read AFE at index 0x14: 0x00000000
[ 1758.699856] ft9201 1-1:1.0: Read AFE at index 0x15: 0x00000000
[ 1758.904371] ft9201 1-1:1.0: Read AFE at index 0x1d: 0x00000000
[ 1758.910725] ft9201 1-1:1.0: Device initialization successful
[ 1758.916462] ft9201 ioctl, cmd: 17923
[ 1759.100349] ft9201 1-1:1.0: Read AFE at index 0x1d: 0x00000000
[ 1759.106603] ft9201 release

cat /dev/fpreader0

[ 1789.029120] ft9201 open
[ 1789.031652] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1789.036339] ft9201 reading 0
[ 1790.048403] ft9201 1-1:1.0: Data ready: 0x00
[ 1790.052746] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1790.057422] ft9201 reading 0
[ 1791.072381] ft9201 1-1:1.0: Data ready: 0x00
[ 1791.076690] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1791.081358] ft9201 reading 0
[ 1792.096397] ft9201 1-1:1.0: Data ready: 0x00
[ 1792.100710] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1792.105376] ft9201 reading 0
[ 1793.120390] ft9201 1-1:1.0: Data ready: 0x00
[ 1793.124709] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1793.129375] ft9201 reading 0
[ 1794.144385] ft9201 1-1:1.0: Data ready: 0x00
[ 1794.148687] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1794.153347] ft9201 reading 0
[ 1795.168388] ft9201 1-1:1.0: Data ready: 0x00
[ 1795.172796] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1795.177458] ft9201 reading 0
[ 1796.192413] ft9201 1-1:1.0: Data ready: 0x00
[ 1796.196715] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1796.201383] ft9201 reading 0
[ 1797.216393] ft9201 1-1:1.0: Data ready: 0x00
[ 1797.220695] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1797.225401] ft9201 reading 0
[ 1798.240395] ft9201 1-1:1.0: Data ready: 0x00
[ 1798.244696] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1798.249378] ft9201 reading 0
[ 1799.264387] ft9201 1-1:1.0: Data ready: 0x00
[ 1799.268698] ft9201 1-1:1.0: Copied: 0, Filled: 0
[ 1799.273360] ft9201 reading 0

Uname -a 5.15.0-88-generic #98-Ubuntu

In the logs I see that all values read are zeros, why can this happen? Could it be a different firmware version of the device?

makkrnic commented 2 months ago

This happens when you try reading data before initializing the device. To fix it, you need to plug in the device into Windows machine, let the windows driver do its thing, and then plug it back into your linux box. Then, run

sudo ./ft9201_util /dev/fpreader0

and you should be able to capture the image.

However, even in the broken state, you should see one Data ready: 0x01, followed by zeroes:

ft9201 5-2.2:1.0: Data ready: 0x01
ft9201 5-2.2:1.0: Read AFE at index 0x30: 0x00000000
ft9201 5-2.2:1.0: 0x30 translate data: 0x00
ft9201 5-2.2:1.0: Copied: 0, Filled: 0
ft9201 reading 0
ft9201 5-2.2:1.0: Data ready: 0x00
ft9201 5-2.2:1.0: Copied: 0, Filled: 0
ft9201 reading 0
ft9201 5-2.2:1.0: Data ready: 0x00
ft9201 5-2.2:1.0: Copied: 0, Filled: 0

The data is not streaming but is one-off instead so you should get data ready 0x01 immediately after you put your finger on the scanner, and zeroes until you remove your finger and put it again.

This is now tracked in #10