Le jeudi 9 juin 2011 10:49:37 Alexey Osipov, vous avez ?crit : > ? ???, 08/06/2011 ? 18:36 +0700, Alexey Osipov ?????: > > ? ???, 07/06/2011 ? 22:20 +0200, stef ?????: > > > Le mardi 7 juin 2011 21:07:08 Alexey Osipov, vous avez ?crit : > > > > Hi, dear SANE developers! > > > > > > > > Proposed patch enable support of 50/150/600dpi Color/Gray/LineArt > > > > modes for Hewlett-Packard ScanJet 2400 scanner. > > > > > > > > This was made by parsing UsbSnoop logs with stef's scripts (thank > > > > you!). > > > > > > > > 100/300dpi modes were already good, so I didn't touch them. > > > > > > > > I have also refined sensor and motor values for 1200dpi modes, but > > > > there are some problems with them. > > > > > > > > Here is a list of remaining problems I can't solve: > > > > > > > > 1. 1200dpi Gray mode works, but the resulting image is interlaced > > > > vertically with black one-pixel width lines. Why this can happen? > > > > Example: http://lion-simba.github.com/1200dpi_gray_lines.tiff > > > > > > > > 2. 1200dpi Color mode works, but very slow. Scanner warm-up and > > > > calibration takes approx 5 mins before head even moves. Then, when > > > > scanning begins, head moves forward and backward each few lines. I > > > > have made timestamped logs of this situation (truncated log > > > > attached). You can see - problem is in "gl646_bulk_read_data" which > > > > regularly hangs for approx 10 seconds like this: > > > > > > > > during warm-up and calibration: > > > > --------------------- > > > > 1307470777: [genesys_gl646] gl646_bulk_read_data: trying to read > > > > 65472 bytes of data 1307470778: [genesys_gl646] gl646_bulk_read_data > > > > read 65472 bytes, 679896 remaining 1307470778: [genesys_gl646] > > > > gl646_bulk_read_data: trying to read 65472 bytes of data 1307470778: > > > > [genesys_gl646] gl646_bulk_read_data read 65472 bytes, 614424 > > > > remaining 1307470778: [genesys_gl646] gl646_bulk_read_data: trying > > > > to read 65472 bytes of data [9 seconds delay] > > > > 1307470787: [genesys_gl646] gl646_bulk_read_data read 65472 bytes, > > > > 548952 remaining 1307470787: [genesys_gl646] gl646_bulk_read_data: > > > > trying to read 65472 bytes of data 1307470787: [genesys_gl646] > > > > gl646_bulk_read_data read 65472 bytes, 483480 remaining > > > > --------------------- > > > > > > > > during scan: > > > > --------------------- > > > > 1307471061: [genesys_gl646] gl646_bulk_read_data: requesting 30464 > > > > bytes 1307471061: [genesys_gl646] gl646_bulk_read_data: trying to > > > > read 30464 bytes of data [9 seconds delay] > > > > 1307471070: [genesys_gl646] gl646_bulk_read_data read 30464 bytes, 0 > > > > remaining 1307471070: [genesys_gl646] gl646_bulk_read_data: end > > > > --------------------- > > > > > > > > Any ideas of what is wrong? Proprietary driver running on the same > > > > system scan well in 1200dpi Color, so I think this is not libusb bug. > > > > Maybe some GL646 miscofiguration? > > > > > > > > 3. In all modes, there are extra pixels to the left of the image, > > > > which are beyond of glass window of scanner. Meanwhile, right side > > > > of image is cropped by (i guess) same number of pixels. I think it > > > > can be fixed by tuning CCD_start_xoffset/dummy_pixel/sensor_pixels > > > > in Genesys_Sensor, but I'm unsure what is for exactly? What is > > > > dummy_pixel? > > > > > > > > Regards, > > > > Alexey. > > > > > > Hello, > > > > > > good job, if I understand well, 50, 100, 150, 300 and 600 dpi modes > > > are > > > > > > correct. That's great. > > > > Yes, this is correct. > > > > > The 1 & 2 issues are surely related. Some registers maybe incorrectly > > > > > > set. What you can do is to compare all the register set at scan time > > > with the one from USB log at 1200 dpi. If you look at the code there > > > some places in genesys_gl646.c where some actions are taken depending > > > of the CCD. Maybe a case for the HP2400 CCD should be added. > > > > Ok, I have made some more research and found out several different > > registers. > > > > After setting register 0x1e from 0x80 to 0x81 (set 1 CCD dummy line > > according to GL646 datasheet) the issue 2 has gone (patch attached). > > > > I have also refine geometry values of Genesys_Model hp2400c_model in > > genesys_devices.c as you suggested, so the issue 3 also gone (patch > > attached). > > > > However, issue 1 is still there (for Color, Gray and LineArt modes). > > There are several registers with different values in UsbSnoop logs and > > genesys logs: > > > > I need an advice what to try next. > > Ok, I need not any advices. :) > > Happy to say that I got working 1200dpi mode now. :) > > The problem was in wrong value in frontend register number 3. The value > 0x02 is good for 50-600 dpi, but gives interlaced result for 1200 dpi. > In UsbSnoop logs there is a value 0x32 for this register, but I found > out that scanner works good with value 0x12 (just like HP3670 in 1200 > dpi mode). So I left the value 0x12 for both scanners. > > GPO12 output port also need to be manipulated: in 1200dpi it must be set > to zero, while in other modes it must be one. > > So, I had to add some workaround code in genesys_gl646.c. Results in > genesys-hp2400-1200dpi-done.patch. > > After solving this I notice another bug: if start scanning position (y) > is not zero, the head moves double length way and eventually goes beyond > bottom border. I fix this by changing optical_yres of MOTOR_HP2400 from > 2400 to 1200. For fine tuning I create a new case in > gl646_setup_registers() for MOTOR_HP2400. Values seems good, except, > head positioning after calibration (shading) slightly different from the > case when no calibration was done. Also I had to change y_offset in > "Genesys_Model hp2400c_model" from 7.5 to 2.5. > > Results in genesys-hp2400-fix-head-positioning.patch. > > > That way I have fully functional HP2400 scanner with genesys backend. > All modes works fine: 50, 100, 150, 300, 600, 1200 dpi; Color, Gray, > LineArt; 8, 16 bits per channel. > Head positioning works well. XSane works well. > > > Cumulative changes I made against current git master of sane-backends is > in genesys-hp2400-complete.patch. > > > Regards, > Happy Alexey. :)
Hello, good job. I'm going to apply it soon. Regards, Stef